azure__aml-kubernetes METASEP

docs/AKS-HCI/notebooks/pipeline/scripts/trainmodel/train_test_split.py METASEP
import argparse
import os
import pandas as pd
from sklearn.model_selection import train_test_split

def write_output(df, path):
    os.makedirs(path, exist_ok=True)
    print("%s created" % path)
    df.to_csv(path + "/processed.csv")


print("Split the data into train and test")

parser = argparse.ArgumentParser("split")
parser.add_argument('--data-path', type=str, help='input data path')
parser.add_argument("--output_split_train", type=str, help="output split train data")
parser.add_argument("--output_split_test", type=str, help="output split test data")

args = parser.parse_args()

print("Argument 1(output training data split path): %s" % args.output_split_train)
print("Argument 2(output test data split path): %s" % args.output_split_test)

# These functions splits the input features and labels into test and train data
# Visit https://docs.microsoft.com/en-us/azure/machine-learning/service/tutorial-auto-train-models for more detail


transformed_df = pd.read_csv(args.data_path + "/processed.csv")
output_split_train, output_split_test = train_test_split(transformed_df, test_size=0.2, random_state=223)
output_split_train.reset_index(inplace=True, drop=True)
output_split_test.reset_index(inplace=True, drop=True)

if not (args.output_split_train is None and
        args.output_split_test is None):
    write_output(output_split_train, args.output_split_train)
    write_output(output_split_test, args.output_split_test)

docs/AKS-HCI/notebooks/pipeline/scripts/trainmodel/train_step.py METASEP
import argparse
from sklearn.linear_model import LinearRegression
import os
import pandas as pd

import joblib

def train():

    train_set = pd.read_csv(args.train_data_path + "/processed.csv")
    test_set = pd.read_csv(args.test_data_path + "/processed.csv")

    selected_columns = ['pickup_weekday', 'pickup_hour', 'distance', 'passengers', 'vendor', 'cost']
    train_set = train_set[selected_columns]
    test_set = test_set[selected_columns]

    train_features = train_set.drop("cost", axis=1)
    train_labels = train_set["cost"].copy()
    lr = LinearRegression()
    lr.fit(train_features, train_labels)

    filename = os.path.join('outputs', 'taxi.pkl')

    joblib.dump(lr, filename)

    test_features = test_set.drop("cost", axis=1)[:3]
    test_labels = test_set["cost"].copy()
    preds = lr.predict(test_features)

    print("preds", preds)


if __name__ == "__main__":
    parser = argparse.ArgumentParser("split")
    parser.add_argument("--train_data_path", type=str, help="train data path")
    parser.add_argument("--test_data_path", type=str, help="test data path")
    args = parser.parse_args()
    train()
docs/AKS-HCI/notebooks/pipeline/scripts/prepdata/transform.py METASEP
import argparse
import os
import pandas as pd

print("Transforms the renamed taxi data to the required format")


parser = argparse.ArgumentParser("transform")
parser.add_argument('--data-path', type=str, help='input data path')
parser.add_argument("--output_transform", type=str, help="transformed taxi data")

args = parser.parse_args()

print("Argument 2(output final transformed taxi data): %s" % args.output_transform)

# These functions transform the renamed data to be used finally for training.

# Split the pickup and dropoff date further into the day of the week, day of the month, and month values.
# To get the day of the week value, use the derive_column_by_example() function.
# The function takes an array parameter of example objects that define the input data,
# and the preferred output. The function automatically determines your preferred transformation.
# For the pickup and dropoff time columns, split the time into the hour, minute, and second by using
# the split_column_by_example() function with no example parameter. After you generate the new features,
# use the drop_columns() function to delete the original fields as the newly generated features are preferred.
# Rename the rest of the fields to use meaningful descriptions.

normalized_df = pd.read_csv(args.data_path + "/processed.csv")
normalized_df = normalized_df.astype({"pickup_date": 'datetime64[ns]', "dropoff_date": 'datetime64[ns]',
                                      "pickup_time": 'datetime64[us]', "dropoff_time": 'datetime64[us]',
                                      "distance": 'float64', "cost": 'float64'})

normalized_df["pickup_weekday"] = normalized_df["pickup_date"].dt.dayofweek
normalized_df["pickup_month"] = normalized_df["pickup_date"].dt.month
normalized_df["pickup_monthday"] = normalized_df["pickup_date"].dt.day

normalized_df["dropoff_weekday"] = normalized_df["dropoff_date"].dt.dayofweek
normalized_df["dropoff_month"] = normalized_df["dropoff_date"].dt.month
normalized_df["dropoff_monthday"] = normalized_df["dropoff_date"].dt.day

normalized_df["pickup_hour"] = normalized_df["pickup_time"].dt.hour
normalized_df["pickup_minute"] = normalized_df["pickup_time"].dt.minute
normalized_df["pickup_second"] = normalized_df["pickup_time"].dt.second

normalized_df["dropoff_hour"] = normalized_df["dropoff_time"].dt.hour
normalized_df["dropoff_minute"] = normalized_df["dropoff_time"].dt.minute
normalized_df["dropoff_second"] = normalized_df["dropoff_time"].dt.second

# Drop the pickup_date, dropoff_date, pickup_time, dropoff_time columns because they're
# no longer needed (granular time features like hour,
# minute and second are more useful for model training).
del normalized_df["pickup_date"]
del normalized_df["dropoff_date"]
del normalized_df["pickup_time"]
del normalized_df["dropoff_time"]

# Before you package the dataset, run two final filters on the dataset.
# To eliminate incorrectly captured data points,
# filter the dataset on records where both the cost and distance variable values are greater than zero.
# This step will significantly improve machine learning model accuracy,
# because data points with a zero cost or distance represent major outliers that throw off prediction accuracy.

final_df = normalized_df[(normalized_df.distance > 0) & (normalized_df.cost > 0)]
final_df.reset_index(inplace=True, drop=True)

# Writing the final dataframe to use for training in the following steps
if not (args.output_transform is None):
    os.makedirs(args.output_transform, exist_ok=True)
    print("%s created" % args.output_transform)
    path = args.output_transform + "/processed.csv"
    write_df = final_df.to_csv(path)

docs/AKS-HCI/notebooks/pipeline/scripts/prepdata/normalize.py METASEP
import argparse
import os
import pandas as pd
import pandas as pd

print("Replace undefined values to relavant values and rename columns to meaningful names")

parser = argparse.ArgumentParser("normalize")
parser.add_argument('--data-path', type=str, help='input data path')
parser.add_argument("--output_normalize", type=str, help="replaced undefined values and renamed columns")

args = parser.parse_args()

print("Argument (output normalized taxi data path): %s" % args.output_normalize)

combined_converted_df = pd.read_csv(args.data_path + "/processed.csv")

# These functions replace undefined values and rename to use meaningful names.
replaced_stfor_vals_df = (combined_converted_df.replace({"store_forward": "0"}, {"store_forward": "N"})
                          .fillna({"store_forward": "N"}))

replaced_distance_vals_df = (replaced_stfor_vals_df.replace({"distance": ".00"}, {"distance": 0})
                             .fillna({"distance": 0}))

normalized_df = replaced_distance_vals_df.astype({"distance": 'float64'})

temp = pd.DatetimeIndex(normalized_df["pickup_datetime"])
normalized_df["pickup_date"] = temp.date
normalized_df["pickup_time"] = temp.time

temp = pd.DatetimeIndex(normalized_df["dropoff_datetime"])
normalized_df["dropoff_date"] = temp.date
normalized_df["dropoff_time"] = temp.time

del normalized_df["pickup_datetime"]
del normalized_df["dropoff_datetime"]

normalized_df.reset_index(inplace=True, drop=True)

if not (args.output_normalize is None):
    os.makedirs(args.output_normalize, exist_ok=True)
    print("%s created" % args.output_normalize)
    path = args.output_normalize + "/processed.csv"
    write_df = normalized_df.to_csv(path)

docs/AKS-HCI/notebooks/pipeline/scripts/prepdata/merge.py METASEP
import argparse
import os
import pandas as pd

print("Merge Green and Yellow taxi data")

parser = argparse.ArgumentParser("merge")
parser.add_argument("--output_merge", type=str, help="green and yellow taxi data merged")
parser.add_argument("--green_data_path", type=str, help="green data path")
parser.add_argument("--yellow_data_path", type=str, help="yellow data path")

args = parser.parse_args()
print("Argument (output merge taxi data path): %s" % args.output_merge)


green_df = pd.read_csv(args.green_data_path + "/processed.csv")
yellow_df = pd.read_csv(args.yellow_data_path + "/processed.csv")

# Appending yellow data to green data
combined_df = green_df.append(yellow_df, ignore_index=True)
combined_df.reset_index(inplace=True, drop=True)

if not (args.output_merge is None):
    os.makedirs(args.output_merge, exist_ok=True)
    print("%s created" % args.output_merge)
    path = args.output_merge + "/processed.csv"
    write_df = combined_df.to_csv(path)

docs/AKS-HCI/notebooks/pipeline/scripts/prepdata/filter.py METASEP
import argparse
import os
import pandas as pd

print("Filters out coordinates for locations that are outside the city border.",
      "Chain the column filter commands within the filter() function",
      "and define the minimum and maximum bounds for each field.")

parser = argparse.ArgumentParser("filter")
parser.add_argument('--data-path', type=str, help='input data path')
parser.add_argument("--output_filter", type=str, help="filter out out of city locations")

args = parser.parse_args()

print("Argument (output filtered taxi data path): %s" % args.output_filter)

# These functions filter out coordinates for locations that are outside the city border.

# Filter out coordinates for locations that are outside the city border.
# Chain the column filter commands within the filter() function
# and define the minimum and maximum bounds for each field

combined_df = pd.read_csv(args.data_path + "/processed.csv")

combined_df = combined_df.astype({"pickup_longitude": 'float64', "pickup_latitude": 'float64',
                                  "dropoff_longitude": 'float64', "dropoff_latitude": 'float64'})

latlong_filtered_df = combined_df[(combined_df.pickup_longitude <= -73.72) &
                                  (combined_df.pickup_longitude >= -74.09) &
                                  (combined_df.pickup_latitude <= 40.88) &
                                  (combined_df.pickup_latitude >= 40.53) &
                                  (combined_df.dropoff_longitude <= -73.72) &
                                  (combined_df.dropoff_longitude >= -74.72) &
                                  (combined_df.dropoff_latitude <= 40.88) &
                                  (combined_df.dropoff_latitude >= 40.53)]

latlong_filtered_df.reset_index(inplace=True, drop=True)

if not (args.output_filter is None):
    os.makedirs(args.output_filter, exist_ok=True)
    print("%s created" % args.output_filter)
    path = args.output_filter + "/processed.csv"
    write_df = latlong_filtered_df.to_csv(path)

docs/AKS-HCI/notebooks/pipeline/scripts/prepdata/cleanse.py METASEP
# Copyright (c) Microsoft. All rights reserved.
# Licensed under the MIT license.

import argparse
import os
from azureml.core import Run
import pandas as pd


def get_dict(dict_str):
    pairs = dict_str.strip("{}").split("\;")
    new_dict = {}
    for pair in pairs:
        key, value = pair.strip().split(":")
        new_dict[key.strip().strip("'")] = value.strip().strip("'")

    return new_dict


print("Cleans the input data")

parser = argparse.ArgumentParser("cleanse")
parser.add_argument('--data-path', type=str, help='input data path')
parser.add_argument("--output_cleanse", type=str, help="cleaned taxi data directory")
parser.add_argument("--useful_columns", type=str, help="useful columns to keep")
#parser.add_argument("--columns", type=str, help="rename column pattern")
parser.add_argument("--columns_key", type=str, help="rename column pattern")
parser.add_argument("--columns_value", type=str, help="rename column pattern")

args = parser.parse_args()

print("Argument 1(columns to keep): %s" % str(args.useful_columns.strip("[]").split("\;")))
print("Argument 2(columns renaming mapping Key): %s" % str(args.columns_key.strip("{}").split("\;")))
print("Argument 2(columns renaming mapping value): %s" % str(args.columns_value.strip("{}").split("\;")))
print("Argument 3(output cleansed taxi data path): %s" % args.output_cleanse)

# These functions ensure that null data is removed from the dataset,
# which will help increase machine learning model accuracy.

useful_columns = [s.strip().strip("'") for s in args.useful_columns.strip("[]").split("\;")]
columns_key = [s.strip().strip("'") for s in args.columns_key.strip("[]").split("\;")]
columns_value = [s.strip().strip("'") for s in args.columns_value.strip("[]").split("\;")]

columns = {key: value for key, value in zip(columns_key, columns_value)}


raw_df = pd.read_csv(args.data_path)
new_df = (raw_df
          .dropna(how='all')
          .rename(columns=columns))[useful_columns]

new_df.reset_index(inplace=True, drop=True)

if not (args.output_cleanse is None):
    os.makedirs(args.output_cleanse, exist_ok=True)
    print("%s created" % args.output_cleanse)
    path = args.output_cleanse + "/processed.csv"
    write_df = new_df.to_csv(path)

examples/training/simple-train-cli/src/mnist-data/train-labels-idx1-ubyte.gz METASEP

examples/training/simple-train-cli/src/mnist-data/train-images-idx3-ubyte.gz METASEP

examples/training/simple-train-cli/src/mnist-data/t10k-labels-idx1-ubyte.gz METASEP

examples/training/simple-train-cli/src/mnist-data/t10k-images-idx3-ubyte.gz METASEP

docs/AKS-HCI/notebooks/pipeline/model/conda.yml METASEP

name: model-env

dependencies:
  - python=3.6.2
  - pip:
    - pyarrow
    - azureml-defaults
  - pandas
  - scikit-learn
  - numpy=1.19.5

channels:
  - anaconda
  - conda-forge

docs/AKS-HCI/notebooks/pipeline/images/pipeline-using-stepsequence.png METASEP

docs/AKS-HCI/notebooks/pipeline/images/pipeline-using-dataflow.png METASEP

docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/aml_src/conda-env.yaml METASEP
name: pytorch
dependencies:
  - python=3.7
  - python-graphviz
  - pip:
    - azureml-defaults
    - azure-storage-blob
    - Cython
    - torch==1.7.1
    - torchvision==0.8.2
    - pycocotools

docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/aml_src/Dockerfile.gpu METASEP
FROM tensorflow/tensorflow:2.4.0rc3-gpu

ARG CONDA_VERSION=4.7.12
ARG PYTHON_VERSION=3.7
ARG AZUREML_SDK_VERSION=1.13.0
ARG INFERENCE_SCHEMA_VERSION=1.1.0

ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
ENV PATH /opt/miniconda/bin:$PATH
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update --fix-missing && \
    apt-get install -y wget bzip2 && \
    apt-get install -y fuse && \
    apt-get clean -y && \
    rm -rf /var/lib/apt/lists/*

RUN useradd --create-home dockeruser
WORKDIR /home/dockeruser
USER dockeruser

RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-${CONDA_VERSION}-Linux-x86_64.sh -O ~/miniconda.sh && \
    /bin/bash ~/miniconda.sh -b -p ~/miniconda && \
    rm ~/miniconda.sh && \
    ~/miniconda/bin/conda clean -tipsy
ENV PATH="/home/dockeruser/miniconda/bin/:${PATH}"

docs/AKS-HCI/notebooks/mnist/model/conda.yml METASEP

name: model-env

dependencies:
  - python=3.6.2

  - pip:
    - azureml-dataset-runtime[pandas,fuse]~=1.24.0.0
    - azureml-defaults~=1.24.0.0
    - scikit-learn==0.22.1

channels:
  - anaconda
  - conda-forge

docs/AKS-HCI/notebooks/distributed-cifar10/test_request_pytorch/cifar_test_input_img_first_5_pytorch.json METASEP
{
    "instances": [
        [
            [
                [
                    0.6337511539459229,
                    0.6531360745429993,
                    0.7694455981254578,
                    0.7888305187225342,
                    0.6725209951400757,
                    0.5949813723564148,
                    0.7112908363342285,
                    0.6531360745429993,
                    0.6337511539459229,
                    0.6531360745429993,
                    0.6919059157371521,
                    0.6725209951400757,
                    0.6919059157371521,
                    0.7888305187225342,
                    0.8469852805137634,
                    0.8663701415061951,
                    0.8082154393196106,
                    0.7112908363342285,
                    0.6725209951400757,
                    0.6725209951400757,
                    0.5949813723564148,
                    0.4592869281768799,
                    0.4786718487739563,
                    0.43990203738212585,
                    0.4592869281768799,
                    0.3429774343967438,
                    0.2848227024078369,
                    0.30420762300491333,
                    0.3429774343967438,
                    0.22666795551776886,
                    0.013433732092380524,
                    -0.18041542172431946
                ],
                [
                    0.5174416899681091,
                    0.4980567693710327,
                    0.6531360745429993,
                    0.7888305187225342,
                    0.7112908363342285,
                    0.6725209951400757,
                    0.7500606775283813,
                    0.7112908363342285,
                    0.7306757569313049,
                    0.5949813723564148,
                    0.5755964517593384,
                    0.6531360745429993,
                    0.7306757569313049,
                    0.8663701415061951,
                    0.8857550621032715,
                    0.8857550621032715,
                    0.8469852805137634,
                    0.6725209951400757,
                    0.556211531162262,
                    0.4980567693710327,
                    0.3817472755908966,
                    0.2654377818107605,
                    0.2848227024078369,
                    0.30420762300491333,
                    0.4592869281768799,
                    0.42051711678504944,
                    0.3817472755908966,
                    0.32359254360198975,
                    0.3429774343967438,
                    0.20728303492069244,
                    -0.005951183382421732,
                    -0.1222606748342514
                ],
                [
                    0.4980567693710327,
                    0.4980567693710327,
                    0.6337511539459229,
                    0.8082154393196106,
                    0.6725209951400757,
                    0.7306757569313049,
                    0.7694455981254578,
                    0.7694455981254578,
                    0.7306757569313049,
                    0.7112908363342285,
                    0.6337511539459229,
                    0.6143662929534912,
                    0.6919059157371521,
                    0.7888305187225342,
                    0.8082154393196106,
                    0.8469852805137634,
                    0.8663701415061951,
                    0.6531360745429993,
                    0.3817472755908966,
                    -0.08349084854125977,
                    -0.29672491550445557,
                    -0.5293439030647278,
                    -0.4711891710758209,
                    -0.2191852629184723,
                    -0.10287576168775558,
                    0.1685132086277008,
                    0.3429774343967438,
                    0.2848227024078369,
                    0.32359254360198975,
                    0.2654377818107605,
                    0.09097354114055634,
                    -0.10287576168775558
                ],
                [
                    0.5755964517593384,
                    0.5755964517593384,
                    0.6725209951400757,
                    0.9439098238945007,
                    0.8082154393196106,
                    0.8082154393196106,
                    0.8469852805137634,
                    0.8469852805137634,
                    0.7694455981254578,
                    0.7694455981254578,
                    0.8082154393196106,
                    1.2734533548355103,
                    1.00206458568573,
                    0.6143662929534912,
                    0.7112908363342285,
                    0.7500606775283813,
                    0.6337511539459229,
                    0.4592869281768799,
                    -0.4130344092845917,
                    -0.4324193298816681,
                    -0.5293439030647278,
                    -0.6456534266471863,
                    -0.8782724142074585,
                    -0.9945818781852722,
                    -0.761962890625,
                    -0.8201176524162292,
                    -0.2385701686143875,
                    0.12974336743354797,
                    0.2848227024078369,
                    0.2848227024078369,
                    0.20728303492069244,
                    0.03281864896416664
                ],
                [
                    0.5755964517593384,
                    0.5949813723564148,
                    0.6919059157371521,
                    0.8663701415061951,
                    0.8469852805137634,
                    0.7306757569313049,
                    0.8469852805137634,
                    0.7888305187225342,
                    0.7500606775283813,
                    0.7500606775283813,
                    0.9245249032974243,
                    2.3396236896514893,
                    1.350993037223816,
                    0.4980567693710327,
                    0.401132196187973,
                    0.32359254360198975,
                    -0.27733999490737915,
                    -0.9170421957969666,
                    -0.7813478112220764,
                    -0.2385701686143875,
                    -0.25795507431030273,
                    -0.37426456809043884,
                    -0.5487288236618042,
                    -0.6262685060501099,
                    -0.9945818781852722,
                    -0.8007327318191528,
                    -0.7813478112220764,
                    -0.39364948868751526,
                    0.0522037111222744,
                    0.24605286121368408,
                    0.1491282880306244,
                    0.07158862799406052
                ],
                [
                    0.43990203738212585,
                    0.1491282880306244,
                    0.09097354114055634,
                    0.42051711678504944,
                    0.6919059157371521,
                    0.7694455981254578,
                    0.8082154393196106,
                    0.8082154393196106,
                    0.7306757569313049,
                    0.7694455981254578,
                    0.7306757569313049,
                    1.0602192878723145,
                    0.6143662929534912,
                    0.0522037111222744,
                    -0.5487288236618042,
                    -1.1496611833572388,
                    -1.0915064811706543,
                    -1.1496611833572388,
                    -0.7038081288337708,
                    -0.14164559543132782,
                    -0.06410592794418335,
                    -0.1222606748342514,
                    -0.2191852629184723,
                    -0.6068835854530334,
                    -0.5099589824676514,
                    -0.6650383472442627,
                    -1.3047406673431396,
                    -1.1302763223648071,
                    -0.3354947566986084,
                    0.2848227024078369,
                    0.24605286121368408,
                    0.1685132086277008
                ],
                [
                    0.03281864896416664,
                    -0.316109836101532,
                    -1.5179747343063354,
                    -0.7231930494308472,
                    0.5368266105651855,
                    0.8663701415061951,
                    0.827600359916687,
                    0.8663701415061951,
                    0.8469852805137634,
                    0.7888305187225342,
                    0.7500606775283813,
                    0.42051711678504944,
                    0.07158862799406052,
                    0.03281864896416664,
                    -0.49057406187057495,
                    -1.110891342163086,
                    -0.9170421957969666,
                    -1.0333516597747803,
                    -0.8201176524162292,
                    0.12974336743354797,
                    0.401132196187973,
                    -0.025336099788546562,
                    -0.39364948868751526,
                    -0.3548796772956848,
                    -0.19980034232139587,
                    -0.7813478112220764,
                    -1.2078160047531128,
                    -1.5373597145080566,
                    -0.8976573348045349,
                    0.12974336743354797,
                    0.30420762300491333,
                    0.1685132086277008
                ],
                [
                    0.11035845428705215,
                    -0.5099589824676514,
                    -1.6148992776870728,
                    -1.072121500968933,
                    0.3429774343967438,
                    0.8082154393196106,
                    0.7694455981254578,
                    0.827600359916687,
                    0.8857550621032715,
                    0.6919059157371521,
                    0.2848227024078369,
                    -0.10287576168775558,
                    0.09097354114055634,
                    0.3623623549938202,
                    -0.18041542172431946,
                    -0.7231930494308472,
                    -0.6650383472442627,
                    -0.7813478112220764,
                    -0.936427116394043,
                    -0.025336099788546562,
                    0.7306757569313049,
                    0.20728303492069244,
                    -0.4518042504787445,
                    -0.37426456809043884,
                    -0.49057406187057495,
                    -0.7813478112220764,
                    -1.3822803497314453,
                    -1.4792048931121826,
                    -1.3241256475448608,
                    -0.3548796772956848,
                    0.24605286121368408,
                    0.20728303492069244
                ],
                [
                    0.8663701415061951,
                    -0.4324193298816681,
                    -1.3822803497314453,
                    -0.025336099788546562,
                    0.5368266105651855,
                    0.6919059157371521,
                    0.7306757569313049,
                    0.7888305187225342,
                    0.7694455981254578,
                    0.9439098238945007,
                    -0.2385701686143875,
                    -0.005951183382421732,
                    0.6143662929534912,
                    0.5949813723564148,
                    -0.08349084854125977,
                    -0.761962890625,
                    -0.8395025730133057,
                    -0.8007327318191528,
                    -0.8782724142074585,
                    -0.8588874936103821,
                    0.24605286121368408,
                    0.401132196187973,
                    -0.2385701686143875,
                    -0.7425779700279236,
                    -0.8201176524162292,
                    -0.761962890625,
                    -1.0527366399765015,
                    -1.3435105085372925,
                    -1.6536691188812256,
                    -0.9945818781852722,
                    0.1491282880306244,
                    0.22666795551776886
                ],
                [
                    1.0602192878723145,
                    0.1685132086277008,
                    -0.6068835854530334,
                    0.556211531162262,
                    0.9439098238945007,
                    0.6337511539459229,
                    0.5949813723564148,
                    0.5368266105651855,
                    1.583612084388733,
                    2.1651594638824463,
                    1.583612084388733,
                    0.5949813723564148,
                    0.9439098238945007,
                    0.43990203738212585,
                    -0.005951183382421732,
                    -0.6262685060501099,
                    -0.761962890625,
                    -0.9945818781852722,
                    -1.285355806350708,
                    -0.9558120369911194,
                    0.22666795551776886,
                    0.3429774343967438,
                    0.1491282880306244,
                    -0.37426456809043884,
                    -0.761962890625,
                    -0.7425779700279236,
                    -0.8007327318191528,
                    -0.9751969575881958,
                    -1.459820032119751,
                    -1.6536691188812256,
                    -0.587498664855957,
                    0.12974336743354797
                ],
                [
                    1.1183741092681885,
                    -0.3354947566986084,
                    0.32359254360198975,
                    0.7694455981254578,
                    1.00206458568573,
                    0.5755964517593384,
                    0.6531360745429993,
                    -0.06410592794418335,
                    1.6999214887619019,
                    2.1651594638824463,
                    1.8356159925460815,
                    0.7500606775283813,
                    1.1183741092681885,
                    0.5949813723564148,
                    -0.005951183382421732,
                    -0.10287576168775558,
                    -0.9170421957969666,
                    -0.8782724142074585,
                    -1.5567445755004883,
                    -0.6650383472442627,
                    0.9632947444915771,
                    0.6143662929534912,
                    0.5755964517593384,
                    -0.3548796772956848,
                    -0.7425779700279236,
                    -0.4324193298816681,
                    -0.7231930494308472,
                    -0.9170421957969666,
                    -1.285355806350708,
                    -1.634284257888794,
                    -1.285355806350708,
                    -0.4130344092845917
                ],
                [
                    1.2152986526489258,
                    -0.49057406187057495,
                    0.18789811432361603,
                    0.8663701415061951,
                    1.1959137916564941,
                    0.7888305187225342,
                    0.9245249032974243,
                    0.1685132086277008,
                    -0.16103051602840424,
                    1.3316081762313843,
                    1.4285327196121216,
                    0.8663701415061951,
                    1.1571439504623413,
                    1.2346835136413574,
                    0.1685132086277008,
                    -0.16103051602840424,
                    -0.4518042504787445,
                    -0.8007327318191528,
                    -1.6924389600753784,
                    -0.005951183382421732,
                    1.6417667865753174,
                    0.6725209951400757,
                    0.401132196187973,
                    -0.6262685060501099,
                    -0.8201176524162292,
                    -0.6068835854530334,
                    -0.4130344092845917,
                    -0.7813478112220764,
                    -1.0139667987823486,
                    -1.3628954887390137,
                    -1.227200984954834,
                    -0.9558120369911194
                ],
                [
                    1.2346835136413574,
                    -0.6844232082366943,
                    0.03281864896416664,
                    0.9632947444915771,
                    0.9439098238945007,
                    0.7888305187225342,
                    1.0214494466781616,
                    0.6531360745429993,
                    -0.5487288236618042,
                    0.827600359916687,
                    0.827600359916687,
                    0.22666795551776886,
                    1.176528811454773,
                    1.7580763101577759,
                    0.6725209951400757,
                    -0.04472101479768753,
                    -0.10287576168775558,
                    -0.19980034232139587,
                    -1.459820032119751,
                    0.4786718487739563,
                    1.3316081762313843,
                    0.5755964517593384,
                    -0.04472101479768753,
                    -0.6650383472442627,
                    -0.8007327318191528,
                    -0.8007327318191528,
                    -0.587498664855957,
                    -0.761962890625,
                    -0.8007327318191528,
                    -1.0139667987823486,
                    -0.8976573348045349,
                    -1.0139667987823486
                ],
                [
                    1.2346835136413574,
                    -0.6262685060501099,
                    0.5174416899681091,
                    1.1571439504623413,
                    -0.1222606748342514,
                    0.20728303492069244,
                    0.9245249032974243,
                    0.8082154393196106,
                    -0.4324193298816681,
                    0.42051711678504944,
                    0.3817472755908966,
                    0.8082154393196106,
                    1.2346835136413574,
                    1.9519253969192505,
                    1.0602192878723145,
                    0.30420762300491333,
                    0.013433732092380524,
                    -0.16103051602840424,
                    -1.0527366399765015,
                    0.556211531162262,
                    1.176528811454773,
                    0.4592869281768799,
                    -0.2191852629184723,
                    -0.7425779700279236,
                    -0.8782724142074585,
                    -1.0333516597747803,
                    -0.8782724142074585,
                    -0.5099589824676514,
                    -0.49057406187057495,
                    -0.6844232082366943,
                    -0.5487288236618042,
                    -0.6068835854530334
                ],
                [
                    1.3316081762313843,
                    -0.3354947566986084,
                    0.827600359916687,
                    1.176528811454773,
                    -0.39364948868751526,
                    -0.5099589824676514,
                    0.5949813723564148,
                    0.8082154393196106,
                    -0.49057406187057495,
                    -0.19980034232139587,
                    0.24605286121368408,
                    1.40914785861969,
                    1.2540684938430786,
                    0.9051399827003479,
                    0.3817472755908966,
                    0.556211531162262,
                    0.401132196187973,
                    -0.4324193298816681,
                    -1.0527366399765015,
                    0.5174416899681091,
                    1.0408344268798828,
                    0.22666795551776886,
                    0.09097354114055634,
                    -0.29672491550445557,
                    -0.7813478112220764,
                    -0.6650383472442627,
                    -0.587498664855957,
                    -0.316109836101532,
                    -0.19980034232139587,
                    -0.49057406187057495,
                    -0.5487288236618042,
                    -0.16103051602840424
                ],
                [
                    1.3897628784179688,
                    0.12974336743354797,
                    0.9051399827003479,
                    1.1377589702606201,
                    0.09097354114055634,
                    -0.9170421957969666,
                    0.2848227024078369,
                    0.5755964517593384,
                    -0.19980034232139587,
                    0.09097354114055634,
                    0.3429774343967438,
                    2.0294651985168457,
                    2.2620840072631836,
                    0.3817472755908966,
                    0.18789811432361603,
                    0.11035845428705215,
                    -0.08349084854125977,
                    -0.3354947566986084,
                    -0.587498664855957,
                    0.3623623549938202,
                    0.827600359916687,
                    0.5174416899681091,
                    -0.25795507431030273,
                    -0.7425779700279236,
                    -1.0527366399765015,
                    -0.7425779700279236,
                    -0.39364948868751526,
                    -0.25795507431030273,
                    -0.10287576168775558,
                    -0.4324193298816681,
                    -0.08349084854125977,
                    0.20728303492069244
                ],
                [
                    1.5060724020004272,
                    0.401132196187973,
                    0.827600359916687,
                    1.2734533548355103,
                    0.827600359916687,
                    -0.9170421957969666,
                    0.013433732092380524,
                    0.24605286121368408,
                    0.24605286121368408,
                    -0.5681137442588806,
                    0.556211531162262,
                    0.9245249032974243,
                    0.7112908363342285,
                    0.2848227024078369,
                    -0.2385701686143875,
                    -0.2385701686143875,
                    -0.4711891710758209,
                    -0.39364948868751526,
                    -0.25795507431030273,
                    0.8857550621032715,
                    0.5949813723564148,
                    0.43990203738212585,
                    0.18789811432361603,
                    -0.316109836101532,
                    -0.9170421957969666,
                    -0.8976573348045349,
                    -0.6068835854530334,
                    -0.4711891710758209,
                    -0.3548796772956848,
                    -0.005951183382421732,
                    0.4980567693710327,
                    0.3623623549938202
                ],
                [
                    1.719306468963623,
                    0.7306757569313049,
                    0.7500606775283813,
                    1.1183741092681885,
                    0.9826796650886536,
                    -0.6068835854530334,
                    -0.5681137442588806,
                    0.5949813723564148,
                    0.43990203738212585,
                    -0.37426456809043884,
                    0.07158862799406052,
                    -0.14164559543132782,
                    -0.2191852629184723,
                    -0.18041542172431946,
                    -0.4518042504787445,
                    -0.19980034232139587,
                    -0.761962890625,
                    -0.4711891710758209,
                    0.3623623549938202,
                    -0.14164559543132782,
                    -1.110891342163086,
                    0.0522037111222744,
                    0.1491282880306244,
                    -0.9751969575881958,
                    -1.2659708261489868,
                    -1.3047406673431396,
                    -1.0527366399765015,
                    -0.4518042504787445,
                    -0.18041542172431946,
                    0.3429774343967438,
                    0.4786718487739563,
                    0.2848227024078369
                ],
                [
                    1.6805366277694702,
                    1.0214494466781616,
                    0.8082154393196106,
                    0.9245249032974243,
                    0.9826796650886536,
                    -0.025336099788546562,
                    -0.761962890625,
                    0.30420762300491333,
                    0.5368266105651855,
                    0.18789811432361603,
                    -0.4130344092845917,
                    -0.936427116394043,
                    0.1685132086277008,
                    -0.025336099788546562,
                    0.07158862799406052,
                    0.42051711678504944,
                    -0.7813478112220764,
                    -0.6456534266471863,
                    0.4786718487739563,
                    0.12974336743354797,
                    -0.16103051602840424,
                    -0.3548796772956848,
                    -0.9751969575881958,
                    -1.1884310245513916,
                    -1.5761295557022095,
                    -1.16904616355896,
                    -0.761962890625,
                    0.1491282880306244,
                    0.5755964517593384,
                    0.6725209951400757,
                    0.556211531162262,
                    0.4980567693710327
                ],
                [
                    1.4285327196121216,
                    1.1959137916564941,
                    0.8857550621032715,
                    0.9439098238945007,
                    1.00206458568573,
                    0.3623623549938202,
                    -0.761962890625,
                    -0.1222606748342514,
                    -0.06410592794418335,
                    0.22666795551776886,
                    0.3623623549938202,
                    -1.072121500968933,
                    0.07158862799406052,
                    -0.3354947566986084,
                    0.3817472755908966,
                    1.1377589702606201,
                    -0.18041542172431946,
                    -1.0139667987823486,
                    0.11035845428705215,
                    0.22666795551776886,
                    0.1685132086277008,
                    -0.7038081288337708,
                    -1.4404350519180298,
                    -1.4210501909255981,
                    -1.5179747343063354,
                    -0.6844232082366943,
                    -0.08349084854125977,
                    0.7306757569313049,
                    0.8857550621032715,
                    0.7500606775283813,
                    0.6337511539459229,
                    0.4592869281768799
                ],
                [
                    0.7694455981254578,
                    1.350993037223816,
                    1.0408344268798828,
                    1.00206458568573,
                    1.0796042680740356,
                    0.5174416899681091,
                    -0.5099589824676514,
                    0.11035845428705215,
                    0.8857550621032715,
                    -0.4324193298816681,
                    -0.6262685060501099,
                    -0.8782724142074585,
                    -0.6262685060501099,
                    -0.06410592794418335,
                    1.0214494466781616,
                    1.2734533548355103,
                    0.4786718487739563,
                    -0.49057406187057495,
                    -0.7038081288337708,
                    -0.7425779700279236,
                    -1.2659708261489868,
                    -1.5373597145080566,
                    -1.6924389600753784,
                    -1.9638278484344482,
                    -1.5373597145080566,
                    -1.2659708261489868,
                    -0.3354947566986084,
                    0.3623623549938202,
                    0.3623623549938202,
                    0.0522037111222744,
                    0.03281864896416664,
                    -0.10287576168775558
                ],
                [
                    -0.16103051602840424,
                    1.350993037223816,
                    1.00206458568573,
                    1.0214494466781616,
                    1.0796042680740356,
                    0.24605286121368408,
                    -0.8201176524162292,
                    0.4786718487739563,
                    2.3202388286590576,
                    1.8162310123443604,
                    0.1491282880306244,
                    0.1685132086277008,
                    0.4592869281768799,
                    0.9826796650886536,
                    1.2540684938430786,
                    1.3316081762313843,
                    0.827600359916687,
                    -0.005951183382421732,
                    -0.29672491550445557,
                    -1.2465859651565552,
                    -1.7505937814712524,
                    -1.769978642463684,
                    -1.4792048931121826,
                    -1.3047406673431396,
                    -1.2465859651565552,
                    -1.3047406673431396,
                    -1.0915064811706543,
                    -1.0333516597747803,
                    -0.9170421957969666,
                    -1.0915064811706543,
                    -1.285355806350708,
                    -1.3628954887390137
                ],
                [
                    -0.8976573348045349,
                    0.9632947444915771,
                    0.9439098238945007,
                    0.9826796650886536,
                    1.00206458568573,
                    0.2848227024078369,
                    -0.316109836101532,
                    1.6611517667770386,
                    2.475318193435669,
                    2.4559333324432373,
                    1.6029969453811646,
                    -0.025336099788546562,
                    -0.2191852629184723,
                    -0.025336099788546562,
                    -0.18041542172431946,
                    -0.06410592794418335,
                    -0.4130344092845917,
                    -1.110891342163086,
                    -1.110891342163086,
                    -1.2659708261489868,
                    -1.4210501909255981,
                    -1.459820032119751,
                    -1.4404350519180298,
                    -1.3435105085372925,
                    -1.3435105085372925,
                    -1.4404350519180298,
                    -1.5955144166946411,
                    -1.4404350519180298,
                    -1.285355806350708,
                    -1.4985898733139038,
                    -1.5955144166946411,
                    -1.6148992776870728
                ],
                [
                    -1.634284257888794,
                    -0.5681137442588806,
                    0.3623623549938202,
                    0.827600359916687,
                    1.0214494466781616,
                    0.7694455981254578,
                    0.7694455981254578,
                    2.3396236896514893,
                    2.475318193435669,
                    1.9713103771209717,
                    -0.29672491550445557,
                    -1.2659708261489868,
                    -1.401665210723877,
                    -1.4792048931121826,
                    -1.4792048931121826,
                    -1.4985898733139038,
                    -1.5567445755004883,
                    -1.6148992776870728,
                    -1.5373597145080566,
                    -1.6148992776870728,
                    -1.6924389600753784,
                    -1.5373597145080566,
                    -1.5373597145080566,
                    -1.5955144166946411,
                    -1.6148992776870728,
                    -1.5373597145080566,
                    -1.5373597145080566,
                    -1.459820032119751,
                    -1.3628954887390137,
                    -1.401665210723877,
                    -1.4404350519180298,
                    -1.5567445755004883
                ],
                [
                    -1.8669031858444214,
                    -1.8669031858444214,
                    -1.285355806350708,
                    0.11035845428705215,
                    0.7888305187225342,
                    0.12974336743354797,
                    1.3316081762313843,
                    2.4947030544281006,
                    2.242699146270752,
                    0.30420762300491333,
                    -1.2465859651565552,
                    -1.459820032119751,
                    -1.459820032119751,
                    -1.4404350519180298,
                    -1.4792048931121826,
                    -1.459820032119751,
                    -1.5179747343063354,
                    -1.6148992776870728,
                    -1.6730540990829468,
                    -1.769978642463684,
                    -1.7505937814712524,
                    -1.6730540990829468,
                    -1.6924389600753784,
                    -1.6148992776870728,
                    -1.5567445755004883,
                    -1.3435105085372925,
                    -1.227200984954834,
                    -1.285355806350708,
                    -1.3435105085372925,
                    -1.459820032119751,
                    -1.5373597145080566,
                    -1.4404350519180298
                ],
                [
                    -1.4985898733139038,
                    -1.8475183248519897,
                    -1.769978642463684,
                    -1.0139667987823486,
                    0.0522037111222744,
                    0.0522037111222744,
                    1.7386913299560547,
                    2.5140879154205322,
                    1.1959137916564941,
                    -1.1496611833572388,
                    -1.3822803497314453,
                    -1.459820032119751,
                    -1.4210501909255981,
                    -1.4210501909255981,
                    -1.5373597145080566,
                    -1.5567445755004883,
                    -1.5955144166946411,
                    -1.634284257888794,
                    -1.7312088012695312,
                    -1.6730540990829468,
                    -1.6536691188812256,
                    -1.6536691188812256,
                    -1.5955144166946411,
                    -1.5373597145080566,
                    -1.285355806350708,
                    -1.227200984954834,
                    -1.1884310245513916,
                    -1.285355806350708,
                    -1.3822803497314453,
                    -1.459820032119751,
                    -1.072121500968933,
                    -0.8201176524162292
                ],
                [
                    -1.4210501909255981,
                    -1.7505937814712524,
                    -1.828133463859558,
                    -1.634284257888794,
                    -1.1496611833572388,
                    0.0522037111222744,
                    1.9131556749343872,
                    2.2233142852783203,
                    -0.025336099788546562,
                    -1.3047406673431396,
                    -1.4792048931121826,
                    -1.3435105085372925,
                    -1.3822803497314453,
                    -1.5761295557022095,
                    -1.5761295557022095,
                    -1.5179747343063354,
                    -1.5373597145080566,
                    -1.5955144166946411,
                    -1.5955144166946411,
                    -1.5761295557022095,
                    -1.5761295557022095,
                    -1.5567445755004883,
                    -1.3822803497314453,
                    -1.3047406673431396,
                    -1.3822803497314453,
                    -1.5373597145080566,
                    -1.5955144166946411,
                    -1.7312088012695312,
                    -1.4404350519180298,
                    -1.0139667987823486,
                    -0.7813478112220764,
                    -0.9558120369911194
                ],
                [
                    -1.459820032119751,
                    -1.7505937814712524,
                    -1.8669031858444214,
                    -1.7505937814712524,
                    -1.5761295557022095,
                    -0.9170421957969666,
                    1.486687421798706,
                    1.6611517667770386,
                    -0.5487288236618042,
                    -1.16904616355896,
                    -1.3822803497314453,
                    -1.4985898733139038,
                    -1.3047406673431396,
                    -1.4985898733139038,
                    -1.6536691188812256,
                    -1.5567445755004883,
                    -1.5179747343063354,
                    -1.4985898733139038,
                    -1.5179747343063354,
                    -1.5373597145080566,
                    -1.4404350519180298,
                    -1.6730540990829468,
                    -1.6730540990829468,
                    -1.4985898733139038,
                    -1.5179747343063354,
                    -1.6730540990829468,
                    -1.8862881660461426,
                    -1.6536691188812256,
                    -1.1302763223648071,
                    -1.1302763223648071,
                    -1.5373597145080566,
                    -1.4404350519180298
                ],
                [
                    -1.459820032119751,
                    -1.7505937814712524,
                    -1.808748483657837,
                    -1.7893636226654053,
                    -1.634284257888794,
                    -1.5373597145080566,
                    -0.4130344092845917,
                    0.8663701415061951,
                    -1.1884310245513916,
                    -1.3822803497314453,
                    -1.4210501909255981,
                    -1.401665210723877,
                    -1.2465859651565552,
                    -1.3047406673431396,
                    -1.3822803497314453,
                    -1.5567445755004883,
                    -1.6148992776870728,
                    -1.634284257888794,
                    -1.5373597145080566,
                    -1.4792048931121826,
                    -1.5373597145080566,
                    -1.6148992776870728,
                    -1.6536691188812256,
                    -1.6730540990829468,
                    -1.7118239402770996,
                    -1.6536691188812256,
                    -1.5761295557022095,
                    -1.2078160047531128,
                    -1.5179747343063354,
                    -1.828133463859558,
                    -2.138292074203491,
                    -1.4404350519180298
                ],
                [
                    -1.110891342163086,
                    -1.6148992776870728,
                    -1.828133463859558,
                    -1.6924389600753784,
                    -1.7118239402770996,
                    -1.5955144166946411,
                    -1.6148992776870728,
                    -1.0527366399765015,
                    -1.4792048931121826,
                    -1.828133463859558,
                    -1.9056730270385742,
                    -1.6924389600753784,
                    -1.4792048931121826,
                    -1.3435105085372925,
                    -1.3047406673431396,
                    -1.401665210723877,
                    -1.3435105085372925,
                    -1.2659708261489868,
                    -1.3241256475448608,
                    -1.401665210723877,
                    -1.459820032119751,
                    -1.5567445755004883,
                    -1.6730540990829468,
                    -1.7893636226654053,
                    -1.6148992776870728,
                    -1.227200984954834,
                    -0.8976573348045349,
                    -1.0139667987823486,
                    -1.3435105085372925,
                    -1.6924389600753784,
                    -2.1770617961883545,
                    -1.6536691188812256
                ],
                [
                    -1.2465859651565552,
                    -1.4792048931121826,
                    -1.7505937814712524,
                    -1.5955144166946411,
                    -1.6730540990829468,
                    -1.6148992776870728,
                    -1.5761295557022095,
                    -1.6536691188812256,
                    -1.6148992776870728,
                    -1.9056730270385742,
                    -1.9832127094268799,
                    -1.8475183248519897,
                    -1.9056730270385742,
                    -1.8669031858444214,
                    -1.7312088012695312,
                    -1.5179747343063354,
                    -1.3435105085372925,
                    -1.227200984954834,
                    -1.1496611833572388,
                    -0.9751969575881958,
                    -1.0915064811706543,
                    -1.4792048931121826,
                    -1.5955144166946411,
                    -1.5955144166946411,
                    -1.2659708261489868,
                    -0.7813478112220764,
                    -0.316109836101532,
                    -0.6262685060501099,
                    -1.2659708261489868,
                    -1.9250580072402954,
                    -1.8669031858444214,
                    -2.041367530822754
                ],
                [
                    -1.3822803497314453,
                    -1.3435105085372925,
                    -1.5567445755004883,
                    -1.5955144166946411,
                    -1.6536691188812256,
                    -1.6536691188812256,
                    -1.6536691188812256,
                    -1.6924389600753784,
                    -1.7312088012695312,
                    -1.9250580072402954,
                    -2.0025975704193115,
                    -1.8669031858444214,
                    -1.944442868232727,
                    -1.8669031858444214,
                    -2.0607523918151855,
                    -2.080137252807617,
                    -1.808748483657837,
                    -1.5179747343063354,
                    -1.2465859651565552,
                    -0.9945818781852722,
                    -1.1496611833572388,
                    -1.401665210723877,
                    -1.4210501909255981,
                    -1.5567445755004883,
                    -1.1302763223648071,
                    -0.7038081288337708,
                    -0.39364948868751526,
                    -0.7038081288337708,
                    -1.4985898733139038,
                    -1.9638278484344482,
                    -1.769978642463684,
                    -2.0219826698303223
                ]
            ],
            [
                [
                    -0.21556824445724487,
                    -0.2352350950241089,
                    -0.1369008719921112,
                    -0.09756718575954437,
                    -0.21556824445724487,
                    -0.2745687663555145,
                    -0.15656772255897522,
                    -0.19590140879154205,
                    -0.2352350950241089,
                    -0.19590140879154205,
                    -0.1369008719921112,
                    -0.2352350950241089,
                    -0.2352350950241089,
                    -0.11723402887582779,
                    -0.11723402887582779,
                    -0.07790034264326096,
                    -0.11723402887582779,
                    -0.19590140879154205,
                    -0.2352350950241089,
                    -0.21556824445724487,
                    -0.2745687663555145,
                    -0.31390246748924255,
                    -0.31390246748924255,
                    -0.33356931805610657,
                    -0.31390246748924255,
                    -0.43190351128578186,
                    -0.4909040629863739,
                    -0.5105708837509155,
                    -0.5105708837509155,
                    -0.5499045848846436,
                    -0.6285719275474548,
                    -0.7465730309486389
                ],
                [
                    -0.21556824445724487,
                    -0.2549019455909729,
                    -0.17623455822467804,
                    -0.1369008719921112,
                    -0.21556824445724487,
                    -0.19590140879154205,
                    -0.11723402887582779,
                    -0.17623455822467804,
                    -0.1369008719921112,
                    -0.2549019455909729,
                    -0.2352350950241089,
                    -0.2549019455909729,
                    -0.19590140879154205,
                    -0.07790034264326096,
                    -0.11723402887582779,
                    -0.15656772255897522,
                    -0.15656772255897522,
                    -0.2352350950241089,
                    -0.21556824445724487,
                    -0.15656772255897522,
                    -0.2549019455909729,
                    -0.3729029893875122,
                    -0.41223669052124023,
                    -0.4515703618526459,
                    -0.3532361388206482,
                    -0.41223669052124023,
                    -0.41223669052124023,
                    -0.5105708837509155,
                    -0.4909040629863739,
                    -0.5499045848846436,
                    -0.6285719275474548,
                    -0.6875724792480469
                ],
                [
                    -0.2549019455909729,
                    -0.2745687663555145,
                    -0.2352350950241089,
                    -0.2352350950241089,
                    -0.33356931805610657,
                    -0.15656772255897522,
                    -0.11723402887582779,
                    -0.11723402887582779,
                    -0.15656772255897522,
                    -0.15656772255897522,
                    -0.17623455822467804,
                    -0.2745687663555145,
                    -0.2352350950241089,
                    -0.15656772255897522,
                    -0.17623455822467804,
                    -0.19590140879154205,
                    -0.1369008719921112,
                    -0.17623455822467804,
                    -0.2352350950241089,
                    -0.5302377343177795,
                    -0.6482387781143188,
                    -0.8842409253120422,
                    -0.9039077758789062,
                    -0.7465730309486389,
                    -0.7269061803817749,
                    -0.5302377343177795,
                    -0.3925698399543762,
                    -0.4712372124195099,
                    -0.4712372124195099,
                    -0.4909040629863739,
                    -0.5499045848846436,
                    -0.6679056286811829
                ],
                [
                    -0.31390246748924255,
                    -0.2549019455909729,
                    -0.2745687663555145,
                    -0.21556824445724487,
                    -0.2549019455909729,
                    -0.11723402887582779,
                    -0.05823349952697754,
                    -0.07790034264326096,
                    -0.15656772255897522,
                    -0.11723402887582779,
                    0.0007670287159271538,
                    0.45310458540916443,
                    0.13843508064746857,
                    -0.2352350950241089,
                    -0.15656772255897522,
                    -0.17623455822467804,
                    -0.21556824445724487,
                    -0.2352350950241089,
                    -0.8449072241783142,
                    -0.7072393298149109,
                    -0.6482387781143188,
                    -0.6482387781143188,
                    -0.9432414174079895,
                    -1.1792436838150024,
                    -1.0415756702423096,
                    -1.1989104747772217,
                    -0.7465730309486389,
                    -0.4909040629863739,
                    -0.41223669052124023,
                    -0.43190351128578186,
                    -0.4712372124195099,
                    -0.5695714354515076
                ],
                [
                    -0.31390246748924255,
                    -0.17623455822467804,
                    -0.15656772255897522,
                    -0.17623455822467804,
                    -0.17623455822467804,
                    -0.19590140879154205,
                    -0.05823349952697754,
                    -0.1369008719921112,
                    -0.19590140879154205,
                    -0.1369008719921112,
                    0.09910139441490173,
                    1.790449857711792,
                    0.6497730016708374,
                    -0.17623455822467804,
                    -0.2352350950241089,
                    -0.29423561692237854,
                    -0.8449072241783142,
                    -1.3759119510650635,
                    -1.0612424612045288,
                    -0.3925698399543762,
                    -0.2549019455909729,
                    -0.17623455822467804,
                    -0.41223669052124023,
                    -0.5695714354515076,
                    -1.0022419691085815,
                    -0.8842409253120422,
                    -0.9825751185417175,
                    -0.7859066724777222,
                    -0.5302377343177795,
                    -0.43190351128578186,
                    -0.5695714354515076,
                    -0.5892382860183716
                ],
                [
                    -0.2745687663555145,
                    -0.3729029893875122,
                    -0.4515703618526459,
                    -0.21556824445724487,
                    -0.15656772255897522,
                    -0.19590140879154205,
                    -0.1369008719921112,
                    -0.15656772255897522,
                    -0.2352350950241089,
                    -0.1369008719921112,
                    -0.09756718575954437,
                    0.2957698404788971,
                    -0.018899815157055855,
                    -0.41223669052124023,
                    -0.9432414174079895,
                    -1.4349125623703003,
                    -1.2775777578353882,
                    -1.3169114589691162,
                    -0.7859066724777222,
                    -0.19590140879154205,
                    -0.03856665641069412,
                    -0.018899815157055855,
                    -0.1369008719921112,
                    -0.5302377343177795,
                    -0.4515703618526459,
                    -0.6285719275474548,
                    -1.2775777578353882,
                    -1.2775777578353882,
                    -0.7662398815155029,
                    -0.3532361388206482,
                    -0.4909040629863739,
                    -0.5499045848846436
                ],
                [
                    -0.4515703618526459,
                    -0.5499045848846436,
                    -1.6905814409255981,
                    -0.9629082679748535,
                    -0.11723402887582779,
                    -0.09756718575954437,
                    -0.15656772255897522,
                    -0.09756718575954437,
                    -0.11723402887582779,
                    -0.1369008719921112,
                    -0.05823349952697754,
                    -0.31390246748924255,
                    -0.4909040629863739,
                    -0.29423561692237854,
                    -0.7072393298149109,
                    -1.1005761623382568,
                    -0.7859066724777222,
                    -0.9432414174079895,
                    -0.7662398815155029,
                    0.13843508064746857,
                    0.37443721294403076,
                    -0.09756718575954437,
                    -0.4712372124195099,
                    -0.41223669052124023,
                    -0.2352350950241089,
                    -0.7859066724777222,
                    -1.0219087600708008,
                    -1.4939130544662476,
                    -1.218577265739441,
                    -0.4909040629863739,
                    -0.4712372124195099,
                    -0.5892382860183716
                ],
                [
                    -0.15656772255897522,
                    -0.5302377343177795,
                    -1.5725804567337036,
                    -1.1595767736434937,
                    -0.2352350950241089,
                    -0.11723402887582779,
                    -0.17623455822467804,
                    -0.1369008719921112,
                    -0.07790034264326096,
                    -0.19590140879154205,
                    -0.2745687663555145,
                    -0.5695714354515076,
                    -0.2549019455909729,
                    0.15810193121433258,
                    -0.33356931805610657,
                    -0.7072393298149109,
                    -0.5499045848846436,
                    -0.6875724792480469,
                    -0.9039077758789062,
                    -0.09756718575954437,
                    0.5907724499702454,
                    0.02043387107551098,
                    -0.5892382860183716,
                    -0.4909040629863739,
                    -0.5892382860183716,
                    -0.8252403736114502,
                    -1.2382441759109497,
                    -1.3759119510650635,
                    -1.4939130544662476,
                    -0.7859066724777222,
                    -0.3925698399543762,
                    -0.5105708837509155
                ],
                [
                    0.7481071949005127,
                    -0.3532361388206482,
                    -1.2775777578353882,
                    -0.03856665641069412,
                    0.02043387107551098,
                    -0.19590140879154205,
                    -0.11723402887582779,
                    -0.018899815157055855,
                    -0.03856665641069412,
                    0.23676930367946625,
                    -0.6679056286811829,
                    -0.3532361388206482,
                    0.35477036237716675,
                    0.3941040337085724,
                    -0.2352350950241089,
                    -0.8449072241783142,
                    -0.8252403736114502,
                    -0.7465730309486389,
                    -0.8842409253120422,
                    -1.0219087600708008,
                    0.040100716054439545,
                    0.23676930367946625,
                    -0.3925698399543762,
                    -0.8645740747451782,
                    -0.9039077758789062,
                    -0.8055735230445862,
                    -0.9825751185417175,
                    -1.297244668006897,
                    -1.7299151420593262,
                    -1.257910966873169,
                    -0.33356931805610657,
                    -0.3925698399543762
                ],
                [
                    1.0431098937988281,
                    0.3154366612434387,
                    -0.4515703618526459,
                    0.6104393005371094,
                    0.5121051073074341,
                    -0.1369008719921112,
                    -0.1369008719921112,
                    -0.09756718575954437,
                    1.1217772960662842,
                    1.790449857711792,
                    1.1217772960662842,
                    0.15810193121433258,
                    0.5907724499702454,
                    0.15810193121433258,
                    -0.2549019455909729,
                    -0.7465730309486389,
                    -0.7662398815155029,
                    -0.9629082679748535,
                    -1.297244668006897,
                    -1.0809093713760376,
                    0.040100716054439545,
                    0.19743561744689941,
                    0.02043387107551098,
                    -0.4909040629863739,
                    -0.8252403736114502,
                    -0.7465730309486389,
                    -0.7465730309486389,
                    -0.9235746264457703,
                    -1.4545793533325195,
                    -1.8282495737075806,
                    -0.9432414174079895,
                    -0.3925698399543762
                ],
                [
                    1.1807777881622314,
                    -0.1369008719921112,
                    0.5514388084411621,
                    0.90544193983078,
                    0.6497730016708374,
                    -0.21556824445724487,
                    -0.09756718575954437,
                    -0.6679056286811829,
                    1.456113576889038,
                    1.9871183633804321,
                    1.338112473487854,
                    0.23676930367946625,
                    0.7087735533714294,
                    0.2761029899120331,
                    -0.29423561692237854,
                    -0.2352350950241089,
                    -0.9235746264457703,
                    -0.8449072241783142,
                    -1.5529135465621948,
                    -0.7465730309486389,
                    0.8267745971679688,
                    0.47277140617370605,
                    0.47277140617370605,
                    -0.4515703618526459,
                    -0.7859066724777222,
                    -0.41223669052124023,
                    -0.6875724792480469,
                    -0.8645740747451782,
                    -1.257910966873169,
                    -1.710248351097107,
                    -1.5135798454284668,
                    -0.8252403736114502
                ],
                [
                    1.338112473487854,
                    -0.29423561692237854,
                    0.4137708842754364,
                    1.0234429836273193,
                    0.8661082983016968,
                    -0.05823349952697754,
                    0.0007670287159271538,
                    -0.5892382860183716,
                    -0.5499045848846436,
                    1.1611108779907227,
                    0.9447756409645081,
                    0.37443721294403076,
                    0.7481071949005127,
                    0.9447756409645081,
                    -0.07790034264326096,
                    -0.31390246748924255,
                    -0.4909040629863739,
                    -0.7662398815155029,
                    -1.670914649963379,
                    -0.03856665641069412,
                    1.5347809791564941,
                    0.5711056590080261,
                    0.3154366612434387,
                    -0.6679056286811829,
                    -0.8449072241783142,
                    -0.5892382860183716,
                    -0.3729029893875122,
                    -0.7072393298149109,
                    -0.9432414174079895,
                    -1.3759119510650635,
                    -1.3365782499313354,
                    -1.3169114589691162
                ],
                [
                    1.3971130847930908,
                    -0.5302377343177795,
                    0.21710245311260223,
                    1.1217772960662842,
                    0.6497730016708374,
                    0.0007670287159271538,
                    0.0007670287159271538,
                    -0.2745687663555145,
                    -1.0809093713760376,
                    0.6104393005371094,
                    0.4137708842754364,
                    -0.17623455822467804,
                    0.8464414477348328,
                    1.5544477701187134,
                    0.5121051073074341,
                    -0.19590140879154205,
                    -0.17623455822467804,
                    -0.17623455822467804,
                    -1.4349125623703003,
                    0.47277140617370605,
                    1.2594451904296875,
                    0.5121051073074341,
                    -0.09756718575954437,
                    -0.6875724792480469,
                    -0.7859066724777222,
                    -0.7662398815155029,
                    -0.5499045848846436,
                    -0.7072393298149109,
                    -0.7072393298149109,
                    -0.9825751185417175,
                    -0.9629082679748535,
                    -1.3365782499313354
                ],
                [
                    1.3577793836593628,
                    -0.5499045848846436,
                    0.6104393005371094,
                    1.2791119813919067,
                    -0.2549019455909729,
                    -0.33356931805610657,
                    0.02043387107551098,
                    -0.1369008719921112,
                    -1.0022419691085815,
                    0.1777687668800354,
                    0.040100716054439545,
                    0.5121051073074341,
                    1.0037761926651,
                    1.82978355884552,
                    0.9644424915313721,
                    0.15810193121433258,
                    -0.11723402887582779,
                    -0.17623455822467804,
                    -1.0219087600708008,
                    0.5711056590080261,
                    1.1414440870285034,
                    0.4137708842754364,
                    -0.2549019455909729,
                    -0.7465730309486389,
                    -0.8449072241783142,
                    -0.9825751185417175,
                    -0.8449072241783142,
                    -0.4515703618526459,
                    -0.43190351128578186,
                    -0.6875724792480469,
                    -0.6679056286811829,
                    -0.9825751185417175
                ],
                [
                    1.4364467859268188,
                    -0.31390246748924255,
                    0.8661082983016968,
                    1.2397782802581787,
                    -0.2745687663555145,
                    -0.6679056286811829,
                    -0.07790034264326096,
                    -0.018899815157055855,
                    -0.9629082679748535,
                    -0.33356931805610657,
                    0.0007670287159271538,
                    1.2201114892959595,
                    1.1217772960662842,
                    0.8267745971679688,
                    0.33510351181030273,
                    0.3941040337085724,
                    0.25643613934516907,
                    -0.4515703618526459,
                    -1.0219087600708008,
                    0.5711056590080261,
                    1.0234429836273193,
                    0.19743561744689941,
                    0.09910139441490173,
                    -0.2745687663555145,
                    -0.7269061803817749,
                    -0.5892382860183716,
                    -0.5302377343177795,
                    -0.2549019455909729,
                    -0.1369008719921112,
                    -0.5302377343177795,
                    -0.7465730309486389,
                    -0.5499045848846436
                ],
                [
                    1.456113576889038,
                    0.11876823753118515,
                    0.8661082983016968,
                    1.0824435949325562,
                    0.2761029899120331,
                    -0.7859066724777222,
                    -0.05823349952697754,
                    0.040100716054439545,
                    -0.5695714354515076,
                    -0.05823349952697754,
                    0.15810193121433258,
                    1.9281178712844849,
                    2.2231204509735107,
                    0.2957698404788971,
                    0.13843508064746857,
                    -0.03856665641069412,
                    -0.21556824445724487,
                    -0.3729029893875122,
                    -0.6875724792480469,
                    0.21710245311260223,
                    0.7087735533714294,
                    0.47277140617370605,
                    -0.29423561692237854,
                    -0.7465730309486389,
                    -1.0022419691085815,
                    -0.6875724792480469,
                    -0.3729029893875122,
                    -0.2745687663555145,
                    -0.2549019455909729,
                    -0.7269061803817749,
                    -0.5302377343177795,
                    -0.3729029893875122
                ],
                [
                    1.5741146802902222,
                    0.45310458540916443,
                    0.8071077466011047,
                    1.1611108779907227,
                    0.925108790397644,
                    -0.7269061803817749,
                    0.040100716054439545,
                    0.05976755917072296,
                    -0.03856665641069412,
                    -0.8449072241783142,
                    0.3941040337085724,
                    0.7874408960342407,
                    0.5711056590080261,
                    0.1777687668800354,
                    -0.33356931805610657,
                    -0.33356931805610657,
                    -0.43190351128578186,
                    -0.43190351128578186,
                    -0.6482387781143188,
                    0.3941040337085724,
                    0.2957698404788971,
                    0.35477036237716675,
                    0.13843508064746857,
                    -0.3532361388206482,
                    -0.9235746264457703,
                    -0.8645740747451782,
                    -0.5892382860183716,
                    -0.6285719275474548,
                    -0.7859066724777222,
                    -0.6875724792480469,
                    -0.29423561692237854,
                    -0.3729029893875122
                ],
                [
                    1.8101167678833008,
                    0.8464414477348328,
                    0.8661082983016968,
                    1.2004445791244507,
                    1.1611108779907227,
                    -0.41223669052124023,
                    -0.5302377343177795,
                    0.5121051073074341,
                    0.2761029899120331,
                    -0.5892382860183716,
                    -0.1369008719921112,
                    -0.3532361388206482,
                    -0.41223669052124023,
                    -0.3532361388206482,
                    -0.6285719275474548,
                    -0.2549019455909729,
                    -0.6285719275474548,
                    -0.3925698399543762,
                    0.09910139441490173,
                    -0.5302377343177795,
                    -1.3169114589691162,
                    -0.05823349952697754,
                    0.05976755917072296,
                    -1.0612424612045288,
                    -1.3169114589691162,
                    -1.3169114589691162,
                    -1.0415756702423096,
                    -0.5892382860183716,
                    -0.5695714354515076,
                    -0.21556824445724487,
                    -0.1369008719921112,
                    -0.2549019455909729
                ],
                [
                    1.7314493656158447,
                    1.2004445791244507,
                    1.0234429836273193,
                    1.1414440870285034,
                    1.2004445791244507,
                    0.15810193121433258,
                    -0.6875724792480469,
                    0.3154366612434387,
                    0.49243825674057007,
                    0.09910139441490173,
                    -0.6482387781143188,
                    -1.1595767736434937,
                    -0.03856665641069412,
                    -0.2352350950241089,
                    -0.11723402887582779,
                    0.3941040337085724,
                    -0.6089051365852356,
                    -0.5302377343177795,
                    0.3154366612434387,
                    -0.11723402887582779,
                    -0.2745687663555145,
                    -0.4712372124195099,
                    -1.0809093713760376,
                    -1.257910966873169,
                    -1.6119141578674316,
                    -1.1989104747772217,
                    -1.0612424612045288,
                    -0.3532361388206482,
                    -0.07790034264326096,
                    -0.05823349952697754,
                    -0.15656772255897522,
                    -0.2352350950241089
                ],
                [
                    1.3577793836593628,
                    1.298778772354126,
                    1.0431098937988281,
                    1.1021103858947754,
                    1.1611108779907227,
                    0.5121051073074341,
                    -0.6482387781143188,
                    -0.03856665641069412,
                    0.02043387107551098,
                    0.25643613934516907,
                    0.21710245311260223,
                    -1.257910966873169,
                    -0.09756718575954437,
                    -0.5105708837509155,
                    0.21710245311260223,
                    1.0431098937988281,
                    -0.09756718575954437,
                    -0.9432414174079895,
                    -0.07790034264326096,
                    0.02043387107551098,
                    0.11876823753118515,
                    -0.7269061803817749,
                    -1.4545793533325195,
                    -1.4152456521987915,
                    -1.4545793533325195,
                    -0.6482387781143188,
                    -0.6285719275474548,
                    -0.09756718575954437,
                    -0.03856665641069412,
                    -0.19590140879154205,
                    -0.2352350950241089,
                    -0.31390246748924255
                ],
                [
                    0.6497730016708374,
                    1.377446174621582,
                    1.0824435949325562,
                    0.9841093420982361,
                    1.1414440870285034,
                    0.6694398522377014,
                    -0.3925698399543762,
                    0.23676930367946625,
                    1.0234429836273193,
                    -0.3532361388206482,
                    -0.6482387781143188,
                    -0.9039077758789062,
                    -0.6482387781143188,
                    -0.09756718575954437,
                    0.9841093420982361,
                    1.1611108779907227,
                    0.49243825674057007,
                    -0.4515703618526459,
                    -0.8842409253120422,
                    -0.9039077758789062,
                    -1.218577265739441,
                    -1.3955788612365723,
                    -1.5135798454284668,
                    -1.7692488431930542,
                    -1.297244668006897,
                    -1.0219087600708008,
                    -0.4515703618526459,
                    0.040100716054439545,
                    0.0007670287159271538,
                    -0.2745687663555145,
                    -0.19590140879154205,
                    -0.3532361388206482
                ],
                [
                    -0.05823349952697754,
                    1.5151140689849854,
                    1.0824435949325562,
                    0.90544193983078,
                    1.1021103858947754,
                    0.4137708842754364,
                    -0.7072393298149109,
                    0.5907724499702454,
                    2.43945574760437,
                    1.947784662246704,
                    0.33510351181030273,
                    0.35477036237716675,
                    0.6497730016708374,
                    1.1611108779907227,
                    1.4364467859268188,
                    1.3577793836593628,
                    0.9644424915313721,
                    0.19743561744689941,
                    -0.2745687663555145,
                    -1.1989104747772217,
                    -1.4545793533325195,
                    -1.3562451601028442,
                    -1.0415756702423096,
                    -0.8252403736114502,
                    -0.7465730309486389,
                    -0.7662398815155029,
                    -0.4712372124195099,
                    -0.43190351128578186,
                    -0.3729029893875122,
                    -0.5302377343177795,
                    -0.6089051365852356,
                    -0.6482387781143188
                ],
                [
                    -0.3532361388206482,
                    1.456113576889038,
                    1.1807777881622314,
                    0.9644424915313721,
                    1.0627766847610474,
                    0.45310458540916443,
                    -0.21556824445724487,
                    1.7314493656158447,
                    2.537790060043335,
                    2.5574567317962646,
                    1.9871183633804321,
                    0.3941040337085724,
                    0.1777687668800354,
                    0.35477036237716675,
                    0.19743561744689941,
                    0.19743561744689941,
                    0.02043387107551098,
                    -0.5892382860183716,
                    -0.7072393298149109,
                    -0.8055735230445862,
                    -0.7662398815155029,
                    -0.7662398815155029,
                    -0.7465730309486389,
                    -0.5892382860183716,
                    -0.5695714354515076,
                    -0.6285719275474548,
                    -0.5302377343177795,
                    -0.3729029893875122,
                    -0.29423561692237854,
                    -0.5105708837509155,
                    -0.5105708837509155,
                    -0.5499045848846436
                ],
                [
                    -0.6679056286811829,
                    0.2761029899120331,
                    0.8857751488685608,
                    1.0037761926651,
                    1.1611108779907227,
                    0.925108790397644,
                    0.8464414477348328,
                    2.4001221656799316,
                    2.518122911453247,
                    2.124786138534546,
                    0.25643613934516907,
                    -0.6875724792480469,
                    -0.8449072241783142,
                    -0.9235746264457703,
                    -0.9432414174079895,
                    -1.0022419691085815,
                    -0.8645740747451782,
                    -0.8252403736114502,
                    -0.8252403736114502,
                    -0.8055735230445862,
                    -0.7269061803817749,
                    -0.6482387781143188,
                    -0.6679056286811829,
                    -0.7072393298149109,
                    -0.6679056286811829,
                    -0.5892382860183716,
                    -0.5695714354515076,
                    -0.5302377343177795,
                    -0.5302377343177795,
                    -0.5695714354515076,
                    -0.5499045848846436,
                    -0.6482387781143188
                ],
                [
                    -0.6285719275474548,
                    -0.7072393298149109,
                    -0.41223669052124023,
                    0.5907724499702454,
                    1.1021103858947754,
                    0.25643613934516907,
                    1.298778772354126,
                    2.4984562397003174,
                    2.4001221656799316,
                    0.7087735533714294,
                    -0.5695714354515076,
                    -0.7662398815155029,
                    -0.7662398815155029,
                    -0.7465730309486389,
                    -0.7859066724777222,
                    -0.7662398815155029,
                    -0.7269061803817749,
                    -0.7662398815155029,
                    -0.8055735230445862,
                    -0.8645740747451782,
                    -0.7859066724777222,
                    -0.7269061803817749,
                    -0.7465730309486389,
                    -0.6679056286811829,
                    -0.6089051365852356,
                    -0.3925698399543762,
                    -0.3925698399543762,
                    -0.43190351128578186,
                    -0.41223669052124023,
                    -0.4712372124195099,
                    -0.5695714354515076,
                    -0.3925698399543762
                ],
                [
                    -0.2352350950241089,
                    -0.5695714354515076,
                    -0.7465730309486389,
                    -0.33356931805610657,
                    0.49243825674057007,
                    0.25643613934516907,
                    1.7707830667495728,
                    2.5574567317962646,
                    1.4757803678512573,
                    -0.5892382860183716,
                    -0.6285719275474548,
                    -0.6875724792480469,
                    -0.6482387781143188,
                    -0.6482387781143188,
                    -0.7859066724777222,
                    -0.8055735230445862,
                    -0.8055735230445862,
                    -0.8252403736114502,
                    -0.8449072241783142,
                    -0.7859066724777222,
                    -0.7269061803817749,
                    -0.6679056286811829,
                    -0.6089051365852356,
                    -0.5499045848846436,
                    -0.29423561692237854,
                    -0.2549019455909729,
                    -0.2745687663555145,
                    -0.29423561692237854,
                    -0.29423561692237854,
                    -0.3532361388206482,
                    0.0007670287159271538,
                    0.2761029899120331
                ],
                [
                    -0.17623455822467804,
                    -0.4712372124195099,
                    -0.7269061803817749,
                    -0.7859066724777222,
                    -0.5499045848846436,
                    0.4334377348423004,
                    2.0854525566101074,
                    2.4001221656799316,
                    0.3941040337085724,
                    -0.6089051365852356,
                    -0.7072393298149109,
                    -0.5695714354515076,
                    -0.6089051365852356,
                    -0.8055735230445862,
                    -0.8055735230445862,
                    -0.7859066724777222,
                    -0.7662398815155029,
                    -0.7859066724777222,
                    -0.7269061803817749,
                    -0.6875724792480469,
                    -0.6482387781143188,
                    -0.5105708837509155,
                    -0.33356931805610657,
                    -0.2549019455909729,
                    -0.3532361388206482,
                    -0.5105708837509155,
                    -0.5499045848846436,
                    -0.6285719275474548,
                    -0.29423561692237854,
                    0.13843508064746857,
                    0.2957698404788971,
                    0.040100716054439545
                ],
                [
                    -0.2549019455909729,
                    -0.4909040629863739,
                    -0.6679056286811829,
                    -0.7269061803817749,
                    -0.7859066724777222,
                    -0.33356931805610657,
                    1.8887841701507568,
                    2.0657856464385986,
                    0.05976755917072296,
                    -0.3729029893875122,
                    -0.5695714354515076,
                    -0.7072393298149109,
                    -0.5105708837509155,
                    -0.7072393298149109,
                    -0.8449072241783142,
                    -0.8055735230445862,
                    -0.7662398815155029,
                    -0.7072393298149109,
                    -0.6679056286811829,
                    -0.6679056286811829,
                    -0.5105708837509155,
                    -0.6089051365852356,
                    -0.5892382860183716,
                    -0.41223669052124023,
                    -0.43190351128578186,
                    -0.5892382860183716,
                    -0.7465730309486389,
                    -0.43190351128578186,
                    0.11876823753118515,
                    0.05976755917072296,
                    -0.4909040629863739,
                    -0.5302377343177795
                ],
                [
                    -0.29423561692237854,
                    -0.5105708837509155,
                    -0.6089051365852356,
                    -0.6875724792480469,
                    -0.6875724792480469,
                    -0.7662398815155029,
                    0.19743561744689941,
                    1.456113576889038,
                    -0.4515703618526459,
                    -0.5105708837509155,
                    -0.5695714354515076,
                    -0.5499045848846436,
                    -0.3925698399543762,
                    -0.4515703618526459,
                    -0.5302377343177795,
                    -0.7859066724777222,
                    -0.8645740747451782,
                    -0.8449072241783142,
                    -0.6875724792480469,
                    -0.6089051365852356,
                    -0.6089051365852356,
                    -0.5499045848846436,
                    -0.5892382860183716,
                    -0.6089051365852356,
                    -0.6482387781143188,
                    -0.5892382860183716,
                    -0.41223669052124023,
                    0.040100716054439545,
                    -0.2549019455909729,
                    -0.6482387781143188,
                    -1.2382441759109497,
                    -0.5892382860183716
                ],
                [
                    0.02043387107551098,
                    -0.4515703618526459,
                    -0.6875724792480469,
                    -0.6285719275474548,
                    -0.7072393298149109,
                    -0.6679056286811829,
                    -0.8645740747451782,
                    -0.31390246748924255,
                    -0.6679056286811829,
                    -0.9039077758789062,
                    -1.0219087600708008,
                    -0.8055735230445862,
                    -0.5892382860183716,
                    -0.4515703618526459,
                    -0.41223669052124023,
                    -0.6089051365852356,
                    -0.5695714354515076,
                    -0.4712372124195099,
                    -0.4712372124195099,
                    -0.5105708837509155,
                    -0.5499045848846436,
                    -0.5695714354515076,
                    -0.6875724792480469,
                    -0.7859066724777222,
                    -0.6285719275474548,
                    -0.21556824445724487,
                    0.1777687668800354,
                    0.15810193121433258,
                    -0.1369008719921112,
                    -0.5105708837509155,
                    -1.1595767736434937,
                    -0.7465730309486389
                ],
                [
                    -0.1369008719921112,
                    -0.41223669052124023,
                    -0.7465730309486389,
                    -0.6285719275474548,
                    -0.6482387781143188,
                    -0.6089051365852356,
                    -0.6875724792480469,
                    -0.8252403736114502,
                    -0.7465730309486389,
                    -1.0022419691085815,
                    -1.1005761623382568,
                    -0.9629082679748535,
                    -1.0219087600708008,
                    -0.9825751185417175,
                    -0.8449072241783142,
                    -0.7269061803817749,
                    -0.5499045848846436,
                    -0.43190351128578186,
                    -0.2745687663555145,
                    -0.07790034264326096,
                    -0.19590140879154205,
                    -0.5499045848846436,
                    -0.6875724792480469,
                    -0.6875724792480469,
                    -0.3532361388206482,
                    0.13843508064746857,
                    0.6497730016708374,
                    0.4334377348423004,
                    -0.15656772255897522,
                    -0.8055735230445862,
                    -0.8055735230445862,
                    -1.1595767736434937
                ],
                [
                    -0.31390246748924255,
                    -0.3532361388206482,
                    -0.6679056286811829,
                    -0.7269061803817749,
                    -0.6679056286811829,
                    -0.6089051365852356,
                    -0.7072393298149109,
                    -0.8252403736114502,
                    -0.8645740747451782,
                    -1.0612424612045288,
                    -1.1202430725097656,
                    -0.9825751185417175,
                    -1.0612424612045288,
                    -0.9825751185417175,
                    -1.1792436838150024,
                    -1.2775777578353882,
                    -1.0415756702423096,
                    -0.7072393298149109,
                    -0.3729029893875122,
                    -0.07790034264326096,
                    -0.2352350950241089,
                    -0.5302377343177795,
                    -0.5499045848846436,
                    -0.7072393298149109,
                    -0.2745687663555145,
                    0.15810193121433258,
                    0.45310458540916443,
                    0.23676930367946625,
                    -0.4712372124195099,
                    -0.9039077758789062,
                    -0.7662398815155029,
                    -1.1005761623382568
                ]
            ],
            [
                [
                    -1.2653887271881104,
                    -1.304409384727478,
                    -1.2263681888580322,
                    -1.1873475313186646,
                    -1.323919653892517,
                    -1.421471118927002,
                    -1.304409384727478,
                    -1.3434299230575562,
                    -1.3629401922225952,
                    -1.421471118927002,
                    -1.421471118927002,
                    -1.2068578004837036,
                    -1.2653887271881104,
                    -1.421471118927002,
                    -1.3434299230575562,
                    -1.3629401922225952,
                    -1.440981388092041,
                    -1.4800019264221191,
                    -1.46049165725708,
                    -1.3824505805969238,
                    -1.3629401922225952,
                    -1.3434299230575562,
                    -1.3434299230575562,
                    -1.3824505805969238,
                    -1.3629401922225952,
                    -1.46049165725708,
                    -1.3824505805969238,
                    -1.421471118927002,
                    -1.4800019264221191,
                    -1.5190225839614868,
                    -1.5190225839614868,
                    -1.577553391456604
                ],
                [
                    -1.2263681888580322,
                    -1.440981388092041,
                    -1.3434299230575562,
                    -1.1288167238235474,
                    -1.2653887271881104,
                    -1.3824505805969238,
                    -1.304409384727478,
                    -1.3434299230575562,
                    -1.323919653892517,
                    -1.4800019264221191,
                    -1.421471118927002,
                    -1.1678372621536255,
                    -1.2068578004837036,
                    -1.421471118927002,
                    -1.440981388092041,
                    -1.577553391456604,
                    -1.6360843181610107,
                    -1.577553391456604,
                    -1.421471118927002,
                    -1.2458784580230713,
                    -1.1873475313186646,
                    -1.1483269929885864,
                    -1.2068578004837036,
                    -1.284899115562439,
                    -1.2458784580230713,
                    -1.323919653892517,
                    -1.3434299230575562,
                    -1.4800019264221191,
                    -1.558043122291565,
                    -1.6165740489959717,
                    -1.597063660621643,
                    -1.558043122291565
                ],
                [
                    -1.304409384727478,
                    -1.577553391456604,
                    -1.5190225839614868,
                    -1.284899115562439,
                    -1.401960849761963,
                    -1.3629401922225952,
                    -1.3434299230575562,
                    -1.3434299230575562,
                    -1.3824505805969238,
                    -1.3824505805969238,
                    -1.284899115562439,
                    -1.1093063354492188,
                    -1.2263681888580322,
                    -1.4800019264221191,
                    -1.4995123147964478,
                    -1.5385328531265259,
                    -1.46049165725708,
                    -1.304409384727478,
                    -1.1678372621536255,
                    -1.2653887271881104,
                    -1.2068578004837036,
                    -1.2458784580230713,
                    -1.304409384727478,
                    -1.2458784580230713,
                    -1.284899115562439,
                    -1.1483269929885864,
                    -1.2263681888580322,
                    -1.46049165725708,
                    -1.5385328531265259,
                    -1.558043122291565,
                    -1.558043122291565,
                    -1.577553391456604
                ],
                [
                    -1.440981388092041,
                    -1.597063660621643,
                    -1.6165740489959717,
                    -1.3629401922225952,
                    -1.3824505805969238,
                    -1.323919653892517,
                    -1.284899115562439,
                    -1.284899115562439,
                    -1.3629401922225952,
                    -1.3434299230575562,
                    -1.1093063354492188,
                    -0.3679153025150299,
                    -0.7581210732460022,
                    -1.421471118927002,
                    -1.304409384727478,
                    -1.1678372621536255,
                    -1.0897960662841797,
                    -0.914203405380249,
                    -1.304409384727478,
                    -0.9532240033149719,
                    -0.7386108040809631,
                    -0.5825284719467163,
                    -0.9337137341499329,
                    -1.2458784580230713,
                    -1.2068578004837036,
                    -1.46049165725708,
                    -1.3434299230575562,
                    -1.323919653892517,
                    -1.3824505805969238,
                    -1.46049165725708,
                    -1.46049165725708,
                    -1.5190225839614868
                ],
                [
                    -1.421471118927002,
                    -1.284899115562439,
                    -1.2653887271881104,
                    -1.304409384727478,
                    -1.3824505805969238,
                    -1.440981388092041,
                    -1.304409384727478,
                    -1.3629401922225952,
                    -1.421471118927002,
                    -1.401960849761963,
                    -1.0702857971191406,
                    0.978294849395752,
                    -0.13379181921482086,
                    -1.1288167238235474,
                    -1.0507755279541016,
                    -0.836162269115448,
                    -1.2458784580230713,
                    -1.6165740489959717,
                    -1.1288167238235474,
                    -0.30938443541526794,
                    -0.05575065314769745,
                    0.08082137256860733,
                    -0.17281238734722137,
                    -0.4069358706474304,
                    -0.914203405380249,
                    -0.8556725382804871,
                    -1.304409384727478,
                    -1.3434299230575562,
                    -1.284899115562439,
                    -1.323919653892517,
                    -1.5190225839614868,
                    -1.5190225839614868
                ],
                [
                    -1.1678372621536255,
                    -0.972734272480011,
                    -1.1093063354492188,
                    -1.1873475313186646,
                    -1.3629401922225952,
                    -1.46049165725708,
                    -1.421471118927002,
                    -1.421471118927002,
                    -1.4995123147964478,
                    -1.46049165725708,
                    -1.401960849761963,
                    -0.5630182027816772,
                    -0.6995902061462402,
                    -1.0897960662841797,
                    -1.3824505805969238,
                    -1.6165740489959717,
                    -1.3824505805969238,
                    -1.3434299230575562,
                    -0.7386108040809631,
                    -0.0752609446644783,
                    0.11984195560216904,
                    0.15886253118515015,
                    0.04180079698562622,
                    -0.34840500354766846,
                    -0.328894704580307,
                    -0.5435079336166382,
                    -1.304409384727478,
                    -1.4995123147964478,
                    -1.2653887271881104,
                    -1.0897960662841797,
                    -1.3629401922225952,
                    -1.440981388092041
                ],
                [
                    -1.1093063354492188,
                    -0.6605696678161621,
                    -1.8897180557250977,
                    -1.6751048564910889,
                    -1.284899115562439,
                    -1.3824505805969238,
                    -1.440981388092041,
                    -1.3824505805969238,
                    -1.401960849761963,
                    -1.4995123147964478,
                    -1.46049165725708,
                    -1.2068578004837036,
                    -1.0702857971191406,
                    -0.7581210732460022,
                    -0.8556725382804871,
                    -1.1093063354492188,
                    -0.8166519403457642,
                    -0.972734272480011,
                    -0.777631402015686,
                    0.1393522471189499,
                    0.3539655804634094,
                    -0.11428152769804001,
                    -0.4654667377471924,
                    -0.38742557168006897,
                    -0.21183297038078308,
                    -0.7191005349159241,
                    -0.8751828074455261,
                    -1.46049165725708,
                    -1.5190225839614868,
                    -1.0897960662841797,
                    -1.284899115562439,
                    -1.46049165725708
                ],
                [
                    -0.4654667377471924,
                    -0.42644616961479187,
                    -1.4800019264221191,
                    -1.421471118927002,
                    -1.1288167238235474,
                    -1.401960849761963,
                    -1.5190225839614868,
                    -1.46049165725708,
                    -1.2653887271881104,
                    -1.2263681888580322,
                    -1.2263681888580322,
                    -1.2653887271881104,
                    -0.7191005349159241,
                    -0.13379181921482086,
                    -0.4069358706474304,
                    -0.6800799369812012,
                    -0.5044873356819153,
                    -0.6215490698814392,
                    -0.8751828074455261,
                    -0.13379181921482086,
                    0.5100479125976562,
                    -0.036240365356206894,
                    -0.6410593390464783,
                    -0.5044873356819153,
                    -0.5825284719467163,
                    -0.777631402015686,
                    -1.0897960662841797,
                    -1.2653887271881104,
                    -1.597063660621643,
                    -1.2458784580230713,
                    -1.2263681888580322,
                    -1.46049165725708
                ],
                [
                    0.5880890488624573,
                    -0.17281238734722137,
                    -1.0702857971191406,
                    -0.01673007383942604,
                    -0.6215490698814392,
                    -1.3824505805969238,
                    -1.421471118927002,
                    -1.2458784580230713,
                    -0.9337137341499329,
                    -0.3679153025150299,
                    -1.0702857971191406,
                    -0.6995902061462402,
                    0.1393522471189499,
                    0.275924414396286,
                    -0.250853568315506,
                    -0.777631402015686,
                    -0.7191005349159241,
                    -0.6215490698814392,
                    -0.7971416711807251,
                    -1.0312652587890625,
                    -0.036240365356206894,
                    0.1783728301525116,
                    -0.4069358706474304,
                    -0.8556725382804871,
                    -0.8751828074455261,
                    -0.7386108040809631,
                    -0.914203405380249,
                    -1.1873475313186646,
                    -1.694615125656128,
                    -1.5385328531265259,
                    -1.0702857971191406,
                    -1.3434299230575562
                ],
                [
                    0.9587845802307129,
                    0.5685787796974182,
                    -0.17281238734722137,
                    0.6856405138969421,
                    -0.036240365356206894,
                    -1.2263681888580322,
                    -1.304409384727478,
                    -1.0507755279541016,
                    0.6271096467971802,
                    1.6416447162628174,
                    1.01731538772583,
                    0.10033166408538818,
                    0.6075993776321411,
                    0.2173934131860733,
                    -0.13379181921482086,
                    -0.6800799369812012,
                    -0.6800799369812012,
                    -0.836162269115448,
                    -1.1873475313186646,
                    -1.0897960662841797,
                    -0.036240365356206894,
                    0.15886253118515015,
                    0.0027802155818790197,
                    -0.48497703671455383,
                    -0.777631402015686,
                    -0.6995902061462402,
                    -0.6995902061462402,
                    -0.836162269115448,
                    -1.3824505805969238,
                    -1.9287385940551758,
                    -1.3629401922225952,
                    -1.1093063354492188
                ],
                [
                    1.1929080486297607,
                    0.15886253118515015,
                    0.861233115196228,
                    1.0563360452651978,
                    0.15886253118515015,
                    -1.2458784580230713,
                    -1.2263681888580322,
                    -1.304409384727478,
                    1.2709492444992065,
                    2.1879327297210693,
                    1.4465417861938477,
                    0.334455281496048,
                    0.8027022480964661,
                    0.3539655804634094,
                    -0.19232268631458282,
                    -0.19232268631458282,
                    -0.8751828074455261,
                    -0.7191005349159241,
                    -1.440981388092041,
                    -0.7191005349159241,
                    0.783191978931427,
                    0.4515170454978943,
                    0.47102731466293335,
                    -0.42644616961479187,
                    -0.7191005349159241,
                    -0.34840500354766846,
                    -0.6800799369812012,
                    -0.7971416711807251,
                    -1.0702857971191406,
                    -1.577553391456604,
                    -1.6165740489959717,
                    -1.323919653892517
                ],
                [
                    1.4660521745681763,
                    0.04180079698562622,
                    0.7636816501617432,
                    1.2514389753341675,
                    0.43200674653053284,
                    -1.0702857971191406,
                    -1.1483269929885864,
                    -1.3629401922225952,
                    -0.6605696678161621,
                    1.4465417861938477,
                    0.978294849395752,
                    0.3734758794307709,
                    0.724661111831665,
                    0.8807434439659119,
                    -0.15330210328102112,
                    -0.3679153025150299,
                    -0.48497703671455383,
                    -0.6800799369812012,
                    -1.558043122291565,
                    -0.01673007383942604,
                    1.5245829820632935,
                    0.5490685105323792,
                    0.3149450123310089,
                    -0.6215490698814392,
                    -0.7581210732460022,
                    -0.5044873356819153,
                    -0.38742557168006897,
                    -0.6410593390464783,
                    -0.6995902061462402,
                    -1.1483269929885864,
                    -1.284899115562439,
                    -1.7141255140304565
                ],
                [
                    1.5636035203933716,
                    -0.17281238734722137,
                    0.5880890488624573,
                    1.3880109786987305,
                    0.3734758794307709,
                    -0.89469313621521,
                    -1.1873475313186646,
                    -1.304409384727478,
                    -1.3629401922225952,
                    0.7441713809967041,
                    0.23690369725227356,
                    -0.38742557168006897,
                    0.6661302447319031,
                    1.3489903211593628,
                    0.29543471336364746,
                    -0.30938443541526794,
                    -0.17281238734722137,
                    -0.09477123618125916,
                    -1.304409384727478,
                    0.5100479125976562,
                    1.2514389753341675,
                    0.5100479125976562,
                    -0.05575065314769745,
                    -0.6020388007164001,
                    -0.6800799369812012,
                    -0.6605696678161621,
                    -0.5630182027816772,
                    -0.6410593390464783,
                    -0.48497703671455383,
                    -0.7971416711807251,
                    -0.972734272480011,
                    -1.7531460523605347
                ],
                [
                    1.5440932512283325,
                    -0.21183297038078308,
                    0.9587845802307129,
                    1.5245829820632935,
                    -0.30938443541526794,
                    -0.9337137341499329,
                    -1.0897960662841797,
                    -1.2458784580230713,
                    -1.46049165725708,
                    0.11984195560216904,
                    -0.21183297038078308,
                    0.256413996219635,
                    0.8027022480964661,
                    1.6806652545928955,
                    0.841722846031189,
                    0.061311084777116776,
                    -0.13379181921482086,
                    -0.09477123618125916,
                    -0.89469313621521,
                    0.6466199159622192,
                    1.1733977794647217,
                    0.43200674653053284,
                    -0.19232268631458282,
                    -0.6605696678161621,
                    -0.7386108040809631,
                    -0.8556725382804871,
                    -0.8166519403457642,
                    -0.38742557168006897,
                    -0.2898741364479065,
                    -0.6410593390464783,
                    -0.8751828074455261,
                    -1.558043122291565
                ],
                [
                    1.6026241779327393,
                    -0.036240365356206894,
                    1.1343772411346436,
                    1.4465417861938477,
                    -0.09477123618125916,
                    -0.914203405380249,
                    -1.0117549896240234,
                    -1.1483269929885864,
                    -1.558043122291565,
                    -0.5044873356819153,
                    -0.21183297038078308,
                    1.0758463144302368,
                    1.0758463144302368,
                    0.8807434439659119,
                    0.5100479125976562,
                    0.3929861783981323,
                    0.2173934131860733,
                    -0.3679153025150299,
                    -0.8556725382804871,
                    0.6856405138969421,
                    1.0953565835952759,
                    0.256413996219635,
                    0.15886253118515015,
                    -0.17281238734722137,
                    -0.6020388007164001,
                    -0.4459564685821533,
                    -0.4654667377471924,
                    -0.19232268631458282,
                    -0.05575065314769745,
                    -0.6605696678161621,
                    -1.1873475313186646,
                    -1.304409384727478
                ],
                [
                    1.6221344470977783,
                    0.43200674653053284,
                    1.1733977794647217,
                    1.3099697828292847,
                    0.5490685105323792,
                    -0.7191005349159241,
                    -0.5044873356819153,
                    -0.7191005349159241,
                    -1.2068578004837036,
                    -0.4069358706474304,
                    0.04180079698562622,
                    1.8952784538269043,
                    2.2659740447998047,
                    0.4515170454978943,
                    0.3149450123310089,
                    -0.036240365356206894,
                    -0.250853568315506,
                    -0.3679153025150299,
                    -0.7581210732460022,
                    0.08082137256860733,
                    0.6271096467971802,
                    0.47102731466293335,
                    -0.250853568315506,
                    -0.6605696678161621,
                    -0.89469313621521,
                    -0.5239976048469543,
                    -0.2898741364479065,
                    -0.2898741364479065,
                    -0.4069358706474304,
                    -1.1678372621536255,
                    -1.284899115562439,
                    -1.284899115562439
                ],
                [
                    1.7587064504623413,
                    0.9002537131309509,
                    1.2514389753341675,
                    1.4465417861938477,
                    1.1343772411346436,
                    -0.4654667377471924,
                    0.23690369725227356,
                    -0.01673007383942604,
                    -0.6215490698814392,
                    -1.4995123147964478,
                    0.3734758794307709,
                    0.8027022480964661,
                    0.5295581817626953,
                    0.061311084777116776,
                    -0.5044873356819153,
                    -0.4654667377471924,
                    -0.42644616961479187,
                    -0.5239976048469543,
                    -1.0897960662841797,
                    -0.19232268631458282,
                    -0.09477123618125916,
                    0.23690369725227356,
                    0.08082137256860733,
                    -0.328894704580307,
                    -0.8166519403457642,
                    -0.7191005349159241,
                    -0.38742557168006897,
                    -0.6215490698814392,
                    -1.1483269929885864,
                    -1.3434299230575562,
                    -1.1483269929885864,
                    -1.323919653892517
                ],
                [
                    1.97331964969635,
                    1.2904595136642456,
                    1.3685007095336914,
                    1.5636035203933716,
                    1.4075212478637695,
                    -0.17281238734722137,
                    -0.23134326934814453,
                    0.6075993776321411,
                    -0.05575065314769745,
                    -1.0312652587890625,
                    -0.17281238734722137,
                    -0.3679153025150299,
                    -0.48497703671455383,
                    -0.48497703671455383,
                    -0.7971416711807251,
                    -0.30938443541526794,
                    -0.5044873356819153,
                    -0.3679153025150299,
                    -0.23134326934814453,
                    -0.972734272480011,
                    -1.597063660621643,
                    -0.17281238734722137,
                    0.022290505468845367,
                    -1.0312652587890625,
                    -1.2263681888580322,
                    -1.1873475313186646,
                    -0.9532240033149719,
                    -0.6995902061462402,
                    -0.972734272480011,
                    -0.89469313621521,
                    -0.972734272480011,
                    -1.1678372621536255
                ],
                [
                    1.7782167196273804,
                    1.5245829820632935,
                    1.4660521745681763,
                    1.5440932512283325,
                    1.4465417861938477,
                    0.3734758794307709,
                    -0.34840500354766846,
                    0.5685787796974182,
                    0.5295581817626953,
                    -0.05575065314769745,
                    -0.6605696678161621,
                    -1.1483269929885864,
                    -0.11428152769804001,
                    -0.34840500354766846,
                    -0.27036383748054504,
                    0.3734758794307709,
                    -0.4069358706474304,
                    -0.4069358706474304,
                    0.11984195560216904,
                    -0.4069358706474304,
                    -0.42644616961479187,
                    -0.5435079336166382,
                    -1.0897960662841797,
                    -1.2068578004837036,
                    -1.46049165725708,
                    -1.0507755279541016,
                    -1.440981388092041,
                    -1.0702857971191406,
                    -1.0117549896240234,
                    -1.1678372621536255,
                    -1.3434299230575562,
                    -1.323919653892517
                ],
                [
                    1.2904595136642456,
                    1.4270315170288086,
                    1.3099697828292847,
                    1.3880109786987305,
                    1.3685007095336914,
                    0.7441713809967041,
                    -0.2898741364479065,
                    0.3539655804634094,
                    0.3149450123310089,
                    0.4124964475631714,
                    0.23690369725227356,
                    -1.2263681888580322,
                    -0.11428152769804001,
                    -0.5435079336166382,
                    0.1783728301525116,
                    1.0563360452651978,
                    0.08082137256860733,
                    -0.7971416711807251,
                    -0.21183297038078308,
                    -0.17281238734722137,
                    0.08082137256860733,
                    -0.6995902061462402,
                    -1.3629401922225952,
                    -1.2458784580230713,
                    -1.2068578004837036,
                    -0.4069358706474304,
                    -1.0507755279541016,
                    -0.89469313621521,
                    -0.972734272480011,
                    -1.2068578004837036,
                    -1.2458784580230713,
                    -1.323919653892517
                ],
                [
                    0.6271096467971802,
                    1.4270315170288086,
                    1.1929080486297607,
                    1.1343772411346436,
                    1.2904595136642456,
                    0.9002537131309509,
                    -0.05575065314769745,
                    0.6271096467971802,
                    1.3880109786987305,
                    -0.05575065314769745,
                    -0.5239976048469543,
                    -0.7971416711807251,
                    -0.5435079336166382,
                    0.04180079698562622,
                    1.1538875102996826,
                    1.2319285869598389,
                    0.6661302447319031,
                    -0.250853568315506,
                    -0.9337137341499329,
                    -0.9922446608543396,
                    -1.1093063354492188,
                    -1.1678372621536255,
                    -1.2263681888580322,
                    -1.421471118927002,
                    -0.8751828074455261,
                    -0.6020388007164001,
                    -0.7581210732460022,
                    -0.6215490698814392,
                    -0.7386108040809631,
                    -1.0312652587890625,
                    -0.8751828074455261,
                    -0.9922446608543396
                ],
                [
                    0.19788311421871185,
                    1.6806652545928955,
                    1.2124183177947998,
                    1.0563360452651978,
                    1.2709492444992065,
                    0.6466199159622192,
                    -0.4459564685821533,
                    0.8807434439659119,
                    2.656179904937744,
                    2.1684224605560303,
                    0.5880890488624573,
                    0.6466199159622192,
                    0.978294849395752,
                    1.5245829820632935,
                    1.836747646331787,
                    1.6221344470977783,
                    1.3099697828292847,
                    0.5685787796974182,
                    -0.09477123618125916,
                    -1.0117549896240234,
                    -1.0897960662841797,
                    -0.89469313621521,
                    -0.5239976048469543,
                    -0.23134326934814453,
                    -0.0752609446644783,
                    -0.05575065314769745,
                    0.15886253118515015,
                    0.10033166408538818,
                    0.11984195560216904,
                    -0.036240365356206894,
                    -0.036240365356206894,
                    0.022290505468845367
                ],
                [
                    0.3734758794307709,
                    1.934299111366272,
                    1.5245829820632935,
                    1.2319285869598389,
                    1.3294800519943237,
                    0.7051507830619812,
                    -0.01673007383942604,
                    1.8562579154968262,
                    2.597648859024048,
                    2.6952004432678223,
                    2.304994583129883,
                    0.841722846031189,
                    0.6856405138969421,
                    0.9392743110656738,
                    0.8222125172615051,
                    0.7441713809967041,
                    0.6661302447319031,
                    0.10033166408538818,
                    -0.19232268631458282,
                    -0.250853568315506,
                    -0.05575065314769745,
                    -0.0752609446644783,
                    0.022290505468845367,
                    0.2173934131860733,
                    0.334455281496048,
                    0.3149450123310089,
                    0.4124964475631714,
                    0.5295581817626953,
                    0.5490685105323792,
                    0.3539655804634094,
                    0.4515170454978943,
                    0.3539655804634094
                ],
                [
                    0.4124964475631714,
                    1.0563360452651978,
                    1.4465417861938477,
                    1.4465417861938477,
                    1.5245829820632935,
                    1.1733977794647217,
                    0.978294849395752,
                    2.402545928955078,
                    2.4805872440338135,
                    2.2269535064697266,
                    0.7636816501617432,
                    -0.05575065314769745,
                    -0.17281238734722137,
                    -0.17281238734722137,
                    -0.13379181921482086,
                    -0.250853568315506,
                    0.022290505468845367,
                    0.11984195560216904,
                    -0.01673007383942604,
                    0.04180079698562622,
                    0.2173934131860733,
                    0.2173934131860733,
                    0.23690369725227356,
                    0.275924414396286,
                    0.3539655804634094,
                    0.4905376136302948,
                    0.4515170454978943,
                    0.4515170454978943,
                    0.4124964475631714,
                    0.3929861783981323,
                    0.4905376136302948,
                    0.3734758794307709
                ],
                [
                    0.5295581817626953,
                    0.3149450123310089,
                    0.3929861783981323,
                    1.2124183177947998,
                    1.5050727128982544,
                    0.4515170454978943,
                    1.3099697828292847,
                    2.5000975131988525,
                    2.5586283206939697,
                    1.1929080486297607,
                    0.256413996219635,
                    0.08082137256860733,
                    0.10033166408538818,
                    0.1393522471189499,
                    0.11984195560216904,
                    0.04180079698562622,
                    0.061311084777116776,
                    0.061311084777116776,
                    0.022290505468845367,
                    -0.01673007383942604,
                    0.11984195560216904,
                    0.2173934131860733,
                    0.2173934131860733,
                    0.3149450123310089,
                    0.3929861783981323,
                    0.6075993776321411,
                    0.5490685105323792,
                    0.5490685105323792,
                    0.6271096467971802,
                    0.5880890488624573,
                    0.5100479125976562,
                    0.6856405138969421
                ],
                [
                    0.9392743110656738,
                    0.5100479125976562,
                    0.19788311421871185,
                    0.43200674653053284,
                    1.0368257761001587,
                    0.5685787796974182,
                    1.8562579154968262,
                    2.636669635772705,
                    1.7782167196273804,
                    0.08082137256860733,
                    0.275924414396286,
                    0.2173934131860733,
                    0.256413996219635,
                    0.256413996219635,
                    0.1393522471189499,
                    0.022290505468845367,
                    -0.01673007383942604,
                    -0.036240365356206894,
                    -0.01673007383942604,
                    0.061311084777116776,
                    0.1783728301525116,
                    0.334455281496048,
                    0.3929861783981323,
                    0.47102731466293335,
                    0.7051507830619812,
                    0.7441713809967041,
                    0.6466199159622192,
                    0.6856405138969421,
                    0.783191978931427,
                    0.7441713809967041,
                    1.0368257761001587,
                    1.3294800519943237
                ],
                [
                    0.9978051781654358,
                    0.6466199159622192,
                    0.3149450123310089,
                    0.15886253118515015,
                    0.23690369725227356,
                    0.978294849395752,
                    2.344015121459961,
                    2.597648859024048,
                    0.7636816501617432,
                    0.0027802155818790197,
                    0.1783728301525116,
                    0.334455281496048,
                    0.29543471336364746,
                    0.10033166408538818,
                    0.10033166408538818,
                    0.10033166408538818,
                    0.10033166408538818,
                    0.10033166408538818,
                    0.1783728301525116,
                    0.256413996219635,
                    0.334455281496048,
                    0.5295581817626953,
                    0.7051507830619812,
                    0.783191978931427,
                    0.7051507830619812,
                    0.5295581817626953,
                    0.5100479125976562,
                    0.47102731466293335,
                    0.861233115196228,
                    1.2514389753341675,
                    1.3294800519943237,
                    1.0758463144302368
                ],
                [
                    0.9392743110656738,
                    0.6856405138969421,
                    0.47102731466293335,
                    0.3734758794307709,
                    0.23690369725227356,
                    0.47102731466293335,
                    2.324504852294922,
                    2.344015121459961,
                    0.5100479125976562,
                    0.23690369725227356,
                    0.29543471336364746,
                    0.19788311421871185,
                    0.3734758794307709,
                    0.1783728301525116,
                    0.04180079698562622,
                    0.10033166408538818,
                    0.15886253118515015,
                    0.23690369725227356,
                    0.3149450123310089,
                    0.3539655804634094,
                    0.5100479125976562,
                    0.47102731466293335,
                    0.4905376136302948,
                    0.6661302447319031,
                    0.6466199159622192,
                    0.4905376136302948,
                    0.3734758794307709,
                    0.7636816501617432,
                    1.3294800519943237,
                    1.2124183177947998,
                    0.5490685105323792,
                    0.4905376136302948
                ],
                [
                    0.91976398229599,
                    0.6466199159622192,
                    0.5685787796974182,
                    0.5295581817626953,
                    0.47102731466293335,
                    0.2173934131860733,
                    0.8807434439659119,
                    1.8952784538269043,
                    0.10033166408538818,
                    0.1393522471189499,
                    0.275924414396286,
                    0.3149450123310089,
                    0.4905376136302948,
                    0.4124964475631714,
                    0.334455281496048,
                    0.11984195560216904,
                    0.08082137256860733,
                    0.11984195560216904,
                    0.3149450123310089,
                    0.4124964475631714,
                    0.43200674653053284,
                    0.4905376136302948,
                    0.47102731466293335,
                    0.43200674653053284,
                    0.4124964475631714,
                    0.47102731466293335,
                    0.724661111831665,
                    1.2514389753341675,
                    0.978294849395752,
                    0.5100479125976562,
                    -0.21183297038078308,
                    0.43200674653053284
                ],
                [
                    1.2319285869598389,
                    0.6661302447319031,
                    0.4515170454978943,
                    0.6271096467971802,
                    0.4905376136302948,
                    0.3539655804634094,
                    -0.01673007383942604,
                    0.3734758794307709,
                    0.0027802155818790197,
                    -0.17281238734722137,
                    -0.17281238734722137,
                    0.061311084777116776,
                    0.275924414396286,
                    0.4124964475631714,
                    0.4515170454978943,
                    0.275924414396286,
                    0.334455281496048,
                    0.4515170454978943,
                    0.4905376136302948,
                    0.47102731466293335,
                    0.4515170454978943,
                    0.43200674653053284,
                    0.334455281496048,
                    0.2173934131860733,
                    0.3734758794307709,
                    0.783191978931427,
                    1.2709492444992065,
                    1.3099697828292847,
                    1.0563360452651978,
                    0.6271096467971802,
                    -0.11428152769804001,
                    0.256413996219635
                ],
                [
                    1.0563360452651978,
                    0.6661302447319031,
                    0.3539655804634094,
                    0.5685787796974182,
                    0.4905376136302948,
                    0.3929861783981323,
                    0.2173934131860733,
                    -0.036240365356206894,
                    0.022290505468845367,
                    -0.19232268631458282,
                    -0.23134326934814453,
                    -0.09477123618125916,
                    -0.15330210328102112,
                    -0.11428152769804001,
                    0.022290505468845367,
                    0.11984195560216904,
                    0.275924414396286,
                    0.4124964475631714,
                    0.5880890488624573,
                    0.8222125172615051,
                    0.7441713809967041,
                    0.3929861783981323,
                    0.256413996219635,
                    0.256413996219635,
                    0.5880890488624573,
                    1.0953565835952759,
                    1.6221344470977783,
                    1.4855624437332153,
                    0.978294849395752,
                    0.3149450123310089,
                    0.23690369725227356,
                    -0.13379181921482086
                ],
                [
                    0.9002537131309509,
                    0.6856405138969421,
                    0.3539655804634094,
                    0.3929861783981323,
                    0.3929861783981323,
                    0.3539655804634094,
                    0.1783728301525116,
                    0.022290505468845367,
                    0.0027802155818790197,
                    -0.17281238734722137,
                    -0.250853568315506,
                    -0.11428152769804001,
                    -0.19232268631458282,
                    -0.11428152769804001,
                    -0.30938443541526794,
                    -0.48497703671455383,
                    -0.27036383748054504,
                    0.08082137256860733,
                    0.4515170454978943,
                    0.7441713809967041,
                    0.6075993776321411,
                    0.334455281496048,
                    0.3149450123310089,
                    0.1783728301525116,
                    0.6075993776321411,
                    1.0368257761001587,
                    1.3294800519943237,
                    1.1929080486297607,
                    0.6075993776321411,
                    0.19788311421871185,
                    0.29543471336364746,
                    -0.0752609446644783
                ]
            ]
        ],
        [
            [
                [
                    2.126389741897583,
                    2.0488500595092773,
                    2.068234920501709,
                    2.068234920501709,
                    2.068234920501709,
                    2.068234920501709,
                    2.068234920501709,
                    2.068234920501709,
                    2.068234920501709,
                    2.068234920501709,
                    2.0876197814941406,
                    2.0876197814941406,
                    2.0876197814941406,
                    2.0876197814941406,
                    2.0876197814941406,
                    2.0876197814941406,
                    2.0876197814941406,
                    2.068234920501709,
                    2.0488500595092773,
                    2.0294651985168457,
                    2.068234920501709,
                    2.068234920501709,
                    2.068234920501709,
                    2.0876197814941406,
                    2.068234920501709,
                    2.0876197814941406,
                    2.068234920501709,
                    2.068234920501709,
                    2.068234920501709,
                    2.0876197814941406,
                    2.0876197814941406,
                    2.068234920501709
                ],
                [
                    2.184544324874878,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1651594638824463,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.126389741897583,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.126389741897583
                ],
                [
                    2.1651594638824463,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.126389741897583,
                    2.126389741897583,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.126389741897583,
                    2.1070048809051514,
                    1.9713103771209717,
                    2.0488500595092773,
                    2.0488500595092773,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.126389741897583,
                    2.126389741897583,
                    2.1070048809051514
                ],
                [
                    2.184544324874878,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.126389741897583,
                    2.126389741897583,
                    2.0876197814941406,
                    2.068234920501709,
                    1.9906952381134033,
                    1.893770694732666,
                    1.176528811454773,
                    1.6223819255828857,
                    1.583612084388733,
                    1.9906952381134033,
                    2.1457746028900146,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583
                ],
                [
                    2.1651594638824463,
                    2.1070048809051514,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.126389741897583,
                    2.126389741897583,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.126389741897583,
                    2.126389741897583,
                    2.1457746028900146,
                    2.0876197814941406,
                    1.8162310123443604,
                    1.5060724020004272,
                    0.7306757569313049,
                    1.350993037223816,
                    1.719306468963623,
                    2.0294651985168457,
                    2.1651594638824463,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146
                ],
                [
                    2.2039294242858887,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.126389741897583,
                    2.126389741897583,
                    2.1070048809051514,
                    2.126389741897583,
                    2.1651594638824463,
                    2.1651594638824463,
                    2.1070048809051514,
                    2.068234920501709,
                    2.126389741897583,
                    2.010080099105835,
                    1.6029969453811646,
                    1.3316081762313843,
                    1.1571439504623413,
                    0.9439098238945007,
                    0.7694455981254578,
                    1.1377589702606201,
                    1.583612084388733,
                    1.9519253969192505,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1651594638824463,
                    2.1651594638824463,
                    2.1651594638824463
                ],
                [
                    1.9906952381134033,
                    1.9906952381134033,
                    2.068234920501709,
                    2.0488500595092773,
                    2.1070048809051514,
                    2.1651594638824463,
                    2.1651594638824463,
                    2.1457746028900146,
                    2.1651594638824463,
                    2.1651594638824463,
                    2.2039294242858887,
                    2.2039294242858887,
                    1.9325405359268188,
                    1.9131556749343872,
                    2.0876197814941406,
                    1.8550008535385132,
                    1.1183741092681885,
                    0.6919059157371521,
                    0.6531360745429993,
                    0.556211531162262,
                    0.3623623549938202,
                    0.3429774343967438,
                    0.5949813723564148,
                    1.40914785861969,
                    2.0876197814941406,
                    2.1457746028900146,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.1457746028900146,
                    2.1651594638824463,
                    2.2039294242858887
                ],
                [
                    1.6805366277694702,
                    1.9131556749343872,
                    2.0294651985168457,
                    1.9713103771209717,
                    2.010080099105835,
                    2.1070048809051514,
                    2.1651594638824463,
                    2.184544324874878,
                    2.2039294242858887,
                    2.2039294242858887,
                    2.2039294242858887,
                    2.2233142852783203,
                    1.4673025608062744,
                    1.8162310123443604,
                    2.0876197814941406,
                    1.719306468963623,
                    1.312223196029663,
                    1.1571439504623413,
                    1.1377589702606201,
                    0.9245249032974243,
                    0.7694455981254578,
                    0.6531360745429993,
                    0.7112908363342285,
                    1.176528811454773,
                    2.010080099105835,
                    2.1070048809051514,
                    2.0876197814941406,
                    2.0876197814941406,
                    2.1070048809051514,
                    2.1457746028900146,
                    2.1651594638824463,
                    2.184544324874878
                ],
                [
                    1.7580763101577759,
                    1.8550008535385132,
                    1.9325405359268188,
                    1.9325405359268188,
                    1.9713103771209717,
                    2.0488500595092773,
                    2.1457746028900146,
                    2.184544324874878,
                    2.184544324874878,
                    2.184544324874878,
                    2.1651594638824463,
                    2.2039294242858887,
                    1.3897628784179688,
                    1.8356159925460815,
                    2.0876197814941406,
                    2.0294651985168457,
                    1.6223819255828857,
                    1.6223819255828857,
                    1.8162310123443604,
                    1.6029969453811646,
                    1.6223819255828857,
                    1.6417667865753174,
                    1.7774611711502075,
                    1.7968461513519287,
                    1.9325405359268188,
                    1.9906952381134033,
                    1.9906952381134033,
                    2.0294651985168457,
                    2.0294651985168457,
                    2.126389741897583,
                    2.1651594638824463,
                    2.184544324874878
                ],
                [
                    -0.14164559543132782,
                    -0.1222606748342514,
                    -0.025336099788546562,
                    0.20728303492069244,
                    0.9051399827003479,
                    1.9325405359268188,
                    2.126389741897583,
                    2.1651594638824463,
                    2.1457746028900146,
                    2.126389741897583,
                    2.126389741897583,
                    2.0876197814941406,
                    1.719306468963623,
                    1.9519253969192505,
                    2.068234920501709,
                    2.1457746028900146,
                    1.9906952381134033,
                    1.9713103771209717,
                    2.0488500595092773,
                    1.9325405359268188,
                    1.9325405359268188,
                    1.7774611711502075,
                    1.4673025608062744,
                    1.1571439504623413,
                    0.9051399827003479,
                    0.8082154393196106,
                    0.8082154393196106,
                    1.176528811454773,
                    1.893770694732666,
                    2.126389741897583,
                    2.1457746028900146,
                    2.184544324874878
                ],
                [
                    -0.316109836101532,
                    -0.4324193298816681,
                    -0.3354947566986084,
                    -0.27733999490737915,
                    0.401132196187973,
                    1.8743858337402344,
                    1.9713103771209717,
                    2.010080099105835,
                    2.1457746028900146,
                    2.1070048809051514,
                    2.0488500595092773,
                    2.0294651985168457,
                    2.010080099105835,
                    2.0488500595092773,
                    2.068234920501709,
                    2.0294651985168457,
                    2.0488500595092773,
                    2.0488500595092773,
                    2.010080099105835,
                    1.893770694732666,
                    1.2734533548355103,
                    0.7500606775283813,
                    0.401132196187973,
                    0.22666795551776886,
                    0.1685132086277008,
                    0.0522037111222744,
                    -0.08349084854125977,
                    0.4592869281768799,
                    1.7580763101577759,
                    2.1070048809051514,
                    2.126389741897583,
                    2.1651594638824463
                ],
                [
                    1.350993037223816,
                    1.2152986526489258,
                    1.4285327196121216,
                    1.4479176998138428,
                    1.6223819255828857,
                    1.893770694732666,
                    1.6999214887619019,
                    1.6611517667770386,
                    1.7580763101577759,
                    1.8356159925460815,
                    1.8162310123443604,
                    1.6417667865753174,
                    1.6223819255828857,
                    1.6611517667770386,
                    1.7580763101577759,
                    1.8356159925460815,
                    1.9325405359268188,
                    1.9519253969192505,
                    1.9325405359268188,
                    1.7968461513519287,
                    1.1183741092681885,
                    0.9632947444915771,
                    1.0796042680740356,
                    1.0214494466781616,
                    1.176528811454773,
                    0.8663701415061951,
                    0.32359254360198975,
                    1.1571439504623413,
                    1.8162310123443604,
                    2.0488500595092773,
                    2.1070048809051514,
                    2.1457746028900146
                ],
                [
                    1.312223196029663,
                    1.2734533548355103,
                    1.486687421798706,
                    1.719306468963623,
                    1.893770694732666,
                    1.719306468963623,
                    1.5060724020004272,
                    0.8857550621032715,
                    1.00206458568573,
                    1.583612084388733,
                    0.9439098238945007,
                    -0.5293439030647278,
                    -0.6262685060501099,
                    -0.4711891710758209,
                    -0.27733999490737915,
                    -0.06410592794418335,
                    0.22666795551776886,
                    0.5368266105651855,
                    1.486687421798706,
                    1.893770694732666,
                    1.7968461513519287,
                    1.8356159925460815,
                    1.893770694732666,
                    1.7774611711502075,
                    1.8550008535385132,
                    1.6805366277694702,
                    1.370378017425537,
                    1.8743858337402344,
                    1.8162310123443604,
                    1.8550008535385132,
                    2.068234920501709,
                    2.126389741897583
                ],
                [
                    -0.2385701686143875,
                    -0.27733999490737915,
                    -0.2385701686143875,
                    -0.005951183382421732,
                    0.24605286121368408,
                    0.8663701415061951,
                    1.2734533548355103,
                    1.2540684938430786,
                    1.6029969453811646,
                    1.7580763101577759,
                    0.6337511539459229,
                    -1.3822803497314453,
                    -1.5567445755004883,
                    -1.4792048931121826,
                    -1.401665210723877,
                    -1.1496611833572388,
                    -0.4518042504787445,
                    0.6531360745429993,
                    1.8550008535385132,
                    2.1070048809051514,
                    2.0876197814941406,
                    1.9713103771209717,
                    1.893770694732666,
                    1.583612084388733,
                    1.486687421798706,
                    1.6611517667770386,
                    1.6805366277694702,
                    1.4285327196121216,
                    1.0408344268798828,
                    1.2152986526489258,
                    1.6611517667770386,
                    1.8550008535385132
                ],
                [
                    -1.2465859651565552,
                    -1.0915064811706543,
                    -1.2078160047531128,
                    -1.110891342163086,
                    -0.04472101479768753,
                    0.2654377818107605,
                    0.4980567693710327,
                    1.350993037223816,
                    1.719306468963623,
                    1.5642271041870117,
                    0.7306757569313049,
                    -0.4324193298816681,
                    -0.587498664855957,
                    -0.4711891710758209,
                    0.24605286121368408,
                    1.0796042680740356,
                    1.583612084388733,
                    1.8550008535385132,
                    1.8162310123443604,
                    1.54484224319458,
                    1.1183741092681885,
                    0.6337511539459229,
                    0.42051711678504944,
                    0.11035845428705215,
                    -0.005951183382421732,
                    0.09097354114055634,
                    0.20728303492069244,
                    0.1491282880306244,
                    0.0522037111222744,
                    0.24605286121368408,
                    1.0989891290664673,
                    1.3897628784179688
                ],
                [
                    -1.6536691188812256,
                    -1.3047406673431396,
                    -0.7813478112220764,
                    0.03281864896416664,
                    0.12974336743354797,
                    -0.5681137442588806,
                    -0.1222606748342514,
                    0.7306757569313049,
                    0.9245249032974243,
                    1.1377589702606201,
                    1.0989891290664673,
                    1.0796042680740356,
                    1.1183741092681885,
                    1.40914785861969,
                    1.7968461513519287,
                    1.4479176998138428,
                    0.9439098238945007,
                    0.6531360745429993,
                    0.3817472755908966,
                    0.12974336743354797,
                    -0.18041542172431946,
                    -0.5293439030647278,
                    -0.6068835854530334,
                    -0.5099589824676514,
                    -0.39364948868751526,
                    -0.3548796772956848,
                    -0.06410592794418335,
                    0.24605286121368408,
                    0.4786718487739563,
                    0.6143662929534912,
                    1.2152986526489258,
                    1.1571439504623413
                ],
                [
                    -2.1770617961883545,
                    -1.9250580072402954,
                    0.1685132086277008,
                    1.5642271041870117,
                    0.24605286121368408,
                    -0.14164559543132782,
                    0.30420762300491333,
                    0.9051399827003479,
                    1.0796042680740356,
                    1.583612084388733,
                    1.8356159925460815,
                    1.9906952381134033,
                    1.9131556749343872,
                    2.0294651985168457,
                    1.9519253969192505,
                    0.9826796650886536,
                    0.3623623549938202,
                    0.24605286121368408,
                    0.32359254360198975,
                    0.3817472755908966,
                    0.556211531162262,
                    0.4592869281768799,
                    0.4592869281768799,
                    0.556211531162262,
                    0.6143662929534912,
                    0.6725209951400757,
                    0.9245249032974243,
                    1.1959137916564941,
                    1.2540684938430786,
                    1.0214494466781616,
                    0.7694455981254578,
                    0.6143662929534912
                ],
                [
                    -2.332141160964966,
                    -1.3047406673431396,
                    1.4479176998138428,
                    1.9325405359268188,
                    1.3897628784179688,
                    1.4285327196121216,
                    1.6805366277694702,
                    1.9519253969192505,
                    2.010080099105835,
                    2.0876197814941406,
                    2.068234920501709,
                    2.0294651985168457,
                    1.6223819255828857,
                    1.893770694732666,
                    1.8550008535385132,
                    1.6417667865753174,
                    1.40914785861969,
                    1.0602192878723145,
                    1.312223196029663,
                    1.2152986526489258,
                    1.2346835136413574,
                    1.3316081762313843,
                    1.2928383350372314,
                    1.1377589702606201,
                    0.9051399827003479,
                    0.8857550621032715,
                    0.6919059157371521,
                    0.3623623549938202,
                    0.20728303492069244,
                    0.11035845428705215,
                    0.0522037111222744,
                    0.24605286121368408
                ],
                [
                    -1.6730540990829468,
                    0.3817472755908966,
                    1.2540684938430786,
                    1.176528811454773,
                    1.1377589702606201,
                    1.2928383350372314,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.2734533548355103,
                    1.2928383350372314,
                    1.2540684938430786,
                    1.00206458568573,
                    1.0602192878723145,
                    0.556211531162262,
                    0.42051711678504944,
                    0.3817472755908966,
                    0.5949813723564148,
                    0.401132196187973,
                    -0.2385701686143875,
                    -0.2191852629184723,
                    0.12974336743354797,
                    0.013433732092380524,
                    -0.27733999490737915,
                    -0.6456534266471863,
                    -0.6650383472442627,
                    -0.6262685060501099,
                    -0.6068835854530334,
                    -0.39364948868751526,
                    -0.08349084854125977,
                    0.07158862799406052,
                    0.07158862799406052
                ],
                [
                    -0.06410592794418335,
                    0.7112908363342285,
                    0.3429774343967438,
                    0.22666795551776886,
                    0.11035845428705215,
                    0.0522037111222744,
                    0.03281864896416664,
                    0.09097354114055634,
                    0.11035845428705215,
                    0.0522037111222744,
                    0.03281864896416664,
                    0.07158862799406052,
                    0.07158862799406052,
                    -0.025336099788546562,
                    -0.4130344092845917,
                    -0.49057406187057495,
                    -0.4518042504787445,
                    -0.14164559543132782,
                    -0.25795507431030273,
                    -0.6068835854530334,
                    -0.6068835854530334,
                    -0.6068835854530334,
                    -0.7425779700279236,
                    -0.8201176524162292,
                    -0.8782724142074585,
                    -0.8201176524162292,
                    -0.6262685060501099,
                    -0.4711891710758209,
                    -0.3354947566986084,
                    -0.19980034232139587,
                    -0.08349084854125977,
                    0.09097354114055634
                ],
                [
                    -1.0139667987823486,
                    -0.9558120369911194,
                    -0.936427116394043,
                    -0.8782724142074585,
                    -0.8007327318191528,
                    -0.7425779700279236,
                    -0.7425779700279236,
                    -0.6844232082366943,
                    -0.6068835854530334,
                    -0.4518042504787445,
                    -0.3548796772956848,
                    -0.2385701686143875,
                    -0.19980034232139587,
                    -0.14164559543132782,
                    -0.14164559543132782,
                    -0.10287576168775558,
                    -0.19980034232139587,
                    -0.29672491550445557,
                    -0.37426456809043884,
                    -0.49057406187057495,
                    -0.587498664855957,
                    -0.7813478112220764,
                    -0.8976573348045349,
                    -0.8782724142074585,
                    -0.8782724142074585,
                    -0.936427116394043,
                    -0.8782724142074585,
                    -0.8395025730133057,
                    -0.6456534266471863,
                    -0.2385701686143875,
                    -0.005951183382421732,
                    0.20728303492069244
                ],
                [
                    -2.1770617961883545,
                    -2.370911121368408,
                    -2.25460147857666,
                    -2.080137252807617,
                    -2.080137252807617,
                    -2.0219826698303223,
                    -2.041367530822754,
                    -2.0025975704193115,
                    -1.9250580072402954,
                    -1.769978642463684,
                    -1.6148992776870728,
                    -1.4985898733139038,
                    -1.4210501909255981,
                    -1.2659708261489868,
                    -1.1496611833572388,
                    -1.072121500968933,
                    -1.0527366399765015,
                    -1.0333516597747803,
                    -1.1302763223648071,
                    -1.2659708261489868,
                    -1.3628954887390137,
                    -1.401665210723877,
                    -1.401665210723877,
                    -1.3241256475448608,
                    -1.3241256475448608,
                    -1.3241256475448608,
                    -1.0333516597747803,
                    -0.7425779700279236,
                    -0.4130344092845917,
                    -0.10287576168775558,
                    0.09097354114055634,
                    0.22666795551776886
                ],
                [
                    -1.7312088012695312,
                    -2.215831756591797,
                    -2.273986577987671,
                    -1.808748483657837,
                    -1.7312088012695312,
                    -2.0025975704193115,
                    -2.273986577987671,
                    -2.370911121368408,
                    -2.4096808433532715,
                    -2.429065704345703,
                    -2.429065704345703,
                    -2.429065704345703,
                    -2.312756299972534,
                    -2.332141160964966,
                    -2.4096808433532715,
                    -2.370911121368408,
                    -2.1770617961883545,
                    -1.9638278484344482,
                    -2.0219826698303223,
                    -2.0219826698303223,
                    -2.0219826698303223,
                    -2.0025975704193115,
                    -1.8475183248519897,
                    -1.6730540990829468,
                    -1.3241256475448608,
                    -0.7813478112220764,
                    -0.2385701686143875,
                    -0.04472101479768753,
                    -0.18041542172431946,
                    -0.06410592794418335,
                    0.1685132086277008,
                    0.5368266105651855
                ],
                [
                    -1.7505937814712524,
                    -1.9250580072402954,
                    -2.1770617961883545,
                    -1.9056730270385742,
                    -1.0527366399765015,
                    -1.072121500968933,
                    -1.4792048931121826,
                    -1.9056730270385742,
                    -2.138292074203491,
                    -2.332141160964966,
                    -2.39029598236084,
                    -2.429065704345703,
                    -2.099522113800049,
                    -1.3241256475448608,
                    -1.828133463859558,
                    -2.2352166175842285,
                    -2.3515260219573975,
                    -2.3515260219573975,
                    -2.2933714389801025,
                    -2.157676935195923,
                    -1.944442868232727,
                    -1.634284257888794,
                    -1.227200984954834,
                    -0.761962890625,
                    -0.06410592794418335,
                    0.3623623549938202,
                    0.12974336743354797,
                    -0.2191852629184723,
                    -0.16103051602840424,
                    0.12974336743354797,
                    0.401132196187973,
                    0.9051399827003479
                ],
                [
                    -2.1189072132110596,
                    -2.1770617961883545,
                    -2.3515260219573975,
                    -2.370911121368408,
                    -1.5567445755004883,
                    -1.16904616355896,
                    -1.3822803497314453,
                    -1.7312088012695312,
                    -2.080137252807617,
                    -2.3515260219573975,
                    -2.39029598236084,
                    -2.429065704345703,
                    -2.2933714389801025,
                    -0.14164559543132782,
                    0.6919059157371521,
                    0.11035845428705215,
                    -0.25795507431030273,
                    -0.39364948868751526,
                    -0.39364948868751526,
                    -0.316109836101532,
                    -0.14164559543132782,
                    0.24605286121368408,
                    0.556211531162262,
                    0.4980567693710327,
                    0.03281864896416664,
                    -0.39364948868751526,
                    -0.37426456809043884,
                    -0.10287576168775558,
                    0.07158862799406052,
                    0.32359254360198975,
                    0.7500606775283813,
                    1.1377589702606201
                ],
                [
                    -1.6536691188812256,
                    -2.1964468955993652,
                    -2.429065704345703,
                    -2.429065704345703,
                    -2.1964468955993652,
                    -1.8475183248519897,
                    -1.808748483657837,
                    -2.0219826698303223,
                    -2.2933714389801025,
                    -2.39029598236084,
                    -2.39029598236084,
                    -2.370911121368408,
                    -2.429065704345703,
                    -1.110891342163086,
                    1.0989891290664673,
                    1.54484224319458,
                    1.370378017425537,
                    1.3316081762313843,
                    1.350993037223816,
                    1.1959137916564941,
                    0.9051399827003479,
                    0.4786718487739563,
                    -0.04472101479768753,
                    -0.4324193298816681,
                    -0.587498664855957,
                    -0.4130344092845917,
                    -0.06410592794418335,
                    0.07158862799406052,
                    0.12974336743354797,
                    0.5174416899681091,
                    0.8857550621032715,
                    1.1571439504623413
                ],
                [
                    -1.0915064811706543,
                    -1.9250580072402954,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.3515260219573975,
                    -2.1964468955993652,
                    -2.080137252807617,
                    -2.1964468955993652,
                    -2.3515260219573975,
                    -2.39029598236084,
                    -2.39029598236084,
                    -2.3515260219573975,
                    -2.4096808433532715,
                    -1.808748483657837,
                    0.5368266105651855,
                    1.5060724020004272,
                    1.350993037223816,
                    1.2734533548355103,
                    1.0408344268798828,
                    0.5755964517593384,
                    -0.1222606748342514,
                    -0.6650383472442627,
                    -0.8588874936103821,
                    -0.6068835854530334,
                    -0.16103051602840424,
                    -0.005951183382421732,
                    -0.005951183382421732,
                    0.07158862799406052,
                    0.3623623549938202,
                    0.7112908363342285,
                    0.9245249032974243,
                    1.1377589702606201
                ],
                [
                    -0.8201176524162292,
                    -1.5179747343063354,
                    -2.4096808433532715,
                    -2.39029598236084,
                    -2.39029598236084,
                    -2.332141160964966,
                    -2.2933714389801025,
                    -2.3515260219573975,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.370911121368408,
                    -2.4096808433532715,
                    -1.9056730270385742,
                    0.32359254360198975,
                    1.54484224319458,
                    1.40914785861969,
                    0.8469852805137634,
                    -0.08349084854125977,
                    -0.7813478112220764,
                    -0.9945818781852722,
                    -0.7813478112220764,
                    -0.4518042504787445,
                    -0.08349084854125977,
                    0.0522037111222744,
                    -0.06410592794418335,
                    -0.08349084854125977,
                    0.12974336743354797,
                    0.42051711678504944,
                    0.7694455981254578,
                    0.9826796650886536,
                    1.176528811454773
                ],
                [
                    -0.6456534266471863,
                    -1.3822803497314453,
                    -2.312756299972534,
                    -2.370911121368408,
                    -2.39029598236084,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.429065704345703,
                    -2.138292074203491,
                    -0.4518042504787445,
                    0.6143662929534912,
                    -0.16103051602840424,
                    -0.9945818781852722,
                    -1.3435105085372925,
                    -0.9945818781852722,
                    -0.5099589824676514,
                    -0.19980034232139587,
                    -0.06410592794418335,
                    -0.025336099788546562,
                    -0.04472101479768753,
                    -0.005951183382421732,
                    0.0522037111222744,
                    0.20728303492069244,
                    0.43990203738212585,
                    0.7112908363342285,
                    1.00206458568573,
                    1.2152986526489258
                ],
                [
                    -0.7425779700279236,
                    -1.5955144166946411,
                    -2.0607523918151855,
                    -2.215831756591797,
                    -2.273986577987671,
                    -2.332141160964966,
                    -2.39029598236084,
                    -2.39029598236084,
                    -2.370911121368408,
                    -2.370911121368408,
                    -2.370911121368408,
                    -2.39029598236084,
                    -2.429065704345703,
                    -2.3515260219573975,
                    -1.6148992776870728,
                    -1.0527366399765015,
                    -1.401665210723877,
                    -1.3241256475448608,
                    -0.8782724142074585,
                    -0.2385701686143875,
                    0.12974336743354797,
                    0.1685132086277008,
                    -0.04472101479768753,
                    -0.18041542172431946,
                    -0.10287576168775558,
                    0.11035845428705215,
                    0.2654377818107605,
                    0.3429774343967438,
                    0.5949813723564148,
                    0.8469852805137634,
                    1.0989891290664673,
                    1.2152986526489258
                ],
                [
                    -0.8395025730133057,
                    -1.5373597145080566,
                    -1.7312088012695312,
                    -1.828133463859558,
                    -1.9056730270385742,
                    -2.0025975704193115,
                    -2.099522113800049,
                    -2.1189072132110596,
                    -2.080137252807617,
                    -2.0607523918151855,
                    -2.041367530822754,
                    -2.0607523918151855,
                    -2.0607523918151855,
                    -1.9832127094268799,
                    -1.7118239402770996,
                    -1.1884310245513916,
                    -0.7425779700279236,
                    -0.4130344092845917,
                    -0.18041542172431946,
                    0.0522037111222744,
                    0.2654377818107605,
                    0.11035845428705215,
                    -0.16103051602840424,
                    -0.19980034232139587,
                    -0.04472101479768753,
                    0.11035845428705215,
                    0.2654377818107605,
                    0.43990203738212585,
                    0.6531360745429993,
                    0.9439098238945007,
                    1.1571439504623413,
                    1.1959137916564941
                ],
                [
                    -0.7813478112220764,
                    -1.227200984954834,
                    -1.3047406673431396,
                    -1.3628954887390137,
                    -1.4404350519180298,
                    -1.5179747343063354,
                    -1.5373597145080566,
                    -1.4985898733139038,
                    -1.4792048931121826,
                    -1.4404350519180298,
                    -1.401665210723877,
                    -1.3628954887390137,
                    -1.285355806350708,
                    -1.110891342163086,
                    -0.8588874936103821,
                    -0.4130344092845917,
                    -0.18041542172431946,
                    0.03281864896416664,
                    0.1491282880306244,
                    0.03281864896416664,
                    0.03281864896416664,
                    -0.14164559543132782,
                    -0.2191852629184723,
                    -0.06410592794418335,
                    0.07158862799406052,
                    0.20728303492069244,
                    0.30420762300491333,
                    0.4592869281768799,
                    0.6337511539459229,
                    0.827600359916687,
                    1.0602192878723145,
                    1.176528811454773
                ]
            ],
            [
                [
                    2.203453540802002,
                    2.124786138534546,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1641199588775635,
                    2.1641199588775635,
                    2.1641199588775635,
                    2.1641199588775635,
                    2.1641199588775635,
                    2.1444530487060547,
                    2.124786138534546,
                    2.124786138534546,
                    2.1641199588775635,
                    2.1641199588775635,
                    2.1444530487060547,
                    2.124786138534546,
                    2.1444530487060547,
                    2.1641199588775635,
                    2.1641199588775635,
                    2.1641199588775635,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1641199588775635,
                    2.1641199588775635,
                    2.1444530487060547
                ],
                [
                    2.262454032897949,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.203453540802002,
                    2.1837868690490723,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.203453540802002
                ],
                [
                    2.2427873611450195,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.203453540802002,
                    2.1837868690490723,
                    2.1641199588775635,
                    2.1837868690490723,
                    2.203453540802002,
                    2.203453540802002,
                    2.105119466781616,
                    2.203453540802002,
                    2.1641199588775635,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.203453540802002,
                    2.203453540802002,
                    2.1837868690490723
                ],
                [
                    2.262454032897949,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.203453540802002,
                    2.203453540802002,
                    2.1641199588775635,
                    2.1444530487060547,
                    2.105119466781616,
                    2.02645206451416,
                    1.3577793836593628,
                    1.82978355884552,
                    1.7117825746536255,
                    2.0657856464385986,
                    2.203453540802002,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002
                ],
                [
                    2.2427873611450195,
                    2.1837868690490723,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.203453540802002,
                    2.203453540802002,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.203453540802002,
                    2.203453540802002,
                    2.262454032897949,
                    2.2427873611450195,
                    2.0067851543426514,
                    1.7117825746536255,
                    0.9644424915313721,
                    1.6134482622146606,
                    1.869117259979248,
                    2.0854525566101074,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107
                ],
                [
                    2.282120943069458,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.2231204509735107,
                    2.203453540802002,
                    2.1837868690490723,
                    2.203453540802002,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.203453540802002,
                    2.1641199588775635,
                    2.2427873611450195,
                    2.124786138534546,
                    1.82978355884552,
                    1.6134482622146606,
                    1.4757803678512573,
                    1.2791119813919067,
                    1.1021103858947754,
                    1.4364467859268188,
                    1.8101167678833008,
                    2.0657856464385986,
                    2.203453540802002,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2427873611450195,
                    2.2427873611450195,
                    2.2427873611450195
                ],
                [
                    2.0854525566101074,
                    2.046118974685669,
                    2.105119466781616,
                    2.0657856464385986,
                    2.1444530487060547,
                    2.2231204509735107,
                    2.2427873611450195,
                    2.2427873611450195,
                    2.203453540802002,
                    2.203453540802002,
                    2.2231204509735107,
                    2.2427873611450195,
                    2.0854525566101074,
                    2.0657856464385986,
                    2.2427873611450195,
                    2.02645206451416,
                    1.456113576889038,
                    1.1217772960662842,
                    1.1217772960662842,
                    1.0431098937988281,
                    0.7874408960342407,
                    0.7087735533714294,
                    0.90544193983078,
                    1.6331151723861694,
                    2.262454032897949,
                    2.2427873611450195,
                    2.2231204509735107,
                    2.203453540802002,
                    2.2231204509735107,
                    2.262454032897949,
                    2.2427873611450195,
                    2.2427873611450195
                ],
                [
                    1.908450961112976,
                    2.105119466781616,
                    2.1837868690490723,
                    2.1444530487060547,
                    2.1837868690490723,
                    2.2427873611450195,
                    2.262454032897949,
                    2.2427873611450195,
                    2.2427873611450195,
                    2.2427873611450195,
                    2.2231204509735107,
                    2.262454032897949,
                    1.5937814712524414,
                    1.947784662246704,
                    2.2231204509735107,
                    1.869117259979248,
                    1.5937814712524414,
                    1.5347809791564941,
                    1.5347809791564941,
                    1.338112473487854,
                    1.1611108779907227,
                    1.0037761926651,
                    1.0431098937988281,
                    1.4954472780227661,
                    2.282120943069458,
                    2.282120943069458,
                    2.262454032897949,
                    2.262454032897949,
                    2.282120943069458,
                    2.282120943069458,
                    2.282120943069458,
                    2.262454032897949
                ],
                [
                    2.1837868690490723,
                    2.2231204509735107,
                    2.262454032897949,
                    2.282120943069458,
                    2.301787853240967,
                    2.262454032897949,
                    2.2427873611450195,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2427873611450195,
                    2.282120943069458,
                    1.4757803678512573,
                    1.9281178712844849,
                    2.1837868690490723,
                    2.124786138534546,
                    1.7707830667495728,
                    1.82978355884552,
                    2.0657856464385986,
                    1.869117259979248,
                    1.9281178712844849,
                    1.9871183633804321,
                    2.1641199588775635,
                    2.203453540802002,
                    2.301787853240967,
                    2.262454032897949,
                    2.282120943069458,
                    2.301787853240967,
                    2.301787853240967,
                    2.301787853240967,
                    2.301787853240967,
                    2.262454032897949
                ],
                [
                    0.33510351181030273,
                    0.2957698404788971,
                    0.37443721294403076,
                    0.6301061511039734,
                    1.2791119813919067,
                    2.1837868690490723,
                    2.2231204509735107,
                    2.1837868690490723,
                    2.1641199588775635,
                    2.203453540802002,
                    2.2427873611450195,
                    2.2427873611450195,
                    1.82978355884552,
                    2.0657856464385986,
                    2.1837868690490723,
                    2.2427873611450195,
                    2.105119466781616,
                    2.105119466781616,
                    2.2231204509735107,
                    2.1444530487060547,
                    2.2427873611450195,
                    2.1641199588775635,
                    1.8887841701507568,
                    1.5937814712524414,
                    1.298778772354126,
                    1.1021103858947754,
                    1.1217772960662842,
                    1.4954472780227661,
                    2.203453540802002,
                    2.3214547634124756,
                    2.301787853240967,
                    2.301787853240967
                ],
                [
                    0.13843508064746857,
                    -0.03856665641069412,
                    0.040100716054439545,
                    0.07943440228700638,
                    0.7087735533714294,
                    2.0854525566101074,
                    2.0657856464385986,
                    2.02645206451416,
                    2.1444530487060547,
                    2.1837868690490723,
                    2.2231204509735107,
                    2.2427873611450195,
                    2.1837868690490723,
                    2.203453540802002,
                    2.2427873611450195,
                    2.203453540802002,
                    2.2231204509735107,
                    2.2427873611450195,
                    2.2427873611450195,
                    2.1444530487060547,
                    1.6331151723861694,
                    1.2004445791244507,
                    0.8267745971679688,
                    0.6497730016708374,
                    0.5121051073074341,
                    0.33510351181030273,
                    0.19743561744689941,
                    0.7677740454673767,
                    2.0657856464385986,
                    2.3214547634124756,
                    2.301787853240967,
                    2.301787853240967
                ],
                [
                    1.7511162757873535,
                    1.5544477701187134,
                    1.7314493656158447,
                    1.7314493656158447,
                    1.8494504690170288,
                    2.046118974685669,
                    1.7707830667495728,
                    1.6921156644821167,
                    1.7707830667495728,
                    1.947784662246704,
                    2.02645206451416,
                    1.9281178712844849,
                    1.8887841701507568,
                    1.9281178712844849,
                    2.0067851543426514,
                    2.0854525566101074,
                    2.1837868690490723,
                    2.2231204509735107,
                    2.2427873611450195,
                    2.124786138534546,
                    1.5937814712524414,
                    1.4757803678512573,
                    1.5151140689849854,
                    1.3971130847930908,
                    1.456113576889038,
                    1.0824435949325562,
                    0.5514388084411621,
                    1.41677987575531,
                    2.105119466781616,
                    2.301787853240967,
                    2.3214547634124756,
                    2.301787853240967
                ],
                [
                    1.6527819633483887,
                    1.5544477701187134,
                    1.7314493656158447,
                    1.8494504690170288,
                    2.0067851543426514,
                    1.8887841701507568,
                    1.6724488735198975,
                    1.0037761926651,
                    1.1217772960662842,
                    1.7707830667495728,
                    1.2004445791244507,
                    -0.21556824445724487,
                    -0.17623455822467804,
                    -0.03856665641069412,
                    0.11876823753118515,
                    0.2957698404788971,
                    0.5711056590080261,
                    0.8661082983016968,
                    1.82978355884552,
                    2.2231204509735107,
                    2.1444530487060547,
                    2.1641199588775635,
                    2.1837868690490723,
                    2.02645206451416,
                    2.0657856464385986,
                    1.8887841701507568,
                    1.5741146802902222,
                    2.105119466781616,
                    2.046118974685669,
                    2.105119466781616,
                    2.282120943069458,
                    2.3214547634124756
                ],
                [
                    0.13843508064746857,
                    0.040100716054439545,
                    0.040100716054439545,
                    0.15810193121433258,
                    0.4334377348423004,
                    1.1611108779907227,
                    1.5347809791564941,
                    1.4954472780227661,
                    1.8887841701507568,
                    2.105119466781616,
                    0.9644424915313721,
                    -1.0219087600708008,
                    -1.0415756702423096,
                    -0.9825751185417175,
                    -0.9825751185417175,
                    -0.7662398815155029,
                    -0.17623455822467804,
                    0.8857751488685608,
                    2.046118974685669,
                    2.282120943069458,
                    2.2427873611450195,
                    2.124786138534546,
                    2.0657856464385986,
                    1.7314493656158447,
                    1.6724488735198975,
                    1.869117259979248,
                    1.8887841701507568,
                    1.6331151723861694,
                    1.2397782802581787,
                    1.456113576889038,
                    1.9281178712844849,
                    2.124786138534546
                ],
                [
                    -0.8252403736114502,
                    -0.7269061803817749,
                    -0.8645740747451782,
                    -0.7465730309486389,
                    0.35477036237716675,
                    0.6301061511039734,
                    0.6694398522377014,
                    1.5151140689849854,
                    2.0657856464385986,
                    1.9674514532089233,
                    1.1217772960662842,
                    -0.03856665641069412,
                    -0.21556824445724487,
                    -0.11723402887582779,
                    0.5514388084411621,
                    1.3577793836593628,
                    1.7511162757873535,
                    1.947784662246704,
                    1.8887841701507568,
                    1.5741146802902222,
                    1.2397782802581787,
                    0.8464414477348328,
                    0.6104393005371094,
                    0.2957698404788971,
                    0.19743561744689941,
                    0.3154366612434387,
                    0.45310458540916443,
                    0.37443721294403076,
                    0.2761029899120331,
                    0.5907724499702454,
                    1.456113576889038,
                    1.7511162757873535
                ],
                [
                    -1.3759119510650635,
                    -1.0415756702423096,
                    -0.4909040629863739,
                    0.4137708842754364,
                    0.5514388084411621,
                    -0.31390246748924255,
                    -0.15656772255897522,
                    0.6891067028045654,
                    1.1217772960662842,
                    1.3971130847930908,
                    1.3971130847930908,
                    1.377446174621582,
                    1.3971130847930908,
                    1.6921156644821167,
                    2.0657856464385986,
                    1.7117825746536255,
                    1.1414440870285034,
                    0.8267745971679688,
                    0.5317719578742981,
                    0.25643613934516907,
                    0.040100716054439545,
                    -0.2352350950241089,
                    -0.33356931805610657,
                    -0.2352350950241089,
                    -0.09756718575954437,
                    -0.03856665641069412,
                    0.23676930367946625,
                    0.5514388084411621,
                    0.8071077466011047,
                    1.0037761926651,
                    1.6331151723861694,
                    1.5741146802902222
                ],
                [
                    -2.1232521533966064,
                    -1.8479163646697998,
                    0.33510351181030273,
                    1.82978355884552,
                    0.5317719578742981,
                    0.0007670287159271538,
                    0.19743561744689941,
                    0.7677740454673767,
                    1.1414440870285034,
                    1.6921156644821167,
                    1.9871183633804321,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.3214547634124756,
                    2.262454032897949,
                    1.298778772354126,
                    0.7087735533714294,
                    0.6104393005371094,
                    0.6891067028045654,
                    0.7874408960342407,
                    0.9447756409645081,
                    0.8267745971679688,
                    0.8267745971679688,
                    0.9447756409645081,
                    1.0037761926651,
                    1.0627766847610474,
                    1.3184456825256348,
                    1.5937814712524414,
                    1.6527819633483887,
                    1.4364467859268188,
                    1.1807777881622314,
                    1.0234429836273193
                ],
                [
                    -2.319920539855957,
                    -1.1989104747772217,
                    1.6527819633483887,
                    2.1444530487060547,
                    1.6134482622146606,
                    1.6527819633483887,
                    1.7511162757873535,
                    1.9871183633804321,
                    2.105119466781616,
                    2.2231204509735107,
                    2.262454032897949,
                    2.262454032897949,
                    1.9281178712844849,
                    2.262454032897949,
                    2.262454032897949,
                    2.0657856464385986,
                    1.8494504690170288,
                    1.5151140689849854,
                    1.82978355884552,
                    1.7707830667495728,
                    1.7511162757873535,
                    1.790449857711792,
                    1.7511162757873535,
                    1.5937814712524414,
                    1.377446174621582,
                    1.338112473487854,
                    1.1414440870285034,
                    0.8267745971679688,
                    0.6497730016708374,
                    0.45310458540916443,
                    0.3941040337085724,
                    0.6104393005371094
                ],
                [
                    -1.5332467555999756,
                    0.6301061511039734,
                    1.5937814712524414,
                    1.4364467859268188,
                    1.456113576889038,
                    1.7314493656158447,
                    1.7314493656158447,
                    1.6724488735198975,
                    1.6331151723861694,
                    1.5741146802902222,
                    1.6527819633483887,
                    1.6527819633483887,
                    1.377446174621582,
                    1.4757803678512573,
                    1.0431098937988281,
                    0.90544193983078,
                    0.7481071949005127,
                    0.9447756409645081,
                    0.7874408960342407,
                    0.19743561744689941,
                    0.2761029899120331,
                    0.6694398522377014,
                    0.5317719578742981,
                    0.23676930367946625,
                    -0.15656772255897522,
                    -0.21556824445724487,
                    -0.17623455822467804,
                    -0.1369008719921112,
                    0.040100716054439545,
                    0.19743561744689941,
                    0.35477036237716675,
                    0.37443721294403076
                ],
                [
                    0.23676930367946625,
                    1.1021103858947754,
                    0.7284404039382935,
                    0.6104393005371094,
                    0.5711056590080261,
                    0.5711056590080261,
                    0.5317719578742981,
                    0.5317719578742981,
                    0.5317719578742981,
                    0.47277140617370605,
                    0.47277140617370605,
                    0.5121051073074341,
                    0.5121051073074341,
                    0.4334377348423004,
                    0.05976755917072296,
                    -0.018899815157055855,
                    -0.05823349952697754,
                    0.21710245311260223,
                    0.09910139441490173,
                    -0.2745687663555145,
                    -0.21556824445724487,
                    -0.11723402887582779,
                    -0.21556824445724487,
                    -0.3925698399543762,
                    -0.5105708837509155,
                    -0.3925698399543762,
                    -0.2352350950241089,
                    -0.11723402887582779,
                    -0.03856665641069412,
                    0.040100716054439545,
                    0.19743561744689941,
                    0.4137708842754364
                ],
                [
                    -0.7072393298149109,
                    -0.6482387781143188,
                    -0.6482387781143188,
                    -0.5892382860183716,
                    -0.4909040629863739,
                    -0.41223669052124023,
                    -0.41223669052124023,
                    -0.3532361388206482,
                    -0.2352350950241089,
                    -0.07790034264326096,
                    0.02043387107551098,
                    0.15810193121433258,
                    0.2761029899120331,
                    0.25643613934516907,
                    0.1777687668800354,
                    0.19743561744689941,
                    0.25643613934516907,
                    0.19743561744689941,
                    0.07943440228700638,
                    -0.07790034264326096,
                    -0.2745687663555145,
                    -0.43190351128578186,
                    -0.5105708837509155,
                    -0.6089051365852356,
                    -0.5695714354515076,
                    -0.4515703618526459,
                    -0.4515703618526459,
                    -0.4909040629863739,
                    -0.3729029893875122,
                    -0.07790034264326096,
                    0.23676930367946625,
                    0.5121051073074341
                ],
                [
                    -1.9265837669372559,
                    -2.2019195556640625,
                    -2.1035852432250977,
                    -1.906916856765747,
                    -1.906916856765747,
                    -1.9265837669372559,
                    -1.9265837669372559,
                    -1.8282495737075806,
                    -1.710248351097107,
                    -1.5725804567337036,
                    -1.4152456521987915,
                    -1.257910966873169,
                    -1.0612424612045288,
                    -0.9432414174079895,
                    -0.9039077758789062,
                    -0.8645740747451782,
                    -0.7072393298149109,
                    -0.6875724792480469,
                    -0.8252403736114502,
                    -1.0022419691085815,
                    -1.1005761623382568,
                    -1.0809093713760376,
                    -1.0612424612045288,
                    -1.0612424612045288,
                    -1.0219087600708008,
                    -0.8842409253120422,
                    -0.6679056286811829,
                    -0.4515703618526459,
                    -0.19590140879154205,
                    0.02043387107551098,
                    0.25643613934516907,
                    0.45310458540916443
                ],
                [
                    -1.5135798454284668,
                    -2.1035852432250977,
                    -2.162585973739624,
                    -1.5529135465621948,
                    -1.5332467555999756,
                    -1.9265837669372559,
                    -2.2019195556640625,
                    -2.2609200477600098,
                    -2.339587450027466,
                    -2.3789210319519043,
                    -2.3789210319519043,
                    -2.339587450027466,
                    -2.162585973739624,
                    -2.064251661300659,
                    -2.0445847511291504,
                    -1.9659174680709839,
                    -1.8479163646697998,
                    -1.670914649963379,
                    -1.7692488431930542,
                    -1.8085826635360718,
                    -1.670914649963379,
                    -1.5529135465621948,
                    -1.4349125623703003,
                    -1.2775777578353882,
                    -1.0415756702423096,
                    -0.6482387781143188,
                    -0.15656772255897522,
                    0.0007670287159271538,
                    -0.15656772255897522,
                    0.0007670287159271538,
                    0.3154366612434387,
                    0.7284404039382935
                ],
                [
                    -1.6119141578674316,
                    -1.8872500658035278,
                    -2.0445847511291504,
                    -1.6119141578674316,
                    -0.8252403736114502,
                    -1.0415756702423096,
                    -1.4349125623703003,
                    -1.8085826635360718,
                    -2.1232521533966064,
                    -2.319920539855957,
                    -2.3789210319519043,
                    -2.418254852294922,
                    -2.083918571472168,
                    -1.1595767736434937,
                    -1.4349125623703003,
                    -1.710248351097107,
                    -1.8282495737075806,
                    -1.8282495737075806,
                    -1.8282495737075806,
                    -1.7299151420593262,
                    -1.5725804567337036,
                    -1.3365782499313354,
                    -1.0219087600708008,
                    -0.5105708837509155,
                    0.02043387107551098,
                    0.15810193121433258,
                    -0.05823349952697754,
                    -0.3532361388206482,
                    -0.2352350950241089,
                    0.21710245311260223,
                    0.5711056590080261,
                    1.1021103858947754
                ],
                [
                    -2.1232521533966064,
                    -2.2215864658355713,
                    -2.2215864658355713,
                    -2.1822526454925537,
                    -1.5529135465621948,
                    -1.3955788612365723,
                    -1.5725804567337036,
                    -1.7692488431930542,
                    -2.064251661300659,
                    -2.339587450027466,
                    -2.3789210319519043,
                    -2.398587942123413,
                    -2.2609200477600098,
                    -0.11723402887582779,
                    0.6891067028045654,
                    0.09910139441490173,
                    -0.21556824445724487,
                    -0.3532361388206482,
                    -0.3925698399543762,
                    -0.3532361388206482,
                    -0.31390246748924255,
                    -0.15656772255897522,
                    0.05976755917072296,
                    0.05976755917072296,
                    -0.33356931805610657,
                    -0.7269061803817749,
                    -0.5695714354515076,
                    -0.1369008719921112,
                    0.13843508064746857,
                    0.47277140617370605,
                    0.9644424915313721,
                    1.3971130847930908
                ],
                [
                    -1.6315809488296509,
                    -2.2215864658355713,
                    -2.3592543601989746,
                    -2.339587450027466,
                    -2.3002538681030273,
                    -2.1822526454925537,
                    -2.1822526454925537,
                    -2.2215864658355713,
                    -2.3002538681030273,
                    -2.398587942123413,
                    -2.398587942123413,
                    -2.3789210319519043,
                    -2.418254852294922,
                    -1.2775777578353882,
                    0.09910139441490173,
                    0.13843508064746857,
                    0.07943440228700638,
                    0.0007670287159271538,
                    -0.07790034264326096,
                    -0.19590140879154205,
                    -0.2549019455909729,
                    -0.5302377343177795,
                    -0.9432414174079895,
                    -1.1202430725097656,
                    -1.0219087600708008,
                    -0.5892382860183716,
                    -0.09756718575954437,
                    0.1777687668800354,
                    0.35477036237716675,
                    0.7677740454673767,
                    1.1611108779907227,
                    1.456113576889038
                ],
                [
                    -0.9039077758789062,
                    -1.8479163646697998,
                    -2.398587942123413,
                    -2.398587942123413,
                    -2.398587942123413,
                    -2.3789210319519043,
                    -2.3592543601989746,
                    -2.3789210319519043,
                    -2.398587942123413,
                    -2.418254852294922,
                    -2.418254852294922,
                    -2.418254852294922,
                    -2.398587942123413,
                    -2.1822526454925537,
                    -1.5332467555999756,
                    -1.4939130544662476,
                    -1.5135798454284668,
                    -1.4742462635040283,
                    -1.4349125623703003,
                    -1.4545793533325195,
                    -1.5922472476959229,
                    -1.670914649963379,
                    -1.4742462635040283,
                    -0.9039077758789062,
                    -0.2549019455909729,
                    0.05976755917072296,
                    0.09910139441490173,
                    0.23676930367946625,
                    0.5907724499702454,
                    1.0431098937988281,
                    1.2594451904296875,
                    1.4757803678512573
                ],
                [
                    -0.5695714354515076,
                    -1.3955788612365723,
                    -2.398587942123413,
                    -2.398587942123413,
                    -2.418254852294922,
                    -2.398587942123413,
                    -2.398587942123413,
                    -2.418254852294922,
                    -2.418254852294922,
                    -2.418254852294922,
                    -2.418254852294922,
                    -2.418254852294922,
                    -2.3789210319519043,
                    -2.3592543601989746,
                    -1.9265837669372559,
                    -1.788915753364563,
                    -1.9265837669372559,
                    -1.9265837669372559,
                    -1.9265837669372559,
                    -1.8479163646697998,
                    -1.6119141578674316,
                    -1.1202430725097656,
                    -0.6089051365852356,
                    -0.19590140879154205,
                    0.02043387107551098,
                    0.05976755917072296,
                    0.07943440228700638,
                    0.3154366612434387,
                    0.6694398522377014,
                    1.1021103858947754,
                    1.338112473487854,
                    1.5347809791564941
                ],
                [
                    -0.41223669052124023,
                    -1.2382441759109497,
                    -2.2805869579315186,
                    -2.3789210319519043,
                    -2.3789210319519043,
                    -2.3592543601989746,
                    -2.3592543601989746,
                    -2.3789210319519043,
                    -2.398587942123413,
                    -2.418254852294922,
                    -2.418254852294922,
                    -2.398587942123413,
                    -2.3592543601989746,
                    -2.398587942123413,
                    -2.0445847511291504,
                    -1.8085826635360718,
                    -2.083918571472168,
                    -2.162585973739624,
                    -1.8872500658035278,
                    -1.2775777578353882,
                    -0.6482387781143188,
                    -0.15656772255897522,
                    0.05976755917072296,
                    0.02043387107551098,
                    0.0007670287159271538,
                    0.13843508064746857,
                    0.23676930367946625,
                    0.4334377348423004,
                    0.7087735533714294,
                    1.0431098937988281,
                    1.3577793836593628,
                    1.5544477701187134
                ],
                [
                    -0.4712372124195099,
                    -1.4152456521987915,
                    -1.9659174680709839,
                    -2.1822526454925537,
                    -2.2215864658355713,
                    -2.2019195556640625,
                    -2.2215864658355713,
                    -2.2805869579315186,
                    -2.339587450027466,
                    -2.339587450027466,
                    -2.339587450027466,
                    -2.3592543601989746,
                    -2.3002538681030273,
                    -2.319920539855957,
                    -2.162585973739624,
                    -2.005251169204712,
                    -1.8872500658035278,
                    -1.4349125623703003,
                    -0.9039077758789062,
                    -0.4909040629863739,
                    -0.19590140879154205,
                    0.05976755917072296,
                    0.05976755917072296,
                    0.040100716054439545,
                    0.09910139441490173,
                    0.2957698404788971,
                    0.49243825674057007,
                    0.6104393005371094,
                    0.8857751488685608,
                    1.2004445791244507,
                    1.456113576889038,
                    1.5544477701187134
                ],
                [
                    -0.5302377343177795,
                    -1.297244668006897,
                    -1.5529135465621948,
                    -1.7299151420593262,
                    -1.8282495737075806,
                    -1.8675832748413086,
                    -1.906916856765747,
                    -1.9659174680709839,
                    -2.005251169204712,
                    -2.005251169204712,
                    -1.9855842590332031,
                    -1.9659174680709839,
                    -1.8872500658035278,
                    -1.8085826635360718,
                    -1.6315809488296509,
                    -1.3365782499313354,
                    -1.0415756702423096,
                    -0.6875724792480469,
                    -0.41223669052124023,
                    -0.21556824445724487,
                    -0.03856665641069412,
                    -0.018899815157055855,
                    -0.018899815157055855,
                    0.07943440228700638,
                    0.19743561744689941,
                    0.3154366612434387,
                    0.5121051073074341,
                    0.7284404039382935,
                    0.9644424915313721,
                    1.298778772354126,
                    1.5151140689849854,
                    1.5544477701187134
                ],
                [
                    -0.43190351128578186,
                    -0.9432414174079895,
                    -1.1005761623382568,
                    -1.218577265739441,
                    -1.3169114589691162,
                    -1.3759119510650635,
                    -1.3759119510650635,
                    -1.3365782499313354,
                    -1.3365782499313354,
                    -1.3169114589691162,
                    -1.2775777578353882,
                    -1.1989104747772217,
                    -1.1005761623382568,
                    -1.0219087600708008,
                    -0.7662398815155029,
                    -0.5302377343177795,
                    -0.3925698399543762,
                    -0.2745687663555145,
                    -0.1369008719921112,
                    -0.03856665641069412,
                    0.07943440228700638,
                    0.02043387107551098,
                    0.040100716054439545,
                    0.15810193121433258,
                    0.25643613934516907,
                    0.4334377348423004,
                    0.5711056590080261,
                    0.7677740454673767,
                    0.9447756409645081,
                    1.1807777881622314,
                    1.41677987575531,
                    1.5151140689849854
                ]
            ],
            [
                [
                    2.363525390625,
                    2.2854843139648438,
                    2.304994583129883,
                    2.304994583129883,
                    2.304994583129883,
                    2.304994583129883,
                    2.304994583129883,
                    2.304994583129883,
                    2.304994583129883,
                    2.304994583129883,
                    2.324504852294922,
                    2.324504852294922,
                    2.324504852294922,
                    2.324504852294922,
                    2.324504852294922,
                    2.324504852294922,
                    2.324504852294922,
                    2.324504852294922,
                    2.324504852294922,
                    2.304994583129883,
                    2.344015121459961,
                    2.344015121459961,
                    2.304994583129883,
                    2.2659740447998047,
                    2.2854843139648438,
                    2.324504852294922,
                    2.304994583129883,
                    2.304994583129883,
                    2.304994583129883,
                    2.324504852294922,
                    2.324504852294922,
                    2.304994583129883
                ],
                [
                    2.4220564365386963,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.383035659790039,
                    2.383035659790039,
                    2.383035659790039,
                    2.383035659790039,
                    2.383035659790039,
                    2.383035659790039,
                    2.324504852294922,
                    2.324504852294922,
                    2.344015121459961,
                    2.344015121459961,
                    2.402545928955078,
                    2.4220564365386963,
                    2.402545928955078,
                    2.363525390625,
                    2.344015121459961,
                    2.383035659790039,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.383035659790039,
                    2.383035659790039,
                    2.363525390625
                ],
                [
                    2.402545928955078,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.363525390625,
                    2.344015121459961,
                    2.2854843139648438,
                    2.2854843139648438,
                    2.344015121459961,
                    2.383035659790039,
                    2.324504852294922,
                    2.4220564365386963,
                    2.363525390625,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.363525390625,
                    2.363525390625,
                    2.344015121459961
                ],
                [
                    2.4220564365386963,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.363525390625,
                    2.344015121459961,
                    2.2659740447998047,
                    2.2854843139648438,
                    2.304994583129883,
                    2.2854843139648438,
                    1.6221344470977783,
                    2.051360845565796,
                    1.934299111366272,
                    2.2659740447998047,
                    2.363525390625,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625
                ],
                [
                    2.402545928955078,
                    2.344015121459961,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.344015121459961,
                    2.344015121459961,
                    2.363525390625,
                    2.363525390625,
                    2.344015121459961,
                    2.344015121459961,
                    2.363525390625,
                    2.363525390625,
                    2.383035659790039,
                    2.402545928955078,
                    2.2659740447998047,
                    2.051360845565796,
                    1.2709492444992065,
                    1.836747646331787,
                    2.090381383895874,
                    2.304994583129883,
                    2.402545928955078,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.383035659790039,
                    2.383035659790039,
                    2.383035659790039,
                    2.383035659790039
                ],
                [
                    2.4220564365386963,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.344015121459961,
                    2.363525390625,
                    2.383035659790039,
                    2.383035659790039,
                    2.383035659790039,
                    2.344015121459961,
                    2.402545928955078,
                    2.304994583129883,
                    2.031850576400757,
                    1.8757681846618652,
                    1.817237377166748,
                    1.6806652545928955,
                    1.4660521745681763,
                    1.7196859121322632,
                    2.070871114730835,
                    2.304994583129883,
                    2.402545928955078,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.383035659790039,
                    2.402545928955078,
                    2.402545928955078,
                    2.402545928955078
                ],
                [
                    2.2464637756347656,
                    2.2269535064697266,
                    2.2854843139648438,
                    2.2659740447998047,
                    2.324504852294922,
                    2.383035659790039,
                    2.363525390625,
                    2.363525390625,
                    2.383035659790039,
                    2.383035659790039,
                    2.402545928955078,
                    2.4220564365386963,
                    2.2659740447998047,
                    2.2464637756347656,
                    2.4220564365386963,
                    2.2269535064697266,
                    1.7587064504623413,
                    1.4855624437332153,
                    1.5050727128982544,
                    1.4855624437332153,
                    1.2319285869598389,
                    1.114866852760315,
                    1.2319285869598389,
                    1.8952784538269043,
                    2.4415667057037354,
                    2.344015121459961,
                    2.324504852294922,
                    2.363525390625,
                    2.383035659790039,
                    2.402545928955078,
                    2.402545928955078,
                    2.4220564365386963
                ],
                [
                    2.109891653060913,
                    2.324504852294922,
                    2.4220564365386963,
                    2.344015121459961,
                    2.344015121459961,
                    2.383035659790039,
                    2.363525390625,
                    2.383035659790039,
                    2.4220564365386963,
                    2.4220564365386963,
                    2.402545928955078,
                    2.4415667057037354,
                    1.7391961812973022,
                    2.090381383895874,
                    2.363525390625,
                    2.031850576400757,
                    1.8757681846618652,
                    1.8757681846618652,
                    1.8952784538269043,
                    1.7391961812973022,
                    1.6026241779327393,
                    1.4270315170288086,
                    1.3880109786987305,
                    1.7587064504623413,
                    2.4610769748687744,
                    2.4220564365386963,
                    2.402545928955078,
                    2.4220564365386963,
                    2.4220564365386963,
                    2.4220564365386963,
                    2.4220564365386963,
                    2.4220564365386963
                ],
                [
                    2.4805872440338135,
                    2.5196077823638916,
                    2.578138589859009,
                    2.5196077823638916,
                    2.4610769748687744,
                    2.402545928955078,
                    2.363525390625,
                    2.363525390625,
                    2.402545928955078,
                    2.402545928955078,
                    2.402545928955078,
                    2.4415667057037354,
                    1.6026241779327393,
                    2.031850576400757,
                    2.2854843139648438,
                    2.2464637756347656,
                    2.0123403072357178,
                    2.109891653060913,
                    2.363525390625,
                    2.2074432373046875,
                    2.344015121459961,
                    2.363525390625,
                    2.4610769748687744,
                    2.4805872440338135,
                    2.5196077823638916,
                    2.4610769748687744,
                    2.4610769748687744,
                    2.4610769748687744,
                    2.4415667057037354,
                    2.4415667057037354,
                    2.4415667057037354,
                    2.4220564365386963
                ],
                [
                    0.6856405138969421,
                    0.6661302447319031,
                    0.7636816501617432,
                    0.91976398229599,
                    1.5050727128982544,
                    2.324504852294922,
                    2.324504852294922,
                    2.304994583129883,
                    2.344015121459961,
                    2.363525390625,
                    2.383035659790039,
                    2.363525390625,
                    1.953809380531311,
                    2.1879327297210693,
                    2.304994583129883,
                    2.383035659790039,
                    2.304994583129883,
                    2.363525390625,
                    2.4805872440338135,
                    2.4415667057037354,
                    2.597648859024048,
                    2.5196077823638916,
                    2.1879327297210693,
                    1.8952784538269043,
                    1.5831139087677002,
                    1.4075212478637695,
                    1.3880109786987305,
                    1.7001756429672241,
                    2.363525390625,
                    2.4415667057037354,
                    2.4415667057037354,
                    2.4415667057037354
                ],
                [
                    0.5295581817626953,
                    0.3734758794307709,
                    0.4515170454978943,
                    0.4515170454978943,
                    0.9978051781654358,
                    2.2854843139648438,
                    2.1684224605560303,
                    2.148912191390991,
                    2.324504852294922,
                    2.344015121459961,
                    2.344015121459961,
                    2.363525390625,
                    2.363525390625,
                    2.383035659790039,
                    2.4220564365386963,
                    2.383035659790039,
                    2.4220564365386963,
                    2.4610769748687744,
                    2.4805872440338135,
                    2.4220564365386963,
                    1.934299111366272,
                    1.5050727128982544,
                    1.1343772411346436,
                    0.9587845802307129,
                    0.8807434439659119,
                    0.7636816501617432,
                    0.5685787796974182,
                    1.01731538772583,
                    2.2464637756347656,
                    2.4415667057037354,
                    2.4220564365386963,
                    2.4415667057037354
                ],
                [
                    2.148912191390991,
                    1.97331964969635,
                    2.148912191390991,
                    2.129401922225952,
                    2.2074432373046875,
                    2.2854843139648438,
                    1.8952784538269043,
                    1.7977269887924194,
                    1.953809380531311,
                    2.109891653060913,
                    2.1684224605560303,
                    2.051360845565796,
                    2.129401922225952,
                    2.1684224605560303,
                    2.2659740447998047,
                    2.324504852294922,
                    2.402545928955078,
                    2.4415667057037354,
                    2.4805872440338135,
                    2.402545928955078,
                    1.836747646331787,
                    1.7391961812973022,
                    1.817237377166748,
                    1.7196859121322632,
                    1.8952784538269043,
                    1.6026241779327393,
                    0.978294849395752,
                    1.7196859121322632,
                    2.324504852294922,
                    2.4220564365386963,
                    2.4415667057037354,
                    2.4415667057037354
                ],
                [
                    2.109891653060913,
                    2.0123403072357178,
                    2.148912191390991,
                    2.344015121459961,
                    2.4805872440338135,
                    2.2074432373046875,
                    1.836747646331787,
                    1.1733977794647217,
                    1.3489903211593628,
                    1.953809380531311,
                    1.4465417861938477,
                    0.1393522471189499,
                    0.23690369725227356,
                    0.3539655804634094,
                    0.4905376136302948,
                    0.6466199159622192,
                    0.91976398229599,
                    1.1733977794647217,
                    2.070871114730835,
                    2.402545928955078,
                    2.363525390625,
                    2.4220564365386963,
                    2.4610769748687744,
                    2.324504852294922,
                    2.402545928955078,
                    2.2464637756347656,
                    1.914788842201233,
                    2.402545928955078,
                    2.344015121459961,
                    2.324504852294922,
                    2.5000975131988525,
                    2.5000975131988525
                ],
                [
                    0.7441713809967041,
                    0.6466199159622192,
                    0.5295581817626953,
                    0.724661111831665,
                    0.9978051781654358,
                    1.5440932512283325,
                    1.7782167196273804,
                    1.7587064504623413,
                    2.1879327297210693,
                    2.344015121459961,
                    1.3489903211593628,
                    -0.42644616961479187,
                    -0.4459564685821533,
                    -0.4459564685821533,
                    -0.4654667377471924,
                    -0.30938443541526794,
                    0.29543471336364746,
                    1.2709492444992065,
                    2.324504852294922,
                    2.4805872440338135,
                    2.4805872440338135,
                    2.402545928955078,
                    2.324504852294922,
                    2.0123403072357178,
                    1.914788842201233,
                    2.070871114730835,
                    2.129401922225952,
                    1.953809380531311,
                    1.6026241779327393,
                    1.7782167196273804,
                    2.2074432373046875,
                    2.344015121459961
                ],
                [
                    -0.11428152769804001,
                    0.0027802155818790197,
                    -0.27036383748054504,
                    -0.23134326934814453,
                    0.8027022480964661,
                    0.978294849395752,
                    0.978294849395752,
                    1.817237377166748,
                    2.344015121459961,
                    2.2269535064697266,
                    1.4855624437332153,
                    0.47102731466293335,
                    0.334455281496048,
                    0.4124964475631714,
                    1.0563360452651978,
                    1.817237377166748,
                    2.129401922225952,
                    2.304994583129883,
                    2.2074432373046875,
                    1.914788842201233,
                    1.5831139087677002,
                    1.1733977794647217,
                    0.9587845802307129,
                    0.6466199159622192,
                    0.5100479125976562,
                    0.5880890488624573,
                    0.7441713809967041,
                    0.724661111831665,
                    0.6466199159622192,
                    0.9002537131309509,
                    1.7391961812973022,
                    1.9928299188613892
                ],
                [
                    -0.7191005349159241,
                    -0.38742557168006897,
                    0.04180079698562622,
                    0.7636816501617432,
                    0.8222125172615051,
                    -0.0752609446644783,
                    0.08082137256860733,
                    0.91976398229599,
                    1.3294800519943237,
                    1.6221344470977783,
                    1.6416447162628174,
                    1.6806652545928955,
                    1.7196859121322632,
                    2.0123403072357178,
                    2.383035659790039,
                    2.0123403072357178,
                    1.4075212478637695,
                    1.1343772411346436,
                    0.8807434439659119,
                    0.6856405138969421,
                    0.47102731466293335,
                    0.1783728301525116,
                    0.08082137256860733,
                    0.1783728301525116,
                    0.275924414396286,
                    0.3149450123310089,
                    0.6075993776321411,
                    0.91976398229599,
                    1.1733977794647217,
                    1.3685007095336914,
                    1.934299111366272,
                    1.836747646331787
                ],
                [
                    -1.5385328531265259,
                    -1.304409384727478,
                    0.724661111831665,
                    2.070871114730835,
                    0.7051507830619812,
                    0.1783728301525116,
                    0.3929861783981323,
                    0.9392743110656738,
                    1.2904595136642456,
                    1.8952784538269043,
                    2.1684224605560303,
                    2.324504852294922,
                    2.304994583129883,
                    2.4610769748687744,
                    2.4220564365386963,
                    1.4855624437332153,
                    0.9587845802307129,
                    0.9392743110656738,
                    1.0953565835952759,
                    1.2319285869598389,
                    1.4270315170288086,
                    1.3294800519943237,
                    1.3294800519943237,
                    1.4270315170288086,
                    1.4660521745681763,
                    1.5050727128982544,
                    1.7587064504623413,
                    2.0123403072357178,
                    2.031850576400757,
                    1.836747646331787,
                    1.5440932512283325,
                    1.3489903211593628
                ],
                [
                    -1.7531460523605347,
                    -0.6800799369812012,
                    2.0123403072357178,
                    2.4415667057037354,
                    1.914788842201233,
                    1.8952784538269043,
                    2.031850576400757,
                    2.2464637756347656,
                    2.402545928955078,
                    2.578138589859009,
                    2.5586283206939697,
                    2.4415667057037354,
                    2.070871114730835,
                    2.4415667057037354,
                    2.4805872440338135,
                    2.344015121459961,
                    2.2269535064697266,
                    1.953809380531311,
                    2.2659740447998047,
                    2.2464637756347656,
                    2.2854843139648438,
                    2.344015121459961,
                    2.304994583129883,
                    2.148912191390991,
                    1.914788842201233,
                    1.8562579154968262,
                    1.6221344470977783,
                    1.2709492444992065,
                    1.0758463144302368,
                    0.91976398229599,
                    0.861233115196228,
                    0.9978051781654358
                ],
                [
                    -0.836162269115448,
                    1.2709492444992065,
                    2.109891653060913,
                    1.9928299188613892,
                    2.0123403072357178,
                    2.2464637756347656,
                    2.2659740447998047,
                    2.2074432373046875,
                    2.2074432373046875,
                    2.2269535064697266,
                    2.2269535064697266,
                    2.090381383895874,
                    1.817237377166748,
                    1.97331964969635,
                    1.5440932512283325,
                    1.4465417861938477,
                    1.3685007095336914,
                    1.5831139087677002,
                    1.4075212478637695,
                    0.8222125172615051,
                    0.91976398229599,
                    1.2904595136642456,
                    1.1538875102996826,
                    0.861233115196228,
                    0.47102731466293335,
                    0.4124964475631714,
                    0.3734758794307709,
                    0.334455281496048,
                    0.5100479125976562,
                    0.724661111831665,
                    0.861233115196228,
                    0.8222125172615051
                ],
                [
                    0.91976398229599,
                    1.817237377166748,
                    1.5636035203933716,
                    1.4660521745681763,
                    1.4270315170288086,
                    1.4855624437332153,
                    1.5245829820632935,
                    1.5440932512283325,
                    1.5245829820632935,
                    1.4855624437332153,
                    1.4660521745681763,
                    1.4660521745681763,
                    1.4465417861938477,
                    1.4075212478637695,
                    0.9587845802307129,
                    0.783191978931427,
                    0.783191978931427,
                    1.0953565835952759,
                    0.9587845802307129,
                    0.6075993776321411,
                    0.6661302447319031,
                    0.7636816501617432,
                    0.5880890488624573,
                    0.43200674653053284,
                    0.3149450123310089,
                    0.3929861783981323,
                    0.4905376136302948,
                    0.5295581817626953,
                    0.5880890488624573,
                    0.6271096467971802,
                    0.6661302447319031,
                    0.8222125172615051
                ],
                [
                    -0.09477123618125916,
                    -0.01673007383942604,
                    0.15886253118515015,
                    0.256413996219635,
                    0.3929861783981323,
                    0.5490685105323792,
                    0.6466199159622192,
                    0.7051507830619812,
                    0.7441713809967041,
                    0.9002537131309509,
                    0.9978051781654358,
                    1.1343772411346436,
                    1.3099697828292847,
                    1.4075212478637695,
                    1.2904595136642456,
                    1.1929080486297607,
                    1.1343772411346436,
                    1.0563360452651978,
                    0.9587845802307129,
                    0.8027022480964661,
                    0.6661302447319031,
                    0.4905376136302948,
                    0.3539655804634094,
                    0.256413996219635,
                    0.29543471336364746,
                    0.3734758794307709,
                    0.29543471336364746,
                    0.15886253118515015,
                    0.23690369725227356,
                    0.47102731466293335,
                    0.6271096467971802,
                    0.8222125172615051
                ],
                [
                    -1.421471118927002,
                    -1.7336357831954956,
                    -1.5385328531265259,
                    -1.284899115562439,
                    -1.2068578004837036,
                    -1.1288167238235474,
                    -1.0897960662841797,
                    -1.0312652587890625,
                    -1.0117549896240234,
                    -0.8556725382804871,
                    -0.7191005349159241,
                    -0.5239976048469543,
                    -0.15330210328102112,
                    0.1393522471189499,
                    0.23690369725227356,
                    0.23690369725227356,
                    0.256413996219635,
                    0.23690369725227356,
                    0.11984195560216904,
                    -0.036240365356206894,
                    -0.15330210328102112,
                    -0.19232268631458282,
                    -0.21183297038078308,
                    -0.23134326934814453,
                    -0.17281238734722137,
                    -0.0752609446644783,
                    0.022290505468845367,
                    0.10033166408538818,
                    0.275924414396286,
                    0.43200674653053284,
                    0.5295581817626953,
                    0.6856405138969421
                ],
                [
                    -1.1483269929885864,
                    -1.8311872482299805,
                    -1.8506975173950195,
                    -1.1873475313186646,
                    -1.0897960662841797,
                    -1.421471118927002,
                    -1.6360843181610107,
                    -1.7531460523605347,
                    -1.8897180557250977,
                    -1.9287385940551758,
                    -1.9287385940551758,
                    -1.8311872482299805,
                    -1.401960849761963,
                    -1.1288167238235474,
                    -1.0507755279541016,
                    -1.0117549896240234,
                    -0.836162269115448,
                    -0.6410593390464783,
                    -0.7191005349159241,
                    -0.7386108040809631,
                    -0.6995902061462402,
                    -0.6800799369812012,
                    -0.6020388007164001,
                    -0.4654667377471924,
                    -0.250853568315506,
                    0.08082137256860733,
                    0.47102731466293335,
                    0.47102731466293335,
                    0.2173934131860733,
                    0.275924414396286,
                    0.4515170454978943,
                    0.861233115196228
                ],
                [
                    -1.3434299230575562,
                    -1.7141255140304565,
                    -1.8702077865600586,
                    -1.421471118927002,
                    -0.5825284719467163,
                    -0.7386108040809631,
                    -1.1093063354492188,
                    -1.4995123147964478,
                    -1.8116768598556519,
                    -2.006779909133911,
                    -2.0848209857940674,
                    -2.0848209857940674,
                    -1.5385328531265259,
                    -0.4459564685821533,
                    -0.6995902061462402,
                    -1.0117549896240234,
                    -1.0507755279541016,
                    -1.0117549896240234,
                    -0.9922446608543396,
                    -0.8751828074455261,
                    -0.777631402015686,
                    -0.6020388007164001,
                    -0.2898741364479065,
                    0.1783728301525116,
                    0.6271096467971802,
                    0.6856405138969421,
                    0.4124964475631714,
                    0.0027802155818790197,
                    0.04180079698562622,
                    0.3734758794307709,
                    0.6271096467971802,
                    1.1929080486297607
                ],
                [
                    -1.8897180557250977,
                    -2.0458004474639893,
                    -2.0653107166290283,
                    -2.006779909133911,
                    -1.323919653892517,
                    -1.1093063354492188,
                    -1.304409384727478,
                    -1.5385328531265259,
                    -1.8311872482299805,
                    -2.0848209857940674,
                    -2.1433517932891846,
                    -2.1628620624542236,
                    -1.9287385940551758,
                    0.3929861783981323,
                    1.2709492444992065,
                    0.6661302447319031,
                    0.334455281496048,
                    0.2173934131860733,
                    0.19788311421871185,
                    0.256413996219635,
                    0.23690369725227356,
                    0.3734758794307709,
                    0.5880890488624573,
                    0.5295581817626953,
                    0.04180079698562622,
                    -0.4459564685821533,
                    -0.328894704580307,
                    0.04180079698562622,
                    0.29543471336364746,
                    0.5880890488624573,
                    0.9978051781654358,
                    1.4855624437332153
                ],
                [
                    -1.5385328531265259,
                    -2.0848209857940674,
                    -2.1628620624542236,
                    -2.1433517932891846,
                    -2.0848209857940674,
                    -1.8897180557250977,
                    -1.8897180557250977,
                    -1.9872695207595825,
                    -2.0848209857940674,
                    -2.1628620624542236,
                    -2.1823723316192627,
                    -2.1628620624542236,
                    -2.1823723316192627,
                    -0.972734272480011,
                    0.6271096467971802,
                    0.6661302447319031,
                    0.5880890488624573,
                    0.5295581817626953,
                    0.4515170454978943,
                    0.29543471336364746,
                    0.15886253118515015,
                    -0.15330210328102112,
                    -0.6020388007164001,
                    -0.8751828074455261,
                    -0.8556725382804871,
                    -0.5044873356819153,
                    -0.01673007383942604,
                    0.23690369725227356,
                    0.4124964475631714,
                    0.861233115196228,
                    1.2124183177947998,
                    1.5636035203933716
                ],
                [
                    -0.972734272480011,
                    -1.8116768598556519,
                    -2.2018826007843018,
                    -2.1823723316192627,
                    -2.22139310836792,
                    -2.1238415241241455,
                    -2.0458004474639893,
                    -2.1238415241241455,
                    -2.1823723316192627,
                    -2.22139310836792,
                    -2.22139310836792,
                    -2.2018826007843018,
                    -2.2018826007843018,
                    -2.006779909133911,
                    -1.0702857971191406,
                    -0.89469313621521,
                    -0.914203405380249,
                    -0.8751828074455261,
                    -0.914203405380249,
                    -1.0702857971191406,
                    -1.2653887271881104,
                    -1.401960849761963,
                    -1.323919653892517,
                    -0.836162269115448,
                    -0.23134326934814453,
                    0.04180079698562622,
                    0.11984195560216904,
                    0.275924414396286,
                    0.6466199159622192,
                    1.114866852760315,
                    1.3489903211593628,
                    1.6026241779327393
                ],
                [
                    -0.6215490698814392,
                    -1.3824505805969238,
                    -2.2018826007843018,
                    -2.1823723316192627,
                    -2.22139310836792,
                    -2.1823723316192627,
                    -2.1238415241241455,
                    -2.1823723316192627,
                    -2.22139310836792,
                    -2.22139310836792,
                    -2.22139310836792,
                    -2.22139310836792,
                    -2.22139310836792,
                    -2.1823723316192627,
                    -1.4800019264221191,
                    -1.1678372621536255,
                    -1.323919653892517,
                    -1.3824505805969238,
                    -1.5190225839614868,
                    -1.558043122291565,
                    -1.46049165725708,
                    -1.1288167238235474,
                    -0.6215490698814392,
                    -0.17281238734722137,
                    0.022290505468845367,
                    0.022290505468845367,
                    0.08082137256860733,
                    0.334455281496048,
                    0.7051507830619812,
                    1.1733977794647217,
                    1.4270315170288086,
                    1.6611549854278564
                ],
                [
                    -0.4069358706474304,
                    -1.2458784580230713,
                    -2.1628620624542236,
                    -2.2018826007843018,
                    -2.22139310836792,
                    -2.2018826007843018,
                    -2.1628620624542236,
                    -2.1823723316192627,
                    -2.2018826007843018,
                    -2.22139310836792,
                    -2.22139310836792,
                    -2.2018826007843018,
                    -2.1823723316192627,
                    -2.22139310836792,
                    -1.6751048564910889,
                    -1.304409384727478,
                    -1.7726563215255737,
                    -1.9872695207595825,
                    -1.7921665906906128,
                    -1.1483269929885864,
                    -0.6410593390464783,
                    -0.2898741364479065,
                    -0.05575065314769745,
                    -0.036240365356206894,
                    -0.01673007383942604,
                    0.10033166408538818,
                    0.23690369725227356,
                    0.4515170454978943,
                    0.724661111831665,
                    1.114866852760315,
                    1.4465417861938477,
                    1.7001756429672241
                ],
                [
                    -0.48497703671455383,
                    -1.4995123147964478,
                    -2.006779909133911,
                    -2.1433517932891846,
                    -2.1823723316192627,
                    -2.1433517932891846,
                    -2.1433517932891846,
                    -2.1823723316192627,
                    -2.2018826007843018,
                    -2.2018826007843018,
                    -2.2018826007843018,
                    -2.1823723316192627,
                    -2.1043312549591064,
                    -2.1823723316192627,
                    -1.9677592515945435,
                    -1.7531460523605347,
                    -1.7336357831954956,
                    -1.421471118927002,
                    -1.0117549896240234,
                    -0.6215490698814392,
                    -0.250853568315506,
                    -0.01673007383942604,
                    -0.036240365356206894,
                    -0.05575065314769745,
                    0.022290505468845367,
                    0.23690369725227356,
                    0.4515170454978943,
                    0.6075993776321411,
                    0.91976398229599,
                    1.2709492444992065,
                    1.5440932512283325,
                    1.7001756429672241
                ],
                [
                    -0.6215490698814392,
                    -1.5190225839614868,
                    -1.7921665906906128,
                    -1.8897180557250977,
                    -1.9287385940551758,
                    -1.9287385940551758,
                    -1.9677592515945435,
                    -1.9872695207595825,
                    -1.9872695207595825,
                    -1.9677592515945435,
                    -1.9482489824295044,
                    -1.9287385940551758,
                    -1.8311872482299805,
                    -1.8116768598556519,
                    -1.694615125656128,
                    -1.3434299230575562,
                    -0.914203405380249,
                    -0.6410593390464783,
                    -0.5630182027816772,
                    -0.5044873356819153,
                    -0.17281238734722137,
                    -0.0752609446644783,
                    -0.13379181921482086,
                    -0.036240365356206894,
                    0.10033166408538818,
                    0.256413996219635,
                    0.47102731466293335,
                    0.724661111831665,
                    0.978294849395752,
                    1.3489903211593628,
                    1.6026241779327393,
                    1.6806652545928955
                ],
                [
                    -0.6020388007164001,
                    -1.284899115562439,
                    -1.4800019264221191,
                    -1.4995123147964478,
                    -1.5385328531265259,
                    -1.577553391456604,
                    -1.558043122291565,
                    -1.4800019264221191,
                    -1.440981388092041,
                    -1.421471118927002,
                    -1.3629401922225952,
                    -1.323919653892517,
                    -1.3434299230575562,
                    -1.284899115562439,
                    -1.0702857971191406,
                    -0.777631402015686,
                    -0.6020388007164001,
                    -0.42644616961479187,
                    -0.328894704580307,
                    -0.328894704580307,
                    -0.13379181921482086,
                    -0.15330210328102112,
                    -0.11428152769804001,
                    0.061311084777116776,
                    0.1783728301525116,
                    0.3734758794307709,
                    0.5295581817626953,
                    0.7636816501617432,
                    0.9587845802307129,
                    1.2514389753341675,
                    1.5050727128982544,
                    1.6611549854278564
                ]
            ]
        ],
        [
            [
                [
                    0.6337511539459229,
                    0.6337511539459229,
                    0.2654377818107605,
                    0.12974336743354797,
                    0.7888305187225342,
                    1.0989891290664673,
                    1.1959137916564941,
                    1.312223196029663,
                    1.4285327196121216,
                    1.54484224319458,
                    1.6223819255828857,
                    1.5642271041870117,
                    1.7968461513519287,
                    1.893770694732666,
                    1.9713103771209717,
                    2.0294651985168457,
                    1.6999214887619019,
                    1.9519253969192505,
                    2.0488500595092773,
                    2.126389741897583,
                    2.1457746028900146,
                    2.068234920501709,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1457746028900146,
                    1.9519253969192505,
                    2.0294651985168457,
                    2.184544324874878,
                    2.068234920501709,
                    1.9906952381134033,
                    2.1651594638824463,
                    2.184544324874878
                ],
                [
                    0.8663701415061951,
                    0.9051399827003479,
                    0.4980567693710327,
                    0.22666795551776886,
                    0.9439098238945007,
                    1.312223196029663,
                    1.3897628784179688,
                    1.4285327196121216,
                    1.5642271041870117,
                    1.7386913299560547,
                    1.7774611711502075,
                    1.6417667865753174,
                    1.9325405359268188,
                    2.0488500595092773,
                    2.0876197814941406,
                    2.1651594638824463,
                    1.8162310123443604,
                    1.9906952381134033,
                    2.068234920501709,
                    2.2620840072631836,
                    2.3202388286590576,
                    2.1070048809051514,
                    2.1457746028900146,
                    2.2620840072631836,
                    2.242699146270752,
                    1.9906952381134033,
                    2.126389741897583,
                    2.2814691066741943,
                    2.0876197814941406,
                    2.068234920501709,
                    2.3396236896514893,
                    2.3396236896514893
                ],
                [
                    0.9439098238945007,
                    0.9826796650886536,
                    0.6143662929534912,
                    0.32359254360198975,
                    1.0796042680740356,
                    1.4673025608062744,
                    1.5642271041870117,
                    1.4285327196121216,
                    1.6223819255828857,
                    1.893770694732666,
                    1.7968461513519287,
                    1.6805366277694702,
                    1.9131556749343872,
                    2.0294651985168457,
                    2.0294651985168457,
                    2.2039294242858887,
                    1.8550008535385132,
                    1.9906952381134033,
                    2.0876197814941406,
                    2.2039294242858887,
                    2.068234920501709,
                    1.6999214887619019,
                    2.1457746028900146,
                    2.2814691066741943,
                    2.3202388286590576,
                    2.0488500595092773,
                    2.184544324874878,
                    2.3783936500549316,
                    2.1651594638824463,
                    2.0294651985168457,
                    2.417163372039795,
                    2.3202388286590576
                ],
                [
                    1.0602192878723145,
                    1.0214494466781616,
                    0.6725209951400757,
                    0.42051711678504944,
                    1.176528811454773,
                    1.5060724020004272,
                    1.6805366277694702,
                    1.583612084388733,
                    1.719306468963623,
                    1.9906952381134033,
                    1.8550008535385132,
                    1.719306468963623,
                    1.8356159925460815,
                    2.0488500595092773,
                    1.893770694732666,
                    2.2233142852783203,
                    1.9131556749343872,
                    1.9906952381134033,
                    2.0876197814941406,
                    1.9906952381134033,
                    1.00206458568573,
                    0.9051399827003479,
                    2.0294651985168457,
                    2.2814691066741943,
                    2.3783936500549316,
                    2.068234920501709,
                    2.184544324874878,
                    2.417163372039795,
                    2.184544324874878,
                    1.9906952381134033,
                    2.3977785110473633,
                    2.300853967666626
                ],
                [
                    1.176528811454773,
                    1.1571439504623413,
                    0.7694455981254578,
                    0.42051711678504944,
                    1.2346835136413574,
                    1.5254572629928589,
                    1.7774611711502075,
                    1.583612084388733,
                    1.6611517667770386,
                    2.0488500595092773,
                    1.8743858337402344,
                    1.719306468963623,
                    1.7968461513519287,
                    2.0488500595092773,
                    1.6611517667770386,
                    2.126389741897583,
                    1.9519253969192505,
                    1.9131556749343872,
                    2.068234920501709,
                    1.6805366277694702,
                    0.6531360745429993,
                    0.827600359916687,
                    1.9131556749343872,
                    2.1651594638824463,
                    2.3590087890625,
                    2.0488500595092773,
                    2.126389741897583,
                    2.3396236896514893,
                    2.068234920501709,
                    2.1070048809051514,
                    2.3783936500549316,
                    2.2620840072631836
                ],
                [
                    1.312223196029663,
                    1.2540684938430786,
                    0.8663701415061951,
                    0.32359254360198975,
                    1.2734533548355103,
                    1.5060724020004272,
                    1.8162310123443604,
                    1.6611517667770386,
                    1.7386913299560547,
                    2.1070048809051514,
                    1.8550008535385132,
                    1.719306468963623,
                    1.719306468963623,
                    1.9906952381134033,
                    1.4285327196121216,
                    1.54484224319458,
                    1.583612084388733,
                    1.5642271041870117,
                    2.126389741897583,
                    1.312223196029663,
                    -0.25795507431030273,
                    0.6337511539459229,
                    1.8743858337402344,
                    2.0294651985168457,
                    2.3202388286590576,
                    2.010080099105835,
                    1.9519253969192505,
                    2.242699146270752,
                    1.9906952381134033,
                    2.0488500595092773,
                    2.2814691066741943,
                    2.126389741897583
                ],
                [
                    1.370378017425537,
                    1.2734533548355103,
                    0.9051399827003479,
                    0.1491282880306244,
                    1.2734533548355103,
                    1.486687421798706,
                    1.8743858337402344,
                    1.7774611711502075,
                    1.893770694732666,
                    2.126389741897583,
                    1.7968461513519287,
                    1.719306468963623,
                    1.7386913299560547,
                    1.9713103771209717,
                    1.2152986526489258,
                    0.9826796650886536,
                    1.1959137916564941,
                    1.176528811454773,
                    1.54484224319458,
                    1.1959137916564941,
                    -0.10287576168775558,
                    0.22666795551776886,
                    0.9051399827003479,
                    1.1183741092681885,
                    1.8162310123443604,
                    1.893770694732666,
                    1.7580763101577759,
                    2.126389741897583,
                    1.9519253969192505,
                    1.9325405359268188,
                    2.2233142852783203,
                    2.126389741897583
                ],
                [
                    1.5254572629928589,
                    1.3897628784179688,
                    0.9439098238945007,
                    0.2848227024078369,
                    1.5060724020004272,
                    1.7968461513519287,
                    1.9131556749343872,
                    1.9131556749343872,
                    2.068234920501709,
                    2.1651594638824463,
                    1.8356159925460815,
                    1.8356159925460815,
                    1.8356159925460815,
                    1.8550008535385132,
                    1.4673025608062744,
                    1.54484224319458,
                    0.9051399827003479,
                    0.24605286121368408,
                    -0.49057406187057495,
                    -0.8201176524162292,
                    -1.0527366399765015,
                    -1.227200984954834,
                    -1.16904616355896,
                    -1.2659708261489868,
                    -0.4130344092845917,
                    1.0989891290664673,
                    1.6223819255828857,
                    1.9906952381134033,
                    1.7968461513519287,
                    1.6805366277694702,
                    2.2039294242858887,
                    2.1457746028900146
                ],
                [
                    0.9632947444915771,
                    0.8663701415061951,
                    0.6143662929534912,
                    0.22666795551776886,
                    0.9826796650886536,
                    1.176528811454773,
                    0.9632947444915771,
                    1.3897628784179688,
                    1.6223819255828857,
                    1.6805366277694702,
                    1.5642271041870117,
                    1.6417667865753174,
                    1.6805366277694702,
                    1.4673025608062744,
                    1.312223196029663,
                    1.312223196029663,
                    0.32359254360198975,
                    -0.39364948868751526,
                    -0.7038081288337708,
                    -0.6650383472442627,
                    -0.8007327318191528,
                    -0.8201176524162292,
                    -0.6068835854530334,
                    -1.0915064811706543,
                    -0.9170421957969666,
                    -0.08349084854125977,
                    0.7112908363342285,
                    1.1183741092681885,
                    0.9439098238945007,
                    0.7306757569313049,
                    1.583612084388733,
                    1.350993037223816
                ],
                [
                    -0.2191852629184723,
                    -0.19980034232139587,
                    -0.2385701686143875,
                    -0.4130344092845917,
                    -0.39364948868751526,
                    -0.3548796772956848,
                    -0.27733999490737915,
                    0.0522037111222744,
                    0.2654377818107605,
                    0.401132196187973,
                    0.4980567693710327,
                    0.5755964517593384,
                    0.6143662929534912,
                    0.42051711678504944,
                    0.4980567693710327,
                    0.4786718487739563,
                    -0.14164559543132782,
                    -0.49057406187057495,
                    -0.5099589824676514,
                    -0.5099589824676514,
                    -0.7813478112220764,
                    -0.761962890625,
                    -0.761962890625,
                    -0.8201176524162292,
                    0.2654377818107605,
                    0.0522037111222744,
                    0.556211531162262,
                    0.5368266105651855,
                    -0.14164559543132782,
                    -0.316109836101532,
                    0.12974336743354797,
                    -0.04472101479768753
                ],
                [
                    -1.1496611833572388,
                    -0.9558120369911194,
                    -0.9751969575881958,
                    -1.110891342163086,
                    -0.8201176524162292,
                    -0.6844232082366943,
                    -0.8007327318191528,
                    -0.6844232082366943,
                    -0.6262685060501099,
                    -0.37426456809043884,
                    -0.4518042504787445,
                    -0.4324193298816681,
                    -0.37426456809043884,
                    -0.3548796772956848,
                    -0.2191852629184723,
                    -0.3354947566986084,
                    -0.6844232082366943,
                    -0.6844232082366943,
                    -0.6650383472442627,
                    -0.7813478112220764,
                    -1.0333516597747803,
                    -1.1496611833572388,
                    -0.587498664855957,
                    -0.2191852629184723,
                    0.0522037111222744,
                    -0.29672491550445557,
                    0.42051711678504944,
                    1.4285327196121216,
                    -0.005951183382421732,
                    -0.4324193298816681,
                    -0.6456534266471863,
                    -0.6068835854530334
                ],
                [
                    -1.401665210723877,
                    -1.16904616355896,
                    -0.9751969575881958,
                    -0.936427116394043,
                    -0.27733999490737915,
                    -0.37426456809043884,
                    -0.7813478112220764,
                    -1.072121500968933,
                    -0.6262685060501099,
                    -0.2385701686143875,
                    -0.587498664855957,
                    -0.6262685060501099,
                    -0.3354947566986084,
                    -0.19980034232139587,
                    -0.3548796772956848,
                    -0.5487288236618042,
                    -0.5293439030647278,
                    -0.587498664855957,
                    -0.5293439030647278,
                    -0.5487288236618042,
                    -0.6844232082366943,
                    -0.7813478112220764,
                    0.4592869281768799,
                    1.1959137916564941,
                    1.0408344268798828,
                    0.401132196187973,
                    -0.25795507431030273,
                    1.5254572629928589,
                    0.556211531162262,
                    -0.587498664855957,
                    -0.7425779700279236,
                    -0.7813478112220764
                ],
                [
                    -1.3047406673431396,
                    -0.761962890625,
                    -0.6068835854530334,
                    -0.9945818781852722,
                    -0.49057406187057495,
                    -0.49057406187057495,
                    -0.936427116394043,
                    -0.7813478112220764,
                    -0.10287576168775558,
                    0.1491282880306244,
                    0.03281864896416664,
                    -0.3354947566986084,
                    -0.39364948868751526,
                    -0.29672491550445557,
                    -0.5293439030647278,
                    -0.7425779700279236,
                    -0.8588874936103821,
                    -0.8588874936103821,
                    -0.7425779700279236,
                    -0.587498664855957,
                    -0.587498664855957,
                    -0.25795507431030273,
                    0.8663701415061951,
                    1.350993037223816,
                    1.6029969453811646,
                    1.312223196029663,
                    0.03281864896416664,
                    0.9245249032974243,
                    1.0214494466781616,
                    -0.8782724142074585,
                    -0.7813478112220764,
                    -0.8976573348045349
                ],
                [
                    -0.9945818781852722,
                    -0.7038081288337708,
                    -0.7425779700279236,
                    -0.9751969575881958,
                    -0.8395025730133057,
                    -1.110891342163086,
                    -1.0527366399765015,
                    -0.8782724142074585,
                    -0.7038081288337708,
                    -0.4324193298816681,
                    -0.14164559543132782,
                    -0.27733999490737915,
                    -0.4711891710758209,
                    -0.37426456809043884,
                    -0.39364948868751526,
                    -0.5293439030647278,
                    -0.5681137442588806,
                    -0.5293439030647278,
                    -0.5293439030647278,
                    -0.316109836101532,
                    -0.2191852629184723,
                    0.32359254360198975,
                    1.0602192878723145,
                    1.1377589702606201,
                    1.2734533548355103,
                    1.2928383350372314,
                    0.6725209951400757,
                    0.12974336743354797,
                    0.8663701415061951,
                    -0.8782724142074585,
                    -1.2659708261489868,
                    -1.1302763223648071
                ],
                [
                    -0.936427116394043,
                    -0.8976573348045349,
                    -0.8395025730133057,
                    -0.9170421957969666,
                    -0.8976573348045349,
                    -1.0333516597747803,
                    -1.072121500968933,
                    -0.761962890625,
                    -0.316109836101532,
                    -0.08349084854125977,
                    0.07158862799406052,
                    0.1491282880306244,
                    0.22666795551776886,
                    0.20728303492069244,
                    0.18789811432361603,
                    0.11035845428705215,
                    0.401132196187973,
                    0.43990203738212585,
                    0.401132196187973,
                    0.4786718487739563,
                    0.43990203738212585,
                    0.7306757569313049,
                    1.0408344268798828,
                    1.0796042680740356,
                    1.1571439504623413,
                    0.9826796650886536,
                    0.8663701415061951,
                    -0.4711891710758209,
                    -0.6844232082366943,
                    -1.0139667987823486,
                    -1.3628954887390137,
                    -1.285355806350708
                ],
                [
                    -0.5681137442588806,
                    -0.6068835854530334,
                    -0.37426456809043884,
                    -0.4130344092845917,
                    -0.316109836101532,
                    0.11035845428705215,
                    0.12974336743354797,
                    0.24605286121368408,
                    0.3623623549938202,
                    0.5174416899681091,
                    0.5755964517593384,
                    0.556211531162262,
                    0.5755964517593384,
                    0.5755964517593384,
                    0.6337511539459229,
                    0.43990203738212585,
                    0.4786718487739563,
                    0.6143662929534912,
                    0.5949813723564148,
                    0.401132196187973,
                    -0.1222606748342514,
                    0.09097354114055634,
                    0.401132196187973,
                    0.8469852805137634,
                    1.00206458568573,
                    0.827600359916687,
                    0.8082154393196106,
                    -0.39364948868751526,
                    -1.0915064811706543,
                    -0.5293439030647278,
                    -0.761962890625,
                    -1.0333516597747803
                ],
                [
                    -0.37426456809043884,
                    -0.4711891710758209,
                    -0.19980034232139587,
                    0.11035845428705215,
                    0.07158862799406052,
                    0.18789811432361603,
                    0.3623623549938202,
                    0.3429774343967438,
                    0.401132196187973,
                    0.4786718487739563,
                    0.556211531162262,
                    0.556211531162262,
                    0.556211531162262,
                    0.5368266105651855,
                    0.4980567693710327,
                    0.3623623549938202,
                    0.09097354114055634,
                    0.1685132086277008,
                    0.2654377818107605,
                    0.03281864896416664,
                    -0.6068835854530334,
                    -0.16103051602840424,
                    0.401132196187973,
                    0.6531360745429993,
                    0.8082154393196106,
                    0.7306757569313049,
                    0.7112908363342285,
                    0.12974336743354797,
                    0.3623623549938202,
                    1.2928383350372314,
                    0.556211531162262,
                    -0.39364948868751526
                ],
                [
                    -0.587498664855957,
                    -0.3354947566986084,
                    -0.14164559543132782,
                    -0.316109836101532,
                    -0.587498664855957,
                    -0.6262685060501099,
                    0.07158862799406052,
                    0.3817472755908966,
                    0.4592869281768799,
                    0.4980567693710327,
                    0.4786718487739563,
                    0.3623623549938202,
                    0.1685132086277008,
                    0.013433732092380524,
                    -0.06410592794418335,
                    -0.04472101479768753,
                    -0.06410592794418335,
                    0.1491282880306244,
                    0.5755964517593384,
                    0.43990203738212585,
                    0.11035845428705215,
                    0.42051711678504944,
                    0.7112908363342285,
                    0.5949813723564148,
                    0.6143662929534912,
                    0.4980567693710327,
                    0.5368266105651855,
                    0.4592869281768799,
                    0.6531360745429993,
                    0.7500606775283813,
                    0.6143662929534912,
                    0.43990203738212585
                ],
                [
                    -0.4518042504787445,
                    -0.7038081288337708,
                    -1.0139667987823486,
                    -1.072121500968933,
                    -0.761962890625,
                    -0.27733999490737915,
                    -0.04472101479768753,
                    0.2848227024078369,
                    0.3429774343967438,
                    0.07158862799406052,
                    -0.10287576168775558,
                    -0.16103051602840424,
                    -0.10287576168775558,
                    0.013433732092380524,
                    0.1491282880306244,
                    0.30420762300491333,
                    0.4786718487739563,
                    0.32359254360198975,
                    0.5368266105651855,
                    0.6531360745429993,
                    0.4980567693710327,
                    0.6143662929534912,
                    0.7694455981254578,
                    0.6919059157371521,
                    0.5368266105651855,
                    0.5174416899681091,
                    0.556211531162262,
                    0.3623623549938202,
                    0.11035845428705215,
                    -0.08349084854125977,
                    -0.005951183382421732,
                    0.4592869281768799
                ],
                [
                    -0.761962890625,
                    -1.2465859651565552,
                    -1.0527366399765015,
                    -0.29672491550445557,
                    0.0522037111222744,
                    0.24605286121368408,
                    0.09097354114055634,
                    -0.04472101479768753,
                    -0.14164559543132782,
                    -0.3354947566986084,
                    -0.14164559543132782,
                    0.12974336743354797,
                    0.3429774343967438,
                    0.5174416899681091,
                    0.5949813723564148,
                    0.5368266105651855,
                    0.4592869281768799,
                    0.22666795551776886,
                    0.3817472755908966,
                    0.556211531162262,
                    0.5368266105651855,
                    0.556211531162262,
                    0.6725209951400757,
                    0.7500606775283813,
                    0.5174416899681091,
                    0.3623623549938202,
                    -0.005951183382421732,
                    -0.39364948868751526,
                    -0.6456534266471863,
                    -0.9751969575881958,
                    -0.761962890625,
                    0.12974336743354797
                ],
                [
                    -0.4130344092845917,
                    -0.4324193298816681,
                    -0.3548796772956848,
                    -0.2191852629184723,
                    -0.19980034232139587,
                    -0.18041542172431946,
                    -0.04472101479768753,
                    -0.14164559543132782,
                    -0.18041542172431946,
                    0.1685132086277008,
                    0.30420762300491333,
                    0.3623623549938202,
                    0.3429774343967438,
                    0.30420762300491333,
                    0.1491282880306244,
                    -0.16103051602840424,
                    -0.5293439030647278,
                    -0.7038081288337708,
                    0.09097354114055634,
                    0.4786718487739563,
                    0.4980567693710327,
                    0.556211531162262,
                    0.5174416899681091,
                    0.3817472755908966,
                    -0.16103051602840424,
                    -0.5681137442588806,
                    -0.6844232082366943,
                    -0.8782724142074585,
                    -1.16904616355896,
                    -1.0527366399765015,
                    -1.0139667987823486,
                    -1.16904616355896
                ],
                [
                    -0.5099589824676514,
                    -0.3548796772956848,
                    -0.27733999490737915,
                    -0.27733999490737915,
                    -0.2191852629184723,
                    -0.1222606748342514,
                    -0.005951183382421732,
                    0.013433732092380524,
                    -0.16103051602840424,
                    -0.005951183382421732,
                    -0.005951183382421732,
                    0.07158862799406052,
                    0.11035845428705215,
                    0.09097354114055634,
                    -0.6650383472442627,
                    -1.2465859651565552,
                    -1.3241256475448608,
                    -1.3435105085372925,
                    -0.19980034232139587,
                    0.43990203738212585,
                    0.2654377818107605,
                    0.09097354114055634,
                    -0.2191852629184723,
                    -0.587498664855957,
                    -0.761962890625,
                    -0.8201176524162292,
                    -1.0139667987823486,
                    -1.3047406673431396,
                    -1.2659708261489868,
                    -0.9751969575881958,
                    -1.4404350519180298,
                    -1.9056730270385742
                ],
                [
                    -1.227200984954834,
                    -0.4130344092845917,
                    -0.18041542172431946,
                    -0.2191852629184723,
                    -0.18041542172431946,
                    -0.16103051602840424,
                    -0.4518042504787445,
                    -0.6650383472442627,
                    -0.8007327318191528,
                    -0.8588874936103821,
                    -0.9170421957969666,
                    -0.25795507431030273,
                    0.1491282880306244,
                    0.09097354114055634,
                    -0.5681137442588806,
                    -0.9558120369911194,
                    -0.8201176524162292,
                    -0.761962890625,
                    -0.3548796772956848,
                    -0.3354947566986084,
                    -0.5681137442588806,
                    -0.7231930494308472,
                    -0.8201176524162292,
                    -0.8588874936103821,
                    -1.072121500968933,
                    -1.2465859651565552,
                    -1.4404350519180298,
                    -1.5567445755004883,
                    -1.4210501909255981,
                    -1.5373597145080566,
                    -1.8475183248519897,
                    -1.9638278484344482
                ],
                [
                    -1.3241256475448608,
                    -0.5681137442588806,
                    -0.37426456809043884,
                    -0.39364948868751526,
                    -0.3548796772956848,
                    -0.4130344092845917,
                    -1.16904616355896,
                    -1.401665210723877,
                    -1.285355806350708,
                    -1.1884310245513916,
                    -1.110891342163086,
                    -0.29672491550445557,
                    0.18789811432361603,
                    0.1491282880306244,
                    -0.19980034232139587,
                    -0.5293439030647278,
                    -0.7231930494308472,
                    -0.8976573348045349,
                    -0.9170421957969666,
                    -0.8782724142074585,
                    -0.8588874936103821,
                    -0.8782724142074585,
                    -1.072121500968933,
                    -1.3628954887390137,
                    -1.5761295557022095,
                    -1.4792048931121826,
                    -1.5567445755004883,
                    -1.634284257888794,
                    -1.769978642463684,
                    -1.8475183248519897,
                    -1.9056730270385742,
                    -1.9638278484344482
                ],
                [
                    -1.16904616355896,
                    -0.6844232082366943,
                    -0.4130344092845917,
                    -0.39364948868751526,
                    -0.316109836101532,
                    -0.316109836101532,
                    -0.8976573348045349,
                    -1.0139667987823486,
                    -0.7813478112220764,
                    -0.7231930494308472,
                    -0.5293439030647278,
                    -0.37426456809043884,
                    -0.5293439030647278,
                    -0.8201176524162292,
                    -1.110891342163086,
                    -1.16904616355896,
                    -1.072121500968933,
                    -0.9945818781852722,
                    -0.8588874936103821,
                    -0.8395025730133057,
                    -1.0333516597747803,
                    -1.4404350519180298,
                    -1.634284257888794,
                    -1.5761295557022095,
                    -1.2465859651565552,
                    -1.3628954887390137,
                    -1.6730540990829468,
                    -1.7505937814712524,
                    -1.808748483657837,
                    -1.8475183248519897,
                    -1.9056730270385742,
                    -1.944442868232727
                ],
                [
                    -1.1302763223648071,
                    -0.7425779700279236,
                    -0.39364948868751526,
                    -0.4324193298816681,
                    -0.4518042504787445,
                    -0.5099589824676514,
                    -0.7231930494308472,
                    -0.8588874936103821,
                    -0.9558120369911194,
                    -1.0915064811706543,
                    -1.285355806350708,
                    -1.3241256475448608,
                    -1.3047406673431396,
                    -1.2078160047531128,
                    -1.1496611833572388,
                    -1.072121500968933,
                    -1.0333516597747803,
                    -1.110891342163086,
                    -1.227200984954834,
                    -1.3822803497314453,
                    -1.5373597145080566,
                    -1.5179747343063354,
                    -1.4792048931121826,
                    -1.5761295557022095,
                    -1.3435105085372925,
                    -1.5373597145080566,
                    -1.8475183248519897,
                    -1.8862881660461426,
                    -1.8669031858444214,
                    -1.944442868232727,
                    -1.9638278484344482,
                    -1.8475183248519897
                ],
                [
                    -1.3822803497314453,
                    -1.3047406673431396,
                    -1.16904616355896,
                    -1.3047406673431396,
                    -1.3628954887390137,
                    -1.459820032119751,
                    -1.5567445755004883,
                    -1.5761295557022095,
                    -1.5373597145080566,
                    -1.4404350519180298,
                    -1.3628954887390137,
                    -1.3047406673431396,
                    -1.227200984954834,
                    -1.1884310245513916,
                    -1.227200984954834,
                    -1.3047406673431396,
                    -1.4404350519180298,
                    -1.6924389600753784,
                    -1.7118239402770996,
                    -1.4985898733139038,
                    -1.4792048931121826,
                    -1.4985898733139038,
                    -1.6148992776870728,
                    -1.6924389600753784,
                    -1.634284257888794,
                    -1.808748483657837,
                    -1.9056730270385742,
                    -1.8862881660461426,
                    -1.9056730270385742,
                    -1.944442868232727,
                    -1.8862881660461426,
                    -1.828133463859558
                ],
                [
                    -1.8475183248519897,
                    -1.8669031858444214,
                    -1.9250580072402954,
                    -1.9056730270385742,
                    -1.828133463859558,
                    -1.808748483657837,
                    -1.7893636226654053,
                    -1.6730540990829468,
                    -1.4792048931121826,
                    -1.4210501909255981,
                    -1.401665210723877,
                    -1.4404350519180298,
                    -1.5373597145080566,
                    -1.6536691188812256,
                    -1.6924389600753784,
                    -1.6536691188812256,
                    -1.6924389600753784,
                    -1.5761295557022095,
                    -1.1496611833572388,
                    -1.3628954887390137,
                    -1.634284257888794,
                    -1.7118239402770996,
                    -1.7312088012695312,
                    -1.7118239402770996,
                    -1.828133463859558,
                    -1.9056730270385742,
                    -1.9250580072402954,
                    -1.9056730270385742,
                    -1.8862881660461426,
                    -1.8475183248519897,
                    -1.7893636226654053,
                    -1.9832127094268799
                ],
                [
                    -1.7893636226654053,
                    -1.828133463859558,
                    -1.9056730270385742,
                    -1.8862881660461426,
                    -1.8862881660461426,
                    -1.8475183248519897,
                    -1.828133463859558,
                    -1.808748483657837,
                    -1.7505937814712524,
                    -1.7893636226654053,
                    -1.8475183248519897,
                    -1.8475183248519897,
                    -1.769978642463684,
                    -1.6730540990829468,
                    -1.634284257888794,
                    -1.5567445755004883,
                    -1.6148992776870728,
                    -1.4210501909255981,
                    -1.0139667987823486,
                    -1.4792048931121826,
                    -1.8475183248519897,
                    -1.7505937814712524,
                    -1.6924389600753784,
                    -1.808748483657837,
                    -1.9056730270385742,
                    -1.9250580072402954,
                    -1.9056730270385742,
                    -1.8669031858444214,
                    -1.8475183248519897,
                    -1.6924389600753784,
                    -1.9250580072402954,
                    -2.1770617961883545
                ],
                [
                    -1.828133463859558,
                    -1.8475183248519897,
                    -1.9250580072402954,
                    -1.9250580072402954,
                    -1.944442868232727,
                    -1.944442868232727,
                    -1.9250580072402954,
                    -1.9056730270385742,
                    -1.8669031858444214,
                    -1.808748483657837,
                    -1.7118239402770996,
                    -1.6536691188812256,
                    -1.6148992776870728,
                    -1.634284257888794,
                    -1.6536691188812256,
                    -1.6148992776870728,
                    -1.6730540990829468,
                    -1.5373597145080566,
                    -1.1884310245513916,
                    -1.6924389600753784,
                    -1.8862881660461426,
                    -1.7312088012695312,
                    -1.8475183248519897,
                    -1.8669031858444214,
                    -1.9250580072402954,
                    -1.944442868232727,
                    -1.9056730270385742,
                    -1.8862881660461426,
                    -1.7893636226654053,
                    -1.7118239402770996,
                    -2.25460147857666,
                    -2.3515260219573975
                ],
                [
                    -1.9832127094268799,
                    -1.9056730270385742,
                    -1.944442868232727,
                    -1.8862881660461426,
                    -1.8475183248519897,
                    -1.808748483657837,
                    -1.769978642463684,
                    -1.7118239402770996,
                    -1.6730540990829468,
                    -1.6730540990829468,
                    -1.6536691188812256,
                    -1.6730540990829468,
                    -1.6924389600753784,
                    -1.7505937814712524,
                    -1.8475183248519897,
                    -1.7893636226654053,
                    -1.8862881660461426,
                    -1.7312088012695312,
                    -1.3241256475448608,
                    -1.7312088012695312,
                    -1.8475183248519897,
                    -1.8669031858444214,
                    -1.8669031858444214,
                    -1.8669031858444214,
                    -1.9638278484344482,
                    -1.9638278484344482,
                    -1.9832127094268799,
                    -1.9056730270385742,
                    -1.7312088012695312,
                    -2.0607523918151855,
                    -2.3515260219573975,
                    -2.332141160964966
                ],
                [
                    -1.8862881660461426,
                    -1.8475183248519897,
                    -1.808748483657837,
                    -1.769978642463684,
                    -1.7893636226654053,
                    -1.769978642463684,
                    -1.7505937814712524,
                    -1.7118239402770996,
                    -1.6924389600753784,
                    -1.6924389600753784,
                    -1.7312088012695312,
                    -1.769978642463684,
                    -1.8475183248519897,
                    -1.9638278484344482,
                    -2.138292074203491,
                    -2.1964468955993652,
                    -2.273986577987671,
                    -2.0607523918151855,
                    -1.5567445755004883,
                    -1.808748483657837,
                    -1.944442868232727,
                    -1.9056730270385742,
                    -1.9056730270385742,
                    -1.8862881660461426,
                    -1.9638278484344482,
                    -2.0219826698303223,
                    -2.041367530822754,
                    -1.769978642463684,
                    -1.944442868232727,
                    -2.332141160964966,
                    -2.3515260219573975,
                    -2.2933714389801025
                ]
            ],
            [
                [
                    1.3184456825256348,
                    1.2594451904296875,
                    0.8464414477348328,
                    0.6891067028045654,
                    1.377446174621582,
                    1.6724488735198975,
                    1.7314493656158447,
                    1.82978355884552,
                    1.8887841701507568,
                    1.9281178712844849,
                    1.947784662246704,
                    1.869117259979248,
                    2.0854525566101074,
                    2.1444530487060547,
                    2.203453540802002,
                    2.2427873611450195,
                    1.908450961112976,
                    2.1641199588775635,
                    2.262454032897949,
                    2.282120943069458,
                    2.3214547634124756,
                    2.282120943069458,
                    2.3214547634124756,
                    2.3214547634124756,
                    2.3411214351654053,
                    2.124786138534546,
                    2.203453540802002,
                    2.360788345336914,
                    2.2427873611450195,
                    2.124786138534546,
                    2.282120943069458,
                    2.3214547634124756
                ],
                [
                    1.5151140689849854,
                    1.4954472780227661,
                    1.0431098937988281,
                    0.7284404039382935,
                    1.4954472780227661,
                    1.8494504690170288,
                    1.869117259979248,
                    1.869117259979248,
                    1.9674514532089233,
                    2.0854525566101074,
                    2.0854525566101074,
                    1.8887841701507568,
                    2.1641199588775635,
                    2.262454032897949,
                    2.282120943069458,
                    2.360788345336914,
                    2.0067851543426514,
                    2.1837868690490723,
                    2.262454032897949,
                    2.4001221656799316,
                    2.43945574760437,
                    2.2427873611450195,
                    2.282120943069458,
                    2.4001221656799316,
                    2.4001221656799316,
                    2.1641199588775635,
                    2.282120943069458,
                    2.459122657775879,
                    2.2231204509735107,
                    2.1444530487060547,
                    2.4197888374328613,
                    2.43945574760437
                ],
                [
                    1.5347809791564941,
                    1.5151140689849854,
                    1.1021103858947754,
                    0.7677740454673767,
                    1.5347809791564941,
                    1.908450961112976,
                    1.9674514532089233,
                    1.790449857711792,
                    1.9281178712844849,
                    2.1641199588775635,
                    2.02645206451416,
                    1.8887841701507568,
                    2.0854525566101074,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.380455255508423,
                    2.02645206451416,
                    2.1641199588775635,
                    2.262454032897949,
                    2.360788345336914,
                    2.203453540802002,
                    1.790449857711792,
                    2.1837868690490723,
                    2.3214547634124756,
                    2.43945574760437,
                    2.1641199588775635,
                    2.301787853240967,
                    2.4984562397003174,
                    2.262454032897949,
                    2.0854525566101074,
                    2.4787893295288086,
                    2.380455255508423
                ],
                [
                    1.5741146802902222,
                    1.4954472780227661,
                    1.1021103858947754,
                    0.8071077466011047,
                    1.5347809791564941,
                    1.8494504690170288,
                    2.0067851543426514,
                    1.8494504690170288,
                    1.9674514532089233,
                    2.203453540802002,
                    2.046118974685669,
                    1.8494504690170288,
                    1.9281178712844849,
                    2.1444530487060547,
                    2.02645206451416,
                    2.380455255508423,
                    2.0657856464385986,
                    2.124786138534546,
                    2.2427873611450195,
                    2.203453540802002,
                    1.2004445791244507,
                    1.0234429836273193,
                    2.0657856464385986,
                    2.3214547634124756,
                    2.459122657775879,
                    2.1444530487060547,
                    2.262454032897949,
                    2.4984562397003174,
                    2.2427873611450195,
                    2.046118974685669,
                    2.43945574760437,
                    2.3411214351654053
                ],
                [
                    1.6527819633483887,
                    1.5937814712524414,
                    1.1414440870285034,
                    0.7481071949005127,
                    1.5347809791564941,
                    1.790449857711792,
                    2.0067851543426514,
                    1.7707830667495728,
                    1.8101167678833008,
                    2.2427873611450195,
                    2.02645206451416,
                    1.8101167678833008,
                    1.8494504690170288,
                    2.0854525566101074,
                    1.7511162757873535,
                    2.2231204509735107,
                    2.046118974685669,
                    2.0067851543426514,
                    2.2231204509735107,
                    2.0067851543426514,
                    0.925108790397644,
                    1.0037761926651,
                    1.9871183633804321,
                    2.2231204509735107,
                    2.43945574760437,
                    2.124786138534546,
                    2.203453540802002,
                    2.4197888374328613,
                    2.124786138534546,
                    2.124786138534546,
                    2.4001221656799316,
                    2.282120943069458
                ],
                [
                    1.6724488735198975,
                    1.6134482622146606,
                    1.1807777881622314,
                    0.6104393005371094,
                    1.5347809791564941,
                    1.7511162757873535,
                    2.02645206451416,
                    1.8101167678833008,
                    1.869117259979248,
                    2.262454032897949,
                    1.9674514532089233,
                    1.8101167678833008,
                    1.8101167678833008,
                    2.0854525566101074,
                    1.4954472780227661,
                    1.6134482622146606,
                    1.6921156644821167,
                    1.6724488735198975,
                    2.282120943069458,
                    1.5937814712524414,
                    0.02043387107551098,
                    0.8661082983016968,
                    2.046118974685669,
                    2.1641199588775635,
                    2.4197888374328613,
                    2.0854525566101074,
                    2.0067851543426514,
                    2.282120943069458,
                    2.02645206451416,
                    2.105119466781616,
                    2.3214547634124756,
                    2.1444530487060547
                ],
                [
                    1.5937814712524414,
                    1.4954472780227661,
                    1.1021103858947754,
                    0.3154366612434387,
                    1.3971130847930908,
                    1.5741146802902222,
                    1.9281178712844849,
                    1.7707830667495728,
                    1.8887841701507568,
                    2.1641199588775635,
                    1.82978355884552,
                    1.7511162757873535,
                    1.82978355884552,
                    2.105119466781616,
                    1.2791119813919067,
                    1.0431098937988281,
                    1.3184456825256348,
                    1.3577793836593628,
                    1.7511162757873535,
                    1.3577793836593628,
                    0.11876823753118515,
                    0.5514388084411621,
                    1.1807777881622314,
                    1.3184456825256348,
                    1.9871183633804321,
                    1.9871183633804321,
                    1.790449857711792,
                    2.0854525566101074,
                    1.8887841701507568,
                    1.947784662246704,
                    2.203453540802002,
                    1.9871183633804321
                ],
                [
                    1.6134482622146606,
                    1.4757803678512573,
                    1.0234429836273193,
                    0.2957698404788971,
                    1.3577793836593628,
                    1.5741146802902222,
                    1.6331151723861694,
                    1.5937814712524414,
                    1.7511162757873535,
                    1.9674514532089233,
                    1.6724488735198975,
                    1.7117825746536255,
                    1.7707830667495728,
                    1.82978355884552,
                    1.4954472780227661,
                    1.6331151723861694,
                    1.0824435949325562,
                    0.5121051073074341,
                    -0.19590140879154205,
                    -0.5892382860183716,
                    -0.7465730309486389,
                    -0.8449072241783142,
                    -0.8449072241783142,
                    -1.0612424612045288,
                    -0.29423561692237854,
                    1.1807777881622314,
                    1.6331151723861694,
                    1.947784662246704,
                    1.6724488735198975,
                    1.456113576889038,
                    1.9281178712844849,
                    1.7511162757873535
                ],
                [
                    0.9841093420982361,
                    0.8857751488685608,
                    0.6104393005371094,
                    0.19743561744689941,
                    0.8267745971679688,
                    0.9644424915313721,
                    0.7284404039382935,
                    1.1021103858947754,
                    1.3184456825256348,
                    1.3971130847930908,
                    1.298778772354126,
                    1.41677987575531,
                    1.4954472780227661,
                    1.338112473487854,
                    1.377446174621582,
                    1.4757803678512573,
                    0.5711056590080261,
                    -0.03856665641069412,
                    -0.31390246748924255,
                    -0.29423561692237854,
                    -0.3729029893875122,
                    -0.3729029893875122,
                    -0.2549019455909729,
                    -0.8645740747451782,
                    -0.8055735230445862,
                    -0.018899815157055855,
                    0.7087735533714294,
                    1.0234429836273193,
                    0.7874408960342407,
                    0.5121051073074341,
                    1.3184456825256348,
                    1.0234429836273193
                ],
                [
                    -0.15656772255897522,
                    -0.1369008719921112,
                    -0.17623455822467804,
                    -0.3532361388206482,
                    -0.2745687663555145,
                    -0.2549019455909729,
                    -0.21556824445724487,
                    0.07943440228700638,
                    0.23676930367946625,
                    0.25643613934516907,
                    0.33510351181030273,
                    0.47277140617370605,
                    0.5514388084411621,
                    0.3941040337085724,
                    0.6891067028045654,
                    0.7481071949005127,
                    0.21710245311260223,
                    -0.07790034264326096,
                    -0.05823349952697754,
                    -0.05823349952697754,
                    -0.29423561692237854,
                    -0.29423561692237854,
                    -0.41223669052124023,
                    -0.6089051365852356,
                    0.3941040337085724,
                    0.09910139441490173,
                    0.5514388084411621,
                    0.4334377348423004,
                    -0.2549019455909729,
                    -0.33356931805610657,
                    0.13843508064746857,
                    -0.05823349952697754
                ],
                [
                    -0.8842409253120422,
                    -0.7072393298149109,
                    -0.7269061803817749,
                    -0.8055735230445862,
                    -0.4712372124195099,
                    -0.3532361388206482,
                    -0.5105708837509155,
                    -0.4515703618526459,
                    -0.43190351128578186,
                    -0.2745687663555145,
                    -0.33356931805610657,
                    -0.2352350950241089,
                    -0.17623455822467804,
                    -0.09756718575954437,
                    0.1777687668800354,
                    0.07943440228700638,
                    -0.2745687663555145,
                    -0.2745687663555145,
                    -0.2549019455909729,
                    -0.31390246748924255,
                    -0.5302377343177795,
                    -0.7072393298149109,
                    -0.29423561692237854,
                    -0.07790034264326096,
                    0.1777687668800354,
                    -0.2352350950241089,
                    0.4137708842754364,
                    1.338112473487854,
                    -0.05823349952697754,
                    -0.2352350950241089,
                    -0.41223669052124023,
                    -0.3729029893875122
                ],
                [
                    -0.9629082679748535,
                    -0.7465730309486389,
                    -0.5499045848846436,
                    -0.4909040629863739,
                    0.09910139441490173,
                    -0.018899815157055855,
                    -0.4909040629863739,
                    -0.8252403736114502,
                    -0.3729029893875122,
                    0.11876823753118515,
                    -0.19590140879154205,
                    -0.15656772255897522,
                    0.1777687668800354,
                    0.3154366612434387,
                    0.21710245311260223,
                    0.0007670287159271538,
                    -0.05823349952697754,
                    -0.15656772255897522,
                    -0.1369008719921112,
                    -0.07790034264326096,
                    -0.19590140879154205,
                    -0.3729029893875122,
                    0.6891067028045654,
                    1.298778772354126,
                    1.1807777881622314,
                    0.49243825674057007,
                    -0.2745687663555145,
                    1.456113576889038,
                    0.5121051073074341,
                    -0.3925698399543762,
                    -0.4712372124195099,
                    -0.4712372124195099
                ],
                [
                    -0.8252403736114502,
                    -0.31390246748924255,
                    -0.19590140879154205,
                    -0.5892382860183716,
                    -0.11723402887582779,
                    -0.15656772255897522,
                    -0.5892382860183716,
                    -0.41223669052124023,
                    0.2761029899120331,
                    0.5711056590080261,
                    0.5121051073074341,
                    0.15810193121433258,
                    0.13843508064746857,
                    0.25643613934516907,
                    0.040100716054439545,
                    -0.19590140879154205,
                    -0.29423561692237854,
                    -0.29423561692237854,
                    -0.17623455822467804,
                    0.0007670287159271538,
                    -0.09756718575954437,
                    0.07943440228700638,
                    1.0234429836273193,
                    1.3971130847930908,
                    1.6331151723861694,
                    1.298778772354126,
                    -0.09756718575954437,
                    0.7677740454673767,
                    0.8661082983016968,
                    -0.8449072241783142,
                    -0.4909040629863739,
                    -0.43190351128578186
                ],
                [
                    -0.5105708837509155,
                    -0.2549019455909729,
                    -0.33356931805610657,
                    -0.5892382860183716,
                    -0.4909040629863739,
                    -0.7662398815155029,
                    -0.6679056286811829,
                    -0.4515703618526459,
                    -0.2549019455909729,
                    0.0007670287159271538,
                    0.2957698404788971,
                    0.21710245311260223,
                    0.05976755917072296,
                    0.15810193121433258,
                    0.13843508064746857,
                    0.02043387107551098,
                    0.0007670287159271538,
                    0.07943440228700638,
                    0.05976755917072296,
                    0.23676930367946625,
                    0.21710245311260223,
                    0.5907724499702454,
                    1.1414440870285034,
                    1.1217772960662842,
                    1.2004445791244507,
                    1.1807777881622314,
                    0.5514388084411621,
                    -0.018899815157055855,
                    0.7284404039382935,
                    -0.9039077758789062,
                    -1.0022419691085815,
                    -0.6679056286811829
                ],
                [
                    -0.41223669052124023,
                    -0.43190351128578186,
                    -0.41223669052124023,
                    -0.5105708837509155,
                    -0.5499045848846436,
                    -0.6875724792480469,
                    -0.6875724792480469,
                    -0.31390246748924255,
                    0.13843508064746857,
                    0.37443721294403076,
                    0.5514388084411621,
                    0.6891067028045654,
                    0.7874408960342407,
                    0.8071077466011047,
                    0.7481071949005127,
                    0.6694398522377014,
                    0.9447756409645081,
                    0.9841093420982361,
                    0.925108790397644,
                    0.90544193983078,
                    0.7677740454673767,
                    0.90544193983078,
                    1.0627766847610474,
                    1.0037761926651,
                    1.0431098937988281,
                    0.8857751488685608,
                    0.8071077466011047,
                    -0.4909040629863739,
                    -0.7072393298149109,
                    -1.0415756702423096,
                    -1.1792436838150024,
                    -0.9432414174079895
                ],
                [
                    0.0007670287159271538,
                    -0.09756718575954437,
                    0.07943440228700638,
                    0.02043387107551098,
                    0.05976755917072296,
                    0.49243825674057007,
                    0.5711056590080261,
                    0.7284404039382935,
                    0.8661082983016968,
                    1.0234429836273193,
                    1.1021103858947754,
                    1.1217772960662842,
                    1.1807777881622314,
                    1.2004445791244507,
                    1.2201114892959595,
                    1.0037761926651,
                    0.9841093420982361,
                    1.0824435949325562,
                    1.0234429836273193,
                    0.7284404039382935,
                    0.09910139441490173,
                    0.19743561744689941,
                    0.37443721294403076,
                    0.7481071949005127,
                    0.90544193983078,
                    0.7677740454673767,
                    0.8464414477348328,
                    -0.29423561692237854,
                    -1.0415756702423096,
                    -0.5499045848846436,
                    -0.6679056286811829,
                    -0.8055735230445862
                ],
                [
                    0.19743561744689941,
                    0.040100716054439545,
                    0.2957698404788971,
                    0.5711056590080261,
                    0.49243825674057007,
                    0.6104393005371094,
                    0.8464414477348328,
                    0.8661082983016968,
                    0.925108790397644,
                    1.0037761926651,
                    1.1021103858947754,
                    1.1611108779907227,
                    1.2201114892959595,
                    1.2201114892959595,
                    1.1414440870285034,
                    0.9447756409645081,
                    0.5711056590080261,
                    0.5711056590080261,
                    0.6104393005371094,
                    0.3154366612434387,
                    -0.41223669052124023,
                    -0.05823349952697754,
                    0.4137708842754364,
                    0.6301061511039734,
                    0.8267745971679688,
                    0.7677740454673767,
                    0.7874408960342407,
                    0.25643613934516907,
                    0.4334377348423004,
                    1.2594451904296875,
                    0.5907724499702454,
                    -0.29423561692237854
                ],
                [
                    0.02043387107551098,
                    0.19743561744689941,
                    0.35477036237716675,
                    0.15810193121433258,
                    -0.1369008719921112,
                    -0.17623455822467804,
                    0.5711056590080261,
                    0.925108790397644,
                    1.0234429836273193,
                    1.0234429836273193,
                    1.0431098937988281,
                    0.9841093420982361,
                    0.8661082983016968,
                    0.7284404039382935,
                    0.6104393005371094,
                    0.5514388084411621,
                    0.4137708842754364,
                    0.5317719578742981,
                    0.8857751488685608,
                    0.7284404039382935,
                    0.33510351181030273,
                    0.5711056590080261,
                    0.8267745971679688,
                    0.6891067028045654,
                    0.7874408960342407,
                    0.6301061511039734,
                    0.6497730016708374,
                    0.5514388084411621,
                    0.6891067028045654,
                    0.6891067028045654,
                    0.5711056590080261,
                    0.47277140617370605
                ],
                [
                    0.11876823753118515,
                    -0.19590140879154205,
                    -0.5302377343177795,
                    -0.5892382860183716,
                    -0.2549019455909729,
                    0.23676930367946625,
                    0.49243825674057007,
                    0.8071077466011047,
                    0.90544193983078,
                    0.7087735533714294,
                    0.5317719578742981,
                    0.45310458540916443,
                    0.49243825674057007,
                    0.5907724499702454,
                    0.7087735533714294,
                    0.8267745971679688,
                    0.925108790397644,
                    0.7284404039382935,
                    0.8857751488685608,
                    0.9644424915313721,
                    0.7481071949005127,
                    0.8071077466011047,
                    0.8857751488685608,
                    0.8071077466011047,
                    0.7284404039382935,
                    0.6891067028045654,
                    0.6891067028045654,
                    0.45310458540916443,
                    0.1777687668800354,
                    -0.03856665641069412,
                    0.040100716054439545,
                    0.5317719578742981
                ],
                [
                    -0.21556824445724487,
                    -0.7465730309486389,
                    -0.5302377343177795,
                    0.23676930367946625,
                    0.6301061511039734,
                    0.8267745971679688,
                    0.6497730016708374,
                    0.47277140617370605,
                    0.37443721294403076,
                    0.35477036237716675,
                    0.5514388084411621,
                    0.7284404039382935,
                    0.8661082983016968,
                    0.9841093420982361,
                    1.0037761926651,
                    0.9447756409645081,
                    0.8661082983016968,
                    0.6301061511039734,
                    0.7677740454673767,
                    0.8857751488685608,
                    0.7874408960342407,
                    0.7481071949005127,
                    0.7874408960342407,
                    0.8464414477348328,
                    0.6891067028045654,
                    0.5514388084411621,
                    0.13843508064746857,
                    -0.2352350950241089,
                    -0.4909040629863739,
                    -0.8055735230445862,
                    -0.6089051365852356,
                    0.2957698404788971
                ],
                [
                    0.19743561744689941,
                    0.1777687668800354,
                    0.23676930367946625,
                    0.3941040337085724,
                    0.3941040337085724,
                    0.3941040337085724,
                    0.5317719578742981,
                    0.37443721294403076,
                    0.2957698404788971,
                    0.7481071949005127,
                    0.90544193983078,
                    0.9447756409645081,
                    0.90544193983078,
                    0.8267745971679688,
                    0.5514388084411621,
                    0.21710245311260223,
                    -0.1369008719921112,
                    -0.31390246748924255,
                    0.49243825674057007,
                    0.8071077466011047,
                    0.7874408960342407,
                    0.7874408960342407,
                    0.7087735533714294,
                    0.5711056590080261,
                    0.09910139441490173,
                    -0.29423561692237854,
                    -0.41223669052124023,
                    -0.6285719275474548,
                    -0.9432414174079895,
                    -0.8842409253120422,
                    -0.8449072241783142,
                    -1.0022419691085815
                ],
                [
                    0.1777687668800354,
                    0.33510351181030273,
                    0.4137708842754364,
                    0.3941040337085724,
                    0.4137708842754364,
                    0.47277140617370605,
                    0.5514388084411621,
                    0.5317719578742981,
                    0.3154366612434387,
                    0.45310458540916443,
                    0.49243825674057007,
                    0.6104393005371094,
                    0.7087735533714294,
                    0.6497730016708374,
                    -0.2549019455909729,
                    -0.8842409253120422,
                    -0.9432414174079895,
                    -0.9629082679748535,
                    0.1777687668800354,
                    0.7874408960342407,
                    0.5907724499702454,
                    0.3941040337085724,
                    0.05976755917072296,
                    -0.2745687663555145,
                    -0.3925698399543762,
                    -0.4515703618526459,
                    -0.6482387781143188,
                    -0.9235746264457703,
                    -0.9432414174079895,
                    -0.8055735230445862,
                    -1.297244668006897,
                    -1.7692488431930542
                ],
                [
                    -0.5695714354515076,
                    0.2761029899120331,
                    0.49243825674057007,
                    0.45310458540916443,
                    0.45310458540916443,
                    0.4334377348423004,
                    0.11876823753118515,
                    -0.15656772255897522,
                    -0.33356931805610657,
                    -0.41223669052124023,
                    -0.4712372124195099,
                    0.23676930367946625,
                    0.6694398522377014,
                    0.6104393005371094,
                    -0.17623455822467804,
                    -0.5892382860183716,
                    -0.43190351128578186,
                    -0.3729029893875122,
                    0.040100716054439545,
                    0.02043387107551098,
                    -0.19590140879154205,
                    -0.33356931805610657,
                    -0.41223669052124023,
                    -0.43190351128578186,
                    -0.6875724792480469,
                    -0.8645740747451782,
                    -1.0612424612045288,
                    -1.1792436838150024,
                    -1.1005761623382568,
                    -1.3759119510650635,
                    -1.6905814409255981,
                    -1.8085826635360718
                ],
                [
                    -0.7269061803817749,
                    0.040100716054439545,
                    0.21710245311260223,
                    0.21710245311260223,
                    0.2761029899120331,
                    0.19743561744689941,
                    -0.6089051365852356,
                    -0.9039077758789062,
                    -0.8055735230445862,
                    -0.6679056286811829,
                    -0.6089051365852356,
                    0.15810193121433258,
                    0.5907724499702454,
                    0.5317719578742981,
                    0.1777687668800354,
                    -0.15656772255897522,
                    -0.33356931805610657,
                    -0.5105708837509155,
                    -0.5302377343177795,
                    -0.5105708837509155,
                    -0.4712372124195099,
                    -0.43190351128578186,
                    -0.5499045848846436,
                    -0.8645740747451782,
                    -1.2382441759109497,
                    -1.1595767736434937,
                    -1.2382441759109497,
                    -1.297244668006897,
                    -1.4939130544662476,
                    -1.670914649963379,
                    -1.749582052230835,
                    -1.8085826635360718
                ],
                [
                    -0.6482387781143188,
                    -0.1369008719921112,
                    0.11876823753118515,
                    0.15810193121433258,
                    0.2761029899120331,
                    0.2957698404788971,
                    -0.33356931805610657,
                    -0.5105708837509155,
                    -0.29423561692237854,
                    -0.1369008719921112,
                    0.02043387107551098,
                    0.05976755917072296,
                    -0.19590140879154205,
                    -0.5499045848846436,
                    -0.7662398815155029,
                    -0.7859066724777222,
                    -0.6679056286811829,
                    -0.6089051365852356,
                    -0.4909040629863739,
                    -0.4515703618526459,
                    -0.6089051365852356,
                    -0.9629082679748535,
                    -1.1005761623382568,
                    -1.0612424612045288,
                    -0.9629082679748535,
                    -1.1202430725097656,
                    -1.4152456521987915,
                    -1.5135798454284668,
                    -1.5725804567337036,
                    -1.670914649963379,
                    -1.7299151420593262,
                    -1.788915753364563
                ],
                [
                    -0.6089051365852356,
                    -0.21556824445724487,
                    0.13843508064746857,
                    0.07943440228700638,
                    0.02043387107551098,
                    -0.05823349952697754,
                    -0.2549019455909729,
                    -0.41223669052124023,
                    -0.5105708837509155,
                    -0.6482387781143188,
                    -0.8449072241783142,
                    -0.9235746264457703,
                    -0.9432414174079895,
                    -0.8449072241783142,
                    -0.7662398815155029,
                    -0.6285719275474548,
                    -0.5499045848846436,
                    -0.6679056286811829,
                    -0.8252403736114502,
                    -0.9825751185417175,
                    -1.1399098634719849,
                    -1.1399098634719849,
                    -1.1005761623382568,
                    -1.218577265739441,
                    -1.0612424612045288,
                    -1.2775777578353882,
                    -1.5922472476959229,
                    -1.6315809488296509,
                    -1.5922472476959229,
                    -1.6315809488296509,
                    -1.7299151420593262,
                    -1.6905814409255981
                ],
                [
                    -0.9235746264457703,
                    -0.8645740747451782,
                    -0.7269061803817749,
                    -0.8842409253120422,
                    -0.9629082679748535,
                    -1.0612424612045288,
                    -1.1595767736434937,
                    -1.1792436838150024,
                    -1.1399098634719849,
                    -1.0415756702423096,
                    -0.9629082679748535,
                    -0.9039077758789062,
                    -0.8252403736114502,
                    -0.8055735230445862,
                    -0.8252403736114502,
                    -0.8449072241783142,
                    -0.9825751185417175,
                    -1.257910966873169,
                    -1.3365782499313354,
                    -1.0809093713760376,
                    -1.1005761623382568,
                    -1.1792436838150024,
                    -1.3562451601028442,
                    -1.4349125623703003,
                    -1.3562451601028442,
                    -1.5332467555999756,
                    -1.6315809488296509,
                    -1.6315809488296509,
                    -1.6119141578674316,
                    -1.6315809488296509,
                    -1.6512478590011597,
                    -1.6905814409255981
                ],
                [
                    -1.5332467555999756,
                    -1.5725804567337036,
                    -1.6315809488296509,
                    -1.5922472476959229,
                    -1.4545793533325195,
                    -1.3955788612365723,
                    -1.3759119510650635,
                    -1.2775777578353882,
                    -1.0809093713760376,
                    -1.0219087600708008,
                    -1.0022419691085815,
                    -1.0415756702423096,
                    -1.1399098634719849,
                    -1.257910966873169,
                    -1.2775777578353882,
                    -1.257910966873169,
                    -1.3169114589691162,
                    -1.1792436838150024,
                    -0.7465730309486389,
                    -0.9825751185417175,
                    -1.297244668006897,
                    -1.4152456521987915,
                    -1.4939130544662476,
                    -1.4939130544662476,
                    -1.5529135465621948,
                    -1.6315809488296509,
                    -1.6512478590011597,
                    -1.6315809488296509,
                    -1.6119141578674316,
                    -1.5922472476959229,
                    -1.5922472476959229,
                    -1.8479163646697998
                ],
                [
                    -1.5725804567337036,
                    -1.6315809488296509,
                    -1.710248351097107,
                    -1.670914649963379,
                    -1.5529135465621948,
                    -1.4742462635040283,
                    -1.4545793533325195,
                    -1.4349125623703003,
                    -1.3759119510650635,
                    -1.3955788612365723,
                    -1.4545793533325195,
                    -1.4545793533325195,
                    -1.3759119510650635,
                    -1.257910966873169,
                    -1.1989104747772217,
                    -1.218577265739441,
                    -1.3365782499313354,
                    -1.0612424612045288,
                    -0.5695714354515076,
                    -1.1202430725097656,
                    -1.5529135465621948,
                    -1.5135798454284668,
                    -1.4939130544662476,
                    -1.6315809488296509,
                    -1.6512478590011597,
                    -1.6512478590011597,
                    -1.6315809488296509,
                    -1.5922472476959229,
                    -1.6119141578674316,
                    -1.5135798454284668,
                    -1.788915753364563,
                    -2.064251661300659
                ],
                [
                    -1.6315809488296509,
                    -1.6512478590011597,
                    -1.7299151420593262,
                    -1.710248351097107,
                    -1.6512478590011597,
                    -1.6119141578674316,
                    -1.6119141578674316,
                    -1.5725804567337036,
                    -1.5135798454284668,
                    -1.4152456521987915,
                    -1.3169114589691162,
                    -1.2775777578353882,
                    -1.218577265739441,
                    -1.218577265739441,
                    -1.2382441759109497,
                    -1.3365782499313354,
                    -1.5135798454284668,
                    -1.2382441759109497,
                    -0.7465730309486389,
                    -1.3562451601028442,
                    -1.6315809488296509,
                    -1.5135798454284668,
                    -1.6905814409255981,
                    -1.710248351097107,
                    -1.670914649963379,
                    -1.670914649963379,
                    -1.6315809488296509,
                    -1.5922472476959229,
                    -1.5725804567337036,
                    -1.6315809488296509,
                    -2.162585973739624,
                    -2.2805869579315186
                ],
                [
                    -1.749582052230835,
                    -1.670914649963379,
                    -1.710248351097107,
                    -1.6315809488296509,
                    -1.5529135465621948,
                    -1.4939130544662476,
                    -1.4545793533325195,
                    -1.4152456521987915,
                    -1.3562451601028442,
                    -1.297244668006897,
                    -1.257910966873169,
                    -1.297244668006897,
                    -1.297244668006897,
                    -1.3365782499313354,
                    -1.4152456521987915,
                    -1.5725804567337036,
                    -1.8085826635360718,
                    -1.4742462635040283,
                    -0.8842409253120422,
                    -1.4349125623703003,
                    -1.6119141578674316,
                    -1.6905814409255981,
                    -1.7299151420593262,
                    -1.7299151420593262,
                    -1.6905814409255981,
                    -1.6905814409255981,
                    -1.710248351097107,
                    -1.6119141578674316,
                    -1.5332467555999756,
                    -2.0249180793762207,
                    -2.3002538681030273,
                    -2.2805869579315186
                ],
                [
                    -1.6119141578674316,
                    -1.5725804567337036,
                    -1.5332467555999756,
                    -1.4939130544662476,
                    -1.4742462635040283,
                    -1.4742462635040283,
                    -1.4742462635040283,
                    -1.4545793533325195,
                    -1.4349125623703003,
                    -1.4152456521987915,
                    -1.4545793533325195,
                    -1.5332467555999756,
                    -1.6315809488296509,
                    -1.749582052230835,
                    -1.906916856765747,
                    -2.083918571472168,
                    -2.2609200477600098,
                    -1.8872500658035278,
                    -1.1792436838150024,
                    -1.5529135465621948,
                    -1.7692488431930542,
                    -1.749582052230835,
                    -1.749582052230835,
                    -1.7299151420593262,
                    -1.7299151420593262,
                    -1.749582052230835,
                    -1.749582052230835,
                    -1.5529135465621948,
                    -1.8085826635360718,
                    -2.3002538681030273,
                    -2.319920539855957,
                    -2.2609200477600098
                ]
            ],
            [
                [
                    2.109891653060913,
                    2.031850576400757,
                    1.5636035203933716,
                    1.4075212478637695,
                    2.109891653060913,
                    2.383035659790039,
                    2.4220564365386963,
                    2.4805872440338135,
                    2.5196077823638916,
                    2.5586283206939697,
                    2.5391180515289307,
                    2.363525390625,
                    2.4610769748687744,
                    2.4805872440338135,
                    2.5000975131988525,
                    2.5586283206939697,
                    2.2074432373046875,
                    2.4610769748687744,
                    2.5586283206939697,
                    2.617159128189087,
                    2.636669635772705,
                    2.5196077823638916,
                    2.5196077823638916,
                    2.5196077823638916,
                    2.5586283206939697,
                    2.363525390625,
                    2.4415667057037354,
                    2.597648859024048,
                    2.4805872440338135,
                    2.344015121459961,
                    2.5196077823638916,
                    2.578138589859009
                ],
                [
                    2.2464637756347656,
                    2.1879327297210693,
                    1.7001756429672241,
                    1.3685007095336914,
                    2.129401922225952,
                    2.4610769748687744,
                    2.4610769748687744,
                    2.4220564365386963,
                    2.5196077823638916,
                    2.597648859024048,
                    2.5586283206939697,
                    2.304994583129883,
                    2.5196077823638916,
                    2.5586283206939697,
                    2.5586283206939697,
                    2.617159128189087,
                    2.2659740447998047,
                    2.4415667057037354,
                    2.5196077823638916,
                    2.675690174102783,
                    2.675690174102783,
                    2.4220564365386963,
                    2.4220564365386963,
                    2.5391180515289307,
                    2.617159128189087,
                    2.383035659790039,
                    2.5196077823638916,
                    2.6952004432678223,
                    2.4610769748687744,
                    2.383035659790039,
                    2.656179904937744,
                    2.675690174102783
                ],
                [
                    2.1684224605560303,
                    2.109891653060913,
                    1.6611549854278564,
                    1.3099697828292847,
                    2.051360845565796,
                    2.4220564365386963,
                    2.4415667057037354,
                    2.2269535064697266,
                    2.363525390625,
                    2.5391180515289307,
                    2.383035659790039,
                    2.2269535064697266,
                    2.363525390625,
                    2.4415667057037354,
                    2.4220564365386963,
                    2.597648859024048,
                    2.2464637756347656,
                    2.383035659790039,
                    2.4805872440338135,
                    2.578138589859009,
                    2.383035659790039,
                    1.97331964969635,
                    2.304994583129883,
                    2.4415667057037354,
                    2.617159128189087,
                    2.363525390625,
                    2.5000975131988525,
                    2.6952004432678223,
                    2.4805872440338135,
                    2.304994583129883,
                    2.675690174102783,
                    2.597648859024048
                ],
                [
                    2.109891653060913,
                    1.9928299188613892,
                    1.5636035203933716,
                    1.2709492444992065,
                    1.953809380531311,
                    2.2269535064697266,
                    2.363525390625,
                    2.1684224605560303,
                    2.2464637756347656,
                    2.4415667057037354,
                    2.2659740447998047,
                    2.090381383895874,
                    2.1684224605560303,
                    2.383035659790039,
                    2.2659740447998047,
                    2.597648859024048,
                    2.2659740447998047,
                    2.344015121459961,
                    2.4610769748687744,
                    2.4220564365386963,
                    1.4075212478637695,
                    1.2124183177947998,
                    2.2464637756347656,
                    2.4805872440338135,
                    2.617159128189087,
                    2.324504852294922,
                    2.4415667057037354,
                    2.675690174102783,
                    2.4220564365386963,
                    2.2269535064697266,
                    2.617159128189087,
                    2.5196077823638916
                ],
                [
                    2.129401922225952,
                    2.0123403072357178,
                    1.5440932512283325,
                    1.1343772411346436,
                    1.8757681846618652,
                    2.090381383895874,
                    2.2854843139648438,
                    2.0123403072357178,
                    2.031850576400757,
                    2.363525390625,
                    2.1684224605560303,
                    1.97331964969635,
                    2.051360845565796,
                    2.304994583129883,
                    1.953809380531311,
                    2.4220564365386963,
                    2.2464637756347656,
                    2.2074432373046875,
                    2.4220564365386963,
                    2.2269535064697266,
                    1.2124183177947998,
                    1.2514389753341675,
                    2.2464637756347656,
                    2.4415667057037354,
                    2.597648859024048,
                    2.2854843139648438,
                    2.344015121459961,
                    2.5586283206939697,
                    2.2854843139648438,
                    2.304994583129883,
                    2.578138589859009,
                    2.4610769748687744
                ],
                [
                    2.070871114730835,
                    1.934299111366272,
                    1.5050727128982544,
                    0.978294849395752,
                    1.7977269887924194,
                    1.934299111366272,
                    2.1684224605560303,
                    1.934299111366272,
                    1.953809380531311,
                    2.2659740447998047,
                    2.031850576400757,
                    1.953809380531311,
                    1.953809380531311,
                    2.2074432373046875,
                    1.6806652545928955,
                    1.7977269887924194,
                    1.836747646331787,
                    1.7977269887924194,
                    2.402545928955078,
                    1.817237377166748,
                    0.3149450123310089,
                    1.1538875102996826,
                    2.2659740447998047,
                    2.324504852294922,
                    2.5391180515289307,
                    2.1684224605560303,
                    2.051360845565796,
                    2.304994583129883,
                    2.090381383895874,
                    2.2854843139648438,
                    2.5000975131988525,
                    2.2659740447998047
                ],
                [
                    1.914788842201233,
                    1.7196859121322632,
                    1.3880109786987305,
                    0.7051507830619812,
                    1.6026241779327393,
                    1.7001756429672241,
                    2.0123403072357178,
                    1.836747646331787,
                    1.8952784538269043,
                    2.051360845565796,
                    1.836747646331787,
                    1.8952784538269043,
                    1.914788842201233,
                    2.090381383895874,
                    1.3880109786987305,
                    1.1929080486297607,
                    1.4270315170288086,
                    1.4660521745681763,
                    1.8757681846618652,
                    1.6221344470977783,
                    0.4515170454978943,
                    0.841722846031189,
                    1.3685007095336914,
                    1.4270315170288086,
                    2.090381383895874,
                    2.070871114730835,
                    1.7977269887924194,
                    2.031850576400757,
                    1.8562579154968262,
                    2.051360845565796,
                    2.2854843139648438,
                    1.9928299188613892
                ],
                [
                    1.8952784538269043,
                    1.7001756429672241,
                    1.2709492444992065,
                    0.6466199159622192,
                    1.6221344470977783,
                    1.7587064504623413,
                    1.7977269887924194,
                    1.7391961812973022,
                    1.836747646331787,
                    1.8757681846618652,
                    1.6416447162628174,
                    1.7782167196273804,
                    1.7977269887924194,
                    1.7977269887924194,
                    1.5245829820632935,
                    1.7391961812973022,
                    1.2709492444992065,
                    0.8027022480964661,
                    0.15886253118515015,
                    -0.15330210328102112,
                    -0.27036383748054504,
                    -0.38742557168006897,
                    -0.5044873356819153,
                    -0.7971416711807251,
                    -0.05575065314769745,
                    1.3489903211593628,
                    1.7196859121322632,
                    1.97331964969635,
                    1.6416447162628174,
                    1.3880109786987305,
                    1.7977269887924194,
                    1.5440932512283325
                ],
                [
                    1.2709492444992065,
                    1.1538875102996826,
                    0.9002537131309509,
                    0.5100479125976562,
                    1.0953565835952759,
                    1.1929080486297607,
                    0.91976398229599,
                    1.2709492444992065,
                    1.4270315170288086,
                    1.3685007095336914,
                    1.2904595136642456,
                    1.4660521745681763,
                    1.5831139087677002,
                    1.3880109786987305,
                    1.4075212478637695,
                    1.6026241779327393,
                    0.8807434439659119,
                    0.4515170454978943,
                    0.275924414396286,
                    0.275924414396286,
                    0.23690369725227356,
                    0.23690369725227356,
                    0.275924414396286,
                    -0.4654667377471924,
                    -0.5044873356819153,
                    0.19788311421871185,
                    0.861233115196228,
                    1.1343772411346436,
                    0.8222125172615051,
                    0.4515170454978943,
                    1.2124183177947998,
                    0.8807434439659119
                ],
                [
                    0.1783728301525116,
                    0.23690369725227356,
                    0.1783728301525116,
                    -0.036240365356206894,
                    0.0027802155818790197,
                    0.0027802155818790197,
                    0.0027802155818790197,
                    0.275924414396286,
                    0.3929861783981323,
                    0.3929861783981323,
                    0.4515170454978943,
                    0.5880890488624573,
                    0.7441713809967041,
                    0.6271096467971802,
                    0.9002537131309509,
                    1.0368257761001587,
                    0.6466199159622192,
                    0.4905376136302948,
                    0.5880890488624573,
                    0.5100479125976562,
                    0.3149450123310089,
                    0.334455281496048,
                    0.11984195560216904,
                    -0.19232268631458282,
                    0.6856405138969421,
                    0.334455281496048,
                    0.7051507830619812,
                    0.5295581817626953,
                    -0.15330210328102112,
                    -0.17281238734722137,
                    0.275924414396286,
                    0.061311084777116776
                ],
                [
                    -0.48497703671455383,
                    -0.23134326934814453,
                    -0.30938443541526794,
                    -0.5044873356819153,
                    -0.13379181921482086,
                    0.022290505468845367,
                    -0.19232268631458282,
                    -0.15330210328102112,
                    -0.13379181921482086,
                    0.08082137256860733,
                    -0.01673007383942604,
                    0.022290505468845367,
                    0.1783728301525116,
                    0.3929861783981323,
                    0.724661111831665,
                    0.6271096467971802,
                    0.275924414396286,
                    0.256413996219635,
                    0.256413996219635,
                    0.11984195560216904,
                    -0.05575065314769745,
                    -0.19232268631458282,
                    0.15886253118515015,
                    0.275924414396286,
                    0.3929861783981323,
                    -0.0752609446644783,
                    0.4905376136302948,
                    1.3294800519943237,
                    0.0027802155818790197,
                    0.061311084777116776,
                    -0.09477123618125916,
                    -0.036240365356206894
                ],
                [
                    -0.5044873356819153,
                    -0.19232268631458282,
                    -0.0752609446644783,
                    -0.15330210328102112,
                    0.5490685105323792,
                    0.4515170454978943,
                    -0.01673007383942604,
                    -0.38742557168006897,
                    0.04180079698562622,
                    0.6271096467971802,
                    0.256413996219635,
                    0.2173934131860733,
                    0.6661302447319031,
                    0.9978051781654358,
                    0.9978051781654358,
                    0.724661111831665,
                    0.5490685105323792,
                    0.3149450123310089,
                    0.256413996219635,
                    0.256413996219635,
                    0.1783728301525116,
                    0.0027802155818790197,
                    0.9978051781654358,
                    1.5050727128982544,
                    1.2904595136642456,
                    0.5490685105323792,
                    -0.27036383748054504,
                    1.3685007095336914,
                    0.5100479125976562,
                    -0.09477123618125916,
                    -0.11428152769804001,
                    -0.11428152769804001
                ],
                [
                    -0.27036383748054504,
                    0.3149450123310089,
                    0.3539655804634094,
                    -0.19232268631458282,
                    0.29543471336364746,
                    0.3149450123310089,
                    -0.09477123618125916,
                    0.08082137256860733,
                    0.783191978931427,
                    1.114866852760315,
                    1.0563360452651978,
                    0.724661111831665,
                    0.8027022480964661,
                    0.9978051781654358,
                    0.783191978931427,
                    0.4905376136302948,
                    0.3149450123310089,
                    0.2173934131860733,
                    0.29543471336364746,
                    0.5100479125976562,
                    0.3929861783981323,
                    0.4515170454978943,
                    1.2709492444992065,
                    1.5440932512283325,
                    1.7391961812973022,
                    1.3880109786987305,
                    -0.036240365356206894,
                    0.7441713809967041,
                    0.9002537131309509,
                    -0.5825284719467163,
                    -0.17281238734722137,
                    -0.09477123618125916
                ],
                [
                    0.11984195560216904,
                    0.3929861783981323,
                    0.23690369725227356,
                    -0.15330210328102112,
                    -0.01673007383942604,
                    -0.250853568315506,
                    -0.11428152769804001,
                    0.1393522471189499,
                    0.334455281496048,
                    0.6075993776321411,
                    0.91976398229599,
                    0.8807434439659119,
                    0.7636816501617432,
                    0.91976398229599,
                    0.861233115196228,
                    0.6856405138969421,
                    0.6271096467971802,
                    0.6466199159622192,
                    0.6075993776321411,
                    0.8027022480964661,
                    0.7051507830619812,
                    0.91976398229599,
                    1.3294800519943237,
                    1.2319285869598389,
                    1.3099697828292847,
                    1.3099697828292847,
                    0.6661302447319031,
                    0.08082137256860733,
                    0.841722846031189,
                    -0.6605696678161621,
                    -0.6995902061462402,
                    -0.34840500354766846
                ],
                [
                    0.256413996219635,
                    0.275924414396286,
                    0.2173934131860733,
                    0.0027802155818790197,
                    0.04180079698562622,
                    -0.01673007383942604,
                    0.022290505468845367,
                    0.3929861783981323,
                    0.8807434439659119,
                    1.0563360452651978,
                    1.2124183177947998,
                    1.3685007095336914,
                    1.4855624437332153,
                    1.5050727128982544,
                    1.4855624437332153,
                    1.3880109786987305,
                    1.6221344470977783,
                    1.6026241779327393,
                    1.4855624437332153,
                    1.3685007095336914,
                    1.1343772411346436,
                    1.1538875102996826,
                    1.1929080486297607,
                    1.0563360452651978,
                    1.114866852760315,
                    0.9978051781654358,
                    0.9587845802307129,
                    -0.2898741364479065,
                    -0.5239976048469543,
                    -0.836162269115448,
                    -0.914203405380249,
                    -0.6410593390464783
                ],
                [
                    0.724661111831665,
                    0.6856405138969421,
                    0.783191978931427,
                    0.6075993776321411,
                    0.7636816501617432,
                    1.2709492444992065,
                    1.3685007095336914,
                    1.5440932512283325,
                    1.7001756429672241,
                    1.7782167196273804,
                    1.817237377166748,
                    1.836747646331787,
                    1.8562579154968262,
                    1.8757681846618652,
                    1.914788842201233,
                    1.6806652545928955,
                    1.6416447162628174,
                    1.7001756429672241,
                    1.5831139087677002,
                    1.114866852760315,
                    0.3929861783981323,
                    0.4124964475631714,
                    0.4905376136302948,
                    0.8027022480964661,
                    0.9978051781654358,
                    0.91976398229599,
                    1.0563360452651978,
                    -0.01673007383942604,
                    -0.7971416711807251,
                    -0.42644616961479187,
                    -0.4654667377471924,
                    -0.5435079336166382
                ],
                [
                    0.9978051781654358,
                    0.8807434439659119,
                    1.0368257761001587,
                    1.2124183177947998,
                    1.1929080486297607,
                    1.3880109786987305,
                    1.6416447162628174,
                    1.7001756429672241,
                    1.7782167196273804,
                    1.836747646331787,
                    1.8757681846618652,
                    1.8757681846618652,
                    1.8757681846618652,
                    1.836747646331787,
                    1.7001756429672241,
                    1.4855624437332153,
                    1.0953565835952759,
                    1.0953565835952759,
                    1.0758463144302368,
                    0.6661302447319031,
                    -0.11428152769804001,
                    0.15886253118515015,
                    0.5490685105323792,
                    0.7636816501617432,
                    1.0368257761001587,
                    0.9978051781654358,
                    1.0368257761001587,
                    0.5490685105323792,
                    0.6466199159622192,
                    1.3099697828292847,
                    0.7441713809967041,
                    -0.05575065314769745
                ],
                [
                    0.841722846031189,
                    1.0953565835952759,
                    1.1733977794647217,
                    0.841722846031189,
                    0.5295581817626953,
                    0.5685787796974182,
                    1.3294800519943237,
                    1.7196859121322632,
                    1.836747646331787,
                    1.8952784538269043,
                    1.8562579154968262,
                    1.7196859121322632,
                    1.5050727128982544,
                    1.3099697828292847,
                    1.0368257761001587,
                    0.9392743110656738,
                    0.8027022480964661,
                    0.9002537131309509,
                    1.2514389753341675,
                    1.0758463144302368,
                    0.6466199159622192,
                    0.841722846031189,
                    1.0368257761001587,
                    0.9002537131309509,
                    1.0758463144302368,
                    0.9392743110656738,
                    0.91976398229599,
                    0.8222125172615051,
                    0.861233115196228,
                    0.7051507830619812,
                    0.7051507830619812,
                    0.6661302447319031
                ],
                [
                    0.9392743110656738,
                    0.6661302447319031,
                    0.275924414396286,
                    0.1393522471189499,
                    0.47102731466293335,
                    0.978294849395752,
                    1.2319285869598389,
                    1.5636035203933716,
                    1.6611549854278564,
                    1.4465417861938477,
                    1.2514389753341675,
                    1.114866852760315,
                    1.0953565835952759,
                    1.1343772411346436,
                    1.1343772411346436,
                    1.2124183177947998,
                    1.2904595136642456,
                    1.0563360452651978,
                    1.2124183177947998,
                    1.3099697828292847,
                    1.0953565835952759,
                    1.1538875102996826,
                    1.1929080486297607,
                    1.1343772411346436,
                    1.0563360452651978,
                    0.9978051781654358,
                    0.9587845802307129,
                    0.7051507830619812,
                    0.3734758794307709,
                    0.08082137256860733,
                    0.2173934131860733,
                    0.7636816501617432
                ],
                [
                    0.5685787796974182,
                    0.061311084777116776,
                    0.256413996219635,
                    1.01731538772583,
                    1.4465417861938477,
                    1.6221344470977783,
                    1.4075212478637695,
                    1.2124183177947998,
                    1.0758463144302368,
                    0.9587845802307129,
                    1.114866852760315,
                    1.2514389753341675,
                    1.3880109786987305,
                    1.4855624437332153,
                    1.5050727128982544,
                    1.4075212478637695,
                    1.2904595136642456,
                    0.9978051781654358,
                    1.1343772411346436,
                    1.2319285869598389,
                    1.1538875102996826,
                    1.1343772411346436,
                    1.1929080486297607,
                    1.2514389753341675,
                    0.978294849395752,
                    0.8222125172615051,
                    0.43200674653053284,
                    0.04180079698562622,
                    -0.21183297038078308,
                    -0.5239976048469543,
                    -0.30938443541526794,
                    0.5880890488624573
                ],
                [
                    1.01731538772583,
                    0.9978051781654358,
                    1.0563360452651978,
                    1.2124183177947998,
                    1.2124183177947998,
                    1.1733977794647217,
                    1.2709492444992065,
                    1.0953565835952759,
                    0.978294849395752,
                    1.3685007095336914,
                    1.4855624437332153,
                    1.4660521745681763,
                    1.3880109786987305,
                    1.3099697828292847,
                    1.0563360452651978,
                    0.7051507830619812,
                    0.29543471336364746,
                    0.08082137256860733,
                    0.841722846031189,
                    1.1538875102996826,
                    1.1538875102996826,
                    1.1538875102996826,
                    1.114866852760315,
                    0.9392743110656738,
                    0.3734758794307709,
                    -0.036240365356206894,
                    -0.15330210328102112,
                    -0.3679153025150299,
                    -0.6605696678161621,
                    -0.5825284719467163,
                    -0.5435079336166382,
                    -0.6995902061462402
                ],
                [
                    0.9978051781654358,
                    1.1343772411346436,
                    1.2319285869598389,
                    1.1929080486297607,
                    1.1733977794647217,
                    1.2124183177947998,
                    1.2709492444992065,
                    1.2124183177947998,
                    0.978294849395752,
                    1.114866852760315,
                    1.114866852760315,
                    1.1538875102996826,
                    1.1929080486297607,
                    1.114866852760315,
                    0.23690369725227356,
                    -0.38742557168006897,
                    -0.5044873356819153,
                    -0.5630182027816772,
                    0.5490685105323792,
                    1.1343772411346436,
                    0.9392743110656738,
                    0.7441713809967041,
                    0.43200674653053284,
                    0.061311084777116776,
                    -0.11428152769804001,
                    -0.19232268631458282,
                    -0.38742557168006897,
                    -0.6605696678161621,
                    -0.6800799369812012,
                    -0.5044873356819153,
                    -0.9922446608543396,
                    -1.46049165725708
                ],
                [
                    0.19788311421871185,
                    1.01731538772583,
                    1.2514389753341675,
                    1.1929080486297607,
                    1.1929080486297607,
                    1.1538875102996826,
                    0.783191978931427,
                    0.4905376136302948,
                    0.3149450123310089,
                    0.23690369725227356,
                    0.15886253118515015,
                    0.783191978931427,
                    1.1733977794647217,
                    1.0758463144302368,
                    0.334455281496048,
                    -0.11428152769804001,
                    0.0027802155818790197,
                    0.0027802155818790197,
                    0.3929861783981323,
                    0.3734758794307709,
                    0.1393522471189499,
                    -0.01673007383942604,
                    -0.09477123618125916,
                    -0.11428152769804001,
                    -0.3679153025150299,
                    -0.5435079336166382,
                    -0.7581210732460022,
                    -0.8751828074455261,
                    -0.7971416711807251,
                    -1.0702857971191406,
                    -1.3824505805969238,
                    -1.4800019264221191
                ],
                [
                    -0.05575065314769745,
                    0.7051507830619812,
                    0.9002537131309509,
                    0.8807434439659119,
                    0.9587845802307129,
                    0.861233115196228,
                    0.04180079698562622,
                    -0.27036383748054504,
                    -0.19232268631458282,
                    -0.036240365356206894,
                    0.022290505468845367,
                    0.724661111831665,
                    1.1343772411346436,
                    1.0563360452651978,
                    0.6856405138969421,
                    0.334455281496048,
                    0.10033166408538818,
                    -0.13379181921482086,
                    -0.15330210328102112,
                    -0.15330210328102112,
                    -0.15330210328102112,
                    -0.11428152769804001,
                    -0.27036383748054504,
                    -0.5825284719467163,
                    -0.8751828074455261,
                    -0.7971416711807251,
                    -0.89469313621521,
                    -0.9532240033149719,
                    -1.1483269929885864,
                    -1.3629401922225952,
                    -1.440981388092041,
                    -1.4995123147964478
                ],
                [
                    -0.01673007383942604,
                    0.47102731466293335,
                    0.724661111831665,
                    0.783191978931427,
                    0.91976398229599,
                    0.9392743110656738,
                    0.275924414396286,
                    0.10033166408538818,
                    0.29543471336364746,
                    0.43200674653053284,
                    0.5880890488624573,
                    0.6271096467971802,
                    0.3539655804634094,
                    0.0027802155818790197,
                    -0.250853568315506,
                    -0.30938443541526794,
                    -0.250853568315506,
                    -0.21183297038078308,
                    -0.09477123618125916,
                    -0.11428152769804001,
                    -0.2898741364479065,
                    -0.6605696678161621,
                    -0.8166519403457642,
                    -0.7581210732460022,
                    -0.5630182027816772,
                    -0.7191005349159241,
                    -1.0312652587890625,
                    -1.0897960662841797,
                    -1.2068578004837036,
                    -1.3434299230575562,
                    -1.421471118927002,
                    -1.46049165725708
                ],
                [
                    0.04180079698562622,
                    0.43200674653053284,
                    0.783191978931427,
                    0.724661111831665,
                    0.6661302447319031,
                    0.5685787796974182,
                    0.3539655804634094,
                    0.19788311421871185,
                    0.08082137256860733,
                    -0.21183297038078308,
                    -0.4459564685821533,
                    -0.5239976048469543,
                    -0.5435079336166382,
                    -0.4459564685821533,
                    -0.2898741364479065,
                    -0.250853568315506,
                    -0.250853568315506,
                    -0.2898741364479065,
                    -0.38742557168006897,
                    -0.6215490698814392,
                    -0.8166519403457642,
                    -0.8166519403457642,
                    -0.777631402015686,
                    -0.8751828074455261,
                    -0.6995902061462402,
                    -0.89469313621521,
                    -1.2068578004837036,
                    -1.2458784580230713,
                    -1.2263681888580322,
                    -1.284899115562439,
                    -1.304409384727478,
                    -1.284899115562439
                ],
                [
                    -0.34840500354766846,
                    -0.27036383748054504,
                    -0.15330210328102112,
                    -0.2898741364479065,
                    -0.42644616961479187,
                    -0.5435079336166382,
                    -0.6215490698814392,
                    -0.6410593390464783,
                    -0.6215490698814392,
                    -0.6800799369812012,
                    -0.6410593390464783,
                    -0.5825284719467163,
                    -0.5239976048469543,
                    -0.4459564685821533,
                    -0.38742557168006897,
                    -0.5044873356819153,
                    -0.7191005349159241,
                    -0.89469313621521,
                    -0.89469313621521,
                    -0.7386108040809631,
                    -0.777631402015686,
                    -0.8166519403457642,
                    -0.972734272480011,
                    -1.0702857971191406,
                    -0.9922446608543396,
                    -1.1678372621536255,
                    -1.2653887271881104,
                    -1.2458784580230713,
                    -1.2653887271881104,
                    -1.284899115562439,
                    -1.2068578004837036,
                    -1.284899115562439
                ],
                [
                    -1.0702857971191406,
                    -1.1093063354492188,
                    -1.1678372621536255,
                    -1.1483269929885864,
                    -1.0507755279541016,
                    -1.0312652587890625,
                    -1.0117549896240234,
                    -0.89469313621521,
                    -0.6995902061462402,
                    -0.6800799369812012,
                    -0.6800799369812012,
                    -0.7191005349159241,
                    -0.8166519403457642,
                    -0.89469313621521,
                    -0.8751828074455261,
                    -0.9337137341499329,
                    -1.0312652587890625,
                    -0.836162269115448,
                    -0.328894704580307,
                    -0.6215490698814392,
                    -0.9532240033149719,
                    -1.0507755279541016,
                    -1.1288167238235474,
                    -1.1093063354492188,
                    -1.1873475313186646,
                    -1.2653887271881104,
                    -1.284899115562439,
                    -1.2653887271881104,
                    -1.2458784580230713,
                    -1.2458784580230713,
                    -1.2458784580230713,
                    -1.5385328531265259
                ],
                [
                    -1.2458784580230713,
                    -1.284899115562439,
                    -1.3629401922225952,
                    -1.3434299230575562,
                    -1.2653887271881104,
                    -1.1873475313186646,
                    -1.1873475313186646,
                    -1.1483269929885864,
                    -1.0897960662841797,
                    -1.0702857971191406,
                    -1.1288167238235474,
                    -1.1288167238235474,
                    -1.0507755279541016,
                    -0.9337137341499329,
                    -0.836162269115448,
                    -0.89469313621521,
                    -1.0702857971191406,
                    -0.7581210732460022,
                    -0.19232268631458282,
                    -0.7581210732460022,
                    -1.1873475313186646,
                    -1.1288167238235474,
                    -1.0897960662841797,
                    -1.2263681888580322,
                    -1.2653887271881104,
                    -1.284899115562439,
                    -1.2653887271881104,
                    -1.2263681888580322,
                    -1.2458784580230713,
                    -1.1873475313186646,
                    -1.4995123147964478,
                    -1.8311872482299805
                ],
                [
                    -1.3434299230575562,
                    -1.3629401922225952,
                    -1.440981388092041,
                    -1.421471118927002,
                    -1.3629401922225952,
                    -1.323919653892517,
                    -1.323919653892517,
                    -1.284899115562439,
                    -1.2263681888580322,
                    -1.1093063354492188,
                    -0.9922446608543396,
                    -0.9532240033149719,
                    -0.89469313621521,
                    -0.89469313621521,
                    -0.89469313621521,
                    -1.0312652587890625,
                    -1.2458784580230713,
                    -0.9337137341499329,
                    -0.4069358706474304,
                    -0.9922446608543396,
                    -1.2653887271881104,
                    -1.1288167238235474,
                    -1.284899115562439,
                    -1.304409384727478,
                    -1.304409384727478,
                    -1.304409384727478,
                    -1.2653887271881104,
                    -1.2263681888580322,
                    -1.2068578004837036,
                    -1.323919653892517,
                    -1.9482489824295044,
                    -2.1238415241241455
                ],
                [
                    -1.46049165725708,
                    -1.3824505805969238,
                    -1.421471118927002,
                    -1.3434299230575562,
                    -1.2458784580230713,
                    -1.1678372621536255,
                    -1.1288167238235474,
                    -1.0702857971191406,
                    -1.0117549896240234,
                    -0.972734272480011,
                    -0.9337137341499329,
                    -0.972734272480011,
                    -0.972734272480011,
                    -1.0312652587890625,
                    -1.0897960662841797,
                    -1.2653887271881104,
                    -1.5190225839614868,
                    -1.1873475313186646,
                    -0.5630182027816772,
                    -1.0702857971191406,
                    -1.2458784580230713,
                    -1.284899115562439,
                    -1.304409384727478,
                    -1.304409384727478,
                    -1.323919653892517,
                    -1.323919653892517,
                    -1.3434299230575562,
                    -1.2458784580230713,
                    -1.1678372621536255,
                    -1.7531460523605347,
                    -2.1628620624542236,
                    -2.1628620624542236
                ],
                [
                    -1.304409384727478,
                    -1.2458784580230713,
                    -1.2068578004837036,
                    -1.1678372621536255,
                    -1.1288167238235474,
                    -1.1288167238235474,
                    -1.1288167238235474,
                    -1.0897960662841797,
                    -1.0897960662841797,
                    -1.1483269929885864,
                    -1.1873475313186646,
                    -1.2458784580230713,
                    -1.3434299230575562,
                    -1.46049165725708,
                    -1.6360843181610107,
                    -1.8311872482299805,
                    -2.006779909133911,
                    -1.577553391456604,
                    -0.8166519403457642,
                    -1.1678372621536255,
                    -1.3629401922225952,
                    -1.3434299230575562,
                    -1.3434299230575562,
                    -1.323919653892517,
                    -1.3629401922225952,
                    -1.3629401922225952,
                    -1.3824505805969238,
                    -1.2068578004837036,
                    -1.4995123147964478,
                    -2.0653107166290283,
                    -2.1628620624542236,
                    -2.0848209857940674
                ]
            ]
        ],
        [
            [
                [
                    0.5755964517593384,
                    0.8082154393196106,
                    0.9826796650886536,
                    1.2540684938430786,
                    1.00206458568573,
                    0.7888305187225342,
                    0.827600359916687,
                    0.7888305187225342,
                    0.8663701415061951,
                    1.0408344268798828,
                    1.1959137916564941,
                    1.1959137916564941,
                    1.1959137916564941,
                    1.1959137916564941,
                    1.1377589702606201,
                    1.1377589702606201,
                    1.0989891290664673,
                    1.0602192878723145,
                    1.1377589702606201,
                    1.176528811454773,
                    1.1959137916564941,
                    1.1959137916564941,
                    1.2152986526489258,
                    1.2346835136413574,
                    1.1959137916564941,
                    1.1959137916564941,
                    1.2152986526489258,
                    1.350993037223816,
                    1.4673025608062744,
                    1.4673025608062744,
                    1.486687421798706,
                    1.2928383350372314
                ],
                [
                    0.5368266105651855,
                    0.7306757569313049,
                    0.8857550621032715,
                    1.1959137916564941,
                    1.0408344268798828,
                    0.5755964517593384,
                    0.556211531162262,
                    0.6531360745429993,
                    0.6531360745429993,
                    0.7694455981254578,
                    0.8857550621032715,
                    0.9632947444915771,
                    0.8469852805137634,
                    0.8857550621032715,
                    0.7112908363342285,
                    0.7694455981254578,
                    0.8663701415061951,
                    0.7500606775283813,
                    0.7888305187225342,
                    0.7694455981254578,
                    0.8082154393196106,
                    0.9245249032974243,
                    0.8469852805137634,
                    0.827600359916687,
                    0.8469852805137634,
                    0.9245249032974243,
                    1.2540684938430786,
                    1.486687421798706,
                    1.5254572629928589,
                    1.486687421798706,
                    1.5060724020004272,
                    1.2346835136413574
                ],
                [
                    0.5755964517593384,
                    0.6725209951400757,
                    0.827600359916687,
                    1.1377589702606201,
                    1.1959137916564941,
                    0.9439098238945007,
                    0.9826796650886536,
                    1.2152986526489258,
                    1.0989891290664673,
                    1.0408344268798828,
                    1.00206458568573,
                    1.2540684938430786,
                    1.2928383350372314,
                    1.3316081762313843,
                    1.2152986526489258,
                    1.1571439504623413,
                    1.312223196029663,
                    1.3316081762313843,
                    1.312223196029663,
                    1.3316081762313843,
                    1.350993037223816,
                    1.3897628784179688,
                    1.312223196029663,
                    1.2734533548355103,
                    1.2734533548355103,
                    1.3897628784179688,
                    1.5642271041870117,
                    1.583612084388733,
                    1.6029969453811646,
                    1.5642271041870117,
                    1.5254572629928589,
                    1.2346835136413574
                ],
                [
                    0.4980567693710327,
                    0.6143662929534912,
                    0.7888305187225342,
                    1.00206458568573,
                    1.0602192878723145,
                    1.1571439504623413,
                    1.4285327196121216,
                    1.3897628784179688,
                    1.0989891290664673,
                    1.5254572629928589,
                    1.54484224319458,
                    1.40914785861969,
                    1.6417667865753174,
                    1.3897628784179688,
                    1.370378017425537,
                    1.5060724020004272,
                    1.54484224319458,
                    1.583612084388733,
                    1.6417667865753174,
                    1.5060724020004272,
                    1.583612084388733,
                    1.6417667865753174,
                    1.3897628784179688,
                    1.5254572629928589,
                    1.6029969453811646,
                    1.40914785861969,
                    1.5254572629928589,
                    1.4673025608062744,
                    1.6223819255828857,
                    1.583612084388733,
                    1.5642271041870117,
                    1.2928383350372314
                ],
                [
                    0.4980567693710327,
                    0.6337511539459229,
                    0.827600359916687,
                    0.9439098238945007,
                    1.00206458568573,
                    1.0796042680740356,
                    1.2734533548355103,
                    1.370378017425537,
                    1.1183741092681885,
                    1.3316081762313843,
                    1.2346835136413574,
                    1.1571439504623413,
                    1.370378017425537,
                    1.1571439504623413,
                    1.1571439504623413,
                    1.486687421798706,
                    1.4285327196121216,
                    1.4285327196121216,
                    1.4479176998138428,
                    1.2928383350372314,
                    1.350993037223816,
                    1.4285327196121216,
                    1.2540684938430786,
                    1.2152986526489258,
                    1.4673025608062744,
                    1.4285327196121216,
                    1.4673025608062744,
                    1.370378017425537,
                    1.5642271041870117,
                    1.5254572629928589,
                    1.583612084388733,
                    1.370378017425537
                ],
                [
                    0.43990203738212585,
                    0.5949813723564148,
                    0.8082154393196106,
                    0.9439098238945007,
                    0.8857550621032715,
                    0.9439098238945007,
                    1.370378017425537,
                    1.350993037223816,
                    1.2928383350372314,
                    1.2540684938430786,
                    1.2346835136413574,
                    1.1377589702606201,
                    1.1959137916564941,
                    1.2346835136413574,
                    1.2346835136413574,
                    1.2734533548355103,
                    1.2540684938430786,
                    1.350993037223816,
                    1.1959137916564941,
                    1.40914785861969,
                    1.2928383350372314,
                    1.2152986526489258,
                    1.2928383350372314,
                    1.312223196029663,
                    1.54484224319458,
                    1.5642271041870117,
                    1.5060724020004272,
                    1.6223819255828857,
                    1.6805366277694702,
                    1.6029969453811646,
                    1.6223819255828857,
                    1.370378017425537
                ],
                [
                    0.43990203738212585,
                    0.5368266105651855,
                    0.7694455981254578,
                    0.9439098238945007,
                    0.827600359916687,
                    0.9826796650886536,
                    1.5060724020004272,
                    1.350993037223816,
                    1.2152986526489258,
                    1.2152986526489258,
                    1.1959137916564941,
                    1.2540684938430786,
                    1.0989891290664673,
                    1.3316081762313843,
                    1.3897628784179688,
                    1.350993037223816,
                    1.370378017425537,
                    1.312223196029663,
                    1.4479176998138428,
                    1.54484224319458,
                    1.40914785861969,
                    1.3897628784179688,
                    1.3897628784179688,
                    1.4673025608062744,
                    1.3897628784179688,
                    1.4479176998138428,
                    1.40914785861969,
                    1.350993037223816,
                    1.3897628784179688,
                    1.5060724020004272,
                    1.583612084388733,
                    1.350993037223816
                ],
                [
                    0.5368266105651855,
                    0.5755964517593384,
                    0.7306757569313049,
                    0.9051399827003479,
                    0.9051399827003479,
                    1.2152986526489258,
                    1.4285327196121216,
                    1.6223819255828857,
                    1.370378017425537,
                    1.2540684938430786,
                    1.2346835136413574,
                    1.2734533548355103,
                    1.312223196029663,
                    1.2152986526489258,
                    1.1959137916564941,
                    1.370378017425537,
                    1.486687421798706,
                    1.3316081762313843,
                    1.370378017425537,
                    1.5642271041870117,
                    1.3316081762313843,
                    1.4673025608062744,
                    1.370378017425537,
                    1.4479176998138428,
                    1.0796042680740356,
                    1.1959137916564941,
                    1.4479176998138428,
                    1.4673025608062744,
                    1.4479176998138428,
                    1.370378017425537,
                    1.4285327196121216,
                    1.2346835136413574
                ],
                [
                    0.6725209951400757,
                    0.6531360745429993,
                    0.7306757569313049,
                    0.9051399827003479,
                    0.9439098238945007,
                    0.9826796650886536,
                    0.9826796650886536,
                    1.2540684938430786,
                    1.0602192878723145,
                    0.9632947444915771,
                    0.9826796650886536,
                    0.9826796650886536,
                    1.0796042680740356,
                    0.8663701415061951,
                    0.9051399827003479,
                    1.0989891290664673,
                    1.1959137916564941,
                    1.0214494466781616,
                    1.0796042680740356,
                    1.1959137916564941,
                    1.00206458568573,
                    1.2152986526489258,
                    1.0602192878723145,
                    1.1959137916564941,
                    1.4285327196121216,
                    1.370378017425537,
                    1.2152986526489258,
                    1.2152986526489258,
                    1.3897628784179688,
                    1.2928383350372314,
                    1.3316081762313843,
                    1.1377589702606201
                ],
                [
                    0.8857550621032715,
                    0.8082154393196106,
                    0.7112908363342285,
                    0.9051399827003479,
                    0.8663701415061951,
                    0.8857550621032715,
                    1.0602192878723145,
                    0.9826796650886536,
                    0.5755964517593384,
                    0.5949813723564148,
                    0.4786718487739563,
                    0.5949813723564148,
                    0.4786718487739563,
                    0.401132196187973,
                    0.5368266105651855,
                    0.6337511539459229,
                    0.7888305187225342,
                    0.7888305187225342,
                    0.7500606775283813,
                    0.6143662929534912,
                    0.6143662929534912,
                    0.7112908363342285,
                    0.5949813723564148,
                    0.7888305187225342,
                    1.4479176998138428,
                    1.4285327196121216,
                    1.2152986526489258,
                    1.2346835136413574,
                    1.3897628784179688,
                    1.312223196029663,
                    1.3316081762313843,
                    1.0989891290664673
                ],
                [
                    0.9632947444915771,
                    1.0602192878723145,
                    0.827600359916687,
                    0.9826796650886536,
                    0.9245249032974243,
                    1.00206458568573,
                    1.0989891290664673,
                    0.9439098238945007,
                    0.5949813723564148,
                    0.6725209951400757,
                    0.6531360745429993,
                    0.556211531162262,
                    0.6531360745429993,
                    0.7306757569313049,
                    0.827600359916687,
                    0.9245249032974243,
                    0.8663701415061951,
                    0.7500606775283813,
                    0.6725209951400757,
                    0.7112908363342285,
                    0.6725209951400757,
                    0.827600359916687,
                    0.8082154393196106,
                    0.9051399827003479,
                    1.3316081762313843,
                    1.350993037223816,
                    1.370378017425537,
                    1.370378017425537,
                    1.3897628784179688,
                    1.2734533548355103,
                    1.312223196029663,
                    1.1183741092681885
                ],
                [
                    1.0796042680740356,
                    1.1959137916564941,
                    1.0214494466781616,
                    1.1959137916564941,
                    1.1183741092681885,
                    0.8663701415061951,
                    0.9439098238945007,
                    1.0989891290664673,
                    1.0408344268798828,
                    1.0408344268798828,
                    1.0602192878723145,
                    1.0796042680740356,
                    1.1377589702606201,
                    1.1959137916564941,
                    1.312223196029663,
                    1.312223196029663,
                    1.312223196029663,
                    1.2928383350372314,
                    1.2152986526489258,
                    1.1571439504623413,
                    1.1377589702606201,
                    1.176528811454773,
                    1.2928383350372314,
                    1.2928383350372314,
                    1.1959137916564941,
                    1.2152986526489258,
                    1.2928383350372314,
                    1.2346835136413574,
                    1.2540684938430786,
                    1.2734533548355103,
                    1.370378017425537,
                    1.176528811454773
                ],
                [
                    1.1571439504623413,
                    1.2540684938430786,
                    1.176528811454773,
                    0.8857550621032715,
                    0.5368266105651855,
                    0.12974336743354797,
                    0.4592869281768799,
                    1.312223196029663,
                    1.40914785861969,
                    1.2734533548355103,
                    1.176528811454773,
                    1.2152986526489258,
                    1.2734533548355103,
                    1.312223196029663,
                    1.350993037223816,
                    1.370378017425537,
                    1.350993037223816,
                    1.2928383350372314,
                    1.2540684938430786,
                    1.2152986526489258,
                    1.2152986526489258,
                    1.2540684938430786,
                    1.2928383350372314,
                    1.2734533548355103,
                    1.2734533548355103,
                    1.312223196029663,
                    1.350993037223816,
                    1.3897628784179688,
                    1.486687421798706,
                    1.486687421798706,
                    1.5254572629928589,
                    1.312223196029663
                ],
                [
                    1.176528811454773,
                    1.3316081762313843,
                    1.2152986526489258,
                    0.6337511539459229,
                    0.12974336743354797,
                    -0.18041542172431946,
                    -0.6068835854530334,
                    -0.316109836101532,
                    0.3817472755908966,
                    1.00206458568573,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.2734533548355103,
                    1.312223196029663,
                    1.370378017425537,
                    1.4285327196121216,
                    1.4285327196121216,
                    1.4285327196121216,
                    1.4479176998138428,
                    1.40914785861969,
                    1.370378017425537,
                    1.370378017425537,
                    1.4285327196121216,
                    1.40914785861969,
                    1.3897628784179688,
                    1.370378017425537,
                    1.370378017425537,
                    1.370378017425537,
                    1.40914785861969,
                    1.3897628784179688,
                    1.40914785861969,
                    1.1571439504623413
                ],
                [
                    1.176528811454773,
                    1.3897628784179688,
                    1.370378017425537,
                    1.40914785861969,
                    1.3316081762313843,
                    1.1377589702606201,
                    0.30420762300491333,
                    -0.6456534266471863,
                    -0.8007327318191528,
                    -0.4130344092845917,
                    0.32359254360198975,
                    1.0408344268798828,
                    1.350993037223816,
                    1.4673025608062744,
                    1.5254572629928589,
                    1.5254572629928589,
                    1.5254572629928589,
                    1.5254572629928589,
                    1.5254572629928589,
                    1.4285327196121216,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.2734533548355103,
                    1.2346835136413574,
                    1.2540684938430786,
                    1.2540684938430786,
                    1.2540684938430786,
                    1.2734533548355103,
                    1.2540684938430786,
                    1.2928383350372314,
                    1.0796042680740356
                ],
                [
                    1.1377589702606201,
                    1.4285327196121216,
                    1.40914785861969,
                    1.4479176998138428,
                    1.3897628784179688,
                    1.4479176998138428,
                    1.4673025608062744,
                    1.00206458568573,
                    -0.16103051602840424,
                    -0.8007327318191528,
                    -0.6262685060501099,
                    0.0522037111222744,
                    0.9245249032974243,
                    1.486687421798706,
                    1.6029969453811646,
                    1.54484224319458,
                    1.486687421798706,
                    1.4479176998138428,
                    1.4285327196121216,
                    1.4285327196121216,
                    1.350993037223816,
                    1.370378017425537,
                    1.3897628784179688,
                    1.350993037223816,
                    1.312223196029663,
                    1.350993037223816,
                    1.3316081762313843,
                    1.2734533548355103,
                    1.2734533548355103,
                    1.2346835136413574,
                    1.2540684938430786,
                    1.0214494466781616
                ],
                [
                    1.1571439504623413,
                    1.4673025608062744,
                    1.5060724020004272,
                    1.6029969453811646,
                    1.54484224319458,
                    1.5642271041870117,
                    1.6029969453811646,
                    1.719306468963623,
                    0.9632947444915771,
                    -0.6456534266471863,
                    -0.9558120369911194,
                    -0.6650383472442627,
                    -0.39364948868751526,
                    0.2848227024078369,
                    1.0796042680740356,
                    1.5060724020004272,
                    1.5642271041870117,
                    1.486687421798706,
                    1.3897628784179688,
                    1.3316081762313843,
                    1.312223196029663,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.350993037223816,
                    1.312223196029663,
                    1.2734533548355103,
                    1.312223196029663,
                    1.2540684938430786,
                    1.2540684938430786,
                    1.0602192878723145
                ],
                [
                    1.1959137916564941,
                    1.5254572629928589,
                    1.583612084388733,
                    1.719306468963623,
                    1.6805366277694702,
                    1.6805366277694702,
                    1.6611517667770386,
                    1.6029969453811646,
                    1.5060724020004272,
                    -0.025336099788546562,
                    -1.0527366399765015,
                    -0.7425779700279236,
                    -0.8007327318191528,
                    -0.8007327318191528,
                    -0.5099589824676514,
                    0.12974336743354797,
                    0.8082154393196106,
                    1.2540684938430786,
                    1.5060724020004272,
                    1.5060724020004272,
                    1.350993037223816,
                    1.2928383350372314,
                    1.3897628784179688,
                    1.370378017425537,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.2928383350372314,
                    1.2734533548355103,
                    1.312223196029663,
                    1.2734533548355103,
                    1.2928383350372314,
                    1.1183741092681885
                ],
                [
                    1.2540684938430786,
                    1.583612084388733,
                    1.583612084388733,
                    1.719306468963623,
                    1.6805366277694702,
                    1.6611517667770386,
                    1.6611517667770386,
                    1.6029969453811646,
                    1.6611517667770386,
                    0.22666795551776886,
                    -1.0333516597747803,
                    -0.7425779700279236,
                    -0.8201176524162292,
                    -0.8007327318191528,
                    -0.761962890625,
                    -0.8201176524162292,
                    -0.7038081288337708,
                    -0.3548796772956848,
                    0.11035845428705215,
                    0.5755964517593384,
                    0.7306757569313049,
                    1.0989891290664673,
                    1.5060724020004272,
                    1.5254572629928589,
                    1.486687421798706,
                    1.40914785861969,
                    1.3316081762313843,
                    1.2734533548355103,
                    1.312223196029663,
                    1.2928383350372314,
                    1.2734533548355103,
                    1.0989891290664673
                ],
                [
                    1.2734533548355103,
                    1.6417667865753174,
                    1.6223819255828857,
                    1.7386913299560547,
                    1.6999214887619019,
                    1.6805366277694702,
                    1.6805366277694702,
                    1.6999214887619019,
                    1.5254572629928589,
                    -0.2385701686143875,
                    -1.5179747343063354,
                    -1.3047406673431396,
                    -1.2078160047531128,
                    -0.9558120369911194,
                    -0.7425779700279236,
                    -0.6262685060501099,
                    -0.6844232082366943,
                    -0.8782724142074585,
                    -1.072121500968933,
                    -1.227200984954834,
                    -1.3047406673431396,
                    -0.936427116394043,
                    -0.06410592794418335,
                    0.6531360745429993,
                    1.0602192878723145,
                    1.3316081762313843,
                    1.4673025608062744,
                    1.4479176998138428,
                    1.4479176998138428,
                    1.370378017425537,
                    1.370378017425537,
                    1.1571439504623413
                ],
                [
                    1.2734533548355103,
                    1.6029969453811646,
                    1.583612084388733,
                    1.6611517667770386,
                    1.6223819255828857,
                    1.6417667865753174,
                    1.6223819255828857,
                    1.6805366277694702,
                    0.6143662929534912,
                    -0.4711891710758209,
                    -1.16904616355896,
                    -1.7118239402770996,
                    -1.4404350519180298,
                    -1.110891342163086,
                    -0.9945818781852722,
                    -0.7231930494308472,
                    -0.6650383472442627,
                    -0.761962890625,
                    -0.7813478112220764,
                    -1.0139667987823486,
                    -1.3628954887390137,
                    -1.5373597145080566,
                    -1.227200984954834,
                    -1.0333516597747803,
                    -0.9170421957969666,
                    -0.3548796772956848,
                    0.1491282880306244,
                    0.6337511539459229,
                    1.1377589702606201,
                    1.350993037223816,
                    1.370378017425537,
                    1.176528811454773
                ],
                [
                    1.176528811454773,
                    1.486687421798706,
                    1.5060724020004272,
                    1.6223819255828857,
                    1.583612084388733,
                    1.5642271041870117,
                    1.6223819255828857,
                    1.4479176998138428,
                    0.4592869281768799,
                    0.2848227024078369,
                    0.4980567693710327,
                    -0.49057406187057495,
                    -1.5567445755004883,
                    -1.401665210723877,
                    -1.459820032119751,
                    -0.5681137442588806,
                    0.5949813723564148,
                    0.6725209951400757,
                    0.0522037111222744,
                    -1.0333516597747803,
                    -0.5293439030647278,
                    -0.25795507431030273,
                    -0.7038081288337708,
                    -1.1496611833572388,
                    -1.1302763223648071,
                    0.11035845428705215,
                    0.7888305187225342,
                    0.7306757569313049,
                    0.9245249032974243,
                    1.1183741092681885,
                    1.2152986526489258,
                    1.0214494466781616
                ],
                [
                    1.1571439504623413,
                    1.4673025608062744,
                    1.486687421798706,
                    1.6417667865753174,
                    1.6417667865753174,
                    1.6029969453811646,
                    1.6223819255828857,
                    1.6223819255828857,
                    1.6417667865753174,
                    1.6611517667770386,
                    1.7386913299560547,
                    1.2346835136413574,
                    0.3623623549938202,
                    0.401132196187973,
                    0.43990203738212585,
                    0.827600359916687,
                    1.486687421798706,
                    1.5642271041870117,
                    1.2928383350372314,
                    0.556211531162262,
                    0.7306757569313049,
                    1.0214494466781616,
                    1.00206458568573,
                    0.6531360745429993,
                    0.5949813723564148,
                    1.0214494466781616,
                    1.2734533548355103,
                    1.3316081762313843,
                    1.370378017425537,
                    1.312223196029663,
                    1.2152986526489258,
                    0.9826796650886536
                ],
                [
                    0.9826796650886536,
                    1.2152986526489258,
                    1.2928383350372314,
                    1.370378017425537,
                    1.2928383350372314,
                    1.2152986526489258,
                    1.1571439504623413,
                    1.1183741092681885,
                    1.0989891290664673,
                    1.0214494466781616,
                    1.0408344268798828,
                    0.9245249032974243,
                    0.8663701415061951,
                    0.8663701415061951,
                    0.8857550621032715,
                    0.9245249032974243,
                    0.8469852805137634,
                    0.6725209951400757,
                    0.6919059157371521,
                    0.8082154393196106,
                    0.7694455981254578,
                    0.6919059157371521,
                    0.7694455981254578,
                    0.8663701415061951,
                    0.8663701415061951,
                    0.6725209951400757,
                    0.5174416899681091,
                    0.4786718487739563,
                    0.6143662929534912,
                    0.7306757569313049,
                    0.7500606775283813,
                    0.5949813723564148
                ],
                [
                    -0.2191852629184723,
                    -0.5099589824676514,
                    -0.29672491550445557,
                    -0.3548796772956848,
                    -0.4518042504787445,
                    -0.5487288236618042,
                    -0.6068835854530334,
                    -0.6262685060501099,
                    -0.7231930494308472,
                    -0.7813478112220764,
                    -0.7231930494308472,
                    -0.8782724142074585,
                    -0.936427116394043,
                    -0.9170421957969666,
                    -0.8201176524162292,
                    -0.4711891710758209,
                    -0.2385701686143875,
                    -0.3354947566986084,
                    -0.37426456809043884,
                    -0.3548796772956848,
                    -0.3354947566986084,
                    -0.29672491550445557,
                    -0.27733999490737915,
                    -0.2385701686143875,
                    -0.16103051602840424,
                    -0.1222606748342514,
                    -0.10287576168775558,
                    -0.1222606748342514,
                    -0.10287576168775558,
                    -0.08349084854125977,
                    -0.06410592794418335,
                    -0.025336099788546562
                ],
                [
                    -0.06410592794418335,
                    -0.316109836101532,
                    -0.2385701686143875,
                    -0.16103051602840424,
                    -0.19980034232139587,
                    -0.25795507431030273,
                    -0.2191852629184723,
                    -0.2385701686143875,
                    -0.27733999490737915,
                    -0.25795507431030273,
                    -0.27733999490737915,
                    -0.316109836101532,
                    -0.29672491550445557,
                    -0.316109836101532,
                    -0.29672491550445557,
                    -0.3354947566986084,
                    -0.19980034232139587,
                    -0.25795507431030273,
                    -0.39364948868751526,
                    -0.3548796772956848,
                    -0.3354947566986084,
                    -0.37426456809043884,
                    -0.4711891710758209,
                    -0.4130344092845917,
                    -0.37426456809043884,
                    -0.3548796772956848,
                    -0.316109836101532,
                    -0.316109836101532,
                    -0.4324193298816681,
                    -0.4518042504787445,
                    -0.6068835854530334,
                    -0.4711891710758209
                ],
                [
                    -0.10287576168775558,
                    -0.5487288236618042,
                    -0.3548796772956848,
                    -0.25795507431030273,
                    -0.316109836101532,
                    -0.4130344092845917,
                    -0.5293439030647278,
                    -0.6068835854530334,
                    -0.6068835854530334,
                    -0.6262685060501099,
                    -0.7231930494308472,
                    -0.761962890625,
                    -0.8395025730133057,
                    -0.8976573348045349,
                    -0.8782724142074585,
                    -0.9170421957969666,
                    -0.8782724142074585,
                    -0.8976573348045349,
                    -1.0333516597747803,
                    -1.0915064811706543,
                    -1.1302763223648071,
                    -1.1496611833572388,
                    -1.16904616355896,
                    -1.16904616355896,
                    -1.1884310245513916,
                    -1.16904616355896,
                    -1.1496611833572388,
                    -1.1884310245513916,
                    -1.1302763223648071,
                    -1.2078160047531128,
                    -1.401665210723877,
                    -0.936427116394043
                ],
                [
                    -0.6650383472442627,
                    -1.3628954887390137,
                    -1.16904616355896,
                    -1.0915064811706543,
                    -1.1496611833572388,
                    -1.1496611833572388,
                    -1.2078160047531128,
                    -1.2465859651565552,
                    -1.1496611833572388,
                    -1.1884310245513916,
                    -1.2659708261489868,
                    -1.3241256475448608,
                    -1.3241256475448608,
                    -1.2659708261489868,
                    -1.2465859651565552,
                    -1.2078160047531128,
                    -1.2078160047531128,
                    -1.1496611833572388,
                    -1.1884310245513916,
                    -1.3047406673431396,
                    -1.3435105085372925,
                    -1.3241256475448608,
                    -1.285355806350708,
                    -1.2659708261489868,
                    -1.3047406673431396,
                    -1.3241256475448608,
                    -1.3435105085372925,
                    -1.3241256475448608,
                    -1.4210501909255981,
                    -1.4792048931121826,
                    -0.9751969575881958,
                    -0.6456534266471863
                ],
                [
                    -0.6262685060501099,
                    -1.2659708261489868,
                    -1.1496611833572388,
                    -1.110891342163086,
                    -1.1302763223648071,
                    -1.1302763223648071,
                    -1.1884310245513916,
                    -1.16904616355896,
                    -1.0915064811706543,
                    -1.16904616355896,
                    -1.227200984954834,
                    -1.285355806350708,
                    -1.285355806350708,
                    -1.285355806350708,
                    -1.2659708261489868,
                    -1.2465859651565552,
                    -1.1884310245513916,
                    -1.2078160047531128,
                    -1.3047406673431396,
                    -1.3435105085372925,
                    -1.3628954887390137,
                    -1.3628954887390137,
                    -1.3435105085372925,
                    -1.3435105085372925,
                    -1.3241256475448608,
                    -1.3047406673431396,
                    -1.3435105085372925,
                    -1.401665210723877,
                    -1.16904616355896,
                    -0.6262685060501099,
                    -0.5487288236618042,
                    -0.8588874936103821
                ],
                [
                    -0.7038081288337708,
                    -1.3241256475448608,
                    -1.2465859651565552,
                    -1.3241256475448608,
                    -1.3241256475448608,
                    -1.285355806350708,
                    -1.3241256475448608,
                    -1.285355806350708,
                    -1.2659708261489868,
                    -1.3047406673431396,
                    -1.3435105085372925,
                    -1.3822803497314453,
                    -1.2659708261489868,
                    -1.2465859651565552,
                    -1.285355806350708,
                    -1.2465859651565552,
                    -1.16904616355896,
                    -1.2465859651565552,
                    -1.3047406673431396,
                    -1.3241256475448608,
                    -1.2659708261489868,
                    -1.2659708261489868,
                    -1.2465859651565552,
                    -1.2465859651565552,
                    -1.1496611833572388,
                    -1.227200984954834,
                    -1.3241256475448608,
                    -1.072121500968933,
                    -0.5487288236618042,
                    -0.7038081288337708,
                    -1.285355806350708,
                    -1.1302763223648071
                ],
                [
                    -0.7038081288337708,
                    -1.2659708261489868,
                    -1.2078160047531128,
                    -1.227200984954834,
                    -1.227200984954834,
                    -1.227200984954834,
                    -1.227200984954834,
                    -1.2078160047531128,
                    -1.227200984954834,
                    -1.2465859651565552,
                    -1.16904616355896,
                    -0.8395025730133057,
                    -0.8007327318191528,
                    -0.8588874936103821,
                    -0.9170421957969666,
                    -0.8588874936103821,
                    -0.7231930494308472,
                    -0.8007327318191528,
                    -0.7813478112220764,
                    -0.8201176524162292,
                    -0.8782724142074585,
                    -1.1302763223648071,
                    -1.1496611833572388,
                    -1.1884310245513916,
                    -1.4210501909255981,
                    -1.3435105085372925,
                    -0.761962890625,
                    -0.4324193298816681,
                    -0.9558120369911194,
                    -1.3241256475448608,
                    -1.2465859651565552,
                    -0.9751969575881958
                ],
                [
                    -0.6456534266471863,
                    -1.2659708261489868,
                    -1.2465859651565552,
                    -1.2659708261489868,
                    -1.2078160047531128,
                    -1.1496611833572388,
                    -1.1302763223648071,
                    -1.16904616355896,
                    -1.1496611833572388,
                    -1.1302763223648071,
                    -1.16904616355896,
                    -1.0333516597747803,
                    -1.0139667987823486,
                    -1.0139667987823486,
                    -1.0333516597747803,
                    -1.072121500968933,
                    -1.0139667987823486,
                    -0.9945818781852722,
                    -0.9751969575881958,
                    -0.9751969575881958,
                    -0.9751969575881958,
                    -1.1884310245513916,
                    -1.1884310245513916,
                    -1.227200984954834,
                    -1.16904616355896,
                    -0.761962890625,
                    -0.7231930494308472,
                    -1.1884310245513916,
                    -1.3241256475448608,
                    -1.2659708261489868,
                    -1.1884310245513916,
                    -1.0139667987823486
                ]
            ],
            [
                [
                    0.6497730016708374,
                    1.0431098937988281,
                    1.1021103858947754,
                    1.3577793836593628,
                    1.2201114892959595,
                    0.9447756409645081,
                    0.9841093420982361,
                    0.9841093420982361,
                    1.0234429836273193,
                    1.1021103858947754,
                    1.1611108779907227,
                    1.2004445791244507,
                    1.2201114892959595,
                    1.2004445791244507,
                    1.1611108779907227,
                    1.1414440870285034,
                    1.1021103858947754,
                    1.1021103858947754,
                    1.1807777881622314,
                    1.2201114892959595,
                    1.2397782802581787,
                    1.2397782802581787,
                    1.2594451904296875,
                    1.298778772354126,
                    1.2594451904296875,
                    1.2594451904296875,
                    1.2791119813919067,
                    1.41677987575531,
                    1.456113576889038,
                    1.4364467859268188,
                    1.5544477701187134,
                    1.1807777881622314
                ],
                [
                    0.6301061511039734,
                    1.1021103858947754,
                    1.2004445791244507,
                    1.41677987575531,
                    1.3184456825256348,
                    0.7677740454673767,
                    0.7087735533714294,
                    0.8071077466011047,
                    0.7874408960342407,
                    0.8267745971679688,
                    0.90544193983078,
                    1.0431098937988281,
                    0.9447756409645081,
                    1.0037761926651,
                    0.8071077466011047,
                    0.8661082983016968,
                    0.9644424915313721,
                    0.8464414477348328,
                    0.8857751488685608,
                    0.8464414477348328,
                    0.90544193983078,
                    1.0234429836273193,
                    0.9447756409645081,
                    0.90544193983078,
                    0.925108790397644,
                    1.0037761926651,
                    1.338112473487854,
                    1.5937814712524414,
                    1.6331151723861694,
                    1.6724488735198975,
                    1.8101167678833008,
                    1.3184456825256348
                ],
                [
                    0.6104393005371094,
                    1.0824435949325562,
                    1.2201114892959595,
                    1.4364467859268188,
                    1.5741146802902222,
                    1.377446174621582,
                    1.0824435949325562,
                    0.8857751488685608,
                    0.7284404039382935,
                    1.0234429836273193,
                    1.3184456825256348,
                    1.4364467859268188,
                    1.41677987575531,
                    1.456113576889038,
                    1.3184456825256348,
                    1.2791119813919067,
                    1.4364467859268188,
                    1.41677987575531,
                    1.3971130847930908,
                    1.41677987575531,
                    1.4364467859268188,
                    1.4757803678512573,
                    1.377446174621582,
                    1.338112473487854,
                    1.3577793836593628,
                    1.4364467859268188,
                    1.6134482622146606,
                    1.6134482622146606,
                    1.6331151723861694,
                    1.6724488735198975,
                    1.8101167678833008,
                    1.338112473487854
                ],
                [
                    0.6104393005371094,
                    1.0824435949325562,
                    1.2791119813919067,
                    1.41677987575531,
                    1.5544477701187134,
                    1.456113576889038,
                    1.2791119813919067,
                    0.09910139441490173,
                    -0.29423561692237854,
                    0.5711056590080261,
                    0.6104393005371094,
                    0.6301061511039734,
                    0.6891067028045654,
                    0.5121051073074341,
                    0.5121051073074341,
                    0.49243825674057007,
                    0.8661082983016968,
                    0.7481071949005127,
                    0.7874408960342407,
                    0.9841093420982361,
                    0.8857751488685608,
                    0.7874408960342407,
                    1.0037761926651,
                    0.7087735533714294,
                    1.2791119813919067,
                    1.6724488735198975,
                    1.5937814712524414,
                    1.6331151723861694,
                    1.5937814712524414,
                    1.6134482622146606,
                    1.7511162757873535,
                    1.2791119813919067
                ],
                [
                    0.6104393005371094,
                    1.0627766847610474,
                    1.2594451904296875,
                    1.338112473487854,
                    1.4757803678512573,
                    1.4364467859268188,
                    1.298778772354126,
                    0.05976755917072296,
                    0.09910139441490173,
                    0.3154366612434387,
                    -0.33356931805610657,
                    -0.31390246748924255,
                    -0.15656772255897522,
                    -0.05823349952697754,
                    -0.09756718575954437,
                    -0.19590140879154205,
                    -0.07790034264326096,
                    -0.17623455822467804,
                    -0.17623455822467804,
                    0.05976755917072296,
                    -0.09756718575954437,
                    -0.21556824445724487,
                    0.25643613934516907,
                    -0.21556824445724487,
                    0.7284404039382935,
                    1.5741146802902222,
                    1.5347809791564941,
                    1.6331151723861694,
                    1.6331151723861694,
                    1.6134482622146606,
                    1.790449857711792,
                    1.3184456825256348
                ],
                [
                    0.5514388084411621,
                    1.0037761926651,
                    1.2594451904296875,
                    1.298778772354126,
                    1.456113576889038,
                    1.5151140689849854,
                    1.1807777881622314,
                    0.47277140617370605,
                    0.90544193983078,
                    0.8857751488685608,
                    0.4334377348423004,
                    0.8267745971679688,
                    0.925108790397644,
                    0.45310458540916443,
                    0.5121051073074341,
                    0.6694398522377014,
                    1.1217772960662842,
                    1.0824435949325562,
                    1.0431098937988281,
                    1.298778772354126,
                    1.0431098937988281,
                    1.1021103858947754,
                    1.2791119813919067,
                    1.0627766847610474,
                    1.4364467859268188,
                    1.6724488735198975,
                    1.6527819633483887,
                    1.6724488735198975,
                    1.6724488735198975,
                    1.6921156644821167,
                    1.82978355884552,
                    1.3184456825256348
                ],
                [
                    0.5711056590080261,
                    0.9644424915313721,
                    1.2201114892959595,
                    1.298778772354126,
                    1.3971130847930908,
                    1.4757803678512573,
                    0.47277140617370605,
                    -0.5302377343177795,
                    0.5121051073074341,
                    0.5514388084411621,
                    0.4137708842754364,
                    0.5711056590080261,
                    0.5711056590080261,
                    -0.03856665641069412,
                    0.09910139441490173,
                    0.3154366612434387,
                    0.6497730016708374,
                    0.5514388084411621,
                    0.925108790397644,
                    0.7677740454673767,
                    0.5317719578742981,
                    0.9841093420982361,
                    0.5317719578742981,
                    0.8071077466011047,
                    0.6497730016708374,
                    0.8464414477348328,
                    1.5937814712524414,
                    1.7117825746536255,
                    1.7314493656158447,
                    1.6527819633483887,
                    1.7511162757873535,
                    1.2791119813919067
                ],
                [
                    0.6301061511039734,
                    0.9644424915313721,
                    1.1611108779907227,
                    1.2594451904296875,
                    1.3971130847930908,
                    1.1414440870285034,
                    -0.07790034264326096,
                    -0.43190351128578186,
                    0.0007670287159271538,
                    0.15810193121433258,
                    0.15810193121433258,
                    -0.05823349952697754,
                    0.45310458540916443,
                    0.23676930367946625,
                    0.23676930367946625,
                    0.07943440228700638,
                    0.0007670287159271538,
                    0.0007670287159271538,
                    0.15810193121433258,
                    0.0007670287159271538,
                    -0.2745687663555145,
                    0.1777687668800354,
                    0.0007670287159271538,
                    0.7087735533714294,
                    0.0007670287159271538,
                    0.1777687668800354,
                    1.338112473487854,
                    1.4954472780227661,
                    1.5347809791564941,
                    1.5347809791564941,
                    1.6724488735198975,
                    1.2397782802581787
                ],
                [
                    0.7481071949005127,
                    1.0234429836273193,
                    1.1217772960662842,
                    1.2201114892959595,
                    1.3577793836593628,
                    1.2397782802581787,
                    0.9447756409645081,
                    1.0234429836273193,
                    0.7677740454673767,
                    0.8267745971679688,
                    0.9644424915313721,
                    0.8464414477348328,
                    1.0234429836273193,
                    0.9644424915313721,
                    0.9841093420982361,
                    0.925108790397644,
                    0.9644424915313721,
                    1.0824435949325562,
                    1.0824435949325562,
                    1.0234429836273193,
                    0.7874408960342407,
                    0.9644424915313721,
                    1.0824435949325562,
                    1.3184456825256348,
                    0.9644424915313721,
                    1.0431098937988281,
                    1.5151140689849854,
                    1.6134482622146606,
                    1.5151140689849854,
                    1.5347809791564941,
                    1.6921156644821167,
                    1.2201114892959595
                ],
                [
                    0.9644424915313721,
                    1.1807777881622314,
                    1.1217772960662842,
                    1.2397782802581787,
                    1.3184456825256348,
                    1.3577793836593628,
                    1.3971130847930908,
                    1.1807777881622314,
                    0.7284404039382935,
                    0.8267745971679688,
                    0.7677740454673767,
                    0.7874408960342407,
                    0.7087735533714294,
                    0.6891067028045654,
                    0.8071077466011047,
                    0.7677740454673767,
                    0.8661082983016968,
                    1.0037761926651,
                    0.9644424915313721,
                    0.7677740454673767,
                    0.7284404039382935,
                    0.7874408960342407,
                    0.8267745971679688,
                    1.1611108779907227,
                    1.5151140689849854,
                    1.4757803678512573,
                    1.5544477701187134,
                    1.6134482622146606,
                    1.5544477701187134,
                    1.5544477701187134,
                    1.6724488735198975,
                    1.2004445791244507
                ],
                [
                    1.0627766847610474,
                    1.4364467859268188,
                    1.2397782802581787,
                    1.3184456825256348,
                    1.3577793836593628,
                    1.377446174621582,
                    1.377446174621582,
                    1.1807777881622314,
                    0.7874408960342407,
                    0.8661082983016968,
                    0.8267745971679688,
                    0.7087735533714294,
                    0.8071077466011047,
                    0.8464414477348328,
                    0.925108790397644,
                    0.9644424915313721,
                    0.8857751488685608,
                    0.8464414477348328,
                    0.8464414477348328,
                    0.9447756409645081,
                    0.8857751488685608,
                    0.9841093420982361,
                    0.9447756409645081,
                    1.0824435949325562,
                    1.4954472780227661,
                    1.4757803678512573,
                    1.4954472780227661,
                    1.4954472780227661,
                    1.5151140689849854,
                    1.5151140689849854,
                    1.6724488735198975,
                    1.2004445791244507
                ],
                [
                    1.1807777881622314,
                    1.5937814712524414,
                    1.41677987575531,
                    1.5151140689849854,
                    1.5347809791564941,
                    1.2594451904296875,
                    1.3184456825256348,
                    1.4757803678512573,
                    1.3971130847930908,
                    1.377446174621582,
                    1.377446174621582,
                    1.377446174621582,
                    1.377446174621582,
                    1.3971130847930908,
                    1.4757803678512573,
                    1.4757803678512573,
                    1.4757803678512573,
                    1.41677987575531,
                    1.41677987575531,
                    1.4757803678512573,
                    1.456113576889038,
                    1.4364467859268188,
                    1.4364467859268188,
                    1.456113576889038,
                    1.5347809791564941,
                    1.5741146802902222,
                    1.5347809791564941,
                    1.5347809791564941,
                    1.5544477701187134,
                    1.5151140689849854,
                    1.6921156644821167,
                    1.2594451904296875
                ],
                [
                    1.2201114892959595,
                    1.6134482622146606,
                    1.4757803678512573,
                    1.0824435949325562,
                    0.8464414477348328,
                    0.35477036237716675,
                    0.6104393005371094,
                    1.4364467859268188,
                    1.5544477701187134,
                    1.5544477701187134,
                    1.4954472780227661,
                    1.456113576889038,
                    1.456113576889038,
                    1.4954472780227661,
                    1.5347809791564941,
                    1.5544477701187134,
                    1.5347809791564941,
                    1.4954472780227661,
                    1.4757803678512573,
                    1.4364467859268188,
                    1.4364467859268188,
                    1.4757803678512573,
                    1.4954472780227661,
                    1.4757803678512573,
                    1.4954472780227661,
                    1.5544477701187134,
                    1.5741146802902222,
                    1.6331151723861694,
                    1.6527819633483887,
                    1.6331151723861694,
                    1.7511162757873535,
                    1.298778772354126
                ],
                [
                    1.2397782802581787,
                    1.6724488735198975,
                    1.5151140689849854,
                    0.8267745971679688,
                    0.4137708842754364,
                    0.02043387107551098,
                    -0.5499045848846436,
                    -0.31390246748924255,
                    0.3941040337085724,
                    1.1021103858947754,
                    1.4954472780227661,
                    1.4954472780227661,
                    1.456113576889038,
                    1.4757803678512573,
                    1.5347809791564941,
                    1.5937814712524414,
                    1.5937814712524414,
                    1.6134482622146606,
                    1.6331151723861694,
                    1.5937814712524414,
                    1.5347809791564941,
                    1.5347809791564941,
                    1.6134482622146606,
                    1.6134482622146606,
                    1.5937814712524414,
                    1.5741146802902222,
                    1.5741146802902222,
                    1.5741146802902222,
                    1.5544477701187134,
                    1.5544477701187134,
                    1.6527819633483887,
                    1.1807777881622314
                ],
                [
                    1.2397782802581787,
                    1.7511162757873535,
                    1.6724488735198975,
                    1.5937814712524414,
                    1.6331151723861694,
                    1.377446174621582,
                    0.3941040337085724,
                    -0.6285719275474548,
                    -0.8252403736114502,
                    -0.43190351128578186,
                    0.37443721294403076,
                    1.1414440870285034,
                    1.4757803678512573,
                    1.5937814712524414,
                    1.6527819633483887,
                    1.6527819633483887,
                    1.6527819633483887,
                    1.6527819633483887,
                    1.6527819633483887,
                    1.5544477701187134,
                    1.456113576889038,
                    1.456113576889038,
                    1.4757803678512573,
                    1.456113576889038,
                    1.456113576889038,
                    1.456113576889038,
                    1.456113576889038,
                    1.456113576889038,
                    1.4364467859268188,
                    1.456113576889038,
                    1.5937814712524414,
                    1.1414440870285034
                ],
                [
                    1.2004445791244507,
                    1.790449857711792,
                    1.7117825746536255,
                    1.6331151723861694,
                    1.6921156644821167,
                    1.7511162757873535,
                    1.6527819633483887,
                    1.1021103858947754,
                    -0.1369008719921112,
                    -0.7859066724777222,
                    -0.5892382860183716,
                    0.09910139441490173,
                    1.0037761926651,
                    1.5741146802902222,
                    1.7117825746536255,
                    1.6331151723861694,
                    1.5937814712524414,
                    1.5544477701187134,
                    1.5544477701187134,
                    1.5347809791564941,
                    1.4757803678512573,
                    1.4954472780227661,
                    1.5347809791564941,
                    1.5347809791564941,
                    1.5151140689849854,
                    1.5544477701187134,
                    1.5347809791564941,
                    1.4954472780227661,
                    1.4757803678512573,
                    1.4757803678512573,
                    1.5741146802902222,
                    1.1217772960662842
                ],
                [
                    1.2397782802581787,
                    1.8101167678833008,
                    1.790449857711792,
                    1.7707830667495728,
                    1.790449857711792,
                    1.790449857711792,
                    1.7511162757873535,
                    1.8494504690170288,
                    1.0234429836273193,
                    -0.6285719275474548,
                    -0.9825751185417175,
                    -0.7269061803817749,
                    -0.43190351128578186,
                    0.2957698404788971,
                    1.1414440870285034,
                    1.5937814712524414,
                    1.6724488735198975,
                    1.5741146802902222,
                    1.4954472780227661,
                    1.4757803678512573,
                    1.4954472780227661,
                    1.5347809791564941,
                    1.5347809791564941,
                    1.5151140689849854,
                    1.5151140689849854,
                    1.5544477701187134,
                    1.5347809791564941,
                    1.5347809791564941,
                    1.5544477701187134,
                    1.5151140689849854,
                    1.5937814712524414,
                    1.1611108779907227
                ],
                [
                    1.2594451904296875,
                    1.82978355884552,
                    1.82978355884552,
                    1.8494504690170288,
                    1.8887841701507568,
                    1.8494504690170288,
                    1.790449857711792,
                    1.7314493656158447,
                    1.5937814712524414,
                    0.0007670287159271538,
                    -1.0809093713760376,
                    -0.8055735230445862,
                    -0.8645740747451782,
                    -0.8252403736114502,
                    -0.5105708837509155,
                    0.13843508064746857,
                    0.8267745971679688,
                    1.2791119813919067,
                    1.5347809791564941,
                    1.5544477701187134,
                    1.4364467859268188,
                    1.377446174621582,
                    1.4954472780227661,
                    1.4757803678512573,
                    1.4757803678512573,
                    1.4954472780227661,
                    1.5151140689849854,
                    1.5151140689849854,
                    1.5347809791564941,
                    1.4954472780227661,
                    1.5937814712524414,
                    1.1611108779907227
                ],
                [
                    1.2791119813919067,
                    1.8494504690170288,
                    1.7707830667495728,
                    1.790449857711792,
                    1.82978355884552,
                    1.82978355884552,
                    1.790449857711792,
                    1.7117825746536255,
                    1.7511162757873535,
                    0.25643613934516907,
                    -1.0415756702423096,
                    -0.7859066724777222,
                    -0.8842409253120422,
                    -0.8449072241783142,
                    -0.8449072241783142,
                    -0.9039077758789062,
                    -0.7859066724777222,
                    -0.41223669052124023,
                    0.05976755917072296,
                    0.5514388084411621,
                    0.7087735533714294,
                    1.0824435949325562,
                    1.5347809791564941,
                    1.5937814712524414,
                    1.5741146802902222,
                    1.5347809791564941,
                    1.5151140689849854,
                    1.4757803678512573,
                    1.4954472780227661,
                    1.456113576889038,
                    1.5347809791564941,
                    1.1217772960662842
                ],
                [
                    1.2594451904296875,
                    1.869117259979248,
                    1.790449857711792,
                    1.7707830667495728,
                    1.8101167678833008,
                    1.82978355884552,
                    1.8101167678833008,
                    1.82978355884552,
                    1.5937814712524414,
                    -0.21556824445724487,
                    -1.5332467555999756,
                    -1.3365782499313354,
                    -1.2775777578353882,
                    -1.0612424612045288,
                    -0.9039077758789062,
                    -0.8252403736114502,
                    -0.8449072241783142,
                    -0.9039077758789062,
                    -1.0415756702423096,
                    -1.1989104747772217,
                    -1.257910966873169,
                    -0.8645740747451782,
                    0.02043387107551098,
                    0.7284404039382935,
                    1.1414440870285034,
                    1.4364467859268188,
                    1.6134482622146606,
                    1.6134482622146606,
                    1.5741146802902222,
                    1.5151140689849854,
                    1.5544477701187134,
                    1.1217772960662842
                ],
                [
                    1.2791119813919067,
                    1.82978355884552,
                    1.7117825746536255,
                    1.6921156644821167,
                    1.7314493656158447,
                    1.790449857711792,
                    1.7511162757873535,
                    1.7511162757873535,
                    0.6104393005371094,
                    -0.5499045848846436,
                    -1.2775777578353882,
                    -1.7692488431930542,
                    -1.4742462635040283,
                    -1.1989104747772217,
                    -1.1399098634719849,
                    -0.9039077758789062,
                    -0.8055735230445862,
                    -0.7662398815155029,
                    -0.7662398815155029,
                    -1.0022419691085815,
                    -1.3169114589691162,
                    -1.4939130544662476,
                    -1.1792436838150024,
                    -1.0022419691085815,
                    -0.8842409253120422,
                    -0.31390246748924255,
                    0.1777687668800354,
                    0.6891067028045654,
                    1.1414440870285034,
                    1.377446174621582,
                    1.5544477701187134,
                    1.1611108779907227
                ],
                [
                    1.2004445791244507,
                    1.7117825746536255,
                    1.6331151723861694,
                    1.6527819633483887,
                    1.6921156644821167,
                    1.7314493656158447,
                    1.7511162757873535,
                    1.5151140689849854,
                    0.4334377348423004,
                    0.19743561744689941,
                    0.3941040337085724,
                    -0.5105708837509155,
                    -1.5332467555999756,
                    -1.4349125623703003,
                    -1.5135798454284668,
                    -0.6482387781143188,
                    0.5317719578742981,
                    0.6891067028045654,
                    0.07943440228700638,
                    -1.0219087600708008,
                    -0.5105708837509155,
                    -0.21556824445724487,
                    -0.6875724792480469,
                    -1.1399098634719849,
                    -1.1005761623382568,
                    0.13843508064746857,
                    0.8267745971679688,
                    0.7677740454673767,
                    0.8857751488685608,
                    1.1414440870285034,
                    1.456113576889038,
                    1.0431098937988281
                ],
                [
                    1.1807777881622314,
                    1.7117825746536255,
                    1.6134482622146606,
                    1.6724488735198975,
                    1.7314493656158447,
                    1.7511162757873535,
                    1.7707830667495728,
                    1.7117825746536255,
                    1.6921156644821167,
                    1.6921156644821167,
                    1.7511162757873535,
                    1.338112473487854,
                    0.49243825674057007,
                    0.47277140617370605,
                    0.47277140617370605,
                    0.8464414477348328,
                    1.5151140689849854,
                    1.6724488735198975,
                    1.41677987575531,
                    0.6694398522377014,
                    0.8464414477348328,
                    1.1414440870285034,
                    1.1217772960662842,
                    0.7677740454673767,
                    0.7087735533714294,
                    1.1217772960662842,
                    1.377446174621582,
                    1.456113576889038,
                    1.41677987575531,
                    1.377446174621582,
                    1.4954472780227661,
                    1.0627766847610474
                ],
                [
                    1.0037761926651,
                    1.4364467859268188,
                    1.41677987575531,
                    1.3971130847930908,
                    1.3971130847930908,
                    1.3184456825256348,
                    1.2594451904296875,
                    1.2201114892959595,
                    1.2004445791244507,
                    1.1414440870285034,
                    1.1807777881622314,
                    1.1414440870285034,
                    1.0824435949325562,
                    1.0431098937988281,
                    1.0037761926651,
                    0.9841093420982361,
                    0.925108790397644,
                    0.8071077466011047,
                    0.8464414477348328,
                    0.9644424915313721,
                    0.925108790397644,
                    0.8464414477348328,
                    0.925108790397644,
                    1.0431098937988281,
                    1.0234429836273193,
                    0.8267745971679688,
                    0.6694398522377014,
                    0.6301061511039734,
                    0.6694398522377014,
                    0.7874408960342407,
                    1.0234429836273193,
                    0.6891067028045654
                ],
                [
                    -0.21556824445724487,
                    -0.29423561692237854,
                    -0.21556824445724487,
                    -0.3532361388206482,
                    -0.3925698399543762,
                    -0.4515703618526459,
                    -0.5105708837509155,
                    -0.5302377343177795,
                    -0.6089051365852356,
                    -0.6482387781143188,
                    -0.5695714354515076,
                    -0.7072393298149109,
                    -0.7662398815155029,
                    -0.7859066724777222,
                    -0.7072393298149109,
                    -0.3925698399543762,
                    -0.15656772255897522,
                    -0.21556824445724487,
                    -0.2352350950241089,
                    -0.21556824445724487,
                    -0.19590140879154205,
                    -0.15656772255897522,
                    -0.1369008719921112,
                    -0.09756718575954437,
                    -0.018899815157055855,
                    0.0007670287159271538,
                    0.02043387107551098,
                    0.0007670287159271538,
                    -0.03856665641069412,
                    -0.018899815157055855,
                    0.1777687668800354,
                    0.02043387107551098
                ],
                [
                    -0.11723402887582779,
                    -0.15656772255897522,
                    -0.19590140879154205,
                    -0.21556824445724487,
                    -0.19590140879154205,
                    -0.2352350950241089,
                    -0.19590140879154205,
                    -0.19590140879154205,
                    -0.2352350950241089,
                    -0.21556824445724487,
                    -0.2352350950241089,
                    -0.2549019455909729,
                    -0.2549019455909729,
                    -0.2745687663555145,
                    -0.2549019455909729,
                    -0.31390246748924255,
                    -0.15656772255897522,
                    -0.15656772255897522,
                    -0.29423561692237854,
                    -0.2549019455909729,
                    -0.2352350950241089,
                    -0.2745687663555145,
                    -0.3729029893875122,
                    -0.31390246748924255,
                    -0.2745687663555145,
                    -0.2549019455909729,
                    -0.21556824445724487,
                    -0.21556824445724487,
                    -0.4515703618526459,
                    -0.5499045848846436,
                    -0.4909040629863739,
                    -0.43190351128578186
                ],
                [
                    -0.19590140879154205,
                    -0.41223669052124023,
                    -0.3532361388206482,
                    -0.33356931805610657,
                    -0.33356931805610657,
                    -0.41223669052124023,
                    -0.5105708837509155,
                    -0.5892382860183716,
                    -0.5499045848846436,
                    -0.5695714354515076,
                    -0.6679056286811829,
                    -0.7465730309486389,
                    -0.8055735230445862,
                    -0.8842409253120422,
                    -0.8645740747451782,
                    -0.8842409253120422,
                    -0.8449072241783142,
                    -0.8645740747451782,
                    -1.0219087600708008,
                    -1.0809093713760376,
                    -1.1005761623382568,
                    -1.1399098634719849,
                    -1.1399098634719849,
                    -1.1399098634719849,
                    -1.1399098634719849,
                    -1.1202430725097656,
                    -1.1202430725097656,
                    -1.1399098634719849,
                    -1.2382441759109497,
                    -1.3365782499313354,
                    -1.0219087600708008,
                    -0.4515703618526459
                ],
                [
                    -0.7662398815155029,
                    -1.2382441759109497,
                    -1.1399098634719849,
                    -1.1595767736434937,
                    -1.1595767736434937,
                    -1.1595767736434937,
                    -1.1989104747772217,
                    -1.2382441759109497,
                    -1.1202430725097656,
                    -1.1595767736434937,
                    -1.218577265739441,
                    -1.3169114589691162,
                    -1.297244668006897,
                    -1.2382441759109497,
                    -1.218577265739441,
                    -1.1792436838150024,
                    -1.1595767736434937,
                    -1.1005761623382568,
                    -1.1399098634719849,
                    -1.257910966873169,
                    -1.3169114589691162,
                    -1.2775777578353882,
                    -1.257910966873169,
                    -1.2382441759109497,
                    -1.2775777578353882,
                    -1.297244668006897,
                    -1.3169114589691162,
                    -1.3169114589691162,
                    -1.3169114589691162,
                    -1.0022419691085815,
                    -0.11723402887582779,
                    0.09910139441490173
                ],
                [
                    -0.7859066724777222,
                    -1.257910966873169,
                    -1.1792436838150024,
                    -1.1989104747772217,
                    -1.1792436838150024,
                    -1.1399098634719849,
                    -1.218577265739441,
                    -1.1792436838150024,
                    -1.1005761623382568,
                    -1.1989104747772217,
                    -1.2382441759109497,
                    -1.297244668006897,
                    -1.2775777578353882,
                    -1.2775777578353882,
                    -1.2382441759109497,
                    -1.218577265739441,
                    -1.1399098634719849,
                    -1.0809093713760376,
                    -1.1595767736434937,
                    -1.1989104747772217,
                    -1.218577265739441,
                    -1.2382441759109497,
                    -1.1989104747772217,
                    -1.218577265739441,
                    -1.2775777578353882,
                    -1.2775777578353882,
                    -1.218577265739441,
                    -1.1399098634719849,
                    -0.6285719275474548,
                    0.25643613934516907,
                    0.2761029899120331,
                    -0.4712372124195099
                ],
                [
                    -0.8645740747451782,
                    -1.3759119510650635,
                    -1.218577265739441,
                    -1.297244668006897,
                    -1.3365782499313354,
                    -1.257910966873169,
                    -1.2775777578353882,
                    -1.2382441759109497,
                    -1.218577265739441,
                    -1.2382441759109497,
                    -1.297244668006897,
                    -1.3365782499313354,
                    -1.2382441759109497,
                    -1.1989104747772217,
                    -1.218577265739441,
                    -1.1792436838150024,
                    -1.1005761623382568,
                    -1.1792436838150024,
                    -1.2382441759109497,
                    -1.257910966873169,
                    -1.1989104747772217,
                    -1.1989104747772217,
                    -1.1595767736434937,
                    -1.1792436838150024,
                    -1.1989104747772217,
                    -1.2382441759109497,
                    -1.0219087600708008,
                    -0.2549019455909729,
                    0.37443721294403076,
                    -0.07790034264326096,
                    -0.8645740747451782,
                    -0.9629082679748535
                ],
                [
                    -0.8055735230445862,
                    -1.2775777578353882,
                    -1.1202430725097656,
                    -1.1399098634719849,
                    -1.1792436838150024,
                    -1.1989104747772217,
                    -1.1989104747772217,
                    -1.1989104747772217,
                    -1.1792436838150024,
                    -1.1989104747772217,
                    -1.1399098634719849,
                    -0.8645740747451782,
                    -0.8645740747451782,
                    -0.9235746264457703,
                    -0.9629082679748535,
                    -0.9039077758789062,
                    -0.7662398815155029,
                    -0.8449072241783142,
                    -0.8449072241783142,
                    -0.8842409253120422,
                    -0.9235746264457703,
                    -1.1792436838150024,
                    -1.1989104747772217,
                    -1.1399098634719849,
                    -1.1202430725097656,
                    -0.7269061803817749,
                    0.02043387107551098,
                    0.35477036237716675,
                    -0.41223669052124023,
                    -1.1202430725097656,
                    -1.1595767736434937,
                    -1.0612424612045288
                ],
                [
                    -0.8842409253120422,
                    -1.3955788612365723,
                    -1.2775777578353882,
                    -1.2775777578353882,
                    -1.2775777578353882,
                    -1.2775777578353882,
                    -1.257910966873169,
                    -1.297244668006897,
                    -1.2775777578353882,
                    -1.257910966873169,
                    -1.2775777578353882,
                    -1.0612424612045288,
                    -1.0219087600708008,
                    -1.0219087600708008,
                    -1.0415756702423096,
                    -1.0612424612045288,
                    -1.0022419691085815,
                    -1.0022419691085815,
                    -0.9825751185417175,
                    -0.9629082679748535,
                    -0.9825751185417175,
                    -1.1792436838150024,
                    -1.1792436838150024,
                    -1.0809093713760376,
                    -0.6482387781143188,
                    0.09910139441490173,
                    0.09910139441490173,
                    -0.6875724792480469,
                    -1.1202430725097656,
                    -1.1792436838150024,
                    -1.1399098634719849,
                    -1.0809093713760376
                ]
            ],
            [
                [
                    0.6856405138969421,
                    1.4270315170288086,
                    1.5440932512283325,
                    1.7782167196273804,
                    1.7196859121322632,
                    1.3489903211593628,
                    1.3099697828292847,
                    1.2904595136642456,
                    1.3294800519943237,
                    1.4660521745681763,
                    1.5440932512283325,
                    1.5245829820632935,
                    1.5245829820632935,
                    1.5245829820632935,
                    1.4660521745681763,
                    1.4660521745681763,
                    1.4075212478637695,
                    1.3880109786987305,
                    1.4660521745681763,
                    1.5245829820632935,
                    1.5440932512283325,
                    1.5440932512283325,
                    1.5245829820632935,
                    1.4855624437332153,
                    1.4270315170288086,
                    1.4270315170288086,
                    1.4465417861938477,
                    1.5831139087677002,
                    1.7196859121322632,
                    1.8562579154968262,
                    1.914788842201233,
                    1.114866852760315
                ],
                [
                    0.841722846031189,
                    1.7587064504623413,
                    1.97331964969635,
                    2.2074432373046875,
                    2.148912191390991,
                    1.4855624437332153,
                    1.2709492444992065,
                    1.2709492444992065,
                    1.2709492444992065,
                    1.4270315170288086,
                    1.5831139087677002,
                    1.5831139087677002,
                    1.4270315170288086,
                    1.4855624437332153,
                    1.2904595136642456,
                    1.3489903211593628,
                    1.4465417861938477,
                    1.3489903211593628,
                    1.3685007095336914,
                    1.3489903211593628,
                    1.3880109786987305,
                    1.5050727128982544,
                    1.4465417861938477,
                    1.4465417861938477,
                    1.4855624437332153,
                    1.5636035203933716,
                    1.8952784538269043,
                    2.148912191390991,
                    2.129401922225952,
                    2.109891653060913,
                    2.2074432373046875,
                    1.3489903211593628
                ],
                [
                    0.7636816501617432,
                    1.7001756429672241,
                    1.934299111366272,
                    2.051360845565796,
                    2.129401922225952,
                    1.934299111366272,
                    1.6026241779327393,
                    1.3685007095336914,
                    1.2319285869598389,
                    1.5831139087677002,
                    1.8952784538269043,
                    1.914788842201233,
                    1.836747646331787,
                    1.8757681846618652,
                    1.7587064504623413,
                    1.7196859121322632,
                    1.8562579154968262,
                    1.8562579154968262,
                    1.836747646331787,
                    1.8562579154968262,
                    1.8757681846618652,
                    1.914788842201233,
                    1.836747646331787,
                    1.836747646331787,
                    1.836747646331787,
                    1.934299111366272,
                    2.109891653060913,
                    2.129401922225952,
                    2.031850576400757,
                    1.97331964969635,
                    2.148912191390991,
                    1.3685007095336914
                ],
                [
                    1.01731538772583,
                    1.817237377166748,
                    1.8952784538269043,
                    2.109891653060913,
                    2.1879327297210693,
                    2.070871114730835,
                    1.7001756429672241,
                    0.334455281496048,
                    0.10033166408538818,
                    0.861233115196228,
                    1.01731538772583,
                    1.2319285869598389,
                    1.2514389753341675,
                    1.0368257761001587,
                    1.01731538772583,
                    1.114866852760315,
                    1.3489903211593628,
                    1.2514389753341675,
                    1.2514389753341675,
                    1.4075212478637695,
                    1.3880109786987305,
                    1.4075212478637695,
                    1.2904595136642456,
                    0.9978051781654358,
                    1.817237377166748,
                    2.2269535064697266,
                    2.070871114730835,
                    2.090381383895874,
                    2.148912191390991,
                    2.129401922225952,
                    2.2659740447998047,
                    1.4075212478637695
                ],
                [
                    1.0368257761001587,
                    1.7391961812973022,
                    1.7196859121322632,
                    2.031850576400757,
                    2.148912191390991,
                    2.1684224605560303,
                    1.953809380531311,
                    0.5490685105323792,
                    0.7636816501617432,
                    0.7441713809967041,
                    0.11984195560216904,
                    0.29543471336364746,
                    0.29543471336364746,
                    0.23690369725227356,
                    0.19788311421871185,
                    0.334455281496048,
                    0.3929861783981323,
                    0.3539655804634094,
                    0.3149450123310089,
                    0.47102731466293335,
                    0.43200674653053284,
                    0.43200674653053284,
                    0.5295581817626953,
                    0.1783728301525116,
                    1.4075212478637695,
                    2.2074432373046875,
                    2.031850576400757,
                    2.0123403072357178,
                    2.109891653060913,
                    2.070871114730835,
                    2.2074432373046875,
                    1.3880109786987305
                ],
                [
                    0.978294849395752,
                    1.7001756429672241,
                    1.7391961812973022,
                    2.0123403072357178,
                    2.070871114730835,
                    2.031850576400757,
                    1.8562579154968262,
                    0.9978051781654358,
                    1.6026241779327393,
                    1.3099697828292847,
                    0.8222125172615051,
                    1.2904595136642456,
                    1.2709492444992065,
                    0.9002537131309509,
                    0.9587845802307129,
                    1.1343772411346436,
                    1.5050727128982544,
                    1.5440932512283325,
                    1.4855624437332153,
                    1.7001756429672241,
                    1.5050727128982544,
                    1.5245829820632935,
                    1.6416447162628174,
                    1.4855624437332153,
                    1.914788842201233,
                    2.1684224605560303,
                    2.1684224605560303,
                    2.1684224605560303,
                    2.129401922225952,
                    2.1684224605560303,
                    2.304994583129883,
                    1.4465417861938477
                ],
                [
                    0.978294849395752,
                    1.6416447162628174,
                    1.6806652545928955,
                    2.0123403072357178,
                    2.0123403072357178,
                    1.953809380531311,
                    1.1343772411346436,
                    -0.19232268631458282,
                    0.861233115196228,
                    0.9978051781654358,
                    1.01731538772583,
                    1.1929080486297607,
                    0.9978051781654358,
                    0.5880890488624573,
                    0.724661111831665,
                    0.9002537131309509,
                    1.2514389753341675,
                    1.1538875102996826,
                    1.4660521745681763,
                    1.3294800519943237,
                    1.0953565835952759,
                    1.3489903211593628,
                    1.1538875102996826,
                    1.3880109786987305,
                    1.01731538772583,
                    1.2514389753341675,
                    2.070871114730835,
                    2.1879327297210693,
                    2.090381383895874,
                    2.148912191390991,
                    2.2854843139648438,
                    1.4465417861938477
                ],
                [
                    1.0758463144302368,
                    1.7001756429672241,
                    1.6611549854278564,
                    1.9928299188613892,
                    2.031850576400757,
                    1.7391961812973022,
                    0.6271096467971802,
                    -0.05575065314769745,
                    0.3929861783981323,
                    0.6856405138969421,
                    0.841722846031189,
                    0.5880890488624573,
                    0.8027022480964661,
                    0.5685787796974182,
                    0.5685787796974182,
                    0.5880890488624573,
                    0.6466199159622192,
                    0.5490685105323792,
                    0.6661302447319031,
                    0.5490685105323792,
                    0.256413996219635,
                    0.5295581817626953,
                    0.5490685105323792,
                    1.2124183177947998,
                    0.4515170454978943,
                    0.6856405138969421,
                    1.8562579154968262,
                    2.070871114730835,
                    2.0123403072357178,
                    2.070871114730835,
                    2.2269535064697266,
                    1.4075212478637695
                ],
                [
                    1.2319285869598389,
                    1.7977269887924194,
                    1.6611549854278564,
                    2.0123403072357178,
                    2.051360845565796,
                    1.7782167196273804,
                    1.5440932512283325,
                    1.6221344470977783,
                    1.3685007095336914,
                    1.3489903211593628,
                    1.4270315170288086,
                    1.3685007095336914,
                    1.5245829820632935,
                    1.4075212478637695,
                    1.4270315170288086,
                    1.4660521745681763,
                    1.5245829820632935,
                    1.5636035203933716,
                    1.5636035203933716,
                    1.5050727128982544,
                    1.2514389753341675,
                    1.4075212478637695,
                    1.4465417861938477,
                    1.6806652545928955,
                    1.5440932512283325,
                    1.6416447162628174,
                    1.953809380531311,
                    2.051360845565796,
                    2.051360845565796,
                    2.090381383895874,
                    2.2269535064697266,
                    1.3880109786987305
                ],
                [
                    1.4075212478637695,
                    1.914788842201233,
                    1.6221344470977783,
                    1.953809380531311,
                    1.97331964969635,
                    1.953809380531311,
                    2.070871114730835,
                    1.8757681846618652,
                    1.3880109786987305,
                    1.4270315170288086,
                    1.3294800519943237,
                    1.4075212478637695,
                    1.3294800519943237,
                    1.2904595136642456,
                    1.3880109786987305,
                    1.4075212478637695,
                    1.5440932512283325,
                    1.6416447162628174,
                    1.5831139087677002,
                    1.3685007095336914,
                    1.3099697828292847,
                    1.3294800519943237,
                    1.3294800519943237,
                    1.6416447162628174,
                    2.109891653060913,
                    2.109891653060913,
                    2.090381383895874,
                    2.129401922225952,
                    2.129401922225952,
                    2.109891653060913,
                    2.2074432373046875,
                    1.3489903211593628
                ],
                [
                    1.4465417861938477,
                    2.109891653060913,
                    1.6806652545928955,
                    1.9928299188613892,
                    1.97331964969635,
                    1.914788842201233,
                    1.953809380531311,
                    1.7587064504623413,
                    1.3099697828292847,
                    1.3685007095336914,
                    1.3294800519943237,
                    1.2124183177947998,
                    1.3099697828292847,
                    1.3685007095336914,
                    1.4465417861938477,
                    1.5050727128982544,
                    1.4660521745681763,
                    1.4075212478637695,
                    1.3685007095336914,
                    1.3880109786987305,
                    1.3294800519943237,
                    1.3685007095336914,
                    1.4075212478637695,
                    1.7001756429672241,
                    2.129401922225952,
                    2.090381383895874,
                    2.070871114730835,
                    2.051360845565796,
                    2.051360845565796,
                    2.070871114730835,
                    2.2074432373046875,
                    1.3685007095336914
                ],
                [
                    1.5050727128982544,
                    2.1879327297210693,
                    1.817237377166748,
                    2.148912191390991,
                    2.070871114730835,
                    1.8562579154968262,
                    1.97331964969635,
                    2.109891653060913,
                    2.0123403072357178,
                    1.97331964969635,
                    1.953809380531311,
                    1.97331964969635,
                    2.0123403072357178,
                    2.051360845565796,
                    2.129401922225952,
                    2.129401922225952,
                    2.129401922225952,
                    2.090381383895874,
                    2.051360845565796,
                    2.031850576400757,
                    1.9928299188613892,
                    1.953809380531311,
                    2.0123403072357178,
                    2.051360845565796,
                    2.051360845565796,
                    2.051360845565796,
                    2.0123403072357178,
                    1.953809380531311,
                    1.97331964969635,
                    2.051360845565796,
                    2.2074432373046875,
                    1.4075212478637695
                ],
                [
                    1.4465417861938477,
                    2.070871114730835,
                    1.914788842201233,
                    1.7977269887924194,
                    1.3099697828292847,
                    0.7636816501617432,
                    1.1343772411346436,
                    2.0123403072357178,
                    2.1879327297210693,
                    2.1684224605560303,
                    2.090381383895874,
                    2.070871114730835,
                    2.109891653060913,
                    2.129401922225952,
                    2.1684224605560303,
                    2.1879327297210693,
                    2.1684224605560303,
                    2.090381383895874,
                    2.070871114730835,
                    2.031850576400757,
                    2.0123403072357178,
                    2.051360845565796,
                    2.070871114730835,
                    2.031850576400757,
                    2.0123403072357178,
                    2.070871114730835,
                    2.109891653060913,
                    2.148912191390991,
                    2.148912191390991,
                    2.148912191390991,
                    2.2659740447998047,
                    1.4270315170288086
                ],
                [
                    1.4660521745681763,
                    2.129401922225952,
                    1.953809380531311,
                    1.5440932512283325,
                    0.841722846031189,
                    0.23690369725227356,
                    -0.2898741364479065,
                    0.022290505468845367,
                    0.841722846031189,
                    1.6416447162628174,
                    2.090381383895874,
                    2.090381383895874,
                    2.031850576400757,
                    2.070871114730835,
                    2.129401922225952,
                    2.1879327297210693,
                    2.1879327297210693,
                    2.148912191390991,
                    2.1684224605560303,
                    2.129401922225952,
                    2.070871114730835,
                    2.090381383895874,
                    2.148912191390991,
                    2.148912191390991,
                    2.129401922225952,
                    2.109891653060913,
                    2.109891653060913,
                    2.109891653060913,
                    2.090381383895874,
                    2.090381383895874,
                    2.1879327297210693,
                    1.3489903211593628
                ],
                [
                    1.4660521745681763,
                    2.1879327297210693,
                    2.109891653060913,
                    2.324504852294922,
                    2.070871114730835,
                    1.6026241779327393,
                    0.6271096467971802,
                    -0.4654667377471924,
                    -0.5825284719467163,
                    -0.01673007383942604,
                    0.91976398229599,
                    1.7196859121322632,
                    2.031850576400757,
                    2.148912191390991,
                    2.2074432373046875,
                    2.2269535064697266,
                    2.1879327297210693,
                    2.1684224605560303,
                    2.148912191390991,
                    2.070871114730835,
                    1.97331964969635,
                    1.97331964969635,
                    1.9928299188613892,
                    2.0123403072357178,
                    1.9928299188613892,
                    1.9928299188613892,
                    1.9928299188613892,
                    1.9928299188613892,
                    1.97331964969635,
                    2.031850576400757,
                    2.1684224605560303,
                    1.3294800519943237
                ],
                [
                    1.4270315170288086,
                    2.2464637756347656,
                    2.148912191390991,
                    2.344015121459961,
                    2.1684224605560303,
                    2.1684224605560303,
                    2.031850576400757,
                    1.2709492444992065,
                    0.022290505468845367,
                    -0.5044873356819153,
                    -0.15330210328102112,
                    0.6075993776321411,
                    1.5245829820632935,
                    2.090381383895874,
                    2.2269535064697266,
                    2.1684224605560303,
                    2.129401922225952,
                    2.051360845565796,
                    2.031850576400757,
                    2.0123403072357178,
                    1.953809380531311,
                    1.953809380531311,
                    2.0123403072357178,
                    2.051360845565796,
                    2.051360845565796,
                    2.090381383895874,
                    2.070871114730835,
                    2.031850576400757,
                    2.0123403072357178,
                    2.070871114730835,
                    2.1879327297210693,
                    1.3489903211593628
                ],
                [
                    1.4855624437332153,
                    2.324504852294922,
                    2.109891653060913,
                    2.324504852294922,
                    2.2269535064697266,
                    2.1879327297210693,
                    2.148912191390991,
                    2.1684224605560303,
                    1.3099697828292847,
                    -0.30938443541526794,
                    -0.6605696678161621,
                    -0.4459564685821533,
                    -0.15330210328102112,
                    0.6271096467971802,
                    1.5245829820632935,
                    2.0123403072357178,
                    2.148912191390991,
                    2.1684224605560303,
                    2.090381383895874,
                    2.031850576400757,
                    2.0123403072357178,
                    2.031850576400757,
                    2.031850576400757,
                    2.0123403072357178,
                    2.031850576400757,
                    2.090381383895874,
                    2.090381383895874,
                    2.090381383895874,
                    2.090381383895874,
                    2.070871114730835,
                    2.2074432373046875,
                    1.4465417861938477
                ],
                [
                    1.5050727128982544,
                    2.344015121459961,
                    2.090381383895874,
                    2.324504852294922,
                    2.2854843139648438,
                    2.2074432373046875,
                    2.1879327297210693,
                    2.090381383895874,
                    1.934299111366272,
                    0.3149450123310089,
                    -0.7971416711807251,
                    -0.6800799369812012,
                    -0.7581210732460022,
                    -0.6605696678161621,
                    -0.27036383748054504,
                    0.43200674653053284,
                    1.1538875102996826,
                    1.6806652545928955,
                    1.97331964969635,
                    2.070871114730835,
                    2.0123403072357178,
                    2.0123403072357178,
                    2.129401922225952,
                    2.109891653060913,
                    2.090381383895874,
                    2.090381383895874,
                    2.051360845565796,
                    2.051360845565796,
                    2.031850576400757,
                    2.051360845565796,
                    2.2074432373046875,
                    1.4660521745681763
                ],
                [
                    1.4660521745681763,
                    2.304994583129883,
                    2.0123403072357178,
                    2.2269535064697266,
                    2.2074432373046875,
                    2.1684224605560303,
                    2.1879327297210693,
                    2.070871114730835,
                    2.090381383895874,
                    0.5880890488624573,
                    -0.777631402015686,
                    -0.6605696678161621,
                    -0.777631402015686,
                    -0.7386108040809631,
                    -0.6995902061462402,
                    -0.7386108040809631,
                    -0.6020388007164001,
                    -0.27036383748054504,
                    0.29543471336364746,
                    0.91976398229599,
                    1.2124183177947998,
                    1.7001756429672241,
                    2.1684224605560303,
                    2.1879327297210693,
                    2.129401922225952,
                    2.070871114730835,
                    2.0123403072357178,
                    1.97331964969635,
                    1.97331964969635,
                    2.0123403072357178,
                    2.1684224605560303,
                    1.4270315170288086
                ],
                [
                    1.4270315170288086,
                    2.304994583129883,
                    1.97331964969635,
                    2.1684224605560303,
                    2.148912191390991,
                    2.1684224605560303,
                    2.2074432373046875,
                    2.1879327297210693,
                    1.934299111366272,
                    0.10033166408538818,
                    -1.2458784580230713,
                    -1.1288167238235474,
                    -1.0702857971191406,
                    -0.8751828074455261,
                    -0.7191005349159241,
                    -0.6215490698814392,
                    -0.6605696678161621,
                    -0.8166519403457642,
                    -0.9337137341499329,
                    -0.9922446608543396,
                    -0.9532240033149719,
                    -0.4459564685821533,
                    0.3734758794307709,
                    0.9392743110656738,
                    1.3685007095336914,
                    1.7587064504623413,
                    2.031850576400757,
                    2.129401922225952,
                    2.090381383895874,
                    2.090381383895874,
                    2.2074432373046875,
                    1.4465417861938477
                ],
                [
                    1.3489903211593628,
                    2.2854843139648438,
                    2.109891653060913,
                    2.129401922225952,
                    2.129401922225952,
                    2.2659740447998047,
                    2.2269535064697266,
                    2.1684224605560303,
                    0.9392743110656738,
                    -0.30938443541526794,
                    -1.0507755279541016,
                    -1.46049165725708,
                    -1.1873475313186646,
                    -0.914203405380249,
                    -0.89469313621521,
                    -0.6995902061462402,
                    -0.6410593390464783,
                    -0.6215490698814392,
                    -0.6020388007164001,
                    -0.8166519403457642,
                    -1.1093063354492188,
                    -1.2653887271881104,
                    -0.9922446608543396,
                    -0.914203405380249,
                    -0.7581210732460022,
                    -0.09477123618125916,
                    0.4905376136302948,
                    1.0563360452651978,
                    1.6416447162628174,
                    1.97331964969635,
                    2.129401922225952,
                    1.5831139087677002
                ],
                [
                    1.2124183177947998,
                    2.1879327297210693,
                    2.1879327297210693,
                    2.109891653060913,
                    2.109891653060913,
                    2.1879327297210693,
                    2.1879327297210693,
                    1.914788842201233,
                    0.8027022480964661,
                    0.4905376136302948,
                    0.7051507830619812,
                    -0.15330210328102112,
                    -1.1873475313186646,
                    -1.1093063354492188,
                    -1.2263681888580322,
                    -0.38742557168006897,
                    0.783191978931427,
                    0.91976398229599,
                    0.3149450123310089,
                    -0.7971416711807251,
                    -0.2898741364479065,
                    0.0027802155818790197,
                    -0.4654667377471924,
                    -0.914203405380249,
                    -0.8751828074455261,
                    0.3929861783981323,
                    1.114866852760315,
                    1.0758463144302368,
                    1.3489903211593628,
                    1.6221344470977783,
                    1.836747646331787,
                    1.4855624437332153
                ],
                [
                    1.1929080486297607,
                    2.1684224605560303,
                    2.1684224605560303,
                    2.129401922225952,
                    2.129401922225952,
                    2.109891653060913,
                    2.109891653060913,
                    2.109891653060913,
                    2.109891653060913,
                    2.148912191390991,
                    2.2269535064697266,
                    1.7587064504623413,
                    0.8807434439659119,
                    0.8807434439659119,
                    0.9002537131309509,
                    1.2709492444992065,
                    1.953809380531311,
                    2.070871114730835,
                    1.817237377166748,
                    1.0758463144302368,
                    1.2514389753341675,
                    1.5440932512283325,
                    1.5245829820632935,
                    1.1538875102996826,
                    1.114866852760315,
                    1.5831139087677002,
                    1.8757681846618652,
                    1.953809380531311,
                    1.9928299188613892,
                    1.8562579154968262,
                    1.8757681846618652,
                    1.4660521745681763
                ],
                [
                    1.01731538772583,
                    1.914788842201233,
                    1.97331964969635,
                    1.8562579154968262,
                    1.7977269887924194,
                    1.7587064504623413,
                    1.7001756429672241,
                    1.6611549854278564,
                    1.6611549854278564,
                    1.5831139087677002,
                    1.6221344470977783,
                    1.5636035203933716,
                    1.5245829820632935,
                    1.5440932512283325,
                    1.5636035203933716,
                    1.6026241779327393,
                    1.6026241779327393,
                    1.5636035203933716,
                    1.6026241779327393,
                    1.7196859121322632,
                    1.6806652545928955,
                    1.6026241779327393,
                    1.6806652545928955,
                    1.7782167196273804,
                    1.7977269887924194,
                    1.6221344470977783,
                    1.5245829820632935,
                    1.5050727128982544,
                    1.6221344470977783,
                    1.6221344470977783,
                    1.7001756429672241,
                    1.3099697828292847
                ],
                [
                    -0.250853568315506,
                    0.11984195560216904,
                    0.3149450123310089,
                    0.11984195560216904,
                    0.08082137256860733,
                    -0.036240365356206894,
                    -0.13379181921482086,
                    -0.15330210328102112,
                    -0.250853568315506,
                    -0.30938443541526794,
                    -0.23134326934814453,
                    -0.2898741364479065,
                    -0.30938443541526794,
                    -0.250853568315506,
                    -0.11428152769804001,
                    0.275924414396286,
                    0.5880890488624573,
                    0.6271096467971802,
                    0.6271096467971802,
                    0.6466199159622192,
                    0.6661302447319031,
                    0.7051507830619812,
                    0.7441713809967041,
                    0.861233115196228,
                    0.978294849395752,
                    1.01731538772583,
                    1.0563360452651978,
                    1.0563360452651978,
                    1.0563360452651978,
                    0.9978051781654358,
                    1.0368257761001587,
                    0.6271096467971802
                ],
                [
                    -0.05575065314769745,
                    0.3149450123310089,
                    0.3929861783981323,
                    0.3929861783981323,
                    0.47102731466293335,
                    0.43200674653053284,
                    0.4515170454978943,
                    0.43200674653053284,
                    0.3539655804634094,
                    0.3929861783981323,
                    0.334455281496048,
                    0.23690369725227356,
                    0.256413996219635,
                    0.275924414396286,
                    0.334455281496048,
                    0.334455281496048,
                    0.47102731466293335,
                    0.3929861783981323,
                    0.256413996219635,
                    0.29543471336364746,
                    0.29543471336364746,
                    0.275924414396286,
                    0.19788311421871185,
                    0.23690369725227356,
                    0.29543471336364746,
                    0.3149450123310089,
                    0.3539655804634094,
                    0.3539655804634094,
                    0.10033166408538818,
                    0.022290505468845367,
                    0.022290505468845367,
                    -0.34840500354766846
                ],
                [
                    -0.19232268631458282,
                    -0.01673007383942604,
                    0.11984195560216904,
                    0.11984195560216904,
                    0.15886253118515015,
                    0.08082137256860733,
                    -0.11428152769804001,
                    -0.27036383748054504,
                    -0.34840500354766846,
                    -0.4459564685821533,
                    -0.5630182027816772,
                    -0.48497703671455383,
                    -0.5044873356819153,
                    -0.5630182027816772,
                    -0.5239976048469543,
                    -0.5435079336166382,
                    -0.5435079336166382,
                    -0.6800799369812012,
                    -0.8556725382804871,
                    -0.914203405380249,
                    -0.9337137341499329,
                    -0.9532240033149719,
                    -0.9922446608543396,
                    -1.0507755279541016,
                    -1.0702857971191406,
                    -1.0507755279541016,
                    -1.0507755279541016,
                    -1.0702857971191406,
                    -1.1678372621536255,
                    -1.2458784580230713,
                    -0.9922446608543396,
                    -0.7581210732460022
                ],
                [
                    -1.0312652587890625,
                    -1.1483269929885864,
                    -1.0312652587890625,
                    -1.1093063354492188,
                    -1.0897960662841797,
                    -0.9922446608543396,
                    -1.0702857971191406,
                    -1.1678372621536255,
                    -1.1288167238235474,
                    -1.2263681888580322,
                    -1.304409384727478,
                    -1.304409384727478,
                    -1.284899115562439,
                    -1.2458784580230713,
                    -1.2653887271881104,
                    -1.2458784580230713,
                    -1.2263681888580322,
                    -1.1483269929885864,
                    -1.1873475313186646,
                    -1.304409384727478,
                    -1.3434299230575562,
                    -1.323919653892517,
                    -1.2458784580230713,
                    -1.1483269929885864,
                    -1.1678372621536255,
                    -1.2068578004837036,
                    -1.2068578004837036,
                    -1.2068578004837036,
                    -1.284899115562439,
                    -1.0897960662841797,
                    -0.19232268631458282,
                    -0.19232268631458282
                ],
                [
                    -0.89469313621521,
                    -1.0312652587890625,
                    -0.9532240033149719,
                    -1.0507755279541016,
                    -1.0117549896240234,
                    -1.0312652587890625,
                    -1.1483269929885864,
                    -1.1093063354492188,
                    -1.0312652587890625,
                    -1.1288167238235474,
                    -1.1483269929885864,
                    -1.0897960662841797,
                    -1.0702857971191406,
                    -1.1288167238235474,
                    -1.1288167238235474,
                    -1.1678372621536255,
                    -1.1093063354492188,
                    -1.0702857971191406,
                    -1.1483269929885864,
                    -1.2068578004837036,
                    -1.2263681888580322,
                    -1.2263681888580322,
                    -1.2068578004837036,
                    -1.2068578004837036,
                    -1.2263681888580322,
                    -1.1873475313186646,
                    -1.1483269929885864,
                    -1.1093063354492188,
                    -0.7581210732460022,
                    -0.01673007383942604,
                    0.11984195560216904,
                    -0.7581210732460022
                ],
                [
                    -1.0117549896240234,
                    -1.2068578004837036,
                    -1.0702857971191406,
                    -1.1873475313186646,
                    -1.1093063354492188,
                    -1.1093063354492188,
                    -1.2068578004837036,
                    -1.1678372621536255,
                    -1.1678372621536255,
                    -1.2458784580230713,
                    -1.284899115562439,
                    -1.2458784580230713,
                    -1.1093063354492188,
                    -1.1288167238235474,
                    -1.2068578004837036,
                    -1.1873475313186646,
                    -1.1093063354492188,
                    -1.1678372621536255,
                    -1.2068578004837036,
                    -1.2263681888580322,
                    -1.1678372621536255,
                    -1.1483269929885864,
                    -1.1873475313186646,
                    -1.284899115562439,
                    -1.2458784580230713,
                    -1.2068578004837036,
                    -1.0312652587890625,
                    -0.3679153025150299,
                    0.19788311421871185,
                    -0.250853568315506,
                    -1.0117549896240234,
                    -1.2458784580230713
                ],
                [
                    -1.0117549896240234,
                    -1.1873475313186646,
                    -1.0897960662841797,
                    -1.1483269929885864,
                    -1.0702857971191406,
                    -1.0312652587890625,
                    -1.0507755279541016,
                    -1.0507755279541016,
                    -1.1093063354492188,
                    -1.1483269929885864,
                    -1.0897960662841797,
                    -0.7581210732460022,
                    -0.7386108040809631,
                    -0.8166519403457642,
                    -0.89469313621521,
                    -0.8751828074455261,
                    -0.7581210732460022,
                    -0.777631402015686,
                    -0.7581210732460022,
                    -0.7971416711807251,
                    -0.8556725382804871,
                    -1.0897960662841797,
                    -1.1483269929885864,
                    -1.1873475313186646,
                    -1.2263681888580322,
                    -0.8751828074455261,
                    -0.13379181921482086,
                    0.256413996219635,
                    -0.4459564685821533,
                    -1.0897960662841797,
                    -1.1678372621536255,
                    -1.2263681888580322
                ],
                [
                    -0.972734272480011,
                    -1.2263681888580322,
                    -1.2263681888580322,
                    -1.323919653892517,
                    -1.2263681888580322,
                    -1.1288167238235474,
                    -1.1093063354492188,
                    -1.1873475313186646,
                    -1.2068578004837036,
                    -1.2263681888580322,
                    -1.2458784580230713,
                    -1.0117549896240234,
                    -0.972734272480011,
                    -1.0117549896240234,
                    -1.0507755279541016,
                    -1.1093063354492188,
                    -1.0507755279541016,
                    -1.0117549896240234,
                    -0.972734272480011,
                    -0.972734272480011,
                    -0.972734272480011,
                    -1.1873475313186646,
                    -1.2068578004837036,
                    -1.1483269929885864,
                    -0.8556725382804871,
                    -0.21183297038078308,
                    -0.17281238734722137,
                    -0.8166519403457642,
                    -1.1873475313186646,
                    -1.2458784580230713,
                    -1.2068578004837036,
                    -1.2458784580230713
                ]
            ]
        ],
        [
            [
                [
                    -1.16904616355896,
                    -1.072121500968933,
                    -1.4985898733139038,
                    -1.8475183248519897,
                    -1.9832127094268799,
                    -1.6536691188812256,
                    -1.5761295557022095,
                    -1.5567445755004883,
                    -1.5567445755004883,
                    -1.6536691188812256,
                    -2.2352166175842285,
                    -2.138292074203491,
                    -1.5761295557022095,
                    -1.401665210723877,
                    -1.4404350519180298,
                    -1.4985898733139038,
                    -1.16904616355896,
                    -0.6844232082366943,
                    -0.6262685060501099,
                    -0.6650383472442627,
                    -0.587498664855957,
                    -0.8588874936103821,
                    -1.2659708261489868,
                    -1.3628954887390137,
                    -0.25795507431030273,
                    -0.27733999490737915,
                    -1.634284257888794,
                    -1.110891342163086,
                    -0.936427116394043,
                    -1.4404350519180298,
                    -1.3822803497314453,
                    -1.1302763223648071
                ],
                [
                    -1.0915064811706543,
                    -0.8976573348045349,
                    -1.2659708261489868,
                    -1.8475183248519897,
                    -1.634284257888794,
                    -1.16904616355896,
                    -1.4792048931121826,
                    -1.4792048931121826,
                    -1.4792048931121826,
                    -1.7505937814712524,
                    -2.2933714389801025,
                    -1.944442868232727,
                    -1.16904616355896,
                    -1.0915064811706543,
                    -1.3628954887390137,
                    -1.4792048931121826,
                    -0.936427116394043,
                    -0.7813478112220764,
                    -0.8201176524162292,
                    -0.8782724142074585,
                    -0.7425779700279236,
                    -0.8588874936103821,
                    -1.3628954887390137,
                    -1.285355806350708,
                    0.11035845428705215,
                    -0.08349084854125977,
                    -1.828133463859558,
                    -1.5179747343063354,
                    -1.3435105085372925,
                    -1.3822803497314453,
                    -1.16904616355896,
                    -1.2465859651565552
                ],
                [
                    -1.0139667987823486,
                    -0.8007327318191528,
                    -1.0333516597747803,
                    -1.634284257888794,
                    -1.1884310245513916,
                    -0.9945818781852722,
                    -1.459820032119751,
                    -1.3822803497314453,
                    -1.3822803497314453,
                    -1.808748483657837,
                    -2.215831756591797,
                    -1.7312088012695312,
                    -1.2659708261489868,
                    -1.1302763223648071,
                    -1.5179747343063354,
                    -1.6730540990829468,
                    -0.9751969575881958,
                    -0.936427116394043,
                    -1.285355806350708,
                    -1.227200984954834,
                    -0.8201176524162292,
                    -0.7813478112220764,
                    -1.4985898733139038,
                    -1.2078160047531128,
                    0.2654377818107605,
                    0.0522037111222744,
                    -1.9832127094268799,
                    -1.634284257888794,
                    -1.072121500968933,
                    -0.9170421957969666,
                    -1.0139667987823486,
                    -1.4985898733139038
                ],
                [
                    -0.7231930494308472,
                    -0.9751969575881958,
                    -0.8782724142074585,
                    -1.3822803497314453,
                    -0.8782724142074585,
                    -1.110891342163086,
                    -1.3628954887390137,
                    -1.2078160047531128,
                    -1.3047406673431396,
                    -1.8862881660461426,
                    -2.099522113800049,
                    -1.7118239402770996,
                    -1.5955144166946411,
                    -1.4404350519180298,
                    -1.6536691188812256,
                    -1.6730540990829468,
                    -0.7813478112220764,
                    -0.5293439030647278,
                    -0.9751969575881958,
                    -1.072121500968933,
                    -0.761962890625,
                    -0.8007327318191528,
                    -1.459820032119751,
                    -1.110891342163086,
                    0.32359254360198975,
                    0.22666795551776886,
                    -1.5179747343063354,
                    -0.9751969575881958,
                    -0.49057406187057495,
                    -0.6262685060501099,
                    -1.16904616355896,
                    -1.6924389600753784
                ],
                [
                    -0.587498664855957,
                    -0.7038081288337708,
                    -0.27733999490737915,
                    -1.1496611833572388,
                    -0.8588874936103821,
                    -1.2465859651565552,
                    -1.2465859651565552,
                    -1.110891342163086,
                    -1.227200984954834,
                    -2.0025975704193115,
                    -2.138292074203491,
                    -2.0025975704193115,
                    -1.828133463859558,
                    -1.7505937814712524,
                    -1.4404350519180298,
                    -1.2078160047531128,
                    -1.0333516597747803,
                    -0.9751969575881958,
                    -1.0333516597747803,
                    -1.0527366399765015,
                    -0.936427116394043,
                    -0.8201176524162292,
                    -1.4404350519180298,
                    -0.9170421957969666,
                    0.4592869281768799,
                    0.5949813723564148,
                    -0.7425779700279236,
                    -0.7425779700279236,
                    -0.5099589824676514,
                    -0.587498664855957,
                    -0.9751969575881958,
                    -0.7231930494308472
                ],
                [
                    -0.8395025730133057,
                    -0.8201176524162292,
                    -0.8395025730133057,
                    -0.936427116394043,
                    -1.0527366399765015,
                    -1.3047406673431396,
                    -1.1884310245513916,
                    -1.3241256475448608,
                    -1.285355806350708,
                    -2.041367530822754,
                    -2.099522113800049,
                    -1.8862881660461426,
                    -1.459820032119751,
                    -1.2465859651565552,
                    -1.0527366399765015,
                    -1.0527366399765015,
                    -1.0915064811706543,
                    -1.1302763223648071,
                    -1.110891342163086,
                    -1.3435105085372925,
                    -1.634284257888794,
                    -0.8201176524162292,
                    -1.072121500968933,
                    -0.9170421957969666,
                    0.5949813723564148,
                    0.9051399827003479,
                    -0.5293439030647278,
                    -0.7038081288337708,
                    -0.6068835854530334,
                    -0.27733999490737915,
                    -0.25795507431030273,
                    -0.5099589824676514
                ],
                [
                    -1.0915064811706543,
                    -1.1884310245513916,
                    -1.808748483657837,
                    -1.285355806350708,
                    -1.0333516597747803,
                    -0.9945818781852722,
                    -1.0139667987823486,
                    -1.4792048931121826,
                    -1.4792048931121826,
                    -2.080137252807617,
                    -1.8669031858444214,
                    -1.227200984954834,
                    -0.8395025730133057,
                    -0.7813478112220764,
                    -0.761962890625,
                    -1.2078160047531128,
                    -1.769978642463684,
                    -1.4210501909255981,
                    -0.587498664855957,
                    -1.5955144166946411,
                    -1.944442868232727,
                    -0.6068835854530334,
                    -0.7813478112220764,
                    -0.9170421957969666,
                    0.7888305187225342,
                    1.0602192878723145,
                    -0.316109836101532,
                    -0.3548796772956848,
                    -0.3354947566986084,
                    0.11035845428705215,
                    -0.761962890625,
                    -1.5179747343063354
                ],
                [
                    -1.285355806350708,
                    -1.401665210723877,
                    -1.944442868232727,
                    -1.072121500968933,
                    -0.8588874936103821,
                    -0.9170421957969666,
                    -0.8782724142074585,
                    -1.2465859651565552,
                    -1.6536691188812256,
                    -2.2352166175842285,
                    -1.401665210723877,
                    -0.6068835854530334,
                    -0.7425779700279236,
                    -0.7231930494308472,
                    -0.9751969575881958,
                    -1.944442868232727,
                    -2.1770617961883545,
                    -1.5567445755004883,
                    -0.6456534266471863,
                    -1.3241256475448608,
                    -1.459820032119751,
                    -0.4711891710758209,
                    -0.7038081288337708,
                    -0.5293439030647278,
                    0.3623623549938202,
                    1.0408344268798828,
                    -0.10287576168775558,
                    -0.025336099788546562,
                    -0.025336099788546562,
                    0.0522037111222744,
                    -1.4210501909255981,
                    -1.9638278484344482
                ],
                [
                    -1.110891342163086,
                    -1.5179747343063354,
                    -1.4792048931121826,
                    -0.4518042504787445,
                    -0.1222606748342514,
                    -0.7038081288337708,
                    -1.2078160047531128,
                    -0.8976573348045349,
                    -1.1496611833572388,
                    -1.769978642463684,
                    -0.8588874936103821,
                    -0.5681137442588806,
                    -0.7038081288337708,
                    -0.6844232082366943,
                    -1.634284257888794,
                    -2.157676935195923,
                    -1.4210501909255981,
                    -0.6456534266471863,
                    -1.1302763223648071,
                    -1.0527366399765015,
                    -0.27733999490737915,
                    -0.2385701686143875,
                    -0.29672491550445557,
                    -0.19980034232139587,
                    0.20728303492069244,
                    0.5949813723564148,
                    -0.08349084854125977,
                    0.03281864896416664,
                    -0.025336099788546562,
                    -0.19980034232139587,
                    -1.828133463859558,
                    -2.0025975704193115
                ],
                [
                    -0.936427116394043,
                    -1.401665210723877,
                    -1.3628954887390137,
                    -0.2191852629184723,
                    0.0522037111222744,
                    -0.04472101479768753,
                    -1.16904616355896,
                    -1.3628954887390137,
                    -0.8976573348045349,
                    -0.8395025730133057,
                    -0.27733999490737915,
                    -0.29672491550445557,
                    -0.37426456809043884,
                    -1.0915064811706543,
                    -2.041367530822754,
                    -1.7118239402770996,
                    -0.6456534266471863,
                    -0.39364948868751526,
                    -0.8201176524162292,
                    -0.5487288236618042,
                    -0.14164559543132782,
                    -0.10287576168775558,
                    -0.19980034232139587,
                    -0.6456534266471863,
                    0.3623623549938202,
                    0.42051711678504944,
                    -0.005951183382421732,
                    0.03281864896416664,
                    -0.1222606748342514,
                    -0.587498664855957,
                    -2.157676935195923,
                    -1.9832127094268799
                ],
                [
                    -0.7813478112220764,
                    -1.3047406673431396,
                    -1.3822803497314453,
                    -0.25795507431030273,
                    0.07158862799406052,
                    0.12974336743354797,
                    -0.49057406187057495,
                    -1.4792048931121826,
                    -1.6730540990829468,
                    -0.8007327318191528,
                    -0.4130344092845917,
                    -0.316109836101532,
                    -0.005951183382421732,
                    -0.6262685060501099,
                    -1.2078160047531128,
                    -0.8201176524162292,
                    -0.5487288236618042,
                    -0.6068835854530334,
                    -0.4130344092845917,
                    -0.29672491550445557,
                    -0.316109836101532,
                    0.03281864896416664,
                    -0.7813478112220764,
                    -1.3241256475448608,
                    0.5174416899681091,
                    0.4786718487739563,
                    -0.04472101479768753,
                    -0.025336099788546562,
                    -0.2191852629184723,
                    -0.6262685060501099,
                    -2.1964468955993652,
                    -2.0219826698303223
                ],
                [
                    -0.3354947566986084,
                    -1.401665210723877,
                    -1.459820032119751,
                    -0.3548796772956848,
                    0.013433732092380524,
                    0.11035845428705215,
                    0.0522037111222744,
                    -0.9751969575881958,
                    -1.4404350519180298,
                    -0.6650383472442627,
                    -0.7813478112220764,
                    -0.3548796772956848,
                    0.24605286121368408,
                    -0.29672491550445557,
                    0.07158862799406052,
                    0.42051711678504944,
                    0.12974336743354797,
                    -0.10287576168775558,
                    -0.2385701686143875,
                    -0.1222606748342514,
                    -0.16103051602840424,
                    -0.19980034232139587,
                    -0.6844232082366943,
                    -0.6262685060501099,
                    0.6725209951400757,
                    0.30420762300491333,
                    -0.2385701686143875,
                    -0.005951183382421732,
                    -0.08349084854125977,
                    -0.4711891710758209,
                    -2.157676935195923,
                    -2.25460147857666
                ],
                [
                    -0.5681137442588806,
                    -1.6148992776870728,
                    -1.5955144166946411,
                    -0.6456534266471863,
                    -0.37426456809043884,
                    0.0522037111222744,
                    0.09097354114055634,
                    -0.1222606748342514,
                    -0.10287576168775558,
                    -0.04472101479768753,
                    -0.2191852629184723,
                    0.22666795551776886,
                    0.43990203738212585,
                    -0.29672491550445557,
                    -0.39364948868751526,
                    0.12974336743354797,
                    0.401132196187973,
                    0.18789811432361603,
                    0.0522037111222744,
                    0.1685132086277008,
                    0.2848227024078369,
                    -0.10287576168775558,
                    0.013433732092380524,
                    -0.1222606748342514,
                    0.5174416899681091,
                    0.3817472755908966,
                    -0.5099589824676514,
                    -0.37426456809043884,
                    0.09097354114055634,
                    -0.5099589824676514,
                    -2.080137252807617,
                    -1.6536691188812256
                ],
                [
                    -0.5487288236618042,
                    -1.1496611833572388,
                    -1.285355806350708,
                    -0.7038081288337708,
                    -0.49057406187057495,
                    -0.27733999490737915,
                    0.1491282880306244,
                    0.20728303492069244,
                    0.42051711678504944,
                    0.2848227024078369,
                    0.4786718487739563,
                    0.3817472755908966,
                    0.32359254360198975,
                    0.20728303492069244,
                    0.11035845428705215,
                    0.03281864896416664,
                    -0.005951183382421732,
                    -0.04472101479768753,
                    0.20728303492069244,
                    0.42051711678504944,
                    0.4980567693710327,
                    0.32359254360198975,
                    0.5949813723564148,
                    0.20728303492069244,
                    0.401132196187973,
                    0.3623623549938202,
                    -0.316109836101532,
                    -0.25795507431030273,
                    0.09097354114055634,
                    -0.6456534266471863,
                    -1.459820032119751,
                    -0.8201176524162292
                ],
                [
                    -0.39364948868751526,
                    -1.0333516597747803,
                    -0.9751969575881958,
                    -0.587498664855957,
                    -0.4130344092845917,
                    -0.6068835854530334,
                    0.1491282880306244,
                    0.1491282880306244,
                    0.3429774343967438,
                    0.18789811432361603,
                    0.0522037111222744,
                    0.1491282880306244,
                    0.42051711678504944,
                    0.4786718487739563,
                    0.6725209951400757,
                    0.5174416899681091,
                    0.3817472755908966,
                    0.3623623549938202,
                    0.12974336743354797,
                    0.18789811432361603,
                    0.24605286121368408,
                    0.24605286121368408,
                    0.7112908363342285,
                    0.7694455981254578,
                    0.7306757569313049,
                    0.03281864896416664,
                    0.013433732092380524,
                    -0.1222606748342514,
                    -0.14164559543132782,
                    -0.587498664855957,
                    -1.285355806350708,
                    -0.936427116394043
                ],
                [
                    -0.6068835854530334,
                    -1.110891342163086,
                    -1.110891342163086,
                    -0.6650383472442627,
                    -0.4711891710758209,
                    -0.5293439030647278,
                    -0.04472101479768753,
                    0.11035845428705215,
                    0.42051711678504944,
                    1.312223196029663,
                    0.24605286121368408,
                    -0.8976573348045349,
                    -0.025336099788546562,
                    0.42051711678504944,
                    0.42051711678504944,
                    0.7112908363342285,
                    1.0602192878723145,
                    0.8857550621032715,
                    0.5174416899681091,
                    0.3623623549938202,
                    0.3623623549938202,
                    -0.08349084854125977,
                    0.43990203738212585,
                    1.0408344268798828,
                    1.0602192878723145,
                    0.6725209951400757,
                    0.0522037111222744,
                    -0.04472101479768753,
                    -0.25795507431030273,
                    -1.2078160047531128,
                    -1.9250580072402954,
                    -0.8007327318191528
                ],
                [
                    -0.7231930494308472,
                    -0.8976573348045349,
                    -0.9945818781852722,
                    -0.7038081288337708,
                    -0.29672491550445557,
                    -0.10287576168775558,
                    -0.10287576168775558,
                    0.07158862799406052,
                    -0.10287576168775558,
                    1.1377589702606201,
                    1.2928383350372314,
                    -0.7425779700279236,
                    -0.2191852629184723,
                    0.5949813723564148,
                    0.7500606775283813,
                    0.7888305187225342,
                    0.556211531162262,
                    0.6919059157371521,
                    1.1183741092681885,
                    1.0989891290664673,
                    1.1959137916564941,
                    0.9245249032974243,
                    0.43990203738212585,
                    0.3429774343967438,
                    1.0796042680740356,
                    1.350993037223816,
                    0.32359254360198975,
                    -0.025336099788546562,
                    -0.3548796772956848,
                    -1.5761295557022095,
                    -1.634284257888794,
                    -0.14164559543132782
                ],
                [
                    -0.6650383472442627,
                    -0.7038081288337708,
                    -0.4324193298816681,
                    -0.5681137442588806,
                    -0.18041542172431946,
                    -0.49057406187057495,
                    -0.27733999490737915,
                    -0.37426456809043884,
                    -0.2191852629184723,
                    0.0522037111222744,
                    1.1959137916564941,
                    0.827600359916687,
                    0.2848227024078369,
                    0.5368266105651855,
                    0.9051399827003479,
                    0.9051399827003479,
                    0.8082154393196106,
                    0.7500606775283813,
                    0.6143662929534912,
                    0.7306757569313049,
                    0.6919059157371521,
                    0.7694455981254578,
                    0.8857550621032715,
                    0.5949813723564148,
                    0.6919059157371521,
                    0.3817472755908966,
                    0.8082154393196106,
                    -0.2191852629184723,
                    -0.37426456809043884,
                    -0.9945818781852722,
                    -1.6148992776870728,
                    -0.6068835854530334
                ],
                [
                    -0.4711891710758209,
                    -0.5487288236618042,
                    -0.10287576168775558,
                    -0.06410592794418335,
                    -0.2191852629184723,
                    -0.9170421957969666,
                    -0.587498664855957,
                    -0.6650383472442627,
                    -0.19980034232139587,
                    -0.29672491550445557,
                    0.07158862799406052,
                    1.5254572629928589,
                    0.8082154393196106,
                    0.22666795551776886,
                    0.6725209951400757,
                    0.5368266105651855,
                    1.0408344268798828,
                    1.176528811454773,
                    0.8663701415061951,
                    1.0214494466781616,
                    1.0408344268798828,
                    0.5949813723564148,
                    0.7112908363342285,
                    0.7694455981254578,
                    0.5949813723564148,
                    0.2848227024078369,
                    -0.4130344092845917,
                    -1.0333516597747803,
                    -0.8007327318191528,
                    -0.7038081288337708,
                    -1.072121500968933,
                    -0.2191852629184723
                ],
                [
                    -0.29672491550445557,
                    -0.3548796772956848,
                    -0.06410592794418335,
                    -0.5681137442588806,
                    -0.6844232082366943,
                    -0.9558120369911194,
                    -1.0333516597747803,
                    -0.49057406187057495,
                    -0.316109836101532,
                    0.03281864896416664,
                    -0.7425779700279236,
                    0.2848227024078369,
                    1.2346835136413574,
                    0.6531360745429993,
                    0.7888305187225342,
                    1.0602192878723145,
                    0.9439098238945007,
                    0.9245249032974243,
                    1.2540684938430786,
                    1.2152986526489258,
                    0.7112908363342285,
                    0.5368266105651855,
                    0.7112908363342285,
                    0.6919059157371521,
                    0.5368266105651855,
                    0.4592869281768799,
                    -0.9751969575881958,
                    -0.9945818781852722,
                    -1.1496611833572388,
                    -1.227200984954834,
                    -0.25795507431030273,
                    0.24605286121368408
                ],
                [
                    -0.1222606748342514,
                    -0.37426456809043884,
                    -0.7038081288337708,
                    -0.9170421957969666,
                    -0.7038081288337708,
                    -1.0527366399765015,
                    -1.2659708261489868,
                    -0.4324193298816681,
                    -0.9751969575881958,
                    -0.587498664855957,
                    -0.2191852629184723,
                    -1.1496611833572388,
                    0.03281864896416664,
                    1.0796042680740356,
                    0.9439098238945007,
                    1.2540684938430786,
                    1.176528811454773,
                    0.8857550621032715,
                    1.1377589702606201,
                    1.312223196029663,
                    0.7500606775283813,
                    0.6725209951400757,
                    0.8857550621032715,
                    0.7694455981254578,
                    0.401132196187973,
                    0.2654377818107605,
                    -0.4130344092845917,
                    -0.6456534266471863,
                    -0.936427116394043,
                    -0.6068835854530334,
                    -0.25795507431030273,
                    -0.19980034232139587
                ],
                [
                    0.013433732092380524,
                    -0.6068835854530334,
                    -1.3047406673431396,
                    -0.4324193298816681,
                    -0.37426456809043884,
                    -0.9558120369911194,
                    -1.0333516597747803,
                    -0.587498664855957,
                    -0.6068835854530334,
                    -1.16904616355896,
                    -0.10287576168775558,
                    -0.5099589824676514,
                    -0.6650383472442627,
                    0.6919059157371521,
                    1.370378017425537,
                    1.2152986526489258,
                    1.0989891290664673,
                    1.312223196029663,
                    0.8082154393196106,
                    0.8082154393196106,
                    0.8663701415061951,
                    0.6725209951400757,
                    0.556211531162262,
                    0.6919059157371521,
                    0.3817472755908966,
                    0.24605286121368408,
                    -0.29672491550445557,
                    -0.8588874936103821,
                    -0.39364948868751526,
                    0.20728303492069244,
                    -0.316109836101532,
                    -0.49057406187057495
                ],
                [
                    -0.27733999490737915,
                    -0.8395025730133057,
                    -1.072121500968933,
                    -0.4130344092845917,
                    -0.2385701686143875,
                    -0.6068835854530334,
                    -1.0915064811706543,
                    -0.8007327318191528,
                    -0.18041542172431946,
                    -0.316109836101532,
                    -0.7813478112220764,
                    -0.005951183382421732,
                    0.03281864896416664,
                    0.5755964517593384,
                    1.176528811454773,
                    1.4479176998138428,
                    1.1959137916564941,
                    1.1959137916564941,
                    1.00206458568573,
                    0.6143662929534912,
                    0.43990203738212585,
                    0.7112908363342285,
                    0.7500606775283813,
                    0.7888305187225342,
                    0.7112908363342285,
                    0.4592869281768799,
                    -0.08349084854125977,
                    -0.5487288236618042,
                    -0.10287576168775558,
                    -0.19980034232139587,
                    -0.5487288236618042,
                    -0.5487288236618042
                ],
                [
                    -0.4711891710758209,
                    -0.6456534266471863,
                    0.2848227024078369,
                    1.0602192878723145,
                    0.4980567693710327,
                    -0.04472101479768753,
                    -0.7813478112220764,
                    -0.9558120369911194,
                    -0.4324193298816681,
                    -0.025336099788546562,
                    -0.6844232082366943,
                    -0.8007327318191528,
                    0.401132196187973,
                    0.9632947444915771,
                    0.9245249032974243,
                    1.4479176998138428,
                    1.2152986526489258,
                    0.9245249032974243,
                    0.9245249032974243,
                    0.6531360745429993,
                    0.6531360745429993,
                    0.9051399827003479,
                    0.7306757569313049,
                    0.9245249032974243,
                    0.7500606775283813,
                    0.2654377818107605,
                    0.11035845428705215,
                    0.11035845428705215,
                    -0.25795507431030273,
                    -0.587498664855957,
                    -0.49057406187057495,
                    -0.5681137442588806
                ],
                [
                    -0.1222606748342514,
                    0.3623623549938202,
                    1.2928383350372314,
                    1.6223819255828857,
                    1.3316081762313843,
                    0.6143662929534912,
                    0.03281864896416664,
                    -0.3354947566986084,
                    -0.37426456809043884,
                    -0.6068835854530334,
                    -0.37426456809043884,
                    -0.27733999490737915,
                    -0.025336099788546562,
                    0.9632947444915771,
                    0.9826796650886536,
                    1.3897628784179688,
                    1.1377589702606201,
                    0.8663701415061951,
                    0.9826796650886536,
                    0.7694455981254578,
                    0.5949813723564148,
                    1.3897628784179688,
                    0.9632947444915771,
                    0.7306757569313049,
                    0.42051711678504944,
                    0.11035845428705215,
                    -0.06410592794418335,
                    -0.4711891710758209,
                    -0.49057406187057495,
                    -0.5681137442588806,
                    -0.3548796772956848,
                    -0.4518042504787445
                ],
                [
                    -0.29672491550445557,
                    -0.18041542172431946,
                    0.24605286121368408,
                    0.8469852805137634,
                    1.3897628784179688,
                    1.370378017425537,
                    0.6725209951400757,
                    0.20728303492069244,
                    0.07158862799406052,
                    -0.5099589824676514,
                    -0.6456534266471863,
                    0.24605286121368408,
                    0.401132196187973,
                    0.6531360745429993,
                    1.0602192878723145,
                    0.8469852805137634,
                    0.32359254360198975,
                    0.30420762300491333,
                    0.9632947444915771,
                    1.0214494466781616,
                    0.7888305187225342,
                    1.2152986526489258,
                    1.0408344268798828,
                    0.4980567693710327,
                    0.3429774343967438,
                    0.556211531162262,
                    -0.25795507431030273,
                    -1.3047406673431396,
                    -0.6650383472442627,
                    -0.4711891710758209,
                    -0.4518042504787445,
                    -1.0139667987823486
                ],
                [
                    -0.6650383472442627,
                    -0.7425779700279236,
                    -0.9945818781852722,
                    -0.3548796772956848,
                    0.7694455981254578,
                    1.1571439504623413,
                    1.2734533548355103,
                    0.7306757569313049,
                    0.1685132086277008,
                    0.0522037111222744,
                    -0.37426456809043884,
                    -0.4518042504787445,
                    -0.14164559543132782,
                    0.12974336743354797,
                    0.401132196187973,
                    -0.18041542172431946,
                    -0.936427116394043,
                    -0.5099589824676514,
                    0.6919059157371521,
                    1.0989891290664673,
                    1.1183741092681885,
                    0.6531360745429993,
                    0.9245249032974243,
                    0.8082154393196106,
                    0.5949813723564148,
                    0.18789811432361603,
                    -0.6068835854530334,
                    -1.5955144166946411,
                    -0.6650383472442627,
                    -0.6456534266471863,
                    -1.110891342163086,
                    -0.936427116394043
                ],
                [
                    -0.8588874936103821,
                    -0.587498664855957,
                    -1.459820032119751,
                    -1.5761295557022095,
                    -0.587498664855957,
                    0.43990203738212585,
                    0.7888305187225342,
                    1.1959137916564941,
                    0.9439098238945007,
                    0.3623623549938202,
                    0.013433732092380524,
                    -0.2191852629184723,
                    -0.4130344092845917,
                    -0.2191852629184723,
                    -0.1222606748342514,
                    -0.3548796772956848,
                    -0.8588874936103821,
                    -0.8395025730133057,
                    0.6143662929534912,
                    1.0989891290664673,
                    0.8469852805137634,
                    1.0214494466781616,
                    0.8469852805137634,
                    0.4786718487739563,
                    0.5174416899681091,
                    -0.3354947566986084,
                    -1.5761295557022095,
                    -1.2078160047531128,
                    -0.5487288236618042,
                    -1.0915064811706543,
                    -0.8782724142074585,
                    -0.761962890625
                ],
                [
                    -0.6844232082366943,
                    -0.587498664855957,
                    -1.4210501909255981,
                    -2.0219826698303223,
                    -1.8862881660461426,
                    -0.316109836101532,
                    0.401132196187973,
                    0.9826796650886536,
                    1.486687421798706,
                    1.0796042680740356,
                    0.32359254360198975,
                    0.03281864896416664,
                    -0.10287576168775558,
                    -0.1222606748342514,
                    -0.2191852629184723,
                    0.09097354114055634,
                    0.07158862799406052,
                    -0.14164559543132782,
                    0.3623623549938202,
                    0.8469852805137634,
                    0.6531360745429993,
                    0.9245249032974243,
                    1.0602192878723145,
                    0.5174416899681091,
                    -0.1222606748342514,
                    -1.110891342163086,
                    -1.5761295557022095,
                    -0.7813478112220764,
                    -1.4404350519180298,
                    -0.2191852629184723,
                    0.8082154393196106,
                    -0.37426456809043884
                ],
                [
                    -0.587498664855957,
                    -0.6650383472442627,
                    -1.3241256475448608,
                    -1.4210501909255981,
                    -1.9638278484344482,
                    -1.4792048931121826,
                    -0.1222606748342514,
                    0.5949813723564148,
                    1.1959137916564941,
                    1.5060724020004272,
                    1.176528811454773,
                    0.5755964517593384,
                    0.30420762300491333,
                    0.1491282880306244,
                    -0.18041542172431946,
                    -0.16103051602840424,
                    -0.316109836101532,
                    -0.1222606748342514,
                    0.2654377818107605,
                    0.5368266105651855,
                    0.6531360745429993,
                    0.8082154393196106,
                    0.5949813723564148,
                    -0.005951183382421732,
                    -0.4711891710758209,
                    -1.16904616355896,
                    -1.110891342163086,
                    -1.1884310245513916,
                    -1.3628954887390137,
                    0.3623623549938202,
                    0.8663701415061951,
                    -0.06410592794418335
                ],
                [
                    -0.6068835854530334,
                    -0.9751969575881958,
                    -1.808748483657837,
                    -1.0139667987823486,
                    -1.5373597145080566,
                    -1.7893636226654053,
                    -1.3822803497314453,
                    -0.19980034232139587,
                    0.4786718487739563,
                    0.9826796650886536,
                    1.350993037223816,
                    1.3316081762313843,
                    1.00206458568573,
                    0.5755964517593384,
                    0.20728303492069244,
                    0.401132196187973,
                    0.2654377818107605,
                    -0.4711891710758209,
                    -0.6068835854530334,
                    -0.1222606748342514,
                    -0.4711891710758209,
                    -0.587498664855957,
                    -0.5681137442588806,
                    -0.39364948868751526,
                    0.11035845428705215,
                    -0.14164559543132782,
                    -0.3548796772956848,
                    -0.316109836101532,
                    0.0522037111222744,
                    0.3429774343967438,
                    0.556211531162262,
                    -0.37426456809043884
                ],
                [
                    -0.9170421957969666,
                    -1.7505937814712524,
                    -1.9638278484344482,
                    -0.9558120369911194,
                    -1.16904616355896,
                    -1.6536691188812256,
                    -1.9056730270385742,
                    -1.285355806350708,
                    -0.10287576168775558,
                    0.20728303492069244,
                    0.4786718487739563,
                    0.9826796650886536,
                    1.2928383350372314,
                    1.1183741092681885,
                    0.7694455981254578,
                    1.176528811454773,
                    1.583612084388733,
                    0.8663701415061951,
                    -0.3548796772956848,
                    -0.761962890625,
                    -1.1496611833572388,
                    -0.7813478112220764,
                    -0.25795507431030273,
                    0.2848227024078369,
                    0.8469852805137634,
                    0.4592869281768799,
                    0.22666795551776886,
                    0.22666795551776886,
                    0.4786718487739563,
                    0.3429774343967438,
                    0.556211531162262,
                    0.0522037111222744
                ]
            ],
            [
                [
                    -1.0809093713760376,
                    -0.8252403736114502,
                    -1.1595767736434937,
                    -1.5135798454284668,
                    -1.7692488431930542,
                    -1.297244668006897,
                    -0.9432414174079895,
                    -0.8449072241783142,
                    -0.7859066724777222,
                    -1.0415756702423096,
                    -2.0249180793762207,
                    -1.749582052230835,
                    -1.0219087600708008,
                    -0.9432414174079895,
                    -1.0415756702423096,
                    -1.1202430725097656,
                    -0.7072393298149109,
                    -0.05823349952697754,
                    0.02043387107551098,
                    -0.03856665641069412,
                    0.05976755917072296,
                    -0.29423561692237854,
                    -0.7662398815155029,
                    -0.8055735230445862,
                    0.25643613934516907,
                    0.11876823753118515,
                    -1.257910966873169,
                    -0.6285719275474548,
                    -0.5302377343177795,
                    -1.1005761623382568,
                    -0.9235746264457703,
                    -0.7072393298149109
                ],
                [
                    -0.8449072241783142,
                    -0.41223669052124023,
                    -0.9629082679748535,
                    -1.4939130544662476,
                    -1.3169114589691162,
                    -0.6089051365852356,
                    -0.7662398815155029,
                    -0.7662398815155029,
                    -0.6875724792480469,
                    -1.1989104747772217,
                    -2.064251661300659,
                    -1.4742462635040283,
                    -0.5892382860183716,
                    -0.6089051365852356,
                    -0.9039077758789062,
                    -0.9825751185417175,
                    -0.31390246748924255,
                    -0.11723402887582779,
                    -0.2352350950241089,
                    -0.33356931805610657,
                    -0.11723402887582779,
                    -0.29423561692237854,
                    -0.9039077758789062,
                    -0.7859066724777222,
                    0.5514388084411621,
                    0.3154366612434387,
                    -1.5332467555999756,
                    -1.1399098634719849,
                    -1.0219087600708008,
                    -1.1202430725097656,
                    -0.6482387781143188,
                    -0.8252403736114502
                ],
                [
                    -0.5499045848846436,
                    -0.2745687663555145,
                    -0.6875724792480469,
                    -1.3169114589691162,
                    -0.7662398815155029,
                    -0.3532361388206482,
                    -0.7269061803817749,
                    -0.6482387781143188,
                    -0.6089051365852356,
                    -1.3759119510650635,
                    -2.0249180793762207,
                    -1.2382441759109497,
                    -0.6679056286811829,
                    -0.6875724792480469,
                    -1.1202430725097656,
                    -1.2382441759109497,
                    -0.3925698399543762,
                    -0.41223669052124023,
                    -0.8842409253120422,
                    -0.7662398815155029,
                    -0.17623455822467804,
                    -0.17623455822467804,
                    -1.1202430725097656,
                    -0.7269061803817749,
                    0.6891067028045654,
                    0.3941040337085724,
                    -1.7299151420593262,
                    -1.3365782499313354,
                    -0.7662398815155029,
                    -0.4909040629863739,
                    -0.4909040629863739,
                    -1.257910966873169
                ],
                [
                    -0.1369008719921112,
                    -0.4515703618526459,
                    -0.4515703618526459,
                    -0.9825751185417175,
                    -0.2745687663555145,
                    -0.41223669052124023,
                    -0.6875724792480469,
                    -0.5302377343177795,
                    -0.5695714354515076,
                    -1.5332467555999756,
                    -1.906916856765747,
                    -1.3169114589691162,
                    -1.1399098634719849,
                    -1.1005761623382568,
                    -1.3562451601028442,
                    -1.3365782499313354,
                    -0.33356931805610657,
                    -0.11723402887582779,
                    -0.5105708837509155,
                    -0.4909040629863739,
                    -0.09756718575954437,
                    -0.17623455822467804,
                    -1.0612424612045288,
                    -0.6285719275474548,
                    0.7284404039382935,
                    0.5317719578742981,
                    -1.1595767736434937,
                    -0.5892382860183716,
                    -0.05823349952697754,
                    0.05976755917072296,
                    -0.5695714354515076,
                    -1.4349125623703003
                ],
                [
                    -0.05823349952697754,
                    -0.3729029893875122,
                    0.09910139441490173,
                    -0.5892382860183716,
                    -0.17623455822467804,
                    -0.5695714354515076,
                    -0.6482387781143188,
                    -0.5695714354515076,
                    -0.5892382860183716,
                    -1.6512478590011597,
                    -1.906916856765747,
                    -1.710248351097107,
                    -1.4939130544662476,
                    -1.3365782499313354,
                    -0.9825751185417175,
                    -0.7269061803817749,
                    -0.3532361388206482,
                    -0.19590140879154205,
                    -0.31390246748924255,
                    -0.43190351128578186,
                    -0.3925698399543762,
                    -0.2745687663555145,
                    -0.9629082679748535,
                    -0.3925698399543762,
                    0.7677740454673767,
                    0.9644424915313721,
                    -0.21556824445724487,
                    -0.1369008719921112,
                    0.11876823753118515,
                    0.1777687668800354,
                    -0.3925698399543762,
                    -0.29423561692237854
                ],
                [
                    -0.3532361388206482,
                    -0.41223669052124023,
                    -0.4909040629863739,
                    -0.4909040629863739,
                    -0.5499045848846436,
                    -0.6679056286811829,
                    -0.6285719275474548,
                    -0.8842409253120422,
                    -0.6875724792480469,
                    -1.7299151420593262,
                    -1.8872500658035278,
                    -1.5725804567337036,
                    -0.9039077758789062,
                    -0.5892382860183716,
                    -0.33356931805610657,
                    -0.29423561692237854,
                    -0.3925698399543762,
                    -0.43190351128578186,
                    -0.4515703618526459,
                    -0.8842409253120422,
                    -1.297244668006897,
                    -0.2549019455909729,
                    -0.4909040629863739,
                    -0.41223669052124023,
                    0.8661082983016968,
                    1.2397782802581787,
                    0.13843508064746857,
                    0.07943440228700638,
                    0.11876823753118515,
                    0.4137708842754364,
                    0.1777687668800354,
                    -0.05823349952697754
                ],
                [
                    -0.5695714354515076,
                    -0.5302377343177795,
                    -1.4742462635040283,
                    -0.8645740747451782,
                    -0.6482387781143188,
                    -0.4515703618526459,
                    -0.5892382860183716,
                    -1.1792436838150024,
                    -0.9629082679748535,
                    -1.8479163646697998,
                    -1.670914649963379,
                    -0.6482387781143188,
                    0.05976755917072296,
                    0.11876823753118515,
                    0.13843508064746857,
                    -0.4712372124195099,
                    -1.2775777578353882,
                    -1.0219087600708008,
                    -0.15656772255897522,
                    -1.297244668006897,
                    -1.6905814409255981,
                    0.0007670287159271538,
                    -0.19590140879154205,
                    -0.33356931805610657,
                    1.1807777881622314,
                    1.377446174621582,
                    0.35477036237716675,
                    0.33510351181030273,
                    0.2761029899120331,
                    0.7284404039382935,
                    -0.43190351128578186,
                    -1.257910966873169
                ],
                [
                    -0.7269061803817749,
                    -0.7662398815155029,
                    -1.4939130544662476,
                    -0.3532361388206482,
                    -0.3925698399543762,
                    -0.5105708837509155,
                    -0.5695714354515076,
                    -1.0219087600708008,
                    -1.3169114589691162,
                    -2.0249180793762207,
                    -0.9825751185417175,
                    0.3154366612434387,
                    0.2957698404788971,
                    0.33510351181030273,
                    -0.17623455822467804,
                    -1.6119141578674316,
                    -1.906916856765747,
                    -1.1399098634719849,
                    -0.15656772255897522,
                    -0.8645740747451782,
                    -1.257910966873169,
                    0.040100716054439545,
                    -0.05823349952697754,
                    0.33510351181030273,
                    1.0431098937988281,
                    1.41677987575531,
                    0.5317719578742981,
                    0.49243825674057007,
                    0.4137708842754364,
                    0.6301061511039734,
                    -1.1792436838150024,
                    -1.946250557899475
                ],
                [
                    -0.4909040629863739,
                    -0.8842409253120422,
                    -0.9629082679748535,
                    0.33510351181030273,
                    0.5121051073074341,
                    -0.17623455822467804,
                    -0.8449072241783142,
                    -0.6089051365852356,
                    -1.0219087600708008,
                    -1.5529135465621948,
                    -0.19590140879154205,
                    0.4137708842754364,
                    0.25643613934516907,
                    0.21710245311260223,
                    -1.1792436838150024,
                    -1.9659174680709839,
                    -1.0612424612045288,
                    0.02043387107551098,
                    -0.5695714354515076,
                    -0.7269061803817749,
                    -0.21556824445724487,
                    0.3154366612434387,
                    0.6301061511039734,
                    0.8267745971679688,
                    0.925108790397644,
                    1.0627766847610474,
                    0.5317719578742981,
                    0.5317719578742981,
                    0.45310458540916443,
                    0.37443721294403076,
                    -1.6119141578674316,
                    -1.9855842590332031
                ],
                [
                    -0.1369008719921112,
                    -0.8252403736114502,
                    -0.8842409253120422,
                    0.49243825674057007,
                    0.7874408960342407,
                    0.6301061511039734,
                    -0.7662398815155029,
                    -1.0612424612045288,
                    -0.8252403736114502,
                    -0.6482387781143188,
                    0.2761029899120331,
                    0.37443721294403076,
                    0.2957698404788971,
                    -0.5892382860183716,
                    -1.7692488431930542,
                    -1.3169114589691162,
                    0.02043387107551098,
                    0.3941040337085724,
                    -0.15656772255897522,
                    0.09910139441490173,
                    0.5514388084411621,
                    0.6497730016708374,
                    0.6497730016708374,
                    0.11876823753118515,
                    0.8661082983016968,
                    0.9841093420982361,
                    0.5711056590080261,
                    0.6104393005371094,
                    0.49243825674057007,
                    -0.03856665641069412,
                    -1.9855842590332031,
                    -1.946250557899475
                ],
                [
                    -0.05823349952697754,
                    -0.8645740747451782,
                    -0.9825751185417175,
                    0.4334377348423004,
                    0.8267745971679688,
                    0.8464414477348328,
                    0.07943440228700638,
                    -1.1399098634719849,
                    -1.3562451601028442,
                    -0.17623455822467804,
                    0.37443721294403076,
                    0.07943440228700638,
                    0.05976755917072296,
                    -0.5892382860183716,
                    -1.0219087600708008,
                    -0.29423561692237854,
                    0.23676930367946625,
                    0.19743561744689941,
                    0.45310458540916443,
                    0.7481071949005127,
                    0.6497730016708374,
                    0.8267745971679688,
                    -0.11723402887582779,
                    -0.7072393298149109,
                    0.90544193983078,
                    1.0234429836273193,
                    0.5514388084411621,
                    0.6497730016708374,
                    0.4334377348423004,
                    -0.1369008719921112,
                    -2.0445847511291504,
                    -1.9659174680709839
                ],
                [
                    0.0007670287159271538,
                    -1.0612424612045288,
                    -1.1202430725097656,
                    0.2957698404788971,
                    0.7481071949005127,
                    0.8857751488685608,
                    0.8267745971679688,
                    -0.5499045848846436,
                    -0.9432414174079895,
                    0.33510351181030273,
                    0.2957698404788971,
                    -0.21556824445724487,
                    -0.2745687663555145,
                    -0.41223669052124023,
                    0.25643613934516907,
                    0.7677740454673767,
                    0.5907724499702454,
                    0.6104393005371094,
                    0.5514388084411621,
                    0.23676930367946625,
                    0.02043387107551098,
                    0.19743561744689941,
                    -0.09756718575954437,
                    0.25643613934516907,
                    1.298778772354126,
                    0.925108790397644,
                    0.45310458540916443,
                    0.6694398522377014,
                    0.49243825674057007,
                    -0.07790034264326096,
                    -2.0249180793762207,
                    -2.2019195556640625
                ],
                [
                    -0.33356931805610657,
                    -1.297244668006897,
                    -1.2382441759109497,
                    -0.03856665641069412,
                    0.23676930367946625,
                    0.8071077466011047,
                    0.9841093420982361,
                    0.5711056590080261,
                    0.4137708842754364,
                    0.47277140617370605,
                    0.07943440228700638,
                    -0.09756718575954437,
                    -0.15656772255897522,
                    -0.6089051365852356,
                    -0.41223669052124023,
                    0.3154366612434387,
                    0.35477036237716675,
                    0.2957698404788971,
                    0.19743561744689941,
                    -0.1369008719921112,
                    -0.05823349952697754,
                    -0.31390246748924255,
                    -0.07790034264326096,
                    0.25643613934516907,
                    1.0431098937988281,
                    1.0037761926651,
                    0.23676930367946625,
                    0.4334377348423004,
                    0.7481071949005127,
                    -0.17623455822467804,
                    -1.906916856765747,
                    -1.5725804567337036
                ],
                [
                    -0.1369008719921112,
                    -0.7465730309486389,
                    -0.8842409253120422,
                    -0.1369008719921112,
                    0.07943440228700638,
                    0.33510351181030273,
                    0.9644424915313721,
                    0.9447756409645081,
                    0.5907724499702454,
                    0.02043387107551098,
                    0.13843508064746857,
                    -0.05823349952697754,
                    -0.07790034264326096,
                    -0.09756718575954437,
                    -0.19590140879154205,
                    -0.2549019455909729,
                    -0.3532361388206482,
                    -0.29423561692237854,
                    -0.07790034264326096,
                    0.040100716054439545,
                    0.15810193121433258,
                    -0.018899815157055855,
                    0.11876823753118515,
                    -0.11723402887582779,
                    0.4137708842754364,
                    0.7677740454673767,
                    0.35477036237716675,
                    0.6104393005371094,
                    0.8464414477348328,
                    -0.21556824445724487,
                    -1.1399098634719849,
                    -0.5499045848846436
                ],
                [
                    0.1777687668800354,
                    -0.5302377343177795,
                    -0.4712372124195099,
                    -0.05823349952697754,
                    0.13843508064746857,
                    -0.17623455822467804,
                    0.8267745971679688,
                    0.8857751488685608,
                    0.3154366612434387,
                    -0.31390246748924255,
                    -0.3729029893875122,
                    -0.21556824445724487,
                    0.02043387107551098,
                    0.11876823753118515,
                    0.37443721294403076,
                    0.1777687668800354,
                    -0.018899815157055855,
                    -0.07790034264326096,
                    -0.31390246748924255,
                    -0.2352350950241089,
                    -0.15656772255897522,
                    -0.09756718575954437,
                    0.35477036237716675,
                    0.4137708842754364,
                    0.37443721294403076,
                    0.0007670287159271538,
                    0.45310458540916443,
                    0.7087735533714294,
                    0.6694398522377014,
                    -0.21556824445724487,
                    -1.0022419691085815,
                    -0.5695714354515076
                ],
                [
                    -0.03856665641069412,
                    -0.6482387781143188,
                    -0.5892382860183716,
                    -0.09756718575954437,
                    0.07943440228700638,
                    0.02043387107551098,
                    0.5514388084411621,
                    0.8464414477348328,
                    0.5907724499702454,
                    0.9447756409645081,
                    -0.03856665641069412,
                    -1.0612424612045288,
                    -0.31390246748924255,
                    0.02043387107551098,
                    0.0007670287159271538,
                    0.3154366612434387,
                    0.6301061511039734,
                    0.4137708842754364,
                    0.09910139441490173,
                    -0.07790034264326096,
                    -0.018899815157055855,
                    -0.3925698399543762,
                    0.15810193121433258,
                    0.8661082983016968,
                    0.7087735533714294,
                    0.33510351181030273,
                    0.09910139441490173,
                    0.7284404039382935,
                    0.5121051073074341,
                    -0.9432414174079895,
                    -1.749582052230835,
                    -0.3729029893875122
                ],
                [
                    -0.21556824445724487,
                    -0.4515703618526459,
                    -0.4515703618526459,
                    0.05976755917072296,
                    0.35477036237716675,
                    0.5711056590080261,
                    0.5121051073074341,
                    0.7874408960342407,
                    0.2957698404788971,
                    0.7874408960342407,
                    0.8464414477348328,
                    -1.0219087600708008,
                    -0.4515703618526459,
                    0.19743561744689941,
                    0.3154366612434387,
                    0.35477036237716675,
                    0.11876823753118515,
                    0.25643613934516907,
                    0.7284404039382935,
                    0.6891067028045654,
                    0.7874408960342407,
                    0.5514388084411621,
                    0.040100716054439545,
                    0.05976755917072296,
                    0.90544193983078,
                    1.0627766847610474,
                    -0.018899815157055855,
                    0.3941040337085724,
                    0.3941040337085724,
                    -1.218577265739441,
                    -1.4152456521987915,
                    0.3154366612434387
                ],
                [
                    -0.21556824445724487,
                    -0.21556824445724487,
                    0.15810193121433258,
                    0.11876823753118515,
                    0.47277140617370605,
                    0.02043387107551098,
                    0.4137708842754364,
                    0.2761029899120331,
                    0.3941040337085724,
                    -0.03856665641069412,
                    0.8857751488685608,
                    0.5907724499702454,
                    -0.018899815157055855,
                    0.07943440228700638,
                    0.45310458540916443,
                    0.47277140617370605,
                    0.35477036237716675,
                    0.3154366612434387,
                    0.1777687668800354,
                    0.2957698404788971,
                    0.21710245311260223,
                    0.3941040337085724,
                    0.5907724499702454,
                    0.21710245311260223,
                    0.4334377348423004,
                    0.13843508064746857,
                    0.45310458540916443,
                    -0.018899815157055855,
                    0.21710245311260223,
                    -0.4515703618526459,
                    -1.2775777578353882,
                    -0.2352350950241089
                ],
                [
                    -0.03856665641069412,
                    -0.09756718575954437,
                    0.5121051073074341,
                    0.37443721294403076,
                    0.35477036237716675,
                    -0.5105708837509155,
                    0.0007670287159271538,
                    -0.09756718575954437,
                    0.3941040337085724,
                    0.05976755917072296,
                    -0.03856665641069412,
                    1.2594451904296875,
                    0.4334377348423004,
                    -0.2549019455909729,
                    0.25643613934516907,
                    0.13843508064746857,
                    0.6104393005371094,
                    0.7481071949005127,
                    0.49243825674057007,
                    0.6104393005371094,
                    0.5514388084411621,
                    0.21710245311260223,
                    0.5317719578742981,
                    0.4334377348423004,
                    0.21710245311260223,
                    0.0007670287159271538,
                    -0.5105708837509155,
                    -0.7072393298149109,
                    -0.3925698399543762,
                    -0.07790034264326096,
                    -0.5105708837509155,
                    0.21710245311260223
                ],
                [
                    0.25643613934516907,
                    0.23676930367946625,
                    0.5514388084411621,
                    -0.2352350950241089,
                    -0.018899815157055855,
                    -0.43190351128578186,
                    -0.5892382860183716,
                    0.040100716054439545,
                    0.21710245311260223,
                    0.5907724499702454,
                    -0.5302377343177795,
                    0.040100716054439545,
                    0.90544193983078,
                    0.25643613934516907,
                    0.45310458540916443,
                    0.7284404039382935,
                    0.5317719578742981,
                    0.49243825674057007,
                    0.8464414477348328,
                    0.8661082983016968,
                    0.35477036237716675,
                    0.09910139441490173,
                    0.4137708842754364,
                    0.4334377348423004,
                    0.1777687668800354,
                    0.13843508064746857,
                    -0.9432414174079895,
                    -0.5695714354515076,
                    -0.7859066724777222,
                    -0.7072393298149109,
                    0.5121051073074341,
                    0.90544193983078
                ],
                [
                    0.49243825674057007,
                    0.33510351181030273,
                    -0.21556824445724487,
                    -0.5695714354515076,
                    -0.03856665641069412,
                    -0.3729029893875122,
                    -0.7662398815155029,
                    0.13843508064746857,
                    -0.41223669052124023,
                    -0.1369008719921112,
                    0.35477036237716675,
                    -0.9629082679748535,
                    -0.09756718575954437,
                    0.7874408960342407,
                    0.6301061511039734,
                    0.925108790397644,
                    0.8267745971679688,
                    0.5121051073074341,
                    0.6694398522377014,
                    0.8661082983016968,
                    0.45310458540916443,
                    0.2761029899120331,
                    0.47277140617370605,
                    0.4334377348423004,
                    0.07943440228700638,
                    0.02043387107551098,
                    -0.2745687663555145,
                    -0.19590140879154205,
                    -0.5302377343177795,
                    -0.07790034264326096,
                    0.6497730016708374,
                    0.7481071949005127
                ],
                [
                    0.5711056590080261,
                    -0.07790034264326096,
                    -1.0022419691085815,
                    0.040100716054439545,
                    0.11876823753118515,
                    -0.43190351128578186,
                    -0.4712372124195099,
                    -0.03856665641069412,
                    -0.05823349952697754,
                    -0.6285719275474548,
                    0.6104393005371094,
                    0.040100716054439545,
                    -0.5892382860183716,
                    0.5317719578742981,
                    1.1414440870285034,
                    0.90544193983078,
                    0.7677740454673767,
                    0.9841093420982361,
                    0.4334377348423004,
                    0.3941040337085724,
                    0.3941040337085724,
                    0.23676930367946625,
                    0.11876823753118515,
                    0.3154366612434387,
                    0.040100716054439545,
                    -0.05823349952697754,
                    -0.11723402887582779,
                    -0.41223669052124023,
                    0.11876823753118515,
                    0.9447756409645081,
                    0.6104393005371094,
                    0.5907724499702454
                ],
                [
                    0.25643613934516907,
                    -0.3729029893875122,
                    -0.8055735230445862,
                    0.0007670287159271538,
                    0.25643613934516907,
                    -0.09756718575954437,
                    -0.4909040629863739,
                    -0.15656772255897522,
                    0.5317719578742981,
                    0.35477036237716675,
                    -0.11723402887582779,
                    0.49243825674057007,
                    0.11876823753118515,
                    0.5121051073074341,
                    0.9841093420982361,
                    1.1021103858947754,
                    0.8267745971679688,
                    0.8857751488685608,
                    0.7087735533714294,
                    0.3941040337085724,
                    0.05976755917072296,
                    0.3154366612434387,
                    0.33510351181030273,
                    0.35477036237716675,
                    0.25643613934516907,
                    0.19743561744689941,
                    -0.018899815157055855,
                    -0.2745687663555145,
                    0.5711056590080261,
                    0.8071077466011047,
                    0.5317719578742981,
                    0.5121051073074341
                ],
                [
                    0.040100716054439545,
                    -0.2352350950241089,
                    0.5317719578742981,
                    1.338112473487854,
                    0.9644424915313721,
                    0.6891067028045654,
                    -0.03856665641069412,
                    -0.2352350950241089,
                    0.4334377348423004,
                    0.5907724499702454,
                    -0.15656772255897522,
                    -0.3532361388206482,
                    0.49243825674057007,
                    0.7481071949005127,
                    0.6104393005371094,
                    0.9644424915313721,
                    0.7481071949005127,
                    0.6301061511039734,
                    0.6497730016708374,
                    0.35477036237716675,
                    0.2761029899120331,
                    0.47277140617370605,
                    0.25643613934516907,
                    0.3941040337085724,
                    0.2761029899120331,
                    0.33510351181030273,
                    0.0007670287159271538,
                    0.21710245311260223,
                    0.6497730016708374,
                    0.5121051073074341,
                    0.6891067028045654,
                    0.5121051073074341
                ],
                [
                    0.5121051073074341,
                    0.7677740454673767,
                    1.5151140689849854,
                    1.908450961112976,
                    1.6921156644821167,
                    1.298778772354126,
                    0.925108790397644,
                    0.47277140617370605,
                    0.4334377348423004,
                    -0.018899815157055855,
                    0.040100716054439545,
                    0.25643613934516907,
                    0.3154366612434387,
                    0.7087735533714294,
                    0.5317719578742981,
                    0.8071077466011047,
                    0.6301061511039734,
                    0.6301061511039734,
                    0.7087735533714294,
                    0.37443721294403076,
                    0.19743561744689941,
                    0.90544193983078,
                    0.47277140617370605,
                    0.25643613934516907,
                    0.07943440228700638,
                    0.05976755917072296,
                    -0.31390246748924255,
                    -0.17623455822467804,
                    0.6104393005371094,
                    0.3941040337085724,
                    0.7284404039382935,
                    0.6497730016708374
                ],
                [
                    0.3154366612434387,
                    0.2761029899120331,
                    0.6694398522377014,
                    1.3184456825256348,
                    1.7707830667495728,
                    1.8101167678833008,
                    1.338112473487854,
                    1.0431098937988281,
                    0.90544193983078,
                    0.1777687668800354,
                    -0.11723402887582779,
                    0.7874408960342407,
                    0.9841093420982361,
                    0.5514388084411621,
                    0.6104393005371094,
                    0.3941040337085724,
                    0.02043387107551098,
                    0.11876823753118515,
                    0.5907724499702454,
                    0.5711056590080261,
                    0.4334377348423004,
                    0.7874408960342407,
                    0.5121051073074341,
                    0.02043387107551098,
                    -0.07790034264326096,
                    0.15810193121433258,
                    -0.5302377343177795,
                    -0.9629082679748535,
                    0.4334377348423004,
                    0.5121051073074341,
                    0.5514388084411621,
                    -0.05823349952697754
                ],
                [
                    -0.15656772255897522,
                    -0.2352350950241089,
                    -0.5105708837509155,
                    0.21710245311260223,
                    1.338112473487854,
                    1.6527819633483887,
                    1.7314493656158447,
                    1.377446174621582,
                    1.0627766847610474,
                    0.9841093420982361,
                    0.4334377348423004,
                    0.07943440228700638,
                    0.4137708842754364,
                    0.3941040337085724,
                    0.21710245311260223,
                    -0.3729029893875122,
                    -0.9825751185417175,
                    -0.6089051365852356,
                    0.3154366612434387,
                    0.6301061511039734,
                    0.7481071949005127,
                    0.2957698404788971,
                    0.49243825674057007,
                    0.37443721294403076,
                    0.15810193121433258,
                    -0.11723402887582779,
                    -0.7465730309486389,
                    -1.2382441759109497,
                    0.45310458540916443,
                    0.4334377348423004,
                    -0.2352350950241089,
                    -0.2745687663555145
                ],
                [
                    -0.33356931805610657,
                    -0.17623455822467804,
                    -1.1399098634719849,
                    -1.1595767736434937,
                    -0.05823349952697754,
                    1.0824435949325562,
                    1.41677987575531,
                    1.7707830667495728,
                    1.5544477701187134,
                    1.2201114892959595,
                    0.9841093420982361,
                    0.5907724499702454,
                    0.37443721294403076,
                    0.5317719578742981,
                    0.35477036237716675,
                    0.040100716054439545,
                    -0.29423561692237854,
                    -0.5302377343177795,
                    0.37443721294403076,
                    0.6104393005371094,
                    0.4137708842754364,
                    0.7481071949005127,
                    0.5121051073074341,
                    0.07943440228700638,
                    0.15810193121433258,
                    -0.4909040629863739,
                    -1.4545793533325195,
                    -0.5105708837509155,
                    0.47277140617370605,
                    -0.29423561692237854,
                    -0.09756718575954437,
                    -0.11723402887582779
                ],
                [
                    -0.1369008719921112,
                    -0.21556824445724487,
                    -1.1989104747772217,
                    -1.670914649963379,
                    -1.6119141578674316,
                    0.23676930367946625,
                    1.1217772960662842,
                    1.4954472780227661,
                    1.7511162757873535,
                    1.5937814712524414,
                    1.1807777881622314,
                    1.0824435949325562,
                    0.9447756409645081,
                    0.8071077466011047,
                    0.6891067028045654,
                    0.7481071949005127,
                    0.6694398522377014,
                    0.3154366612434387,
                    0.23676930367946625,
                    0.35477036237716675,
                    0.23676930367946625,
                    0.5907724499702454,
                    0.6497730016708374,
                    0.05976755917072296,
                    -0.3925698399543762,
                    -1.1202430725097656,
                    -1.257910966873169,
                    0.02043387107551098,
                    -0.7662398815155029,
                    0.25643613934516907,
                    1.456113576889038,
                    0.15810193121433258
                ],
                [
                    0.07943440228700638,
                    0.0007670287159271538,
                    -0.8645740747451782,
                    -0.8842409253120422,
                    -1.6905814409255981,
                    -1.1202430725097656,
                    0.5121051073074341,
                    1.338112473487854,
                    1.6724488735198975,
                    1.8887841701507568,
                    1.790449857711792,
                    1.3971130847930908,
                    1.2004445791244507,
                    1.1217772960662842,
                    0.8267745971679688,
                    0.7087735533714294,
                    0.23676930367946625,
                    0.040100716054439545,
                    0.0007670287159271538,
                    0.15810193121433258,
                    0.2957698404788971,
                    0.47277140617370605,
                    0.23676930367946625,
                    -0.17623455822467804,
                    -0.29423561692237854,
                    -0.8645740747451782,
                    -0.7465730309486389,
                    -0.6285719275474548,
                    -0.8842409253120422,
                    0.9644424915313721,
                    1.5347809791564941,
                    0.3941040337085724
                ],
                [
                    0.040100716054439545,
                    -0.3729029893875122,
                    -1.3955788612365723,
                    -0.31390246748924255,
                    -1.1005761623382568,
                    -1.4742462635040283,
                    -0.8842409253120422,
                    0.5514388084411621,
                    1.298778772354126,
                    1.5741146802902222,
                    1.8494504690170288,
                    1.869117259979248,
                    1.6134482622146606,
                    1.41677987575531,
                    1.1217772960662842,
                    1.1611108779907227,
                    0.8267745971679688,
                    -0.1369008719921112,
                    -0.5695714354515076,
                    -0.018899815157055855,
                    -0.5105708837509155,
                    -0.6679056286811829,
                    -0.6679056286811829,
                    -0.2352350950241089,
                    0.5317719578742981,
                    0.2957698404788971,
                    0.13843508064746857,
                    0.21710245311260223,
                    0.7087735533714294,
                    1.1414440870285034,
                    1.2791119813919067,
                    0.11876823753118515
                ],
                [
                    -0.41223669052124023,
                    -1.4152456521987915,
                    -1.6315809488296509,
                    -0.15656772255897522,
                    -0.5302377343177795,
                    -1.2775777578353882,
                    -1.6119141578674316,
                    -0.8842409253120422,
                    0.7284404039382935,
                    1.1414440870285034,
                    1.2201114892959595,
                    1.6527819633483887,
                    1.869117259979248,
                    1.7117825746536255,
                    1.4364467859268188,
                    1.6331151723861694,
                    1.790449857711792,
                    1.1217772960662842,
                    0.02043387107551098,
                    -0.19590140879154205,
                    -0.7269061803817749,
                    -0.41223669052124023,
                    0.1777687668800354,
                    0.7284404039382935,
                    1.2397782802581787,
                    0.8661082983016968,
                    0.8661082983016968,
                    0.8661082983016968,
                    1.1217772960662842,
                    1.1021103858947754,
                    1.2201114892959595,
                    0.6497730016708374
                ]
            ],
            [
                [
                    -1.2458784580230713,
                    -0.972734272480011,
                    -1.323919653892517,
                    -1.6360843181610107,
                    -1.7921665906906128,
                    -1.5190225839614868,
                    -1.1483269929885864,
                    -1.1093063354492188,
                    -1.0702857971191406,
                    -1.1678372621536255,
                    -1.9872695207595825,
                    -1.8702077865600586,
                    -1.3824505805969238,
                    -1.3629401922225952,
                    -1.2653887271881104,
                    -1.2458784580230713,
                    -1.0897960662841797,
                    -0.7191005349159241,
                    -0.6410593390464783,
                    -0.7191005349159241,
                    -0.6020388007164001,
                    -0.6995902061462402,
                    -1.1288167238235474,
                    -1.1093063354492188,
                    -0.328894704580307,
                    -0.4069358706474304,
                    -1.6165740489959717,
                    -1.0897960662841797,
                    -0.9532240033149719,
                    -1.421471118927002,
                    -1.1873475313186646,
                    -0.9337137341499329
                ],
                [
                    -1.0897960662841797,
                    -0.6410593390464783,
                    -1.1093063354492188,
                    -1.6555945873260498,
                    -1.5385328531265259,
                    -1.0312652587890625,
                    -1.0702857971191406,
                    -1.0507755279541016,
                    -0.972734272480011,
                    -1.304409384727478,
                    -2.0848209857940674,
                    -1.694615125656128,
                    -1.1288167238235474,
                    -1.0117549896240234,
                    -1.0702857971191406,
                    -1.304409384727478,
                    -0.89469313621521,
                    -0.777631402015686,
                    -0.777631402015686,
                    -0.89469313621521,
                    -0.6995902061462402,
                    -0.6410593390464783,
                    -1.2263681888580322,
                    -1.0507755279541016,
                    -0.05575065314769745,
                    -0.34840500354766846,
                    -1.8116768598556519,
                    -1.46049165725708,
                    -1.3434299230575562,
                    -1.3629401922225952,
                    -0.8751828074455261,
                    -0.9337137341499329
                ],
                [
                    -0.8166519403457642,
                    -0.5239976048469543,
                    -0.8556725382804871,
                    -1.5385328531265259,
                    -1.1873475313186646,
                    -0.8166519403457642,
                    -1.0507755279541016,
                    -0.9532240033149719,
                    -0.8751828074455261,
                    -1.4800019264221191,
                    -2.0848209857940674,
                    -1.5385328531265259,
                    -1.2068578004837036,
                    -0.9532240033149719,
                    -1.284899115562439,
                    -1.577553391456604,
                    -0.914203405380249,
                    -0.9337137341499329,
                    -1.2458784580230713,
                    -1.1483269929885864,
                    -0.7191005349159241,
                    -0.6215490698814392,
                    -1.3434299230575562,
                    -1.0117549896240234,
                    0.04180079698562622,
                    -0.2898741364479065,
                    -1.9092283248901367,
                    -1.4800019264221191,
                    -0.9922446608543396,
                    -0.7581210732460022,
                    -0.7191005349159241,
                    -1.2263681888580322
                ],
                [
                    -0.38742557168006897,
                    -0.7386108040809631,
                    -0.6605696678161621,
                    -1.304409384727478,
                    -0.836162269115448,
                    -0.8166519403457642,
                    -0.9532240033149719,
                    -0.777631402015686,
                    -0.8166519403457642,
                    -1.6360843181610107,
                    -1.9872695207595825,
                    -1.558043122291565,
                    -1.440981388092041,
                    -1.2068578004837036,
                    -1.5385328531265259,
                    -1.6360843181610107,
                    -0.7581210732460022,
                    -0.5239976048469543,
                    -0.89469313621521,
                    -0.8751828074455261,
                    -0.6410593390464783,
                    -0.7191005349159241,
                    -1.323919653892517,
                    -0.914203405380249,
                    0.10033166408538818,
                    -0.13379181921482086,
                    -1.401960849761963,
                    -0.7971416711807251,
                    -0.3679153025150299,
                    -0.34840500354766846,
                    -0.89469313621521,
                    -1.558043122291565
                ],
                [
                    -0.328894704580307,
                    -0.6800799369812012,
                    -0.15330210328102112,
                    -1.0507755279541016,
                    -0.7581210732460022,
                    -0.89469313621521,
                    -0.8166519403457642,
                    -0.7386108040809631,
                    -0.7971416711807251,
                    -1.7531460523605347,
                    -1.9872695207595825,
                    -1.8897180557250977,
                    -1.6751048564910889,
                    -1.4995123147964478,
                    -1.2263681888580322,
                    -1.0702857971191406,
                    -0.8166519403457642,
                    -0.6800799369812012,
                    -0.7581210732460022,
                    -0.836162269115448,
                    -0.836162269115448,
                    -0.7971416711807251,
                    -1.3434299230575562,
                    -0.7191005349159241,
                    0.275924414396286,
                    0.29543471336364746,
                    -0.6215490698814392,
                    -0.5630182027816772,
                    -0.38742557168006897,
                    -0.328894704580307,
                    -0.7971416711807251,
                    -0.6605696678161621
                ],
                [
                    -0.6215490698814392,
                    -0.7191005349159241,
                    -0.7581210732460022,
                    -0.914203405380249,
                    -1.0312652587890625,
                    -0.8751828074455261,
                    -0.7191005349159241,
                    -1.0312652587890625,
                    -0.914203405380249,
                    -1.8506975173950195,
                    -1.9677592515945435,
                    -1.7921665906906128,
                    -1.3629401922225952,
                    -1.0702857971191406,
                    -0.836162269115448,
                    -0.7971416711807251,
                    -0.8166519403457642,
                    -0.8166519403457642,
                    -0.7971416711807251,
                    -1.1873475313186646,
                    -1.558043122291565,
                    -0.7971416711807251,
                    -1.0117549896240234,
                    -0.7191005349159241,
                    0.43200674653053284,
                    0.6466199159622192,
                    -0.34840500354766846,
                    -0.4459564685821533,
                    -0.42644616961479187,
                    -0.0752609446644783,
                    -0.19232268631458282,
                    -0.42644616961479187
                ],
                [
                    -0.8166519403457642,
                    -0.8556725382804871,
                    -1.7336357831954956,
                    -1.2263681888580322,
                    -1.0117549896240234,
                    -0.6800799369812012,
                    -0.6800799369812012,
                    -1.2458784580230713,
                    -1.1288167238235474,
                    -1.9287385940551758,
                    -1.7531460523605347,
                    -1.1678372621536255,
                    -0.7971416711807251,
                    -0.7581210732460022,
                    -0.7191005349159241,
                    -1.0117549896240234,
                    -1.558043122291565,
                    -1.2263681888580322,
                    -0.34840500354766846,
                    -1.401960849761963,
                    -1.7921665906906128,
                    -0.5044873356819153,
                    -0.8166519403457642,
                    -0.777631402015686,
                    0.6856405138969421,
                    0.91976398229599,
                    -0.19232268631458282,
                    -0.11428152769804001,
                    -0.13379181921482086,
                    0.334455281496048,
                    -0.6410593390464783,
                    -1.3824505805969238
                ],
                [
                    -0.9922446608543396,
                    -1.0702857971191406,
                    -1.8116768598556519,
                    -0.8556725382804871,
                    -0.7191005349159241,
                    -0.8166519403457642,
                    -0.7581210732460022,
                    -1.0897960662841797,
                    -1.421471118927002,
                    -2.0653107166290283,
                    -1.304409384727478,
                    -0.6410593390464783,
                    -0.7581210732460022,
                    -0.7581210732460022,
                    -1.0117549896240234,
                    -1.8702077865600586,
                    -2.1043312549591064,
                    -1.46049165725708,
                    -0.48497703671455383,
                    -0.972734272480011,
                    -1.401960849761963,
                    -0.38742557168006897,
                    -0.8166519403457642,
                    -0.6020388007164001,
                    0.334455281496048,
                    0.9392743110656738,
                    0.0027802155818790197,
                    0.11984195560216904,
                    0.08082137256860733,
                    0.3734758794307709,
                    -1.2068578004837036,
                    -1.8116768598556519
                ],
                [
                    -0.7971416711807251,
                    -1.1873475313186646,
                    -1.2653887271881104,
                    -0.19232268631458282,
                    0.1393522471189499,
                    -0.5044873356819153,
                    -1.1093063354492188,
                    -0.8556725382804871,
                    -1.2263681888580322,
                    -1.7726563215255737,
                    -0.836162269115448,
                    -0.6020388007164001,
                    -0.6995902061462402,
                    -0.6800799369812012,
                    -1.558043122291565,
                    -2.0848209857940674,
                    -1.440981388092041,
                    -0.6410593390464783,
                    -1.0507755279541016,
                    -1.0117549896240234,
                    -0.6605696678161621,
                    -0.2898741364479065,
                    -0.4459564685821533,
                    -0.4069358706474304,
                    0.022290505468845367,
                    0.5295581817626953,
                    0.11984195560216904,
                    0.1393522471189499,
                    0.1393522471189499,
                    0.19788311421871185,
                    -1.577553391456604,
                    -1.8311872482299805
                ],
                [
                    -0.5435079336166382,
                    -1.0897960662841797,
                    -1.1288167238235474,
                    0.08082137256860733,
                    0.334455281496048,
                    0.256413996219635,
                    -0.972734272480011,
                    -1.2263681888580322,
                    -1.0702857971191406,
                    -0.972734272480011,
                    -0.328894704580307,
                    -0.2898741364479065,
                    -0.38742557168006897,
                    -1.0897960662841797,
                    -1.9677592515945435,
                    -1.6751048564910889,
                    -0.6020388007164001,
                    -0.4069358706474304,
                    -0.7971416711807251,
                    -0.6605696678161621,
                    -0.30938443541526794,
                    -0.17281238734722137,
                    -0.3679153025150299,
                    -0.777631402015686,
                    0.04180079698562622,
                    0.3539655804634094,
                    0.10033166408538818,
                    0.23690369725227356,
                    0.256413996219635,
                    -0.250853568315506,
                    -1.9677592515945435,
                    -1.7726563215255737
                ],
                [
                    -0.4459564685821533,
                    -1.0702857971191406,
                    -1.1873475313186646,
                    0.04180079698562622,
                    0.3539655804634094,
                    0.4124964475631714,
                    -0.21183297038078308,
                    -1.284899115562439,
                    -1.597063660621643,
                    -0.7581210732460022,
                    -0.34840500354766846,
                    -0.328894704580307,
                    -0.23134326934814453,
                    -0.777631402015686,
                    -1.2458784580230713,
                    -0.7971416711807251,
                    -0.4654667377471924,
                    -0.6215490698814392,
                    -0.48497703671455383,
                    -0.328894704580307,
                    -0.30938443541526794,
                    -0.11428152769804001,
                    -0.836162269115448,
                    -1.2653887271881104,
                    0.10033166408538818,
                    0.19788311421871185,
                    0.10033166408538818,
                    0.47102731466293335,
                    0.1783728301525116,
                    -0.4459564685821533,
                    -2.02629017829895,
                    -1.8311872482299805
                ],
                [
                    -0.250853568315506,
                    -1.2263681888580322,
                    -1.304409384727478,
                    -0.0752609446644783,
                    0.29543471336364746,
                    0.4124964475631714,
                    0.4124964475631714,
                    -0.8166519403457642,
                    -1.323919653892517,
                    -0.5825284719467163,
                    -0.6215490698814392,
                    -0.6800799369812012,
                    -0.38742557168006897,
                    -0.5435079336166382,
                    0.061311084777116776,
                    0.4124964475631714,
                    0.11984195560216904,
                    -0.23134326934814453,
                    -0.4069358706474304,
                    -0.38742557168006897,
                    -0.42644616961479187,
                    -0.5044873356819153,
                    -0.777631402015686,
                    -0.5044873356819153,
                    0.3539655804634094,
                    0.022290505468845367,
                    0.08082137256860733,
                    0.5295581817626953,
                    0.10033166408538818,
                    -0.4459564685821533,
                    -2.006779909133911,
                    -2.0848209857940674
                ],
                [
                    -0.5044873356819153,
                    -1.440981388092041,
                    -1.440981388092041,
                    -0.34840500354766846,
                    -0.13379181921482086,
                    0.334455281496048,
                    0.4905376136302948,
                    0.10033166408538818,
                    -0.13379181921482086,
                    -0.23134326934814453,
                    -0.5239976048469543,
                    -0.48497703671455383,
                    -0.3679153025150299,
                    -0.777631402015686,
                    -0.6410593390464783,
                    -0.11428152769804001,
                    0.08082137256860733,
                    -0.0752609446644783,
                    -0.27036383748054504,
                    -0.4069358706474304,
                    -0.23134326934814453,
                    -0.5630182027816772,
                    -0.5239976048469543,
                    -0.3679153025150299,
                    0.19788311421871185,
                    0.11984195560216904,
                    -0.250853568315506,
                    -0.01673007383942604,
                    0.1783728301525116,
                    -0.48497703671455383,
                    -1.9287385940551758,
                    -1.597063660621643
                ],
                [
                    -0.3679153025150299,
                    -0.9922446608543396,
                    -1.1483269929885864,
                    -0.42644616961479187,
                    -0.27036383748054504,
                    -0.0752609446644783,
                    0.4905376136302948,
                    0.4515170454978943,
                    0.1783728301525116,
                    -0.328894704580307,
                    -0.250853568315506,
                    -0.42644616961479187,
                    -0.4654667377471924,
                    -0.5044873356819153,
                    -0.5435079336166382,
                    -0.5435079336166382,
                    -0.5630182027816772,
                    -0.5044873356819153,
                    -0.27036383748054504,
                    -0.11428152769804001,
                    0.0027802155818790197,
                    -0.11428152769804001,
                    -0.0752609446644783,
                    -0.3679153025150299,
                    -0.09477123618125916,
                    0.061311084777116776,
                    -0.13379181921482086,
                    0.022290505468845367,
                    0.275924414396286,
                    -0.5044873356819153,
                    -1.2653887271881104,
                    -0.7386108040809631
                ],
                [
                    -0.15330210328102112,
                    -0.8751828074455261,
                    -0.836162269115448,
                    -0.34840500354766846,
                    -0.19232268631458282,
                    -0.5435079336166382,
                    0.3929861783981323,
                    0.4124964475631714,
                    0.04180079698562622,
                    -0.5239976048469543,
                    -0.6410593390464783,
                    -0.5044873356819153,
                    -0.34840500354766846,
                    -0.34840500354766846,
                    -0.0752609446644783,
                    -0.15330210328102112,
                    -0.30938443541526794,
                    -0.3679153025150299,
                    -0.5239976048469543,
                    -0.42644616961479187,
                    -0.328894704580307,
                    -0.13379181921482086,
                    0.256413996219635,
                    0.275924414396286,
                    0.15886253118515015,
                    -0.38742557168006897,
                    0.04180079698562622,
                    0.10033166408538818,
                    0.15886253118515015,
                    -0.42644616961479187,
                    -1.1873475313186646,
                    -0.8556725382804871
                ],
                [
                    -0.34840500354766846,
                    -0.972734272480011,
                    -0.972734272480011,
                    -0.42644616961479187,
                    -0.21183297038078308,
                    -0.3679153025150299,
                    0.1393522471189499,
                    0.3734758794307709,
                    0.29543471336364746,
                    0.7051507830619812,
                    -0.27036383748054504,
                    -1.2263681888580322,
                    -0.5044873356819153,
                    -0.250853568315506,
                    -0.30938443541526794,
                    -0.01673007383942604,
                    0.334455281496048,
                    0.10033166408538818,
                    -0.250853568315506,
                    -0.3679153025150299,
                    -0.34840500354766846,
                    -0.6020388007164001,
                    -0.01673007383942604,
                    0.7441713809967041,
                    0.6661302447319031,
                    0.11984195560216904,
                    -0.30938443541526794,
                    0.19788311421871185,
                    0.08082137256860733,
                    -1.1093063354492188,
                    -1.9677592515945435,
                    -0.8166519403457642
                ],
                [
                    -0.5239976048469543,
                    -0.7386108040809631,
                    -0.836162269115448,
                    -0.4654667377471924,
                    0.022290505468845367,
                    0.19788311421871185,
                    0.11984195560216904,
                    0.3149450123310089,
                    -0.0752609446644783,
                    0.5490685105323792,
                    0.7051507830619812,
                    -1.0897960662841797,
                    -0.5825284719467163,
                    0.04180079698562622,
                    0.10033166408538818,
                    0.11984195560216904,
                    -0.11428152769804001,
                    -0.01673007383942604,
                    0.3734758794307709,
                    0.3929861783981323,
                    0.4515170454978943,
                    0.23690369725227356,
                    -0.21183297038078308,
                    -0.0752609446644783,
                    0.8807434439659119,
                    0.9587845802307129,
                    -0.2898741364479065,
                    0.0027802155818790197,
                    0.061311084777116776,
                    -1.401960849761963,
                    -1.577553391456604,
                    -0.13379181921482086
                ],
                [
                    -0.5435079336166382,
                    -0.5044873356819153,
                    -0.27036383748054504,
                    -0.4069358706474304,
                    0.061311084777116776,
                    -0.2898741364479065,
                    0.061311084777116776,
                    -0.17281238734722137,
                    -0.0752609446644783,
                    -0.23134326934814453,
                    0.8027022480964661,
                    0.4905376136302948,
                    -0.13379181921482086,
                    -0.05575065314769745,
                    0.29543471336364746,
                    0.29543471336364746,
                    0.19788311421871185,
                    0.10033166408538818,
                    -0.09477123618125916,
                    0.08082137256860733,
                    -0.01673007383942604,
                    0.08082137256860733,
                    0.19788311421871185,
                    -0.01673007383942604,
                    0.334455281496048,
                    0.061311084777116776,
                    0.334455281496048,
                    -0.2898741364479065,
                    -0.17281238734722137,
                    -0.8166519403457642,
                    -1.46049165725708,
                    -0.5239976048469543
                ],
                [
                    -0.3679153025150299,
                    -0.34840500354766846,
                    0.11984195560216904,
                    0.022290505468845367,
                    -0.09477123618125916,
                    -0.836162269115448,
                    -0.2898741364479065,
                    -0.5435079336166382,
                    -0.11428152769804001,
                    -0.2898741364479065,
                    -0.15330210328102112,
                    1.2124183177947998,
                    0.3149450123310089,
                    -0.38742557168006897,
                    0.1783728301525116,
                    0.061311084777116776,
                    0.4515170454978943,
                    0.5295581817626953,
                    0.29543471336364746,
                    0.43200674653053284,
                    0.334455281496048,
                    -0.05575065314769745,
                    0.11984195560216904,
                    0.1393522471189499,
                    0.061311084777116776,
                    -0.13379181921482086,
                    -0.6605696678161621,
                    -0.914203405380249,
                    -0.8166519403457642,
                    -0.6410593390464783,
                    -0.914203405380249,
                    -0.0752609446644783
                ],
                [
                    -0.09477123618125916,
                    -0.036240365356206894,
                    0.2173934131860733,
                    -0.5239976048469543,
                    -0.5044873356819153,
                    -0.8166519403457642,
                    -0.836162269115448,
                    -0.38742557168006897,
                    -0.27036383748054504,
                    0.1393522471189499,
                    -0.7971416711807251,
                    0.022290505468845367,
                    0.7441713809967041,
                    0.08082137256860733,
                    0.4124964475631714,
                    0.6661302447319031,
                    0.3734758794307709,
                    0.3149450123310089,
                    0.6661302447319031,
                    0.6856405138969421,
                    0.2173934131860733,
                    -0.01673007383942604,
                    0.1393522471189499,
                    0.15886253118515015,
                    0.0027802155818790197,
                    -0.01673007383942604,
                    -1.0897960662841797,
                    -0.6995902061462402,
                    -1.0312652587890625,
                    -1.1288167238235474,
                    0.022290505468845367,
                    0.47102731466293335
                ],
                [
                    0.10033166408538818,
                    0.04180079698562622,
                    -0.48497703671455383,
                    -0.914203405380249,
                    -0.5044873356819153,
                    -0.8166519403457642,
                    -1.0507755279541016,
                    -0.23134326934814453,
                    -0.8166519403457642,
                    -0.5239976048469543,
                    -0.09477123618125916,
                    -1.1483269929885864,
                    -0.250853568315506,
                    0.6271096467971802,
                    0.5295581817626953,
                    0.8222125172615051,
                    0.7441713809967041,
                    0.43200674653053284,
                    0.5100479125976562,
                    0.7441713809967041,
                    0.3929861783981323,
                    0.1783728301525116,
                    0.256413996219635,
                    0.19788311421871185,
                    -0.09477123618125916,
                    -0.17281238734722137,
                    -0.4069358706474304,
                    -0.30938443541526794,
                    -0.7191005349159241,
                    -0.30938443541526794,
                    0.15886253118515015,
                    0.10033166408538818
                ],
                [
                    0.23690369725227356,
                    -0.328894704580307,
                    -1.2458784580230713,
                    -0.4069358706474304,
                    -0.34840500354766846,
                    -0.8556725382804871,
                    -0.7581210732460022,
                    -0.34840500354766846,
                    -0.4654667377471924,
                    -1.0702857971191406,
                    0.08082137256860733,
                    -0.328894704580307,
                    -0.7971416711807251,
                    0.334455281496048,
                    0.9392743110656738,
                    0.724661111831665,
                    0.7051507830619812,
                    0.9587845802307129,
                    0.3539655804634094,
                    0.256413996219635,
                    0.2173934131860733,
                    0.08082137256860733,
                    -0.0752609446644783,
                    0.061311084777116776,
                    -0.17281238734722137,
                    -0.23134326934814453,
                    -0.38742557168006897,
                    -0.6800799369812012,
                    -0.13379181921482086,
                    0.5490685105323792,
                    -0.036240365356206894,
                    -0.15330210328102112
                ],
                [
                    -0.036240365356206894,
                    -0.6410593390464783,
                    -1.1483269929885864,
                    -0.48497703671455383,
                    -0.42644616961479187,
                    -0.6995902061462402,
                    -0.8751828074455261,
                    -0.48497703671455383,
                    0.10033166408538818,
                    -0.13379181921482086,
                    -0.6020388007164001,
                    0.08082137256860733,
                    -0.13379181921482086,
                    0.2173934131860733,
                    0.724661111831665,
                    0.8222125172615051,
                    0.6661302447319031,
                    0.8027022480964661,
                    0.6661302447319031,
                    0.23690369725227356,
                    -0.11428152769804001,
                    0.1783728301525116,
                    0.11984195560216904,
                    0.061311084777116776,
                    0.0027802155818790197,
                    -0.23134326934814453,
                    -0.5825284719467163,
                    -0.5435079336166382,
                    0.29543471336364746,
                    0.1393522471189499,
                    -0.2898741364479065,
                    -0.17281238734722137
                ],
                [
                    -0.30938443541526794,
                    -0.5435079336166382,
                    0.11984195560216904,
                    0.783191978931427,
                    0.10033166408538818,
                    -0.3679153025150299,
                    -0.8751828074455261,
                    -0.6995902061462402,
                    0.022290505468845367,
                    0.23690369725227356,
                    -0.5239976048469543,
                    -0.6995902061462402,
                    0.2173934131860733,
                    0.4905376136302948,
                    0.3539655804634094,
                    0.7051507830619812,
                    0.5295581817626953,
                    0.5490685105323792,
                    0.6271096467971802,
                    0.23690369725227356,
                    0.1393522471189499,
                    0.3539655804634094,
                    0.08082137256860733,
                    0.1783728301525116,
                    0.022290505468845367,
                    -0.5044873356819153,
                    -0.6215490698814392,
                    -0.05575065314769745,
                    0.1393522471189499,
                    -0.250853568315506,
                    -0.15330210328102112,
                    -0.21183297038078308
                ],
                [
                    0.04180079698562622,
                    0.43200674653053284,
                    1.0368257761001587,
                    1.3294800519943237,
                    0.8807434439659119,
                    0.10033166408538818,
                    -0.34840500354766846,
                    -0.42644616961479187,
                    -0.23134326934814453,
                    -0.4654667377471924,
                    -0.23134326934814453,
                    -0.05575065314769745,
                    -0.036240365356206894,
                    0.43200674653053284,
                    0.334455281496048,
                    0.5685787796974182,
                    0.3929861783981323,
                    0.5490685105323792,
                    0.7051507830619812,
                    0.275924414396286,
                    0.061311084777116776,
                    0.8222125172615051,
                    0.3539655804634094,
                    0.10033166408538818,
                    -0.23134326934814453,
                    -0.48497703671455383,
                    -0.6995902061462402,
                    -0.6020388007164001,
                    -0.15330210328102112,
                    -0.34840500354766846,
                    -0.01673007383942604,
                    -0.11428152769804001
                ],
                [
                    -0.11428152769804001,
                    -0.09477123618125916,
                    -0.01673007383942604,
                    0.6271096467971802,
                    1.01731538772583,
                    0.861233115196228,
                    0.1783728301525116,
                    -0.17281238734722137,
                    -0.23134326934814453,
                    -0.6215490698814392,
                    -0.5630182027816772,
                    0.5100479125976562,
                    0.6075993776321411,
                    0.23690369725227356,
                    0.3929861783981323,
                    0.1783728301525116,
                    -0.19232268631458282,
                    0.022290505468845367,
                    0.47102731466293335,
                    0.4515170454978943,
                    0.334455281496048,
                    0.7051507830619812,
                    0.47102731466293335,
                    -0.15330210328102112,
                    -0.328894704580307,
                    -0.05575065314769745,
                    -0.777631402015686,
                    -1.3434299230575562,
                    -0.34840500354766846,
                    -0.250853568315506,
                    -0.17281238734722137,
                    -0.7581210732460022
                ],
                [
                    -0.5044873356819153,
                    -0.5630182027816772,
                    -1.1483269929885864,
                    -0.5435079336166382,
                    0.4905376136302948,
                    0.724661111831665,
                    0.724661111831665,
                    0.23690369725227356,
                    -0.19232268631458282,
                    -0.19232268631458282,
                    -0.5239976048469543,
                    -0.5239976048469543,
                    -0.05575065314769745,
                    -0.0752609446644783,
                    -0.0752609446644783,
                    -0.6215490698814392,
                    -1.1873475313186646,
                    -0.7581210732460022,
                    0.1393522471189499,
                    0.5100479125976562,
                    0.6075993776321411,
                    0.11984195560216904,
                    0.29543471336364746,
                    0.15886253118515015,
                    0.04180079698562622,
                    -0.30938443541526794,
                    -1.0117549896240234,
                    -1.597063660621643,
                    -0.328894704580307,
                    -0.30938443541526794,
                    -0.9532240033149719,
                    -0.972734272480011
                ],
                [
                    -0.6215490698814392,
                    -0.42644616961479187,
                    -1.558043122291565,
                    -1.597063660621643,
                    -0.7581210732460022,
                    0.061311084777116776,
                    0.3929861783981323,
                    0.8222125172615051,
                    0.5295581817626953,
                    -0.09477123618125916,
                    -0.30938443541526794,
                    -0.5239976048469543,
                    -0.6215490698814392,
                    -0.4654667377471924,
                    -0.4459564685821533,
                    -0.3679153025150299,
                    -0.6215490698814392,
                    -0.8556725382804871,
                    0.1393522471189499,
                    0.4905376136302948,
                    0.29543471336364746,
                    0.5685787796974182,
                    0.275924414396286,
                    -0.13379181921482086,
                    -0.01673007383942604,
                    -0.6995902061462402,
                    -1.6555945873260498,
                    -0.9922446608543396,
                    -0.2898741364479065,
                    -0.836162269115448,
                    -0.836162269115448,
                    -0.9337137341499329
                ],
                [
                    -0.4654667377471924,
                    -0.5435079336166382,
                    -1.5385328531265259,
                    -1.9677592515945435,
                    -1.9287385940551758,
                    -0.6995902061462402,
                    0.0027802155818790197,
                    0.6661302447319031,
                    0.9392743110656738,
                    0.4905376136302948,
                    -0.05575065314769745,
                    -0.30938443541526794,
                    -0.328894704580307,
                    -0.4459564685821533,
                    -0.5435079336166382,
                    -0.01673007383942604,
                    0.11984195560216904,
                    -0.15330210328102112,
                    0.022290505468845367,
                    0.23690369725227356,
                    0.08082137256860733,
                    0.4124964475631714,
                    0.4124964475631714,
                    -0.15330210328102112,
                    -0.6800799369812012,
                    -1.401960849761963,
                    -1.4800019264221191,
                    -0.4459564685821533,
                    -1.3629401922225952,
                    -0.34840500354766846,
                    0.7636816501617432,
                    -0.6020388007164001
                ],
                [
                    -0.42644616961479187,
                    -0.5435079336166382,
                    -1.3434299230575562,
                    -1.4995123147964478,
                    -1.9677592515945435,
                    -1.6165740489959717,
                    -0.5239976048469543,
                    0.15886253118515015,
                    0.7051507830619812,
                    1.1538875102996826,
                    0.861233115196228,
                    0.15886253118515015,
                    0.061311084777116776,
                    0.0027802155818790197,
                    -0.4069358706474304,
                    -0.42644616961479187,
                    -0.7191005349159241,
                    -0.5630182027816772,
                    -0.21183297038078308,
                    -0.01673007383942604,
                    0.23690369725227356,
                    0.3734758794307709,
                    0.022290505468845367,
                    -0.4459564685821533,
                    -0.6995902061462402,
                    -1.2458784580230713,
                    -1.0702857971191406,
                    -1.0507755279541016,
                    -1.401960849761963,
                    -0.11428152769804001,
                    0.3929861783981323,
                    -0.30938443541526794
                ],
                [
                    -0.6215490698814392,
                    -0.836162269115448,
                    -1.7531460523605347,
                    -1.1288167238235474,
                    -1.5190225839614868,
                    -1.7726563215255737,
                    -1.5385328531265259,
                    -0.5825284719467163,
                    0.08082137256860733,
                    0.6271096467971802,
                    0.9978051781654358,
                    0.9978051781654358,
                    0.7051507830619812,
                    0.3149450123310089,
                    -0.05575065314769745,
                    0.1393522471189499,
                    -0.11428152769804001,
                    -0.9337137341499329,
                    -0.9922446608543396,
                    -0.30938443541526794,
                    -0.6995902061462402,
                    -0.8751828074455261,
                    -0.8556725382804871,
                    -0.5435079336166382,
                    0.061311084777116776,
                    -0.11428152769804001,
                    -0.34840500354766846,
                    -0.30938443541526794,
                    0.11984195560216904,
                    0.04180079698562622,
                    0.1783728301525116,
                    -0.48497703671455383
                ],
                [
                    -0.9532240033149719,
                    -1.694615125656128,
                    -1.8897180557250977,
                    -0.972734272480011,
                    -1.2068578004837036,
                    -1.6555945873260498,
                    -1.9287385940551758,
                    -1.4995123147964478,
                    -0.48497703671455383,
                    -0.27036383748054504,
                    0.04180079698562622,
                    0.7051507830619812,
                    1.0953565835952759,
                    0.7441713809967041,
                    0.43200674653053284,
                    0.8222125172615051,
                    1.01731538772583,
                    0.1393522471189499,
                    -0.8751828074455261,
                    -0.777631402015686,
                    -1.304409384727478,
                    -0.836162269115448,
                    -0.23134326934814453,
                    0.256413996219635,
                    0.8222125172615051,
                    0.4905376136302948,
                    0.334455281496048,
                    0.3149450123310089,
                    0.6466199159622192,
                    0.43200674653053284,
                    0.6271096467971802,
                    0.061311084777116776
                ]
            ]
        ]
    ]
}
docs/AKS-HCI/notebooks/distributed-cifar10/test_request_pytorch/cifar_test_input_img_4_frog_pytorch.json METASEP
{
    "instances": [
        [
            [
                [
                    -1.16904616355896,
                    -1.072121500968933,
                    -1.4985898733139038,
                    -1.8475183248519897,
                    -1.9832127094268799,
                    -1.6536691188812256,
                    -1.5761295557022095,
                    -1.5567445755004883,
                    -1.5567445755004883,
                    -1.6536691188812256,
                    -2.2352166175842285,
                    -2.138292074203491,
                    -1.5761295557022095,
                    -1.401665210723877,
                    -1.4404350519180298,
                    -1.4985898733139038,
                    -1.16904616355896,
                    -0.6844232082366943,
                    -0.6262685060501099,
                    -0.6650383472442627,
                    -0.587498664855957,
                    -0.8588874936103821,
                    -1.2659708261489868,
                    -1.3628954887390137,
                    -0.25795507431030273,
                    -0.27733999490737915,
                    -1.634284257888794,
                    -1.110891342163086,
                    -0.936427116394043,
                    -1.4404350519180298,
                    -1.3822803497314453,
                    -1.1302763223648071
                ],
                [
                    -1.0915064811706543,
                    -0.8976573348045349,
                    -1.2659708261489868,
                    -1.8475183248519897,
                    -1.634284257888794,
                    -1.16904616355896,
                    -1.4792048931121826,
                    -1.4792048931121826,
                    -1.4792048931121826,
                    -1.7505937814712524,
                    -2.2933714389801025,
                    -1.944442868232727,
                    -1.16904616355896,
                    -1.0915064811706543,
                    -1.3628954887390137,
                    -1.4792048931121826,
                    -0.936427116394043,
                    -0.7813478112220764,
                    -0.8201176524162292,
                    -0.8782724142074585,
                    -0.7425779700279236,
                    -0.8588874936103821,
                    -1.3628954887390137,
                    -1.285355806350708,
                    0.11035845428705215,
                    -0.08349084854125977,
                    -1.828133463859558,
                    -1.5179747343063354,
                    -1.3435105085372925,
                    -1.3822803497314453,
                    -1.16904616355896,
                    -1.2465859651565552
                ],
                [
                    -1.0139667987823486,
                    -0.8007327318191528,
                    -1.0333516597747803,
                    -1.634284257888794,
                    -1.1884310245513916,
                    -0.9945818781852722,
                    -1.459820032119751,
                    -1.3822803497314453,
                    -1.3822803497314453,
                    -1.808748483657837,
                    -2.215831756591797,
                    -1.7312088012695312,
                    -1.2659708261489868,
                    -1.1302763223648071,
                    -1.5179747343063354,
                    -1.6730540990829468,
                    -0.9751969575881958,
                    -0.936427116394043,
                    -1.285355806350708,
                    -1.227200984954834,
                    -0.8201176524162292,
                    -0.7813478112220764,
                    -1.4985898733139038,
                    -1.2078160047531128,
                    0.2654377818107605,
                    0.0522037111222744,
                    -1.9832127094268799,
                    -1.634284257888794,
                    -1.072121500968933,
                    -0.9170421957969666,
                    -1.0139667987823486,
                    -1.4985898733139038
                ],
                [
                    -0.7231930494308472,
                    -0.9751969575881958,
                    -0.8782724142074585,
                    -1.3822803497314453,
                    -0.8782724142074585,
                    -1.110891342163086,
                    -1.3628954887390137,
                    -1.2078160047531128,
                    -1.3047406673431396,
                    -1.8862881660461426,
                    -2.099522113800049,
                    -1.7118239402770996,
                    -1.5955144166946411,
                    -1.4404350519180298,
                    -1.6536691188812256,
                    -1.6730540990829468,
                    -0.7813478112220764,
                    -0.5293439030647278,
                    -0.9751969575881958,
                    -1.072121500968933,
                    -0.761962890625,
                    -0.8007327318191528,
                    -1.459820032119751,
                    -1.110891342163086,
                    0.32359254360198975,
                    0.22666795551776886,
                    -1.5179747343063354,
                    -0.9751969575881958,
                    -0.49057406187057495,
                    -0.6262685060501099,
                    -1.16904616355896,
                    -1.6924389600753784
                ],
                [
                    -0.587498664855957,
                    -0.7038081288337708,
                    -0.27733999490737915,
                    -1.1496611833572388,
                    -0.8588874936103821,
                    -1.2465859651565552,
                    -1.2465859651565552,
                    -1.110891342163086,
                    -1.227200984954834,
                    -2.0025975704193115,
                    -2.138292074203491,
                    -2.0025975704193115,
                    -1.828133463859558,
                    -1.7505937814712524,
                    -1.4404350519180298,
                    -1.2078160047531128,
                    -1.0333516597747803,
                    -0.9751969575881958,
                    -1.0333516597747803,
                    -1.0527366399765015,
                    -0.936427116394043,
                    -0.8201176524162292,
                    -1.4404350519180298,
                    -0.9170421957969666,
                    0.4592869281768799,
                    0.5949813723564148,
                    -0.7425779700279236,
                    -0.7425779700279236,
                    -0.5099589824676514,
                    -0.587498664855957,
                    -0.9751969575881958,
                    -0.7231930494308472
                ],
                [
                    -0.8395025730133057,
                    -0.8201176524162292,
                    -0.8395025730133057,
                    -0.936427116394043,
                    -1.0527366399765015,
                    -1.3047406673431396,
                    -1.1884310245513916,
                    -1.3241256475448608,
                    -1.285355806350708,
                    -2.041367530822754,
                    -2.099522113800049,
                    -1.8862881660461426,
                    -1.459820032119751,
                    -1.2465859651565552,
                    -1.0527366399765015,
                    -1.0527366399765015,
                    -1.0915064811706543,
                    -1.1302763223648071,
                    -1.110891342163086,
                    -1.3435105085372925,
                    -1.634284257888794,
                    -0.8201176524162292,
                    -1.072121500968933,
                    -0.9170421957969666,
                    0.5949813723564148,
                    0.9051399827003479,
                    -0.5293439030647278,
                    -0.7038081288337708,
                    -0.6068835854530334,
                    -0.27733999490737915,
                    -0.25795507431030273,
                    -0.5099589824676514
                ],
                [
                    -1.0915064811706543,
                    -1.1884310245513916,
                    -1.808748483657837,
                    -1.285355806350708,
                    -1.0333516597747803,
                    -0.9945818781852722,
                    -1.0139667987823486,
                    -1.4792048931121826,
                    -1.4792048931121826,
                    -2.080137252807617,
                    -1.8669031858444214,
                    -1.227200984954834,
                    -0.8395025730133057,
                    -0.7813478112220764,
                    -0.761962890625,
                    -1.2078160047531128,
                    -1.769978642463684,
                    -1.4210501909255981,
                    -0.587498664855957,
                    -1.5955144166946411,
                    -1.944442868232727,
                    -0.6068835854530334,
                    -0.7813478112220764,
                    -0.9170421957969666,
                    0.7888305187225342,
                    1.0602192878723145,
                    -0.316109836101532,
                    -0.3548796772956848,
                    -0.3354947566986084,
                    0.11035845428705215,
                    -0.761962890625,
                    -1.5179747343063354
                ],
                [
                    -1.285355806350708,
                    -1.401665210723877,
                    -1.944442868232727,
                    -1.072121500968933,
                    -0.8588874936103821,
                    -0.9170421957969666,
                    -0.8782724142074585,
                    -1.2465859651565552,
                    -1.6536691188812256,
                    -2.2352166175842285,
                    -1.401665210723877,
                    -0.6068835854530334,
                    -0.7425779700279236,
                    -0.7231930494308472,
                    -0.9751969575881958,
                    -1.944442868232727,
                    -2.1770617961883545,
                    -1.5567445755004883,
                    -0.6456534266471863,
                    -1.3241256475448608,
                    -1.459820032119751,
                    -0.4711891710758209,
                    -0.7038081288337708,
                    -0.5293439030647278,
                    0.3623623549938202,
                    1.0408344268798828,
                    -0.10287576168775558,
                    -0.025336099788546562,
                    -0.025336099788546562,
                    0.0522037111222744,
                    -1.4210501909255981,
                    -1.9638278484344482
                ],
                [
                    -1.110891342163086,
                    -1.5179747343063354,
                    -1.4792048931121826,
                    -0.4518042504787445,
                    -0.1222606748342514,
                    -0.7038081288337708,
                    -1.2078160047531128,
                    -0.8976573348045349,
                    -1.1496611833572388,
                    -1.769978642463684,
                    -0.8588874936103821,
                    -0.5681137442588806,
                    -0.7038081288337708,
                    -0.6844232082366943,
                    -1.634284257888794,
                    -2.157676935195923,
                    -1.4210501909255981,
                    -0.6456534266471863,
                    -1.1302763223648071,
                    -1.0527366399765015,
                    -0.27733999490737915,
                    -0.2385701686143875,
                    -0.29672491550445557,
                    -0.19980034232139587,
                    0.20728303492069244,
                    0.5949813723564148,
                    -0.08349084854125977,
                    0.03281864896416664,
                    -0.025336099788546562,
                    -0.19980034232139587,
                    -1.828133463859558,
                    -2.0025975704193115
                ],
                [
                    -0.936427116394043,
                    -1.401665210723877,
                    -1.3628954887390137,
                    -0.2191852629184723,
                    0.0522037111222744,
                    -0.04472101479768753,
                    -1.16904616355896,
                    -1.3628954887390137,
                    -0.8976573348045349,
                    -0.8395025730133057,
                    -0.27733999490737915,
                    -0.29672491550445557,
                    -0.37426456809043884,
                    -1.0915064811706543,
                    -2.041367530822754,
                    -1.7118239402770996,
                    -0.6456534266471863,
                    -0.39364948868751526,
                    -0.8201176524162292,
                    -0.5487288236618042,
                    -0.14164559543132782,
                    -0.10287576168775558,
                    -0.19980034232139587,
                    -0.6456534266471863,
                    0.3623623549938202,
                    0.42051711678504944,
                    -0.005951183382421732,
                    0.03281864896416664,
                    -0.1222606748342514,
                    -0.587498664855957,
                    -2.157676935195923,
                    -1.9832127094268799
                ],
                [
                    -0.7813478112220764,
                    -1.3047406673431396,
                    -1.3822803497314453,
                    -0.25795507431030273,
                    0.07158862799406052,
                    0.12974336743354797,
                    -0.49057406187057495,
                    -1.4792048931121826,
                    -1.6730540990829468,
                    -0.8007327318191528,
                    -0.4130344092845917,
                    -0.316109836101532,
                    -0.005951183382421732,
                    -0.6262685060501099,
                    -1.2078160047531128,
                    -0.8201176524162292,
                    -0.5487288236618042,
                    -0.6068835854530334,
                    -0.4130344092845917,
                    -0.29672491550445557,
                    -0.316109836101532,
                    0.03281864896416664,
                    -0.7813478112220764,
                    -1.3241256475448608,
                    0.5174416899681091,
                    0.4786718487739563,
                    -0.04472101479768753,
                    -0.025336099788546562,
                    -0.2191852629184723,
                    -0.6262685060501099,
                    -2.1964468955993652,
                    -2.0219826698303223
                ],
                [
                    -0.3354947566986084,
                    -1.401665210723877,
                    -1.459820032119751,
                    -0.3548796772956848,
                    0.013433732092380524,
                    0.11035845428705215,
                    0.0522037111222744,
                    -0.9751969575881958,
                    -1.4404350519180298,
                    -0.6650383472442627,
                    -0.7813478112220764,
                    -0.3548796772956848,
                    0.24605286121368408,
                    -0.29672491550445557,
                    0.07158862799406052,
                    0.42051711678504944,
                    0.12974336743354797,
                    -0.10287576168775558,
                    -0.2385701686143875,
                    -0.1222606748342514,
                    -0.16103051602840424,
                    -0.19980034232139587,
                    -0.6844232082366943,
                    -0.6262685060501099,
                    0.6725209951400757,
                    0.30420762300491333,
                    -0.2385701686143875,
                    -0.005951183382421732,
                    -0.08349084854125977,
                    -0.4711891710758209,
                    -2.157676935195923,
                    -2.25460147857666
                ],
                [
                    -0.5681137442588806,
                    -1.6148992776870728,
                    -1.5955144166946411,
                    -0.6456534266471863,
                    -0.37426456809043884,
                    0.0522037111222744,
                    0.09097354114055634,
                    -0.1222606748342514,
                    -0.10287576168775558,
                    -0.04472101479768753,
                    -0.2191852629184723,
                    0.22666795551776886,
                    0.43990203738212585,
                    -0.29672491550445557,
                    -0.39364948868751526,
                    0.12974336743354797,
                    0.401132196187973,
                    0.18789811432361603,
                    0.0522037111222744,
                    0.1685132086277008,
                    0.2848227024078369,
                    -0.10287576168775558,
                    0.013433732092380524,
                    -0.1222606748342514,
                    0.5174416899681091,
                    0.3817472755908966,
                    -0.5099589824676514,
                    -0.37426456809043884,
                    0.09097354114055634,
                    -0.5099589824676514,
                    -2.080137252807617,
                    -1.6536691188812256
                ],
                [
                    -0.5487288236618042,
                    -1.1496611833572388,
                    -1.285355806350708,
                    -0.7038081288337708,
                    -0.49057406187057495,
                    -0.27733999490737915,
                    0.1491282880306244,
                    0.20728303492069244,
                    0.42051711678504944,
                    0.2848227024078369,
                    0.4786718487739563,
                    0.3817472755908966,
                    0.32359254360198975,
                    0.20728303492069244,
                    0.11035845428705215,
                    0.03281864896416664,
                    -0.005951183382421732,
                    -0.04472101479768753,
                    0.20728303492069244,
                    0.42051711678504944,
                    0.4980567693710327,
                    0.32359254360198975,
                    0.5949813723564148,
                    0.20728303492069244,
                    0.401132196187973,
                    0.3623623549938202,
                    -0.316109836101532,
                    -0.25795507431030273,
                    0.09097354114055634,
                    -0.6456534266471863,
                    -1.459820032119751,
                    -0.8201176524162292
                ],
                [
                    -0.39364948868751526,
                    -1.0333516597747803,
                    -0.9751969575881958,
                    -0.587498664855957,
                    -0.4130344092845917,
                    -0.6068835854530334,
                    0.1491282880306244,
                    0.1491282880306244,
                    0.3429774343967438,
                    0.18789811432361603,
                    0.0522037111222744,
                    0.1491282880306244,
                    0.42051711678504944,
                    0.4786718487739563,
                    0.6725209951400757,
                    0.5174416899681091,
                    0.3817472755908966,
                    0.3623623549938202,
                    0.12974336743354797,
                    0.18789811432361603,
                    0.24605286121368408,
                    0.24605286121368408,
                    0.7112908363342285,
                    0.7694455981254578,
                    0.7306757569313049,
                    0.03281864896416664,
                    0.013433732092380524,
                    -0.1222606748342514,
                    -0.14164559543132782,
                    -0.587498664855957,
                    -1.285355806350708,
                    -0.936427116394043
                ],
                [
                    -0.6068835854530334,
                    -1.110891342163086,
                    -1.110891342163086,
                    -0.6650383472442627,
                    -0.4711891710758209,
                    -0.5293439030647278,
                    -0.04472101479768753,
                    0.11035845428705215,
                    0.42051711678504944,
                    1.312223196029663,
                    0.24605286121368408,
                    -0.8976573348045349,
                    -0.025336099788546562,
                    0.42051711678504944,
                    0.42051711678504944,
                    0.7112908363342285,
                    1.0602192878723145,
                    0.8857550621032715,
                    0.5174416899681091,
                    0.3623623549938202,
                    0.3623623549938202,
                    -0.08349084854125977,
                    0.43990203738212585,
                    1.0408344268798828,
                    1.0602192878723145,
                    0.6725209951400757,
                    0.0522037111222744,
                    -0.04472101479768753,
                    -0.25795507431030273,
                    -1.2078160047531128,
                    -1.9250580072402954,
                    -0.8007327318191528
                ],
                [
                    -0.7231930494308472,
                    -0.8976573348045349,
                    -0.9945818781852722,
                    -0.7038081288337708,
                    -0.29672491550445557,
                    -0.10287576168775558,
                    -0.10287576168775558,
                    0.07158862799406052,
                    -0.10287576168775558,
                    1.1377589702606201,
                    1.2928383350372314,
                    -0.7425779700279236,
                    -0.2191852629184723,
                    0.5949813723564148,
                    0.7500606775283813,
                    0.7888305187225342,
                    0.556211531162262,
                    0.6919059157371521,
                    1.1183741092681885,
                    1.0989891290664673,
                    1.1959137916564941,
                    0.9245249032974243,
                    0.43990203738212585,
                    0.3429774343967438,
                    1.0796042680740356,
                    1.350993037223816,
                    0.32359254360198975,
                    -0.025336099788546562,
                    -0.3548796772956848,
                    -1.5761295557022095,
                    -1.634284257888794,
                    -0.14164559543132782
                ],
                [
                    -0.6650383472442627,
                    -0.7038081288337708,
                    -0.4324193298816681,
                    -0.5681137442588806,
                    -0.18041542172431946,
                    -0.49057406187057495,
                    -0.27733999490737915,
                    -0.37426456809043884,
                    -0.2191852629184723,
                    0.0522037111222744,
                    1.1959137916564941,
                    0.827600359916687,
                    0.2848227024078369,
                    0.5368266105651855,
                    0.9051399827003479,
                    0.9051399827003479,
                    0.8082154393196106,
                    0.7500606775283813,
                    0.6143662929534912,
                    0.7306757569313049,
                    0.6919059157371521,
                    0.7694455981254578,
                    0.8857550621032715,
                    0.5949813723564148,
                    0.6919059157371521,
                    0.3817472755908966,
                    0.8082154393196106,
                    -0.2191852629184723,
                    -0.37426456809043884,
                    -0.9945818781852722,
                    -1.6148992776870728,
                    -0.6068835854530334
                ],
                [
                    -0.4711891710758209,
                    -0.5487288236618042,
                    -0.10287576168775558,
                    -0.06410592794418335,
                    -0.2191852629184723,
                    -0.9170421957969666,
                    -0.587498664855957,
                    -0.6650383472442627,
                    -0.19980034232139587,
                    -0.29672491550445557,
                    0.07158862799406052,
                    1.5254572629928589,
                    0.8082154393196106,
                    0.22666795551776886,
                    0.6725209951400757,
                    0.5368266105651855,
                    1.0408344268798828,
                    1.176528811454773,
                    0.8663701415061951,
                    1.0214494466781616,
                    1.0408344268798828,
                    0.5949813723564148,
                    0.7112908363342285,
                    0.7694455981254578,
                    0.5949813723564148,
                    0.2848227024078369,
                    -0.4130344092845917,
                    -1.0333516597747803,
                    -0.8007327318191528,
                    -0.7038081288337708,
                    -1.072121500968933,
                    -0.2191852629184723
                ],
                [
                    -0.29672491550445557,
                    -0.3548796772956848,
                    -0.06410592794418335,
                    -0.5681137442588806,
                    -0.6844232082366943,
                    -0.9558120369911194,
                    -1.0333516597747803,
                    -0.49057406187057495,
                    -0.316109836101532,
                    0.03281864896416664,
                    -0.7425779700279236,
                    0.2848227024078369,
                    1.2346835136413574,
                    0.6531360745429993,
                    0.7888305187225342,
                    1.0602192878723145,
                    0.9439098238945007,
                    0.9245249032974243,
                    1.2540684938430786,
                    1.2152986526489258,
                    0.7112908363342285,
                    0.5368266105651855,
                    0.7112908363342285,
                    0.6919059157371521,
                    0.5368266105651855,
                    0.4592869281768799,
                    -0.9751969575881958,
                    -0.9945818781852722,
                    -1.1496611833572388,
                    -1.227200984954834,
                    -0.25795507431030273,
                    0.24605286121368408
                ],
                [
                    -0.1222606748342514,
                    -0.37426456809043884,
                    -0.7038081288337708,
                    -0.9170421957969666,
                    -0.7038081288337708,
                    -1.0527366399765015,
                    -1.2659708261489868,
                    -0.4324193298816681,
                    -0.9751969575881958,
                    -0.587498664855957,
                    -0.2191852629184723,
                    -1.1496611833572388,
                    0.03281864896416664,
                    1.0796042680740356,
                    0.9439098238945007,
                    1.2540684938430786,
                    1.176528811454773,
                    0.8857550621032715,
                    1.1377589702606201,
                    1.312223196029663,
                    0.7500606775283813,
                    0.6725209951400757,
                    0.8857550621032715,
                    0.7694455981254578,
                    0.401132196187973,
                    0.2654377818107605,
                    -0.4130344092845917,
                    -0.6456534266471863,
                    -0.936427116394043,
                    -0.6068835854530334,
                    -0.25795507431030273,
                    -0.19980034232139587
                ],
                [
                    0.013433732092380524,
                    -0.6068835854530334,
                    -1.3047406673431396,
                    -0.4324193298816681,
                    -0.37426456809043884,
                    -0.9558120369911194,
                    -1.0333516597747803,
                    -0.587498664855957,
                    -0.6068835854530334,
                    -1.16904616355896,
                    -0.10287576168775558,
                    -0.5099589824676514,
                    -0.6650383472442627,
                    0.6919059157371521,
                    1.370378017425537,
                    1.2152986526489258,
                    1.0989891290664673,
                    1.312223196029663,
                    0.8082154393196106,
                    0.8082154393196106,
                    0.8663701415061951,
                    0.6725209951400757,
                    0.556211531162262,
                    0.6919059157371521,
                    0.3817472755908966,
                    0.24605286121368408,
                    -0.29672491550445557,
                    -0.8588874936103821,
                    -0.39364948868751526,
                    0.20728303492069244,
                    -0.316109836101532,
                    -0.49057406187057495
                ],
                [
                    -0.27733999490737915,
                    -0.8395025730133057,
                    -1.072121500968933,
                    -0.4130344092845917,
                    -0.2385701686143875,
                    -0.6068835854530334,
                    -1.0915064811706543,
                    -0.8007327318191528,
                    -0.18041542172431946,
                    -0.316109836101532,
                    -0.7813478112220764,
                    -0.005951183382421732,
                    0.03281864896416664,
                    0.5755964517593384,
                    1.176528811454773,
                    1.4479176998138428,
                    1.1959137916564941,
                    1.1959137916564941,
                    1.00206458568573,
                    0.6143662929534912,
                    0.43990203738212585,
                    0.7112908363342285,
                    0.7500606775283813,
                    0.7888305187225342,
                    0.7112908363342285,
                    0.4592869281768799,
                    -0.08349084854125977,
                    -0.5487288236618042,
                    -0.10287576168775558,
                    -0.19980034232139587,
                    -0.5487288236618042,
                    -0.5487288236618042
                ],
                [
                    -0.4711891710758209,
                    -0.6456534266471863,
                    0.2848227024078369,
                    1.0602192878723145,
                    0.4980567693710327,
                    -0.04472101479768753,
                    -0.7813478112220764,
                    -0.9558120369911194,
                    -0.4324193298816681,
                    -0.025336099788546562,
                    -0.6844232082366943,
                    -0.8007327318191528,
                    0.401132196187973,
                    0.9632947444915771,
                    0.9245249032974243,
                    1.4479176998138428,
                    1.2152986526489258,
                    0.9245249032974243,
                    0.9245249032974243,
                    0.6531360745429993,
                    0.6531360745429993,
                    0.9051399827003479,
                    0.7306757569313049,
                    0.9245249032974243,
                    0.7500606775283813,
                    0.2654377818107605,
                    0.11035845428705215,
                    0.11035845428705215,
                    -0.25795507431030273,
                    -0.587498664855957,
                    -0.49057406187057495,
                    -0.5681137442588806
                ],
                [
                    -0.1222606748342514,
                    0.3623623549938202,
                    1.2928383350372314,
                    1.6223819255828857,
                    1.3316081762313843,
                    0.6143662929534912,
                    0.03281864896416664,
                    -0.3354947566986084,
                    -0.37426456809043884,
                    -0.6068835854530334,
                    -0.37426456809043884,
                    -0.27733999490737915,
                    -0.025336099788546562,
                    0.9632947444915771,
                    0.9826796650886536,
                    1.3897628784179688,
                    1.1377589702606201,
                    0.8663701415061951,
                    0.9826796650886536,
                    0.7694455981254578,
                    0.5949813723564148,
                    1.3897628784179688,
                    0.9632947444915771,
                    0.7306757569313049,
                    0.42051711678504944,
                    0.11035845428705215,
                    -0.06410592794418335,
                    -0.4711891710758209,
                    -0.49057406187057495,
                    -0.5681137442588806,
                    -0.3548796772956848,
                    -0.4518042504787445
                ],
                [
                    -0.29672491550445557,
                    -0.18041542172431946,
                    0.24605286121368408,
                    0.8469852805137634,
                    1.3897628784179688,
                    1.370378017425537,
                    0.6725209951400757,
                    0.20728303492069244,
                    0.07158862799406052,
                    -0.5099589824676514,
                    -0.6456534266471863,
                    0.24605286121368408,
                    0.401132196187973,
                    0.6531360745429993,
                    1.0602192878723145,
                    0.8469852805137634,
                    0.32359254360198975,
                    0.30420762300491333,
                    0.9632947444915771,
                    1.0214494466781616,
                    0.7888305187225342,
                    1.2152986526489258,
                    1.0408344268798828,
                    0.4980567693710327,
                    0.3429774343967438,
                    0.556211531162262,
                    -0.25795507431030273,
                    -1.3047406673431396,
                    -0.6650383472442627,
                    -0.4711891710758209,
                    -0.4518042504787445,
                    -1.0139667987823486
                ],
                [
                    -0.6650383472442627,
                    -0.7425779700279236,
                    -0.9945818781852722,
                    -0.3548796772956848,
                    0.7694455981254578,
                    1.1571439504623413,
                    1.2734533548355103,
                    0.7306757569313049,
                    0.1685132086277008,
                    0.0522037111222744,
                    -0.37426456809043884,
                    -0.4518042504787445,
                    -0.14164559543132782,
                    0.12974336743354797,
                    0.401132196187973,
                    -0.18041542172431946,
                    -0.936427116394043,
                    -0.5099589824676514,
                    0.6919059157371521,
                    1.0989891290664673,
                    1.1183741092681885,
                    0.6531360745429993,
                    0.9245249032974243,
                    0.8082154393196106,
                    0.5949813723564148,
                    0.18789811432361603,
                    -0.6068835854530334,
                    -1.5955144166946411,
                    -0.6650383472442627,
                    -0.6456534266471863,
                    -1.110891342163086,
                    -0.936427116394043
                ],
                [
                    -0.8588874936103821,
                    -0.587498664855957,
                    -1.459820032119751,
                    -1.5761295557022095,
                    -0.587498664855957,
                    0.43990203738212585,
                    0.7888305187225342,
                    1.1959137916564941,
                    0.9439098238945007,
                    0.3623623549938202,
                    0.013433732092380524,
                    -0.2191852629184723,
                    -0.4130344092845917,
                    -0.2191852629184723,
                    -0.1222606748342514,
                    -0.3548796772956848,
                    -0.8588874936103821,
                    -0.8395025730133057,
                    0.6143662929534912,
                    1.0989891290664673,
                    0.8469852805137634,
                    1.0214494466781616,
                    0.8469852805137634,
                    0.4786718487739563,
                    0.5174416899681091,
                    -0.3354947566986084,
                    -1.5761295557022095,
                    -1.2078160047531128,
                    -0.5487288236618042,
                    -1.0915064811706543,
                    -0.8782724142074585,
                    -0.761962890625
                ],
                [
                    -0.6844232082366943,
                    -0.587498664855957,
                    -1.4210501909255981,
                    -2.0219826698303223,
                    -1.8862881660461426,
                    -0.316109836101532,
                    0.401132196187973,
                    0.9826796650886536,
                    1.486687421798706,
                    1.0796042680740356,
                    0.32359254360198975,
                    0.03281864896416664,
                    -0.10287576168775558,
                    -0.1222606748342514,
                    -0.2191852629184723,
                    0.09097354114055634,
                    0.07158862799406052,
                    -0.14164559543132782,
                    0.3623623549938202,
                    0.8469852805137634,
                    0.6531360745429993,
                    0.9245249032974243,
                    1.0602192878723145,
                    0.5174416899681091,
                    -0.1222606748342514,
                    -1.110891342163086,
                    -1.5761295557022095,
                    -0.7813478112220764,
                    -1.4404350519180298,
                    -0.2191852629184723,
                    0.8082154393196106,
                    -0.37426456809043884
                ],
                [
                    -0.587498664855957,
                    -0.6650383472442627,
                    -1.3241256475448608,
                    -1.4210501909255981,
                    -1.9638278484344482,
                    -1.4792048931121826,
                    -0.1222606748342514,
                    0.5949813723564148,
                    1.1959137916564941,
                    1.5060724020004272,
                    1.176528811454773,
                    0.5755964517593384,
                    0.30420762300491333,
                    0.1491282880306244,
                    -0.18041542172431946,
                    -0.16103051602840424,
                    -0.316109836101532,
                    -0.1222606748342514,
                    0.2654377818107605,
                    0.5368266105651855,
                    0.6531360745429993,
                    0.8082154393196106,
                    0.5949813723564148,
                    -0.005951183382421732,
                    -0.4711891710758209,
                    -1.16904616355896,
                    -1.110891342163086,
                    -1.1884310245513916,
                    -1.3628954887390137,
                    0.3623623549938202,
                    0.8663701415061951,
                    -0.06410592794418335
                ],
                [
                    -0.6068835854530334,
                    -0.9751969575881958,
                    -1.808748483657837,
                    -1.0139667987823486,
                    -1.5373597145080566,
                    -1.7893636226654053,
                    -1.3822803497314453,
                    -0.19980034232139587,
                    0.4786718487739563,
                    0.9826796650886536,
                    1.350993037223816,
                    1.3316081762313843,
                    1.00206458568573,
                    0.5755964517593384,
                    0.20728303492069244,
                    0.401132196187973,
                    0.2654377818107605,
                    -0.4711891710758209,
                    -0.6068835854530334,
                    -0.1222606748342514,
                    -0.4711891710758209,
                    -0.587498664855957,
                    -0.5681137442588806,
                    -0.39364948868751526,
                    0.11035845428705215,
                    -0.14164559543132782,
                    -0.3548796772956848,
                    -0.316109836101532,
                    0.0522037111222744,
                    0.3429774343967438,
                    0.556211531162262,
                    -0.37426456809043884
                ],
                [
                    -0.9170421957969666,
                    -1.7505937814712524,
                    -1.9638278484344482,
                    -0.9558120369911194,
                    -1.16904616355896,
                    -1.6536691188812256,
                    -1.9056730270385742,
                    -1.285355806350708,
                    -0.10287576168775558,
                    0.20728303492069244,
                    0.4786718487739563,
                    0.9826796650886536,
                    1.2928383350372314,
                    1.1183741092681885,
                    0.7694455981254578,
                    1.176528811454773,
                    1.583612084388733,
                    0.8663701415061951,
                    -0.3548796772956848,
                    -0.761962890625,
                    -1.1496611833572388,
                    -0.7813478112220764,
                    -0.25795507431030273,
                    0.2848227024078369,
                    0.8469852805137634,
                    0.4592869281768799,
                    0.22666795551776886,
                    0.22666795551776886,
                    0.4786718487739563,
                    0.3429774343967438,
                    0.556211531162262,
                    0.0522037111222744
                ]
            ],
            [
                [
                    -1.0809093713760376,
                    -0.8252403736114502,
                    -1.1595767736434937,
                    -1.5135798454284668,
                    -1.7692488431930542,
                    -1.297244668006897,
                    -0.9432414174079895,
                    -0.8449072241783142,
                    -0.7859066724777222,
                    -1.0415756702423096,
                    -2.0249180793762207,
                    -1.749582052230835,
                    -1.0219087600708008,
                    -0.9432414174079895,
                    -1.0415756702423096,
                    -1.1202430725097656,
                    -0.7072393298149109,
                    -0.05823349952697754,
                    0.02043387107551098,
                    -0.03856665641069412,
                    0.05976755917072296,
                    -0.29423561692237854,
                    -0.7662398815155029,
                    -0.8055735230445862,
                    0.25643613934516907,
                    0.11876823753118515,
                    -1.257910966873169,
                    -0.6285719275474548,
                    -0.5302377343177795,
                    -1.1005761623382568,
                    -0.9235746264457703,
                    -0.7072393298149109
                ],
                [
                    -0.8449072241783142,
                    -0.41223669052124023,
                    -0.9629082679748535,
                    -1.4939130544662476,
                    -1.3169114589691162,
                    -0.6089051365852356,
                    -0.7662398815155029,
                    -0.7662398815155029,
                    -0.6875724792480469,
                    -1.1989104747772217,
                    -2.064251661300659,
                    -1.4742462635040283,
                    -0.5892382860183716,
                    -0.6089051365852356,
                    -0.9039077758789062,
                    -0.9825751185417175,
                    -0.31390246748924255,
                    -0.11723402887582779,
                    -0.2352350950241089,
                    -0.33356931805610657,
                    -0.11723402887582779,
                    -0.29423561692237854,
                    -0.9039077758789062,
                    -0.7859066724777222,
                    0.5514388084411621,
                    0.3154366612434387,
                    -1.5332467555999756,
                    -1.1399098634719849,
                    -1.0219087600708008,
                    -1.1202430725097656,
                    -0.6482387781143188,
                    -0.8252403736114502
                ],
                [
                    -0.5499045848846436,
                    -0.2745687663555145,
                    -0.6875724792480469,
                    -1.3169114589691162,
                    -0.7662398815155029,
                    -0.3532361388206482,
                    -0.7269061803817749,
                    -0.6482387781143188,
                    -0.6089051365852356,
                    -1.3759119510650635,
                    -2.0249180793762207,
                    -1.2382441759109497,
                    -0.6679056286811829,
                    -0.6875724792480469,
                    -1.1202430725097656,
                    -1.2382441759109497,
                    -0.3925698399543762,
                    -0.41223669052124023,
                    -0.8842409253120422,
                    -0.7662398815155029,
                    -0.17623455822467804,
                    -0.17623455822467804,
                    -1.1202430725097656,
                    -0.7269061803817749,
                    0.6891067028045654,
                    0.3941040337085724,
                    -1.7299151420593262,
                    -1.3365782499313354,
                    -0.7662398815155029,
                    -0.4909040629863739,
                    -0.4909040629863739,
                    -1.257910966873169
                ],
                [
                    -0.1369008719921112,
                    -0.4515703618526459,
                    -0.4515703618526459,
                    -0.9825751185417175,
                    -0.2745687663555145,
                    -0.41223669052124023,
                    -0.6875724792480469,
                    -0.5302377343177795,
                    -0.5695714354515076,
                    -1.5332467555999756,
                    -1.906916856765747,
                    -1.3169114589691162,
                    -1.1399098634719849,
                    -1.1005761623382568,
                    -1.3562451601028442,
                    -1.3365782499313354,
                    -0.33356931805610657,
                    -0.11723402887582779,
                    -0.5105708837509155,
                    -0.4909040629863739,
                    -0.09756718575954437,
                    -0.17623455822467804,
                    -1.0612424612045288,
                    -0.6285719275474548,
                    0.7284404039382935,
                    0.5317719578742981,
                    -1.1595767736434937,
                    -0.5892382860183716,
                    -0.05823349952697754,
                    0.05976755917072296,
                    -0.5695714354515076,
                    -1.4349125623703003
                ],
                [
                    -0.05823349952697754,
                    -0.3729029893875122,
                    0.09910139441490173,
                    -0.5892382860183716,
                    -0.17623455822467804,
                    -0.5695714354515076,
                    -0.6482387781143188,
                    -0.5695714354515076,
                    -0.5892382860183716,
                    -1.6512478590011597,
                    -1.906916856765747,
                    -1.710248351097107,
                    -1.4939130544662476,
                    -1.3365782499313354,
                    -0.9825751185417175,
                    -0.7269061803817749,
                    -0.3532361388206482,
                    -0.19590140879154205,
                    -0.31390246748924255,
                    -0.43190351128578186,
                    -0.3925698399543762,
                    -0.2745687663555145,
                    -0.9629082679748535,
                    -0.3925698399543762,
                    0.7677740454673767,
                    0.9644424915313721,
                    -0.21556824445724487,
                    -0.1369008719921112,
                    0.11876823753118515,
                    0.1777687668800354,
                    -0.3925698399543762,
                    -0.29423561692237854
                ],
                [
                    -0.3532361388206482,
                    -0.41223669052124023,
                    -0.4909040629863739,
                    -0.4909040629863739,
                    -0.5499045848846436,
                    -0.6679056286811829,
                    -0.6285719275474548,
                    -0.8842409253120422,
                    -0.6875724792480469,
                    -1.7299151420593262,
                    -1.8872500658035278,
                    -1.5725804567337036,
                    -0.9039077758789062,
                    -0.5892382860183716,
                    -0.33356931805610657,
                    -0.29423561692237854,
                    -0.3925698399543762,
                    -0.43190351128578186,
                    -0.4515703618526459,
                    -0.8842409253120422,
                    -1.297244668006897,
                    -0.2549019455909729,
                    -0.4909040629863739,
                    -0.41223669052124023,
                    0.8661082983016968,
                    1.2397782802581787,
                    0.13843508064746857,
                    0.07943440228700638,
                    0.11876823753118515,
                    0.4137708842754364,
                    0.1777687668800354,
                    -0.05823349952697754
                ],
                [
                    -0.5695714354515076,
                    -0.5302377343177795,
                    -1.4742462635040283,
                    -0.8645740747451782,
                    -0.6482387781143188,
                    -0.4515703618526459,
                    -0.5892382860183716,
                    -1.1792436838150024,
                    -0.9629082679748535,
                    -1.8479163646697998,
                    -1.670914649963379,
                    -0.6482387781143188,
                    0.05976755917072296,
                    0.11876823753118515,
                    0.13843508064746857,
                    -0.4712372124195099,
                    -1.2775777578353882,
                    -1.0219087600708008,
                    -0.15656772255897522,
                    -1.297244668006897,
                    -1.6905814409255981,
                    0.0007670287159271538,
                    -0.19590140879154205,
                    -0.33356931805610657,
                    1.1807777881622314,
                    1.377446174621582,
                    0.35477036237716675,
                    0.33510351181030273,
                    0.2761029899120331,
                    0.7284404039382935,
                    -0.43190351128578186,
                    -1.257910966873169
                ],
                [
                    -0.7269061803817749,
                    -0.7662398815155029,
                    -1.4939130544662476,
                    -0.3532361388206482,
                    -0.3925698399543762,
                    -0.5105708837509155,
                    -0.5695714354515076,
                    -1.0219087600708008,
                    -1.3169114589691162,
                    -2.0249180793762207,
                    -0.9825751185417175,
                    0.3154366612434387,
                    0.2957698404788971,
                    0.33510351181030273,
                    -0.17623455822467804,
                    -1.6119141578674316,
                    -1.906916856765747,
                    -1.1399098634719849,
                    -0.15656772255897522,
                    -0.8645740747451782,
                    -1.257910966873169,
                    0.040100716054439545,
                    -0.05823349952697754,
                    0.33510351181030273,
                    1.0431098937988281,
                    1.41677987575531,
                    0.5317719578742981,
                    0.49243825674057007,
                    0.4137708842754364,
                    0.6301061511039734,
                    -1.1792436838150024,
                    -1.946250557899475
                ],
                [
                    -0.4909040629863739,
                    -0.8842409253120422,
                    -0.9629082679748535,
                    0.33510351181030273,
                    0.5121051073074341,
                    -0.17623455822467804,
                    -0.8449072241783142,
                    -0.6089051365852356,
                    -1.0219087600708008,
                    -1.5529135465621948,
                    -0.19590140879154205,
                    0.4137708842754364,
                    0.25643613934516907,
                    0.21710245311260223,
                    -1.1792436838150024,
                    -1.9659174680709839,
                    -1.0612424612045288,
                    0.02043387107551098,
                    -0.5695714354515076,
                    -0.7269061803817749,
                    -0.21556824445724487,
                    0.3154366612434387,
                    0.6301061511039734,
                    0.8267745971679688,
                    0.925108790397644,
                    1.0627766847610474,
                    0.5317719578742981,
                    0.5317719578742981,
                    0.45310458540916443,
                    0.37443721294403076,
                    -1.6119141578674316,
                    -1.9855842590332031
                ],
                [
                    -0.1369008719921112,
                    -0.8252403736114502,
                    -0.8842409253120422,
                    0.49243825674057007,
                    0.7874408960342407,
                    0.6301061511039734,
                    -0.7662398815155029,
                    -1.0612424612045288,
                    -0.8252403736114502,
                    -0.6482387781143188,
                    0.2761029899120331,
                    0.37443721294403076,
                    0.2957698404788971,
                    -0.5892382860183716,
                    -1.7692488431930542,
                    -1.3169114589691162,
                    0.02043387107551098,
                    0.3941040337085724,
                    -0.15656772255897522,
                    0.09910139441490173,
                    0.5514388084411621,
                    0.6497730016708374,
                    0.6497730016708374,
                    0.11876823753118515,
                    0.8661082983016968,
                    0.9841093420982361,
                    0.5711056590080261,
                    0.6104393005371094,
                    0.49243825674057007,
                    -0.03856665641069412,
                    -1.9855842590332031,
                    -1.946250557899475
                ],
                [
                    -0.05823349952697754,
                    -0.8645740747451782,
                    -0.9825751185417175,
                    0.4334377348423004,
                    0.8267745971679688,
                    0.8464414477348328,
                    0.07943440228700638,
                    -1.1399098634719849,
                    -1.3562451601028442,
                    -0.17623455822467804,
                    0.37443721294403076,
                    0.07943440228700638,
                    0.05976755917072296,
                    -0.5892382860183716,
                    -1.0219087600708008,
                    -0.29423561692237854,
                    0.23676930367946625,
                    0.19743561744689941,
                    0.45310458540916443,
                    0.7481071949005127,
                    0.6497730016708374,
                    0.8267745971679688,
                    -0.11723402887582779,
                    -0.7072393298149109,
                    0.90544193983078,
                    1.0234429836273193,
                    0.5514388084411621,
                    0.6497730016708374,
                    0.4334377348423004,
                    -0.1369008719921112,
                    -2.0445847511291504,
                    -1.9659174680709839
                ],
                [
                    0.0007670287159271538,
                    -1.0612424612045288,
                    -1.1202430725097656,
                    0.2957698404788971,
                    0.7481071949005127,
                    0.8857751488685608,
                    0.8267745971679688,
                    -0.5499045848846436,
                    -0.9432414174079895,
                    0.33510351181030273,
                    0.2957698404788971,
                    -0.21556824445724487,
                    -0.2745687663555145,
                    -0.41223669052124023,
                    0.25643613934516907,
                    0.7677740454673767,
                    0.5907724499702454,
                    0.6104393005371094,
                    0.5514388084411621,
                    0.23676930367946625,
                    0.02043387107551098,
                    0.19743561744689941,
                    -0.09756718575954437,
                    0.25643613934516907,
                    1.298778772354126,
                    0.925108790397644,
                    0.45310458540916443,
                    0.6694398522377014,
                    0.49243825674057007,
                    -0.07790034264326096,
                    -2.0249180793762207,
                    -2.2019195556640625
                ],
                [
                    -0.33356931805610657,
                    -1.297244668006897,
                    -1.2382441759109497,
                    -0.03856665641069412,
                    0.23676930367946625,
                    0.8071077466011047,
                    0.9841093420982361,
                    0.5711056590080261,
                    0.4137708842754364,
                    0.47277140617370605,
                    0.07943440228700638,
                    -0.09756718575954437,
                    -0.15656772255897522,
                    -0.6089051365852356,
                    -0.41223669052124023,
                    0.3154366612434387,
                    0.35477036237716675,
                    0.2957698404788971,
                    0.19743561744689941,
                    -0.1369008719921112,
                    -0.05823349952697754,
                    -0.31390246748924255,
                    -0.07790034264326096,
                    0.25643613934516907,
                    1.0431098937988281,
                    1.0037761926651,
                    0.23676930367946625,
                    0.4334377348423004,
                    0.7481071949005127,
                    -0.17623455822467804,
                    -1.906916856765747,
                    -1.5725804567337036
                ],
                [
                    -0.1369008719921112,
                    -0.7465730309486389,
                    -0.8842409253120422,
                    -0.1369008719921112,
                    0.07943440228700638,
                    0.33510351181030273,
                    0.9644424915313721,
                    0.9447756409645081,
                    0.5907724499702454,
                    0.02043387107551098,
                    0.13843508064746857,
                    -0.05823349952697754,
                    -0.07790034264326096,
                    -0.09756718575954437,
                    -0.19590140879154205,
                    -0.2549019455909729,
                    -0.3532361388206482,
                    -0.29423561692237854,
                    -0.07790034264326096,
                    0.040100716054439545,
                    0.15810193121433258,
                    -0.018899815157055855,
                    0.11876823753118515,
                    -0.11723402887582779,
                    0.4137708842754364,
                    0.7677740454673767,
                    0.35477036237716675,
                    0.6104393005371094,
                    0.8464414477348328,
                    -0.21556824445724487,
                    -1.1399098634719849,
                    -0.5499045848846436
                ],
                [
                    0.1777687668800354,
                    -0.5302377343177795,
                    -0.4712372124195099,
                    -0.05823349952697754,
                    0.13843508064746857,
                    -0.17623455822467804,
                    0.8267745971679688,
                    0.8857751488685608,
                    0.3154366612434387,
                    -0.31390246748924255,
                    -0.3729029893875122,
                    -0.21556824445724487,
                    0.02043387107551098,
                    0.11876823753118515,
                    0.37443721294403076,
                    0.1777687668800354,
                    -0.018899815157055855,
                    -0.07790034264326096,
                    -0.31390246748924255,
                    -0.2352350950241089,
                    -0.15656772255897522,
                    -0.09756718575954437,
                    0.35477036237716675,
                    0.4137708842754364,
                    0.37443721294403076,
                    0.0007670287159271538,
                    0.45310458540916443,
                    0.7087735533714294,
                    0.6694398522377014,
                    -0.21556824445724487,
                    -1.0022419691085815,
                    -0.5695714354515076
                ],
                [
                    -0.03856665641069412,
                    -0.6482387781143188,
                    -0.5892382860183716,
                    -0.09756718575954437,
                    0.07943440228700638,
                    0.02043387107551098,
                    0.5514388084411621,
                    0.8464414477348328,
                    0.5907724499702454,
                    0.9447756409645081,
                    -0.03856665641069412,
                    -1.0612424612045288,
                    -0.31390246748924255,
                    0.02043387107551098,
                    0.0007670287159271538,
                    0.3154366612434387,
                    0.6301061511039734,
                    0.4137708842754364,
                    0.09910139441490173,
                    -0.07790034264326096,
                    -0.018899815157055855,
                    -0.3925698399543762,
                    0.15810193121433258,
                    0.8661082983016968,
                    0.7087735533714294,
                    0.33510351181030273,
                    0.09910139441490173,
                    0.7284404039382935,
                    0.5121051073074341,
                    -0.9432414174079895,
                    -1.749582052230835,
                    -0.3729029893875122
                ],
                [
                    -0.21556824445724487,
                    -0.4515703618526459,
                    -0.4515703618526459,
                    0.05976755917072296,
                    0.35477036237716675,
                    0.5711056590080261,
                    0.5121051073074341,
                    0.7874408960342407,
                    0.2957698404788971,
                    0.7874408960342407,
                    0.8464414477348328,
                    -1.0219087600708008,
                    -0.4515703618526459,
                    0.19743561744689941,
                    0.3154366612434387,
                    0.35477036237716675,
                    0.11876823753118515,
                    0.25643613934516907,
                    0.7284404039382935,
                    0.6891067028045654,
                    0.7874408960342407,
                    0.5514388084411621,
                    0.040100716054439545,
                    0.05976755917072296,
                    0.90544193983078,
                    1.0627766847610474,
                    -0.018899815157055855,
                    0.3941040337085724,
                    0.3941040337085724,
                    -1.218577265739441,
                    -1.4152456521987915,
                    0.3154366612434387
                ],
                [
                    -0.21556824445724487,
                    -0.21556824445724487,
                    0.15810193121433258,
                    0.11876823753118515,
                    0.47277140617370605,
                    0.02043387107551098,
                    0.4137708842754364,
                    0.2761029899120331,
                    0.3941040337085724,
                    -0.03856665641069412,
                    0.8857751488685608,
                    0.5907724499702454,
                    -0.018899815157055855,
                    0.07943440228700638,
                    0.45310458540916443,
                    0.47277140617370605,
                    0.35477036237716675,
                    0.3154366612434387,
                    0.1777687668800354,
                    0.2957698404788971,
                    0.21710245311260223,
                    0.3941040337085724,
                    0.5907724499702454,
                    0.21710245311260223,
                    0.4334377348423004,
                    0.13843508064746857,
                    0.45310458540916443,
                    -0.018899815157055855,
                    0.21710245311260223,
                    -0.4515703618526459,
                    -1.2775777578353882,
                    -0.2352350950241089
                ],
                [
                    -0.03856665641069412,
                    -0.09756718575954437,
                    0.5121051073074341,
                    0.37443721294403076,
                    0.35477036237716675,
                    -0.5105708837509155,
                    0.0007670287159271538,
                    -0.09756718575954437,
                    0.3941040337085724,
                    0.05976755917072296,
                    -0.03856665641069412,
                    1.2594451904296875,
                    0.4334377348423004,
                    -0.2549019455909729,
                    0.25643613934516907,
                    0.13843508064746857,
                    0.6104393005371094,
                    0.7481071949005127,
                    0.49243825674057007,
                    0.6104393005371094,
                    0.5514388084411621,
                    0.21710245311260223,
                    0.5317719578742981,
                    0.4334377348423004,
                    0.21710245311260223,
                    0.0007670287159271538,
                    -0.5105708837509155,
                    -0.7072393298149109,
                    -0.3925698399543762,
                    -0.07790034264326096,
                    -0.5105708837509155,
                    0.21710245311260223
                ],
                [
                    0.25643613934516907,
                    0.23676930367946625,
                    0.5514388084411621,
                    -0.2352350950241089,
                    -0.018899815157055855,
                    -0.43190351128578186,
                    -0.5892382860183716,
                    0.040100716054439545,
                    0.21710245311260223,
                    0.5907724499702454,
                    -0.5302377343177795,
                    0.040100716054439545,
                    0.90544193983078,
                    0.25643613934516907,
                    0.45310458540916443,
                    0.7284404039382935,
                    0.5317719578742981,
                    0.49243825674057007,
                    0.8464414477348328,
                    0.8661082983016968,
                    0.35477036237716675,
                    0.09910139441490173,
                    0.4137708842754364,
                    0.4334377348423004,
                    0.1777687668800354,
                    0.13843508064746857,
                    -0.9432414174079895,
                    -0.5695714354515076,
                    -0.7859066724777222,
                    -0.7072393298149109,
                    0.5121051073074341,
                    0.90544193983078
                ],
                [
                    0.49243825674057007,
                    0.33510351181030273,
                    -0.21556824445724487,
                    -0.5695714354515076,
                    -0.03856665641069412,
                    -0.3729029893875122,
                    -0.7662398815155029,
                    0.13843508064746857,
                    -0.41223669052124023,
                    -0.1369008719921112,
                    0.35477036237716675,
                    -0.9629082679748535,
                    -0.09756718575954437,
                    0.7874408960342407,
                    0.6301061511039734,
                    0.925108790397644,
                    0.8267745971679688,
                    0.5121051073074341,
                    0.6694398522377014,
                    0.8661082983016968,
                    0.45310458540916443,
                    0.2761029899120331,
                    0.47277140617370605,
                    0.4334377348423004,
                    0.07943440228700638,
                    0.02043387107551098,
                    -0.2745687663555145,
                    -0.19590140879154205,
                    -0.5302377343177795,
                    -0.07790034264326096,
                    0.6497730016708374,
                    0.7481071949005127
                ],
                [
                    0.5711056590080261,
                    -0.07790034264326096,
                    -1.0022419691085815,
                    0.040100716054439545,
                    0.11876823753118515,
                    -0.43190351128578186,
                    -0.4712372124195099,
                    -0.03856665641069412,
                    -0.05823349952697754,
                    -0.6285719275474548,
                    0.6104393005371094,
                    0.040100716054439545,
                    -0.5892382860183716,
                    0.5317719578742981,
                    1.1414440870285034,
                    0.90544193983078,
                    0.7677740454673767,
                    0.9841093420982361,
                    0.4334377348423004,
                    0.3941040337085724,
                    0.3941040337085724,
                    0.23676930367946625,
                    0.11876823753118515,
                    0.3154366612434387,
                    0.040100716054439545,
                    -0.05823349952697754,
                    -0.11723402887582779,
                    -0.41223669052124023,
                    0.11876823753118515,
                    0.9447756409645081,
                    0.6104393005371094,
                    0.5907724499702454
                ],
                [
                    0.25643613934516907,
                    -0.3729029893875122,
                    -0.8055735230445862,
                    0.0007670287159271538,
                    0.25643613934516907,
                    -0.09756718575954437,
                    -0.4909040629863739,
                    -0.15656772255897522,
                    0.5317719578742981,
                    0.35477036237716675,
                    -0.11723402887582779,
                    0.49243825674057007,
                    0.11876823753118515,
                    0.5121051073074341,
                    0.9841093420982361,
                    1.1021103858947754,
                    0.8267745971679688,
                    0.8857751488685608,
                    0.7087735533714294,
                    0.3941040337085724,
                    0.05976755917072296,
                    0.3154366612434387,
                    0.33510351181030273,
                    0.35477036237716675,
                    0.25643613934516907,
                    0.19743561744689941,
                    -0.018899815157055855,
                    -0.2745687663555145,
                    0.5711056590080261,
                    0.8071077466011047,
                    0.5317719578742981,
                    0.5121051073074341
                ],
                [
                    0.040100716054439545,
                    -0.2352350950241089,
                    0.5317719578742981,
                    1.338112473487854,
                    0.9644424915313721,
                    0.6891067028045654,
                    -0.03856665641069412,
                    -0.2352350950241089,
                    0.4334377348423004,
                    0.5907724499702454,
                    -0.15656772255897522,
                    -0.3532361388206482,
                    0.49243825674057007,
                    0.7481071949005127,
                    0.6104393005371094,
                    0.9644424915313721,
                    0.7481071949005127,
                    0.6301061511039734,
                    0.6497730016708374,
                    0.35477036237716675,
                    0.2761029899120331,
                    0.47277140617370605,
                    0.25643613934516907,
                    0.3941040337085724,
                    0.2761029899120331,
                    0.33510351181030273,
                    0.0007670287159271538,
                    0.21710245311260223,
                    0.6497730016708374,
                    0.5121051073074341,
                    0.6891067028045654,
                    0.5121051073074341
                ],
                [
                    0.5121051073074341,
                    0.7677740454673767,
                    1.5151140689849854,
                    1.908450961112976,
                    1.6921156644821167,
                    1.298778772354126,
                    0.925108790397644,
                    0.47277140617370605,
                    0.4334377348423004,
                    -0.018899815157055855,
                    0.040100716054439545,
                    0.25643613934516907,
                    0.3154366612434387,
                    0.7087735533714294,
                    0.5317719578742981,
                    0.8071077466011047,
                    0.6301061511039734,
                    0.6301061511039734,
                    0.7087735533714294,
                    0.37443721294403076,
                    0.19743561744689941,
                    0.90544193983078,
                    0.47277140617370605,
                    0.25643613934516907,
                    0.07943440228700638,
                    0.05976755917072296,
                    -0.31390246748924255,
                    -0.17623455822467804,
                    0.6104393005371094,
                    0.3941040337085724,
                    0.7284404039382935,
                    0.6497730016708374
                ],
                [
                    0.3154366612434387,
                    0.2761029899120331,
                    0.6694398522377014,
                    1.3184456825256348,
                    1.7707830667495728,
                    1.8101167678833008,
                    1.338112473487854,
                    1.0431098937988281,
                    0.90544193983078,
                    0.1777687668800354,
                    -0.11723402887582779,
                    0.7874408960342407,
                    0.9841093420982361,
                    0.5514388084411621,
                    0.6104393005371094,
                    0.3941040337085724,
                    0.02043387107551098,
                    0.11876823753118515,
                    0.5907724499702454,
                    0.5711056590080261,
                    0.4334377348423004,
                    0.7874408960342407,
                    0.5121051073074341,
                    0.02043387107551098,
                    -0.07790034264326096,
                    0.15810193121433258,
                    -0.5302377343177795,
                    -0.9629082679748535,
                    0.4334377348423004,
                    0.5121051073074341,
                    0.5514388084411621,
                    -0.05823349952697754
                ],
                [
                    -0.15656772255897522,
                    -0.2352350950241089,
                    -0.5105708837509155,
                    0.21710245311260223,
                    1.338112473487854,
                    1.6527819633483887,
                    1.7314493656158447,
                    1.377446174621582,
                    1.0627766847610474,
                    0.9841093420982361,
                    0.4334377348423004,
                    0.07943440228700638,
                    0.4137708842754364,
                    0.3941040337085724,
                    0.21710245311260223,
                    -0.3729029893875122,
                    -0.9825751185417175,
                    -0.6089051365852356,
                    0.3154366612434387,
                    0.6301061511039734,
                    0.7481071949005127,
                    0.2957698404788971,
                    0.49243825674057007,
                    0.37443721294403076,
                    0.15810193121433258,
                    -0.11723402887582779,
                    -0.7465730309486389,
                    -1.2382441759109497,
                    0.45310458540916443,
                    0.4334377348423004,
                    -0.2352350950241089,
                    -0.2745687663555145
                ],
                [
                    -0.33356931805610657,
                    -0.17623455822467804,
                    -1.1399098634719849,
                    -1.1595767736434937,
                    -0.05823349952697754,
                    1.0824435949325562,
                    1.41677987575531,
                    1.7707830667495728,
                    1.5544477701187134,
                    1.2201114892959595,
                    0.9841093420982361,
                    0.5907724499702454,
                    0.37443721294403076,
                    0.5317719578742981,
                    0.35477036237716675,
                    0.040100716054439545,
                    -0.29423561692237854,
                    -0.5302377343177795,
                    0.37443721294403076,
                    0.6104393005371094,
                    0.4137708842754364,
                    0.7481071949005127,
                    0.5121051073074341,
                    0.07943440228700638,
                    0.15810193121433258,
                    -0.4909040629863739,
                    -1.4545793533325195,
                    -0.5105708837509155,
                    0.47277140617370605,
                    -0.29423561692237854,
                    -0.09756718575954437,
                    -0.11723402887582779
                ],
                [
                    -0.1369008719921112,
                    -0.21556824445724487,
                    -1.1989104747772217,
                    -1.670914649963379,
                    -1.6119141578674316,
                    0.23676930367946625,
                    1.1217772960662842,
                    1.4954472780227661,
                    1.7511162757873535,
                    1.5937814712524414,
                    1.1807777881622314,
                    1.0824435949325562,
                    0.9447756409645081,
                    0.8071077466011047,
                    0.6891067028045654,
                    0.7481071949005127,
                    0.6694398522377014,
                    0.3154366612434387,
                    0.23676930367946625,
                    0.35477036237716675,
                    0.23676930367946625,
                    0.5907724499702454,
                    0.6497730016708374,
                    0.05976755917072296,
                    -0.3925698399543762,
                    -1.1202430725097656,
                    -1.257910966873169,
                    0.02043387107551098,
                    -0.7662398815155029,
                    0.25643613934516907,
                    1.456113576889038,
                    0.15810193121433258
                ],
                [
                    0.07943440228700638,
                    0.0007670287159271538,
                    -0.8645740747451782,
                    -0.8842409253120422,
                    -1.6905814409255981,
                    -1.1202430725097656,
                    0.5121051073074341,
                    1.338112473487854,
                    1.6724488735198975,
                    1.8887841701507568,
                    1.790449857711792,
                    1.3971130847930908,
                    1.2004445791244507,
                    1.1217772960662842,
                    0.8267745971679688,
                    0.7087735533714294,
                    0.23676930367946625,
                    0.040100716054439545,
                    0.0007670287159271538,
                    0.15810193121433258,
                    0.2957698404788971,
                    0.47277140617370605,
                    0.23676930367946625,
                    -0.17623455822467804,
                    -0.29423561692237854,
                    -0.8645740747451782,
                    -0.7465730309486389,
                    -0.6285719275474548,
                    -0.8842409253120422,
                    0.9644424915313721,
                    1.5347809791564941,
                    0.3941040337085724
                ],
                [
                    0.040100716054439545,
                    -0.3729029893875122,
                    -1.3955788612365723,
                    -0.31390246748924255,
                    -1.1005761623382568,
                    -1.4742462635040283,
                    -0.8842409253120422,
                    0.5514388084411621,
                    1.298778772354126,
                    1.5741146802902222,
                    1.8494504690170288,
                    1.869117259979248,
                    1.6134482622146606,
                    1.41677987575531,
                    1.1217772960662842,
                    1.1611108779907227,
                    0.8267745971679688,
                    -0.1369008719921112,
                    -0.5695714354515076,
                    -0.018899815157055855,
                    -0.5105708837509155,
                    -0.6679056286811829,
                    -0.6679056286811829,
                    -0.2352350950241089,
                    0.5317719578742981,
                    0.2957698404788971,
                    0.13843508064746857,
                    0.21710245311260223,
                    0.7087735533714294,
                    1.1414440870285034,
                    1.2791119813919067,
                    0.11876823753118515
                ],
                [
                    -0.41223669052124023,
                    -1.4152456521987915,
                    -1.6315809488296509,
                    -0.15656772255897522,
                    -0.5302377343177795,
                    -1.2775777578353882,
                    -1.6119141578674316,
                    -0.8842409253120422,
                    0.7284404039382935,
                    1.1414440870285034,
                    1.2201114892959595,
                    1.6527819633483887,
                    1.869117259979248,
                    1.7117825746536255,
                    1.4364467859268188,
                    1.6331151723861694,
                    1.790449857711792,
                    1.1217772960662842,
                    0.02043387107551098,
                    -0.19590140879154205,
                    -0.7269061803817749,
                    -0.41223669052124023,
                    0.1777687668800354,
                    0.7284404039382935,
                    1.2397782802581787,
                    0.8661082983016968,
                    0.8661082983016968,
                    0.8661082983016968,
                    1.1217772960662842,
                    1.1021103858947754,
                    1.2201114892959595,
                    0.6497730016708374
                ]
            ],
            [
                [
                    -1.2458784580230713,
                    -0.972734272480011,
                    -1.323919653892517,
                    -1.6360843181610107,
                    -1.7921665906906128,
                    -1.5190225839614868,
                    -1.1483269929885864,
                    -1.1093063354492188,
                    -1.0702857971191406,
                    -1.1678372621536255,
                    -1.9872695207595825,
                    -1.8702077865600586,
                    -1.3824505805969238,
                    -1.3629401922225952,
                    -1.2653887271881104,
                    -1.2458784580230713,
                    -1.0897960662841797,
                    -0.7191005349159241,
                    -0.6410593390464783,
                    -0.7191005349159241,
                    -0.6020388007164001,
                    -0.6995902061462402,
                    -1.1288167238235474,
                    -1.1093063354492188,
                    -0.328894704580307,
                    -0.4069358706474304,
                    -1.6165740489959717,
                    -1.0897960662841797,
                    -0.9532240033149719,
                    -1.421471118927002,
                    -1.1873475313186646,
                    -0.9337137341499329
                ],
                [
                    -1.0897960662841797,
                    -0.6410593390464783,
                    -1.1093063354492188,
                    -1.6555945873260498,
                    -1.5385328531265259,
                    -1.0312652587890625,
                    -1.0702857971191406,
                    -1.0507755279541016,
                    -0.972734272480011,
                    -1.304409384727478,
                    -2.0848209857940674,
                    -1.694615125656128,
                    -1.1288167238235474,
                    -1.0117549896240234,
                    -1.0702857971191406,
                    -1.304409384727478,
                    -0.89469313621521,
                    -0.777631402015686,
                    -0.777631402015686,
                    -0.89469313621521,
                    -0.6995902061462402,
                    -0.6410593390464783,
                    -1.2263681888580322,
                    -1.0507755279541016,
                    -0.05575065314769745,
                    -0.34840500354766846,
                    -1.8116768598556519,
                    -1.46049165725708,
                    -1.3434299230575562,
                    -1.3629401922225952,
                    -0.8751828074455261,
                    -0.9337137341499329
                ],
                [
                    -0.8166519403457642,
                    -0.5239976048469543,
                    -0.8556725382804871,
                    -1.5385328531265259,
                    -1.1873475313186646,
                    -0.8166519403457642,
                    -1.0507755279541016,
                    -0.9532240033149719,
                    -0.8751828074455261,
                    -1.4800019264221191,
                    -2.0848209857940674,
                    -1.5385328531265259,
                    -1.2068578004837036,
                    -0.9532240033149719,
                    -1.284899115562439,
                    -1.577553391456604,
                    -0.914203405380249,
                    -0.9337137341499329,
                    -1.2458784580230713,
                    -1.1483269929885864,
                    -0.7191005349159241,
                    -0.6215490698814392,
                    -1.3434299230575562,
                    -1.0117549896240234,
                    0.04180079698562622,
                    -0.2898741364479065,
                    -1.9092283248901367,
                    -1.4800019264221191,
                    -0.9922446608543396,
                    -0.7581210732460022,
                    -0.7191005349159241,
                    -1.2263681888580322
                ],
                [
                    -0.38742557168006897,
                    -0.7386108040809631,
                    -0.6605696678161621,
                    -1.304409384727478,
                    -0.836162269115448,
                    -0.8166519403457642,
                    -0.9532240033149719,
                    -0.777631402015686,
                    -0.8166519403457642,
                    -1.6360843181610107,
                    -1.9872695207595825,
                    -1.558043122291565,
                    -1.440981388092041,
                    -1.2068578004837036,
                    -1.5385328531265259,
                    -1.6360843181610107,
                    -0.7581210732460022,
                    -0.5239976048469543,
                    -0.89469313621521,
                    -0.8751828074455261,
                    -0.6410593390464783,
                    -0.7191005349159241,
                    -1.323919653892517,
                    -0.914203405380249,
                    0.10033166408538818,
                    -0.13379181921482086,
                    -1.401960849761963,
                    -0.7971416711807251,
                    -0.3679153025150299,
                    -0.34840500354766846,
                    -0.89469313621521,
                    -1.558043122291565
                ],
                [
                    -0.328894704580307,
                    -0.6800799369812012,
                    -0.15330210328102112,
                    -1.0507755279541016,
                    -0.7581210732460022,
                    -0.89469313621521,
                    -0.8166519403457642,
                    -0.7386108040809631,
                    -0.7971416711807251,
                    -1.7531460523605347,
                    -1.9872695207595825,
                    -1.8897180557250977,
                    -1.6751048564910889,
                    -1.4995123147964478,
                    -1.2263681888580322,
                    -1.0702857971191406,
                    -0.8166519403457642,
                    -0.6800799369812012,
                    -0.7581210732460022,
                    -0.836162269115448,
                    -0.836162269115448,
                    -0.7971416711807251,
                    -1.3434299230575562,
                    -0.7191005349159241,
                    0.275924414396286,
                    0.29543471336364746,
                    -0.6215490698814392,
                    -0.5630182027816772,
                    -0.38742557168006897,
                    -0.328894704580307,
                    -0.7971416711807251,
                    -0.6605696678161621
                ],
                [
                    -0.6215490698814392,
                    -0.7191005349159241,
                    -0.7581210732460022,
                    -0.914203405380249,
                    -1.0312652587890625,
                    -0.8751828074455261,
                    -0.7191005349159241,
                    -1.0312652587890625,
                    -0.914203405380249,
                    -1.8506975173950195,
                    -1.9677592515945435,
                    -1.7921665906906128,
                    -1.3629401922225952,
                    -1.0702857971191406,
                    -0.836162269115448,
                    -0.7971416711807251,
                    -0.8166519403457642,
                    -0.8166519403457642,
                    -0.7971416711807251,
                    -1.1873475313186646,
                    -1.558043122291565,
                    -0.7971416711807251,
                    -1.0117549896240234,
                    -0.7191005349159241,
                    0.43200674653053284,
                    0.6466199159622192,
                    -0.34840500354766846,
                    -0.4459564685821533,
                    -0.42644616961479187,
                    -0.0752609446644783,
                    -0.19232268631458282,
                    -0.42644616961479187
                ],
                [
                    -0.8166519403457642,
                    -0.8556725382804871,
                    -1.7336357831954956,
                    -1.2263681888580322,
                    -1.0117549896240234,
                    -0.6800799369812012,
                    -0.6800799369812012,
                    -1.2458784580230713,
                    -1.1288167238235474,
                    -1.9287385940551758,
                    -1.7531460523605347,
                    -1.1678372621536255,
                    -0.7971416711807251,
                    -0.7581210732460022,
                    -0.7191005349159241,
                    -1.0117549896240234,
                    -1.558043122291565,
                    -1.2263681888580322,
                    -0.34840500354766846,
                    -1.401960849761963,
                    -1.7921665906906128,
                    -0.5044873356819153,
                    -0.8166519403457642,
                    -0.777631402015686,
                    0.6856405138969421,
                    0.91976398229599,
                    -0.19232268631458282,
                    -0.11428152769804001,
                    -0.13379181921482086,
                    0.334455281496048,
                    -0.6410593390464783,
                    -1.3824505805969238
                ],
                [
                    -0.9922446608543396,
                    -1.0702857971191406,
                    -1.8116768598556519,
                    -0.8556725382804871,
                    -0.7191005349159241,
                    -0.8166519403457642,
                    -0.7581210732460022,
                    -1.0897960662841797,
                    -1.421471118927002,
                    -2.0653107166290283,
                    -1.304409384727478,
                    -0.6410593390464783,
                    -0.7581210732460022,
                    -0.7581210732460022,
                    -1.0117549896240234,
                    -1.8702077865600586,
                    -2.1043312549591064,
                    -1.46049165725708,
                    -0.48497703671455383,
                    -0.972734272480011,
                    -1.401960849761963,
                    -0.38742557168006897,
                    -0.8166519403457642,
                    -0.6020388007164001,
                    0.334455281496048,
                    0.9392743110656738,
                    0.0027802155818790197,
                    0.11984195560216904,
                    0.08082137256860733,
                    0.3734758794307709,
                    -1.2068578004837036,
                    -1.8116768598556519
                ],
                [
                    -0.7971416711807251,
                    -1.1873475313186646,
                    -1.2653887271881104,
                    -0.19232268631458282,
                    0.1393522471189499,
                    -0.5044873356819153,
                    -1.1093063354492188,
                    -0.8556725382804871,
                    -1.2263681888580322,
                    -1.7726563215255737,
                    -0.836162269115448,
                    -0.6020388007164001,
                    -0.6995902061462402,
                    -0.6800799369812012,
                    -1.558043122291565,
                    -2.0848209857940674,
                    -1.440981388092041,
                    -0.6410593390464783,
                    -1.0507755279541016,
                    -1.0117549896240234,
                    -0.6605696678161621,
                    -0.2898741364479065,
                    -0.4459564685821533,
                    -0.4069358706474304,
                    0.022290505468845367,
                    0.5295581817626953,
                    0.11984195560216904,
                    0.1393522471189499,
                    0.1393522471189499,
                    0.19788311421871185,
                    -1.577553391456604,
                    -1.8311872482299805
                ],
                [
                    -0.5435079336166382,
                    -1.0897960662841797,
                    -1.1288167238235474,
                    0.08082137256860733,
                    0.334455281496048,
                    0.256413996219635,
                    -0.972734272480011,
                    -1.2263681888580322,
                    -1.0702857971191406,
                    -0.972734272480011,
                    -0.328894704580307,
                    -0.2898741364479065,
                    -0.38742557168006897,
                    -1.0897960662841797,
                    -1.9677592515945435,
                    -1.6751048564910889,
                    -0.6020388007164001,
                    -0.4069358706474304,
                    -0.7971416711807251,
                    -0.6605696678161621,
                    -0.30938443541526794,
                    -0.17281238734722137,
                    -0.3679153025150299,
                    -0.777631402015686,
                    0.04180079698562622,
                    0.3539655804634094,
                    0.10033166408538818,
                    0.23690369725227356,
                    0.256413996219635,
                    -0.250853568315506,
                    -1.9677592515945435,
                    -1.7726563215255737
                ],
                [
                    -0.4459564685821533,
                    -1.0702857971191406,
                    -1.1873475313186646,
                    0.04180079698562622,
                    0.3539655804634094,
                    0.4124964475631714,
                    -0.21183297038078308,
                    -1.284899115562439,
                    -1.597063660621643,
                    -0.7581210732460022,
                    -0.34840500354766846,
                    -0.328894704580307,
                    -0.23134326934814453,
                    -0.777631402015686,
                    -1.2458784580230713,
                    -0.7971416711807251,
                    -0.4654667377471924,
                    -0.6215490698814392,
                    -0.48497703671455383,
                    -0.328894704580307,
                    -0.30938443541526794,
                    -0.11428152769804001,
                    -0.836162269115448,
                    -1.2653887271881104,
                    0.10033166408538818,
                    0.19788311421871185,
                    0.10033166408538818,
                    0.47102731466293335,
                    0.1783728301525116,
                    -0.4459564685821533,
                    -2.02629017829895,
                    -1.8311872482299805
                ],
                [
                    -0.250853568315506,
                    -1.2263681888580322,
                    -1.304409384727478,
                    -0.0752609446644783,
                    0.29543471336364746,
                    0.4124964475631714,
                    0.4124964475631714,
                    -0.8166519403457642,
                    -1.323919653892517,
                    -0.5825284719467163,
                    -0.6215490698814392,
                    -0.6800799369812012,
                    -0.38742557168006897,
                    -0.5435079336166382,
                    0.061311084777116776,
                    0.4124964475631714,
                    0.11984195560216904,
                    -0.23134326934814453,
                    -0.4069358706474304,
                    -0.38742557168006897,
                    -0.42644616961479187,
                    -0.5044873356819153,
                    -0.777631402015686,
                    -0.5044873356819153,
                    0.3539655804634094,
                    0.022290505468845367,
                    0.08082137256860733,
                    0.5295581817626953,
                    0.10033166408538818,
                    -0.4459564685821533,
                    -2.006779909133911,
                    -2.0848209857940674
                ],
                [
                    -0.5044873356819153,
                    -1.440981388092041,
                    -1.440981388092041,
                    -0.34840500354766846,
                    -0.13379181921482086,
                    0.334455281496048,
                    0.4905376136302948,
                    0.10033166408538818,
                    -0.13379181921482086,
                    -0.23134326934814453,
                    -0.5239976048469543,
                    -0.48497703671455383,
                    -0.3679153025150299,
                    -0.777631402015686,
                    -0.6410593390464783,
                    -0.11428152769804001,
                    0.08082137256860733,
                    -0.0752609446644783,
                    -0.27036383748054504,
                    -0.4069358706474304,
                    -0.23134326934814453,
                    -0.5630182027816772,
                    -0.5239976048469543,
                    -0.3679153025150299,
                    0.19788311421871185,
                    0.11984195560216904,
                    -0.250853568315506,
                    -0.01673007383942604,
                    0.1783728301525116,
                    -0.48497703671455383,
                    -1.9287385940551758,
                    -1.597063660621643
                ],
                [
                    -0.3679153025150299,
                    -0.9922446608543396,
                    -1.1483269929885864,
                    -0.42644616961479187,
                    -0.27036383748054504,
                    -0.0752609446644783,
                    0.4905376136302948,
                    0.4515170454978943,
                    0.1783728301525116,
                    -0.328894704580307,
                    -0.250853568315506,
                    -0.42644616961479187,
                    -0.4654667377471924,
                    -0.5044873356819153,
                    -0.5435079336166382,
                    -0.5435079336166382,
                    -0.5630182027816772,
                    -0.5044873356819153,
                    -0.27036383748054504,
                    -0.11428152769804001,
                    0.0027802155818790197,
                    -0.11428152769804001,
                    -0.0752609446644783,
                    -0.3679153025150299,
                    -0.09477123618125916,
                    0.061311084777116776,
                    -0.13379181921482086,
                    0.022290505468845367,
                    0.275924414396286,
                    -0.5044873356819153,
                    -1.2653887271881104,
                    -0.7386108040809631
                ],
                [
                    -0.15330210328102112,
                    -0.8751828074455261,
                    -0.836162269115448,
                    -0.34840500354766846,
                    -0.19232268631458282,
                    -0.5435079336166382,
                    0.3929861783981323,
                    0.4124964475631714,
                    0.04180079698562622,
                    -0.5239976048469543,
                    -0.6410593390464783,
                    -0.5044873356819153,
                    -0.34840500354766846,
                    -0.34840500354766846,
                    -0.0752609446644783,
                    -0.15330210328102112,
                    -0.30938443541526794,
                    -0.3679153025150299,
                    -0.5239976048469543,
                    -0.42644616961479187,
                    -0.328894704580307,
                    -0.13379181921482086,
                    0.256413996219635,
                    0.275924414396286,
                    0.15886253118515015,
                    -0.38742557168006897,
                    0.04180079698562622,
                    0.10033166408538818,
                    0.15886253118515015,
                    -0.42644616961479187,
                    -1.1873475313186646,
                    -0.8556725382804871
                ],
                [
                    -0.34840500354766846,
                    -0.972734272480011,
                    -0.972734272480011,
                    -0.42644616961479187,
                    -0.21183297038078308,
                    -0.3679153025150299,
                    0.1393522471189499,
                    0.3734758794307709,
                    0.29543471336364746,
                    0.7051507830619812,
                    -0.27036383748054504,
                    -1.2263681888580322,
                    -0.5044873356819153,
                    -0.250853568315506,
                    -0.30938443541526794,
                    -0.01673007383942604,
                    0.334455281496048,
                    0.10033166408538818,
                    -0.250853568315506,
                    -0.3679153025150299,
                    -0.34840500354766846,
                    -0.6020388007164001,
                    -0.01673007383942604,
                    0.7441713809967041,
                    0.6661302447319031,
                    0.11984195560216904,
                    -0.30938443541526794,
                    0.19788311421871185,
                    0.08082137256860733,
                    -1.1093063354492188,
                    -1.9677592515945435,
                    -0.8166519403457642
                ],
                [
                    -0.5239976048469543,
                    -0.7386108040809631,
                    -0.836162269115448,
                    -0.4654667377471924,
                    0.022290505468845367,
                    0.19788311421871185,
                    0.11984195560216904,
                    0.3149450123310089,
                    -0.0752609446644783,
                    0.5490685105323792,
                    0.7051507830619812,
                    -1.0897960662841797,
                    -0.5825284719467163,
                    0.04180079698562622,
                    0.10033166408538818,
                    0.11984195560216904,
                    -0.11428152769804001,
                    -0.01673007383942604,
                    0.3734758794307709,
                    0.3929861783981323,
                    0.4515170454978943,
                    0.23690369725227356,
                    -0.21183297038078308,
                    -0.0752609446644783,
                    0.8807434439659119,
                    0.9587845802307129,
                    -0.2898741364479065,
                    0.0027802155818790197,
                    0.061311084777116776,
                    -1.401960849761963,
                    -1.577553391456604,
                    -0.13379181921482086
                ],
                [
                    -0.5435079336166382,
                    -0.5044873356819153,
                    -0.27036383748054504,
                    -0.4069358706474304,
                    0.061311084777116776,
                    -0.2898741364479065,
                    0.061311084777116776,
                    -0.17281238734722137,
                    -0.0752609446644783,
                    -0.23134326934814453,
                    0.8027022480964661,
                    0.4905376136302948,
                    -0.13379181921482086,
                    -0.05575065314769745,
                    0.29543471336364746,
                    0.29543471336364746,
                    0.19788311421871185,
                    0.10033166408538818,
                    -0.09477123618125916,
                    0.08082137256860733,
                    -0.01673007383942604,
                    0.08082137256860733,
                    0.19788311421871185,
                    -0.01673007383942604,
                    0.334455281496048,
                    0.061311084777116776,
                    0.334455281496048,
                    -0.2898741364479065,
                    -0.17281238734722137,
                    -0.8166519403457642,
                    -1.46049165725708,
                    -0.5239976048469543
                ],
                [
                    -0.3679153025150299,
                    -0.34840500354766846,
                    0.11984195560216904,
                    0.022290505468845367,
                    -0.09477123618125916,
                    -0.836162269115448,
                    -0.2898741364479065,
                    -0.5435079336166382,
                    -0.11428152769804001,
                    -0.2898741364479065,
                    -0.15330210328102112,
                    1.2124183177947998,
                    0.3149450123310089,
                    -0.38742557168006897,
                    0.1783728301525116,
                    0.061311084777116776,
                    0.4515170454978943,
                    0.5295581817626953,
                    0.29543471336364746,
                    0.43200674653053284,
                    0.334455281496048,
                    -0.05575065314769745,
                    0.11984195560216904,
                    0.1393522471189499,
                    0.061311084777116776,
                    -0.13379181921482086,
                    -0.6605696678161621,
                    -0.914203405380249,
                    -0.8166519403457642,
                    -0.6410593390464783,
                    -0.914203405380249,
                    -0.0752609446644783
                ],
                [
                    -0.09477123618125916,
                    -0.036240365356206894,
                    0.2173934131860733,
                    -0.5239976048469543,
                    -0.5044873356819153,
                    -0.8166519403457642,
                    -0.836162269115448,
                    -0.38742557168006897,
                    -0.27036383748054504,
                    0.1393522471189499,
                    -0.7971416711807251,
                    0.022290505468845367,
                    0.7441713809967041,
                    0.08082137256860733,
                    0.4124964475631714,
                    0.6661302447319031,
                    0.3734758794307709,
                    0.3149450123310089,
                    0.6661302447319031,
                    0.6856405138969421,
                    0.2173934131860733,
                    -0.01673007383942604,
                    0.1393522471189499,
                    0.15886253118515015,
                    0.0027802155818790197,
                    -0.01673007383942604,
                    -1.0897960662841797,
                    -0.6995902061462402,
                    -1.0312652587890625,
                    -1.1288167238235474,
                    0.022290505468845367,
                    0.47102731466293335
                ],
                [
                    0.10033166408538818,
                    0.04180079698562622,
                    -0.48497703671455383,
                    -0.914203405380249,
                    -0.5044873356819153,
                    -0.8166519403457642,
                    -1.0507755279541016,
                    -0.23134326934814453,
                    -0.8166519403457642,
                    -0.5239976048469543,
                    -0.09477123618125916,
                    -1.1483269929885864,
                    -0.250853568315506,
                    0.6271096467971802,
                    0.5295581817626953,
                    0.8222125172615051,
                    0.7441713809967041,
                    0.43200674653053284,
                    0.5100479125976562,
                    0.7441713809967041,
                    0.3929861783981323,
                    0.1783728301525116,
                    0.256413996219635,
                    0.19788311421871185,
                    -0.09477123618125916,
                    -0.17281238734722137,
                    -0.4069358706474304,
                    -0.30938443541526794,
                    -0.7191005349159241,
                    -0.30938443541526794,
                    0.15886253118515015,
                    0.10033166408538818
                ],
                [
                    0.23690369725227356,
                    -0.328894704580307,
                    -1.2458784580230713,
                    -0.4069358706474304,
                    -0.34840500354766846,
                    -0.8556725382804871,
                    -0.7581210732460022,
                    -0.34840500354766846,
                    -0.4654667377471924,
                    -1.0702857971191406,
                    0.08082137256860733,
                    -0.328894704580307,
                    -0.7971416711807251,
                    0.334455281496048,
                    0.9392743110656738,
                    0.724661111831665,
                    0.7051507830619812,
                    0.9587845802307129,
                    0.3539655804634094,
                    0.256413996219635,
                    0.2173934131860733,
                    0.08082137256860733,
                    -0.0752609446644783,
                    0.061311084777116776,
                    -0.17281238734722137,
                    -0.23134326934814453,
                    -0.38742557168006897,
                    -0.6800799369812012,
                    -0.13379181921482086,
                    0.5490685105323792,
                    -0.036240365356206894,
                    -0.15330210328102112
                ],
                [
                    -0.036240365356206894,
                    -0.6410593390464783,
                    -1.1483269929885864,
                    -0.48497703671455383,
                    -0.42644616961479187,
                    -0.6995902061462402,
                    -0.8751828074455261,
                    -0.48497703671455383,
                    0.10033166408538818,
                    -0.13379181921482086,
                    -0.6020388007164001,
                    0.08082137256860733,
                    -0.13379181921482086,
                    0.2173934131860733,
                    0.724661111831665,
                    0.8222125172615051,
                    0.6661302447319031,
                    0.8027022480964661,
                    0.6661302447319031,
                    0.23690369725227356,
                    -0.11428152769804001,
                    0.1783728301525116,
                    0.11984195560216904,
                    0.061311084777116776,
                    0.0027802155818790197,
                    -0.23134326934814453,
                    -0.5825284719467163,
                    -0.5435079336166382,
                    0.29543471336364746,
                    0.1393522471189499,
                    -0.2898741364479065,
                    -0.17281238734722137
                ],
                [
                    -0.30938443541526794,
                    -0.5435079336166382,
                    0.11984195560216904,
                    0.783191978931427,
                    0.10033166408538818,
                    -0.3679153025150299,
                    -0.8751828074455261,
                    -0.6995902061462402,
                    0.022290505468845367,
                    0.23690369725227356,
                    -0.5239976048469543,
                    -0.6995902061462402,
                    0.2173934131860733,
                    0.4905376136302948,
                    0.3539655804634094,
                    0.7051507830619812,
                    0.5295581817626953,
                    0.5490685105323792,
                    0.6271096467971802,
                    0.23690369725227356,
                    0.1393522471189499,
                    0.3539655804634094,
                    0.08082137256860733,
                    0.1783728301525116,
                    0.022290505468845367,
                    -0.5044873356819153,
                    -0.6215490698814392,
                    -0.05575065314769745,
                    0.1393522471189499,
                    -0.250853568315506,
                    -0.15330210328102112,
                    -0.21183297038078308
                ],
                [
                    0.04180079698562622,
                    0.43200674653053284,
                    1.0368257761001587,
                    1.3294800519943237,
                    0.8807434439659119,
                    0.10033166408538818,
                    -0.34840500354766846,
                    -0.42644616961479187,
                    -0.23134326934814453,
                    -0.4654667377471924,
                    -0.23134326934814453,
                    -0.05575065314769745,
                    -0.036240365356206894,
                    0.43200674653053284,
                    0.334455281496048,
                    0.5685787796974182,
                    0.3929861783981323,
                    0.5490685105323792,
                    0.7051507830619812,
                    0.275924414396286,
                    0.061311084777116776,
                    0.8222125172615051,
                    0.3539655804634094,
                    0.10033166408538818,
                    -0.23134326934814453,
                    -0.48497703671455383,
                    -0.6995902061462402,
                    -0.6020388007164001,
                    -0.15330210328102112,
                    -0.34840500354766846,
                    -0.01673007383942604,
                    -0.11428152769804001
                ],
                [
                    -0.11428152769804001,
                    -0.09477123618125916,
                    -0.01673007383942604,
                    0.6271096467971802,
                    1.01731538772583,
                    0.861233115196228,
                    0.1783728301525116,
                    -0.17281238734722137,
                    -0.23134326934814453,
                    -0.6215490698814392,
                    -0.5630182027816772,
                    0.5100479125976562,
                    0.6075993776321411,
                    0.23690369725227356,
                    0.3929861783981323,
                    0.1783728301525116,
                    -0.19232268631458282,
                    0.022290505468845367,
                    0.47102731466293335,
                    0.4515170454978943,
                    0.334455281496048,
                    0.7051507830619812,
                    0.47102731466293335,
                    -0.15330210328102112,
                    -0.328894704580307,
                    -0.05575065314769745,
                    -0.777631402015686,
                    -1.3434299230575562,
                    -0.34840500354766846,
                    -0.250853568315506,
                    -0.17281238734722137,
                    -0.7581210732460022
                ],
                [
                    -0.5044873356819153,
                    -0.5630182027816772,
                    -1.1483269929885864,
                    -0.5435079336166382,
                    0.4905376136302948,
                    0.724661111831665,
                    0.724661111831665,
                    0.23690369725227356,
                    -0.19232268631458282,
                    -0.19232268631458282,
                    -0.5239976048469543,
                    -0.5239976048469543,
                    -0.05575065314769745,
                    -0.0752609446644783,
                    -0.0752609446644783,
                    -0.6215490698814392,
                    -1.1873475313186646,
                    -0.7581210732460022,
                    0.1393522471189499,
                    0.5100479125976562,
                    0.6075993776321411,
                    0.11984195560216904,
                    0.29543471336364746,
                    0.15886253118515015,
                    0.04180079698562622,
                    -0.30938443541526794,
                    -1.0117549896240234,
                    -1.597063660621643,
                    -0.328894704580307,
                    -0.30938443541526794,
                    -0.9532240033149719,
                    -0.972734272480011
                ],
                [
                    -0.6215490698814392,
                    -0.42644616961479187,
                    -1.558043122291565,
                    -1.597063660621643,
                    -0.7581210732460022,
                    0.061311084777116776,
                    0.3929861783981323,
                    0.8222125172615051,
                    0.5295581817626953,
                    -0.09477123618125916,
                    -0.30938443541526794,
                    -0.5239976048469543,
                    -0.6215490698814392,
                    -0.4654667377471924,
                    -0.4459564685821533,
                    -0.3679153025150299,
                    -0.6215490698814392,
                    -0.8556725382804871,
                    0.1393522471189499,
                    0.4905376136302948,
                    0.29543471336364746,
                    0.5685787796974182,
                    0.275924414396286,
                    -0.13379181921482086,
                    -0.01673007383942604,
                    -0.6995902061462402,
                    -1.6555945873260498,
                    -0.9922446608543396,
                    -0.2898741364479065,
                    -0.836162269115448,
                    -0.836162269115448,
                    -0.9337137341499329
                ],
                [
                    -0.4654667377471924,
                    -0.5435079336166382,
                    -1.5385328531265259,
                    -1.9677592515945435,
                    -1.9287385940551758,
                    -0.6995902061462402,
                    0.0027802155818790197,
                    0.6661302447319031,
                    0.9392743110656738,
                    0.4905376136302948,
                    -0.05575065314769745,
                    -0.30938443541526794,
                    -0.328894704580307,
                    -0.4459564685821533,
                    -0.5435079336166382,
                    -0.01673007383942604,
                    0.11984195560216904,
                    -0.15330210328102112,
                    0.022290505468845367,
                    0.23690369725227356,
                    0.08082137256860733,
                    0.4124964475631714,
                    0.4124964475631714,
                    -0.15330210328102112,
                    -0.6800799369812012,
                    -1.401960849761963,
                    -1.4800019264221191,
                    -0.4459564685821533,
                    -1.3629401922225952,
                    -0.34840500354766846,
                    0.7636816501617432,
                    -0.6020388007164001
                ],
                [
                    -0.42644616961479187,
                    -0.5435079336166382,
                    -1.3434299230575562,
                    -1.4995123147964478,
                    -1.9677592515945435,
                    -1.6165740489959717,
                    -0.5239976048469543,
                    0.15886253118515015,
                    0.7051507830619812,
                    1.1538875102996826,
                    0.861233115196228,
                    0.15886253118515015,
                    0.061311084777116776,
                    0.0027802155818790197,
                    -0.4069358706474304,
                    -0.42644616961479187,
                    -0.7191005349159241,
                    -0.5630182027816772,
                    -0.21183297038078308,
                    -0.01673007383942604,
                    0.23690369725227356,
                    0.3734758794307709,
                    0.022290505468845367,
                    -0.4459564685821533,
                    -0.6995902061462402,
                    -1.2458784580230713,
                    -1.0702857971191406,
                    -1.0507755279541016,
                    -1.401960849761963,
                    -0.11428152769804001,
                    0.3929861783981323,
                    -0.30938443541526794
                ],
                [
                    -0.6215490698814392,
                    -0.836162269115448,
                    -1.7531460523605347,
                    -1.1288167238235474,
                    -1.5190225839614868,
                    -1.7726563215255737,
                    -1.5385328531265259,
                    -0.5825284719467163,
                    0.08082137256860733,
                    0.6271096467971802,
                    0.9978051781654358,
                    0.9978051781654358,
                    0.7051507830619812,
                    0.3149450123310089,
                    -0.05575065314769745,
                    0.1393522471189499,
                    -0.11428152769804001,
                    -0.9337137341499329,
                    -0.9922446608543396,
                    -0.30938443541526794,
                    -0.6995902061462402,
                    -0.8751828074455261,
                    -0.8556725382804871,
                    -0.5435079336166382,
                    0.061311084777116776,
                    -0.11428152769804001,
                    -0.34840500354766846,
                    -0.30938443541526794,
                    0.11984195560216904,
                    0.04180079698562622,
                    0.1783728301525116,
                    -0.48497703671455383
                ],
                [
                    -0.9532240033149719,
                    -1.694615125656128,
                    -1.8897180557250977,
                    -0.972734272480011,
                    -1.2068578004837036,
                    -1.6555945873260498,
                    -1.9287385940551758,
                    -1.4995123147964478,
                    -0.48497703671455383,
                    -0.27036383748054504,
                    0.04180079698562622,
                    0.7051507830619812,
                    1.0953565835952759,
                    0.7441713809967041,
                    0.43200674653053284,
                    0.8222125172615051,
                    1.01731538772583,
                    0.1393522471189499,
                    -0.8751828074455261,
                    -0.777631402015686,
                    -1.304409384727478,
                    -0.836162269115448,
                    -0.23134326934814453,
                    0.256413996219635,
                    0.8222125172615051,
                    0.4905376136302948,
                    0.334455281496048,
                    0.3149450123310089,
                    0.6466199159622192,
                    0.43200674653053284,
                    0.6271096467971802,
                    0.061311084777116776
                ]
            ]
        ]
    ]
}
docs/AKS-HCI/notebooks/distributed-cifar10/test_request_pytorch/cifar_test_input_img_3_airplane_pytorch.json METASEP
{
    "instances": [
        [
            [
                [
                    0.5755964517593384,
                    0.8082154393196106,
                    0.9826796650886536,
                    1.2540684938430786,
                    1.00206458568573,
                    0.7888305187225342,
                    0.827600359916687,
                    0.7888305187225342,
                    0.8663701415061951,
                    1.0408344268798828,
                    1.1959137916564941,
                    1.1959137916564941,
                    1.1959137916564941,
                    1.1959137916564941,
                    1.1377589702606201,
                    1.1377589702606201,
                    1.0989891290664673,
                    1.0602192878723145,
                    1.1377589702606201,
                    1.176528811454773,
                    1.1959137916564941,
                    1.1959137916564941,
                    1.2152986526489258,
                    1.2346835136413574,
                    1.1959137916564941,
                    1.1959137916564941,
                    1.2152986526489258,
                    1.350993037223816,
                    1.4673025608062744,
                    1.4673025608062744,
                    1.486687421798706,
                    1.2928383350372314
                ],
                [
                    0.5368266105651855,
                    0.7306757569313049,
                    0.8857550621032715,
                    1.1959137916564941,
                    1.0408344268798828,
                    0.5755964517593384,
                    0.556211531162262,
                    0.6531360745429993,
                    0.6531360745429993,
                    0.7694455981254578,
                    0.8857550621032715,
                    0.9632947444915771,
                    0.8469852805137634,
                    0.8857550621032715,
                    0.7112908363342285,
                    0.7694455981254578,
                    0.8663701415061951,
                    0.7500606775283813,
                    0.7888305187225342,
                    0.7694455981254578,
                    0.8082154393196106,
                    0.9245249032974243,
                    0.8469852805137634,
                    0.827600359916687,
                    0.8469852805137634,
                    0.9245249032974243,
                    1.2540684938430786,
                    1.486687421798706,
                    1.5254572629928589,
                    1.486687421798706,
                    1.5060724020004272,
                    1.2346835136413574
                ],
                [
                    0.5755964517593384,
                    0.6725209951400757,
                    0.827600359916687,
                    1.1377589702606201,
                    1.1959137916564941,
                    0.9439098238945007,
                    0.9826796650886536,
                    1.2152986526489258,
                    1.0989891290664673,
                    1.0408344268798828,
                    1.00206458568573,
                    1.2540684938430786,
                    1.2928383350372314,
                    1.3316081762313843,
                    1.2152986526489258,
                    1.1571439504623413,
                    1.312223196029663,
                    1.3316081762313843,
                    1.312223196029663,
                    1.3316081762313843,
                    1.350993037223816,
                    1.3897628784179688,
                    1.312223196029663,
                    1.2734533548355103,
                    1.2734533548355103,
                    1.3897628784179688,
                    1.5642271041870117,
                    1.583612084388733,
                    1.6029969453811646,
                    1.5642271041870117,
                    1.5254572629928589,
                    1.2346835136413574
                ],
                [
                    0.4980567693710327,
                    0.6143662929534912,
                    0.7888305187225342,
                    1.00206458568573,
                    1.0602192878723145,
                    1.1571439504623413,
                    1.4285327196121216,
                    1.3897628784179688,
                    1.0989891290664673,
                    1.5254572629928589,
                    1.54484224319458,
                    1.40914785861969,
                    1.6417667865753174,
                    1.3897628784179688,
                    1.370378017425537,
                    1.5060724020004272,
                    1.54484224319458,
                    1.583612084388733,
                    1.6417667865753174,
                    1.5060724020004272,
                    1.583612084388733,
                    1.6417667865753174,
                    1.3897628784179688,
                    1.5254572629928589,
                    1.6029969453811646,
                    1.40914785861969,
                    1.5254572629928589,
                    1.4673025608062744,
                    1.6223819255828857,
                    1.583612084388733,
                    1.5642271041870117,
                    1.2928383350372314
                ],
                [
                    0.4980567693710327,
                    0.6337511539459229,
                    0.827600359916687,
                    0.9439098238945007,
                    1.00206458568573,
                    1.0796042680740356,
                    1.2734533548355103,
                    1.370378017425537,
                    1.1183741092681885,
                    1.3316081762313843,
                    1.2346835136413574,
                    1.1571439504623413,
                    1.370378017425537,
                    1.1571439504623413,
                    1.1571439504623413,
                    1.486687421798706,
                    1.4285327196121216,
                    1.4285327196121216,
                    1.4479176998138428,
                    1.2928383350372314,
                    1.350993037223816,
                    1.4285327196121216,
                    1.2540684938430786,
                    1.2152986526489258,
                    1.4673025608062744,
                    1.4285327196121216,
                    1.4673025608062744,
                    1.370378017425537,
                    1.5642271041870117,
                    1.5254572629928589,
                    1.583612084388733,
                    1.370378017425537
                ],
                [
                    0.43990203738212585,
                    0.5949813723564148,
                    0.8082154393196106,
                    0.9439098238945007,
                    0.8857550621032715,
                    0.9439098238945007,
                    1.370378017425537,
                    1.350993037223816,
                    1.2928383350372314,
                    1.2540684938430786,
                    1.2346835136413574,
                    1.1377589702606201,
                    1.1959137916564941,
                    1.2346835136413574,
                    1.2346835136413574,
                    1.2734533548355103,
                    1.2540684938430786,
                    1.350993037223816,
                    1.1959137916564941,
                    1.40914785861969,
                    1.2928383350372314,
                    1.2152986526489258,
                    1.2928383350372314,
                    1.312223196029663,
                    1.54484224319458,
                    1.5642271041870117,
                    1.5060724020004272,
                    1.6223819255828857,
                    1.6805366277694702,
                    1.6029969453811646,
                    1.6223819255828857,
                    1.370378017425537
                ],
                [
                    0.43990203738212585,
                    0.5368266105651855,
                    0.7694455981254578,
                    0.9439098238945007,
                    0.827600359916687,
                    0.9826796650886536,
                    1.5060724020004272,
                    1.350993037223816,
                    1.2152986526489258,
                    1.2152986526489258,
                    1.1959137916564941,
                    1.2540684938430786,
                    1.0989891290664673,
                    1.3316081762313843,
                    1.3897628784179688,
                    1.350993037223816,
                    1.370378017425537,
                    1.312223196029663,
                    1.4479176998138428,
                    1.54484224319458,
                    1.40914785861969,
                    1.3897628784179688,
                    1.3897628784179688,
                    1.4673025608062744,
                    1.3897628784179688,
                    1.4479176998138428,
                    1.40914785861969,
                    1.350993037223816,
                    1.3897628784179688,
                    1.5060724020004272,
                    1.583612084388733,
                    1.350993037223816
                ],
                [
                    0.5368266105651855,
                    0.5755964517593384,
                    0.7306757569313049,
                    0.9051399827003479,
                    0.9051399827003479,
                    1.2152986526489258,
                    1.4285327196121216,
                    1.6223819255828857,
                    1.370378017425537,
                    1.2540684938430786,
                    1.2346835136413574,
                    1.2734533548355103,
                    1.312223196029663,
                    1.2152986526489258,
                    1.1959137916564941,
                    1.370378017425537,
                    1.486687421798706,
                    1.3316081762313843,
                    1.370378017425537,
                    1.5642271041870117,
                    1.3316081762313843,
                    1.4673025608062744,
                    1.370378017425537,
                    1.4479176998138428,
                    1.0796042680740356,
                    1.1959137916564941,
                    1.4479176998138428,
                    1.4673025608062744,
                    1.4479176998138428,
                    1.370378017425537,
                    1.4285327196121216,
                    1.2346835136413574
                ],
                [
                    0.6725209951400757,
                    0.6531360745429993,
                    0.7306757569313049,
                    0.9051399827003479,
                    0.9439098238945007,
                    0.9826796650886536,
                    0.9826796650886536,
                    1.2540684938430786,
                    1.0602192878723145,
                    0.9632947444915771,
                    0.9826796650886536,
                    0.9826796650886536,
                    1.0796042680740356,
                    0.8663701415061951,
                    0.9051399827003479,
                    1.0989891290664673,
                    1.1959137916564941,
                    1.0214494466781616,
                    1.0796042680740356,
                    1.1959137916564941,
                    1.00206458568573,
                    1.2152986526489258,
                    1.0602192878723145,
                    1.1959137916564941,
                    1.4285327196121216,
                    1.370378017425537,
                    1.2152986526489258,
                    1.2152986526489258,
                    1.3897628784179688,
                    1.2928383350372314,
                    1.3316081762313843,
                    1.1377589702606201
                ],
                [
                    0.8857550621032715,
                    0.8082154393196106,
                    0.7112908363342285,
                    0.9051399827003479,
                    0.8663701415061951,
                    0.8857550621032715,
                    1.0602192878723145,
                    0.9826796650886536,
                    0.5755964517593384,
                    0.5949813723564148,
                    0.4786718487739563,
                    0.5949813723564148,
                    0.4786718487739563,
                    0.401132196187973,
                    0.5368266105651855,
                    0.6337511539459229,
                    0.7888305187225342,
                    0.7888305187225342,
                    0.7500606775283813,
                    0.6143662929534912,
                    0.6143662929534912,
                    0.7112908363342285,
                    0.5949813723564148,
                    0.7888305187225342,
                    1.4479176998138428,
                    1.4285327196121216,
                    1.2152986526489258,
                    1.2346835136413574,
                    1.3897628784179688,
                    1.312223196029663,
                    1.3316081762313843,
                    1.0989891290664673
                ],
                [
                    0.9632947444915771,
                    1.0602192878723145,
                    0.827600359916687,
                    0.9826796650886536,
                    0.9245249032974243,
                    1.00206458568573,
                    1.0989891290664673,
                    0.9439098238945007,
                    0.5949813723564148,
                    0.6725209951400757,
                    0.6531360745429993,
                    0.556211531162262,
                    0.6531360745429993,
                    0.7306757569313049,
                    0.827600359916687,
                    0.9245249032974243,
                    0.8663701415061951,
                    0.7500606775283813,
                    0.6725209951400757,
                    0.7112908363342285,
                    0.6725209951400757,
                    0.827600359916687,
                    0.8082154393196106,
                    0.9051399827003479,
                    1.3316081762313843,
                    1.350993037223816,
                    1.370378017425537,
                    1.370378017425537,
                    1.3897628784179688,
                    1.2734533548355103,
                    1.312223196029663,
                    1.1183741092681885
                ],
                [
                    1.0796042680740356,
                    1.1959137916564941,
                    1.0214494466781616,
                    1.1959137916564941,
                    1.1183741092681885,
                    0.8663701415061951,
                    0.9439098238945007,
                    1.0989891290664673,
                    1.0408344268798828,
                    1.0408344268798828,
                    1.0602192878723145,
                    1.0796042680740356,
                    1.1377589702606201,
                    1.1959137916564941,
                    1.312223196029663,
                    1.312223196029663,
                    1.312223196029663,
                    1.2928383350372314,
                    1.2152986526489258,
                    1.1571439504623413,
                    1.1377589702606201,
                    1.176528811454773,
                    1.2928383350372314,
                    1.2928383350372314,
                    1.1959137916564941,
                    1.2152986526489258,
                    1.2928383350372314,
                    1.2346835136413574,
                    1.2540684938430786,
                    1.2734533548355103,
                    1.370378017425537,
                    1.176528811454773
                ],
                [
                    1.1571439504623413,
                    1.2540684938430786,
                    1.176528811454773,
                    0.8857550621032715,
                    0.5368266105651855,
                    0.12974336743354797,
                    0.4592869281768799,
                    1.312223196029663,
                    1.40914785861969,
                    1.2734533548355103,
                    1.176528811454773,
                    1.2152986526489258,
                    1.2734533548355103,
                    1.312223196029663,
                    1.350993037223816,
                    1.370378017425537,
                    1.350993037223816,
                    1.2928383350372314,
                    1.2540684938430786,
                    1.2152986526489258,
                    1.2152986526489258,
                    1.2540684938430786,
                    1.2928383350372314,
                    1.2734533548355103,
                    1.2734533548355103,
                    1.312223196029663,
                    1.350993037223816,
                    1.3897628784179688,
                    1.486687421798706,
                    1.486687421798706,
                    1.5254572629928589,
                    1.312223196029663
                ],
                [
                    1.176528811454773,
                    1.3316081762313843,
                    1.2152986526489258,
                    0.6337511539459229,
                    0.12974336743354797,
                    -0.18041542172431946,
                    -0.6068835854530334,
                    -0.316109836101532,
                    0.3817472755908966,
                    1.00206458568573,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.2734533548355103,
                    1.312223196029663,
                    1.370378017425537,
                    1.4285327196121216,
                    1.4285327196121216,
                    1.4285327196121216,
                    1.4479176998138428,
                    1.40914785861969,
                    1.370378017425537,
                    1.370378017425537,
                    1.4285327196121216,
                    1.40914785861969,
                    1.3897628784179688,
                    1.370378017425537,
                    1.370378017425537,
                    1.370378017425537,
                    1.40914785861969,
                    1.3897628784179688,
                    1.40914785861969,
                    1.1571439504623413
                ],
                [
                    1.176528811454773,
                    1.3897628784179688,
                    1.370378017425537,
                    1.40914785861969,
                    1.3316081762313843,
                    1.1377589702606201,
                    0.30420762300491333,
                    -0.6456534266471863,
                    -0.8007327318191528,
                    -0.4130344092845917,
                    0.32359254360198975,
                    1.0408344268798828,
                    1.350993037223816,
                    1.4673025608062744,
                    1.5254572629928589,
                    1.5254572629928589,
                    1.5254572629928589,
                    1.5254572629928589,
                    1.5254572629928589,
                    1.4285327196121216,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.2734533548355103,
                    1.2346835136413574,
                    1.2540684938430786,
                    1.2540684938430786,
                    1.2540684938430786,
                    1.2734533548355103,
                    1.2540684938430786,
                    1.2928383350372314,
                    1.0796042680740356
                ],
                [
                    1.1377589702606201,
                    1.4285327196121216,
                    1.40914785861969,
                    1.4479176998138428,
                    1.3897628784179688,
                    1.4479176998138428,
                    1.4673025608062744,
                    1.00206458568573,
                    -0.16103051602840424,
                    -0.8007327318191528,
                    -0.6262685060501099,
                    0.0522037111222744,
                    0.9245249032974243,
                    1.486687421798706,
                    1.6029969453811646,
                    1.54484224319458,
                    1.486687421798706,
                    1.4479176998138428,
                    1.4285327196121216,
                    1.4285327196121216,
                    1.350993037223816,
                    1.370378017425537,
                    1.3897628784179688,
                    1.350993037223816,
                    1.312223196029663,
                    1.350993037223816,
                    1.3316081762313843,
                    1.2734533548355103,
                    1.2734533548355103,
                    1.2346835136413574,
                    1.2540684938430786,
                    1.0214494466781616
                ],
                [
                    1.1571439504623413,
                    1.4673025608062744,
                    1.5060724020004272,
                    1.6029969453811646,
                    1.54484224319458,
                    1.5642271041870117,
                    1.6029969453811646,
                    1.719306468963623,
                    0.9632947444915771,
                    -0.6456534266471863,
                    -0.9558120369911194,
                    -0.6650383472442627,
                    -0.39364948868751526,
                    0.2848227024078369,
                    1.0796042680740356,
                    1.5060724020004272,
                    1.5642271041870117,
                    1.486687421798706,
                    1.3897628784179688,
                    1.3316081762313843,
                    1.312223196029663,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.350993037223816,
                    1.312223196029663,
                    1.2734533548355103,
                    1.312223196029663,
                    1.2540684938430786,
                    1.2540684938430786,
                    1.0602192878723145
                ],
                [
                    1.1959137916564941,
                    1.5254572629928589,
                    1.583612084388733,
                    1.719306468963623,
                    1.6805366277694702,
                    1.6805366277694702,
                    1.6611517667770386,
                    1.6029969453811646,
                    1.5060724020004272,
                    -0.025336099788546562,
                    -1.0527366399765015,
                    -0.7425779700279236,
                    -0.8007327318191528,
                    -0.8007327318191528,
                    -0.5099589824676514,
                    0.12974336743354797,
                    0.8082154393196106,
                    1.2540684938430786,
                    1.5060724020004272,
                    1.5060724020004272,
                    1.350993037223816,
                    1.2928383350372314,
                    1.3897628784179688,
                    1.370378017425537,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.2928383350372314,
                    1.2734533548355103,
                    1.312223196029663,
                    1.2734533548355103,
                    1.2928383350372314,
                    1.1183741092681885
                ],
                [
                    1.2540684938430786,
                    1.583612084388733,
                    1.583612084388733,
                    1.719306468963623,
                    1.6805366277694702,
                    1.6611517667770386,
                    1.6611517667770386,
                    1.6029969453811646,
                    1.6611517667770386,
                    0.22666795551776886,
                    -1.0333516597747803,
                    -0.7425779700279236,
                    -0.8201176524162292,
                    -0.8007327318191528,
                    -0.761962890625,
                    -0.8201176524162292,
                    -0.7038081288337708,
                    -0.3548796772956848,
                    0.11035845428705215,
                    0.5755964517593384,
                    0.7306757569313049,
                    1.0989891290664673,
                    1.5060724020004272,
                    1.5254572629928589,
                    1.486687421798706,
                    1.40914785861969,
                    1.3316081762313843,
                    1.2734533548355103,
                    1.312223196029663,
                    1.2928383350372314,
                    1.2734533548355103,
                    1.0989891290664673
                ],
                [
                    1.2734533548355103,
                    1.6417667865753174,
                    1.6223819255828857,
                    1.7386913299560547,
                    1.6999214887619019,
                    1.6805366277694702,
                    1.6805366277694702,
                    1.6999214887619019,
                    1.5254572629928589,
                    -0.2385701686143875,
                    -1.5179747343063354,
                    -1.3047406673431396,
                    -1.2078160047531128,
                    -0.9558120369911194,
                    -0.7425779700279236,
                    -0.6262685060501099,
                    -0.6844232082366943,
                    -0.8782724142074585,
                    -1.072121500968933,
                    -1.227200984954834,
                    -1.3047406673431396,
                    -0.936427116394043,
                    -0.06410592794418335,
                    0.6531360745429993,
                    1.0602192878723145,
                    1.3316081762313843,
                    1.4673025608062744,
                    1.4479176998138428,
                    1.4479176998138428,
                    1.370378017425537,
                    1.370378017425537,
                    1.1571439504623413
                ],
                [
                    1.2734533548355103,
                    1.6029969453811646,
                    1.583612084388733,
                    1.6611517667770386,
                    1.6223819255828857,
                    1.6417667865753174,
                    1.6223819255828857,
                    1.6805366277694702,
                    0.6143662929534912,
                    -0.4711891710758209,
                    -1.16904616355896,
                    -1.7118239402770996,
                    -1.4404350519180298,
                    -1.110891342163086,
                    -0.9945818781852722,
                    -0.7231930494308472,
                    -0.6650383472442627,
                    -0.761962890625,
                    -0.7813478112220764,
                    -1.0139667987823486,
                    -1.3628954887390137,
                    -1.5373597145080566,
                    -1.227200984954834,
                    -1.0333516597747803,
                    -0.9170421957969666,
                    -0.3548796772956848,
                    0.1491282880306244,
                    0.6337511539459229,
                    1.1377589702606201,
                    1.350993037223816,
                    1.370378017425537,
                    1.176528811454773
                ],
                [
                    1.176528811454773,
                    1.486687421798706,
                    1.5060724020004272,
                    1.6223819255828857,
                    1.583612084388733,
                    1.5642271041870117,
                    1.6223819255828857,
                    1.4479176998138428,
                    0.4592869281768799,
                    0.2848227024078369,
                    0.4980567693710327,
                    -0.49057406187057495,
                    -1.5567445755004883,
                    -1.401665210723877,
                    -1.459820032119751,
                    -0.5681137442588806,
                    0.5949813723564148,
                    0.6725209951400757,
                    0.0522037111222744,
                    -1.0333516597747803,
                    -0.5293439030647278,
                    -0.25795507431030273,
                    -0.7038081288337708,
                    -1.1496611833572388,
                    -1.1302763223648071,
                    0.11035845428705215,
                    0.7888305187225342,
                    0.7306757569313049,
                    0.9245249032974243,
                    1.1183741092681885,
                    1.2152986526489258,
                    1.0214494466781616
                ],
                [
                    1.1571439504623413,
                    1.4673025608062744,
                    1.486687421798706,
                    1.6417667865753174,
                    1.6417667865753174,
                    1.6029969453811646,
                    1.6223819255828857,
                    1.6223819255828857,
                    1.6417667865753174,
                    1.6611517667770386,
                    1.7386913299560547,
                    1.2346835136413574,
                    0.3623623549938202,
                    0.401132196187973,
                    0.43990203738212585,
                    0.827600359916687,
                    1.486687421798706,
                    1.5642271041870117,
                    1.2928383350372314,
                    0.556211531162262,
                    0.7306757569313049,
                    1.0214494466781616,
                    1.00206458568573,
                    0.6531360745429993,
                    0.5949813723564148,
                    1.0214494466781616,
                    1.2734533548355103,
                    1.3316081762313843,
                    1.370378017425537,
                    1.312223196029663,
                    1.2152986526489258,
                    0.9826796650886536
                ],
                [
                    0.9826796650886536,
                    1.2152986526489258,
                    1.2928383350372314,
                    1.370378017425537,
                    1.2928383350372314,
                    1.2152986526489258,
                    1.1571439504623413,
                    1.1183741092681885,
                    1.0989891290664673,
                    1.0214494466781616,
                    1.0408344268798828,
                    0.9245249032974243,
                    0.8663701415061951,
                    0.8663701415061951,
                    0.8857550621032715,
                    0.9245249032974243,
                    0.8469852805137634,
                    0.6725209951400757,
                    0.6919059157371521,
                    0.8082154393196106,
                    0.7694455981254578,
                    0.6919059157371521,
                    0.7694455981254578,
                    0.8663701415061951,
                    0.8663701415061951,
                    0.6725209951400757,
                    0.5174416899681091,
                    0.4786718487739563,
                    0.6143662929534912,
                    0.7306757569313049,
                    0.7500606775283813,
                    0.5949813723564148
                ],
                [
                    -0.2191852629184723,
                    -0.5099589824676514,
                    -0.29672491550445557,
                    -0.3548796772956848,
                    -0.4518042504787445,
                    -0.5487288236618042,
                    -0.6068835854530334,
                    -0.6262685060501099,
                    -0.7231930494308472,
                    -0.7813478112220764,
                    -0.7231930494308472,
                    -0.8782724142074585,
                    -0.936427116394043,
                    -0.9170421957969666,
                    -0.8201176524162292,
                    -0.4711891710758209,
                    -0.2385701686143875,
                    -0.3354947566986084,
                    -0.37426456809043884,
                    -0.3548796772956848,
                    -0.3354947566986084,
                    -0.29672491550445557,
                    -0.27733999490737915,
                    -0.2385701686143875,
                    -0.16103051602840424,
                    -0.1222606748342514,
                    -0.10287576168775558,
                    -0.1222606748342514,
                    -0.10287576168775558,
                    -0.08349084854125977,
                    -0.06410592794418335,
                    -0.025336099788546562
                ],
                [
                    -0.06410592794418335,
                    -0.316109836101532,
                    -0.2385701686143875,
                    -0.16103051602840424,
                    -0.19980034232139587,
                    -0.25795507431030273,
                    -0.2191852629184723,
                    -0.2385701686143875,
                    -0.27733999490737915,
                    -0.25795507431030273,
                    -0.27733999490737915,
                    -0.316109836101532,
                    -0.29672491550445557,
                    -0.316109836101532,
                    -0.29672491550445557,
                    -0.3354947566986084,
                    -0.19980034232139587,
                    -0.25795507431030273,
                    -0.39364948868751526,
                    -0.3548796772956848,
                    -0.3354947566986084,
                    -0.37426456809043884,
                    -0.4711891710758209,
                    -0.4130344092845917,
                    -0.37426456809043884,
                    -0.3548796772956848,
                    -0.316109836101532,
                    -0.316109836101532,
                    -0.4324193298816681,
                    -0.4518042504787445,
                    -0.6068835854530334,
                    -0.4711891710758209
                ],
                [
                    -0.10287576168775558,
                    -0.5487288236618042,
                    -0.3548796772956848,
                    -0.25795507431030273,
                    -0.316109836101532,
                    -0.4130344092845917,
                    -0.5293439030647278,
                    -0.6068835854530334,
                    -0.6068835854530334,
                    -0.6262685060501099,
                    -0.7231930494308472,
                    -0.761962890625,
                    -0.8395025730133057,
                    -0.8976573348045349,
                    -0.8782724142074585,
                    -0.9170421957969666,
                    -0.8782724142074585,
                    -0.8976573348045349,
                    -1.0333516597747803,
                    -1.0915064811706543,
                    -1.1302763223648071,
                    -1.1496611833572388,
                    -1.16904616355896,
                    -1.16904616355896,
                    -1.1884310245513916,
                    -1.16904616355896,
                    -1.1496611833572388,
                    -1.1884310245513916,
                    -1.1302763223648071,
                    -1.2078160047531128,
                    -1.401665210723877,
                    -0.936427116394043
                ],
                [
                    -0.6650383472442627,
                    -1.3628954887390137,
                    -1.16904616355896,
                    -1.0915064811706543,
                    -1.1496611833572388,
                    -1.1496611833572388,
                    -1.2078160047531128,
                    -1.2465859651565552,
                    -1.1496611833572388,
                    -1.1884310245513916,
                    -1.2659708261489868,
                    -1.3241256475448608,
                    -1.3241256475448608,
                    -1.2659708261489868,
                    -1.2465859651565552,
                    -1.2078160047531128,
                    -1.2078160047531128,
                    -1.1496611833572388,
                    -1.1884310245513916,
                    -1.3047406673431396,
                    -1.3435105085372925,
                    -1.3241256475448608,
                    -1.285355806350708,
                    -1.2659708261489868,
                    -1.3047406673431396,
                    -1.3241256475448608,
                    -1.3435105085372925,
                    -1.3241256475448608,
                    -1.4210501909255981,
                    -1.4792048931121826,
                    -0.9751969575881958,
                    -0.6456534266471863
                ],
                [
                    -0.6262685060501099,
                    -1.2659708261489868,
                    -1.1496611833572388,
                    -1.110891342163086,
                    -1.1302763223648071,
                    -1.1302763223648071,
                    -1.1884310245513916,
                    -1.16904616355896,
                    -1.0915064811706543,
                    -1.16904616355896,
                    -1.227200984954834,
                    -1.285355806350708,
                    -1.285355806350708,
                    -1.285355806350708,
                    -1.2659708261489868,
                    -1.2465859651565552,
                    -1.1884310245513916,
                    -1.2078160047531128,
                    -1.3047406673431396,
                    -1.3435105085372925,
                    -1.3628954887390137,
                    -1.3628954887390137,
                    -1.3435105085372925,
                    -1.3435105085372925,
                    -1.3241256475448608,
                    -1.3047406673431396,
                    -1.3435105085372925,
                    -1.401665210723877,
                    -1.16904616355896,
                    -0.6262685060501099,
                    -0.5487288236618042,
                    -0.8588874936103821
                ],
                [
                    -0.7038081288337708,
                    -1.3241256475448608,
                    -1.2465859651565552,
                    -1.3241256475448608,
                    -1.3241256475448608,
                    -1.285355806350708,
                    -1.3241256475448608,
                    -1.285355806350708,
                    -1.2659708261489868,
                    -1.3047406673431396,
                    -1.3435105085372925,
                    -1.3822803497314453,
                    -1.2659708261489868,
                    -1.2465859651565552,
                    -1.285355806350708,
                    -1.2465859651565552,
                    -1.16904616355896,
                    -1.2465859651565552,
                    -1.3047406673431396,
                    -1.3241256475448608,
                    -1.2659708261489868,
                    -1.2659708261489868,
                    -1.2465859651565552,
                    -1.2465859651565552,
                    -1.1496611833572388,
                    -1.227200984954834,
                    -1.3241256475448608,
                    -1.072121500968933,
                    -0.5487288236618042,
                    -0.7038081288337708,
                    -1.285355806350708,
                    -1.1302763223648071
                ],
                [
                    -0.7038081288337708,
                    -1.2659708261489868,
                    -1.2078160047531128,
                    -1.227200984954834,
                    -1.227200984954834,
                    -1.227200984954834,
                    -1.227200984954834,
                    -1.2078160047531128,
                    -1.227200984954834,
                    -1.2465859651565552,
                    -1.16904616355896,
                    -0.8395025730133057,
                    -0.8007327318191528,
                    -0.8588874936103821,
                    -0.9170421957969666,
                    -0.8588874936103821,
                    -0.7231930494308472,
                    -0.8007327318191528,
                    -0.7813478112220764,
                    -0.8201176524162292,
                    -0.8782724142074585,
                    -1.1302763223648071,
                    -1.1496611833572388,
                    -1.1884310245513916,
                    -1.4210501909255981,
                    -1.3435105085372925,
                    -0.761962890625,
                    -0.4324193298816681,
                    -0.9558120369911194,
                    -1.3241256475448608,
                    -1.2465859651565552,
                    -0.9751969575881958
                ],
                [
                    -0.6456534266471863,
                    -1.2659708261489868,
                    -1.2465859651565552,
                    -1.2659708261489868,
                    -1.2078160047531128,
                    -1.1496611833572388,
                    -1.1302763223648071,
                    -1.16904616355896,
                    -1.1496611833572388,
                    -1.1302763223648071,
                    -1.16904616355896,
                    -1.0333516597747803,
                    -1.0139667987823486,
                    -1.0139667987823486,
                    -1.0333516597747803,
                    -1.072121500968933,
                    -1.0139667987823486,
                    -0.9945818781852722,
                    -0.9751969575881958,
                    -0.9751969575881958,
                    -0.9751969575881958,
                    -1.1884310245513916,
                    -1.1884310245513916,
                    -1.227200984954834,
                    -1.16904616355896,
                    -0.761962890625,
                    -0.7231930494308472,
                    -1.1884310245513916,
                    -1.3241256475448608,
                    -1.2659708261489868,
                    -1.1884310245513916,
                    -1.0139667987823486
                ]
            ],
            [
                [
                    0.6497730016708374,
                    1.0431098937988281,
                    1.1021103858947754,
                    1.3577793836593628,
                    1.2201114892959595,
                    0.9447756409645081,
                    0.9841093420982361,
                    0.9841093420982361,
                    1.0234429836273193,
                    1.1021103858947754,
                    1.1611108779907227,
                    1.2004445791244507,
                    1.2201114892959595,
                    1.2004445791244507,
                    1.1611108779907227,
                    1.1414440870285034,
                    1.1021103858947754,
                    1.1021103858947754,
                    1.1807777881622314,
                    1.2201114892959595,
                    1.2397782802581787,
                    1.2397782802581787,
                    1.2594451904296875,
                    1.298778772354126,
                    1.2594451904296875,
                    1.2594451904296875,
                    1.2791119813919067,
                    1.41677987575531,
                    1.456113576889038,
                    1.4364467859268188,
                    1.5544477701187134,
                    1.1807777881622314
                ],
                [
                    0.6301061511039734,
                    1.1021103858947754,
                    1.2004445791244507,
                    1.41677987575531,
                    1.3184456825256348,
                    0.7677740454673767,
                    0.7087735533714294,
                    0.8071077466011047,
                    0.7874408960342407,
                    0.8267745971679688,
                    0.90544193983078,
                    1.0431098937988281,
                    0.9447756409645081,
                    1.0037761926651,
                    0.8071077466011047,
                    0.8661082983016968,
                    0.9644424915313721,
                    0.8464414477348328,
                    0.8857751488685608,
                    0.8464414477348328,
                    0.90544193983078,
                    1.0234429836273193,
                    0.9447756409645081,
                    0.90544193983078,
                    0.925108790397644,
                    1.0037761926651,
                    1.338112473487854,
                    1.5937814712524414,
                    1.6331151723861694,
                    1.6724488735198975,
                    1.8101167678833008,
                    1.3184456825256348
                ],
                [
                    0.6104393005371094,
                    1.0824435949325562,
                    1.2201114892959595,
                    1.4364467859268188,
                    1.5741146802902222,
                    1.377446174621582,
                    1.0824435949325562,
                    0.8857751488685608,
                    0.7284404039382935,
                    1.0234429836273193,
                    1.3184456825256348,
                    1.4364467859268188,
                    1.41677987575531,
                    1.456113576889038,
                    1.3184456825256348,
                    1.2791119813919067,
                    1.4364467859268188,
                    1.41677987575531,
                    1.3971130847930908,
                    1.41677987575531,
                    1.4364467859268188,
                    1.4757803678512573,
                    1.377446174621582,
                    1.338112473487854,
                    1.3577793836593628,
                    1.4364467859268188,
                    1.6134482622146606,
                    1.6134482622146606,
                    1.6331151723861694,
                    1.6724488735198975,
                    1.8101167678833008,
                    1.338112473487854
                ],
                [
                    0.6104393005371094,
                    1.0824435949325562,
                    1.2791119813919067,
                    1.41677987575531,
                    1.5544477701187134,
                    1.456113576889038,
                    1.2791119813919067,
                    0.09910139441490173,
                    -0.29423561692237854,
                    0.5711056590080261,
                    0.6104393005371094,
                    0.6301061511039734,
                    0.6891067028045654,
                    0.5121051073074341,
                    0.5121051073074341,
                    0.49243825674057007,
                    0.8661082983016968,
                    0.7481071949005127,
                    0.7874408960342407,
                    0.9841093420982361,
                    0.8857751488685608,
                    0.7874408960342407,
                    1.0037761926651,
                    0.7087735533714294,
                    1.2791119813919067,
                    1.6724488735198975,
                    1.5937814712524414,
                    1.6331151723861694,
                    1.5937814712524414,
                    1.6134482622146606,
                    1.7511162757873535,
                    1.2791119813919067
                ],
                [
                    0.6104393005371094,
                    1.0627766847610474,
                    1.2594451904296875,
                    1.338112473487854,
                    1.4757803678512573,
                    1.4364467859268188,
                    1.298778772354126,
                    0.05976755917072296,
                    0.09910139441490173,
                    0.3154366612434387,
                    -0.33356931805610657,
                    -0.31390246748924255,
                    -0.15656772255897522,
                    -0.05823349952697754,
                    -0.09756718575954437,
                    -0.19590140879154205,
                    -0.07790034264326096,
                    -0.17623455822467804,
                    -0.17623455822467804,
                    0.05976755917072296,
                    -0.09756718575954437,
                    -0.21556824445724487,
                    0.25643613934516907,
                    -0.21556824445724487,
                    0.7284404039382935,
                    1.5741146802902222,
                    1.5347809791564941,
                    1.6331151723861694,
                    1.6331151723861694,
                    1.6134482622146606,
                    1.790449857711792,
                    1.3184456825256348
                ],
                [
                    0.5514388084411621,
                    1.0037761926651,
                    1.2594451904296875,
                    1.298778772354126,
                    1.456113576889038,
                    1.5151140689849854,
                    1.1807777881622314,
                    0.47277140617370605,
                    0.90544193983078,
                    0.8857751488685608,
                    0.4334377348423004,
                    0.8267745971679688,
                    0.925108790397644,
                    0.45310458540916443,
                    0.5121051073074341,
                    0.6694398522377014,
                    1.1217772960662842,
                    1.0824435949325562,
                    1.0431098937988281,
                    1.298778772354126,
                    1.0431098937988281,
                    1.1021103858947754,
                    1.2791119813919067,
                    1.0627766847610474,
                    1.4364467859268188,
                    1.6724488735198975,
                    1.6527819633483887,
                    1.6724488735198975,
                    1.6724488735198975,
                    1.6921156644821167,
                    1.82978355884552,
                    1.3184456825256348
                ],
                [
                    0.5711056590080261,
                    0.9644424915313721,
                    1.2201114892959595,
                    1.298778772354126,
                    1.3971130847930908,
                    1.4757803678512573,
                    0.47277140617370605,
                    -0.5302377343177795,
                    0.5121051073074341,
                    0.5514388084411621,
                    0.4137708842754364,
                    0.5711056590080261,
                    0.5711056590080261,
                    -0.03856665641069412,
                    0.09910139441490173,
                    0.3154366612434387,
                    0.6497730016708374,
                    0.5514388084411621,
                    0.925108790397644,
                    0.7677740454673767,
                    0.5317719578742981,
                    0.9841093420982361,
                    0.5317719578742981,
                    0.8071077466011047,
                    0.6497730016708374,
                    0.8464414477348328,
                    1.5937814712524414,
                    1.7117825746536255,
                    1.7314493656158447,
                    1.6527819633483887,
                    1.7511162757873535,
                    1.2791119813919067
                ],
                [
                    0.6301061511039734,
                    0.9644424915313721,
                    1.1611108779907227,
                    1.2594451904296875,
                    1.3971130847930908,
                    1.1414440870285034,
                    -0.07790034264326096,
                    -0.43190351128578186,
                    0.0007670287159271538,
                    0.15810193121433258,
                    0.15810193121433258,
                    -0.05823349952697754,
                    0.45310458540916443,
                    0.23676930367946625,
                    0.23676930367946625,
                    0.07943440228700638,
                    0.0007670287159271538,
                    0.0007670287159271538,
                    0.15810193121433258,
                    0.0007670287159271538,
                    -0.2745687663555145,
                    0.1777687668800354,
                    0.0007670287159271538,
                    0.7087735533714294,
                    0.0007670287159271538,
                    0.1777687668800354,
                    1.338112473487854,
                    1.4954472780227661,
                    1.5347809791564941,
                    1.5347809791564941,
                    1.6724488735198975,
                    1.2397782802581787
                ],
                [
                    0.7481071949005127,
                    1.0234429836273193,
                    1.1217772960662842,
                    1.2201114892959595,
                    1.3577793836593628,
                    1.2397782802581787,
                    0.9447756409645081,
                    1.0234429836273193,
                    0.7677740454673767,
                    0.8267745971679688,
                    0.9644424915313721,
                    0.8464414477348328,
                    1.0234429836273193,
                    0.9644424915313721,
                    0.9841093420982361,
                    0.925108790397644,
                    0.9644424915313721,
                    1.0824435949325562,
                    1.0824435949325562,
                    1.0234429836273193,
                    0.7874408960342407,
                    0.9644424915313721,
                    1.0824435949325562,
                    1.3184456825256348,
                    0.9644424915313721,
                    1.0431098937988281,
                    1.5151140689849854,
                    1.6134482622146606,
                    1.5151140689849854,
                    1.5347809791564941,
                    1.6921156644821167,
                    1.2201114892959595
                ],
                [
                    0.9644424915313721,
                    1.1807777881622314,
                    1.1217772960662842,
                    1.2397782802581787,
                    1.3184456825256348,
                    1.3577793836593628,
                    1.3971130847930908,
                    1.1807777881622314,
                    0.7284404039382935,
                    0.8267745971679688,
                    0.7677740454673767,
                    0.7874408960342407,
                    0.7087735533714294,
                    0.6891067028045654,
                    0.8071077466011047,
                    0.7677740454673767,
                    0.8661082983016968,
                    1.0037761926651,
                    0.9644424915313721,
                    0.7677740454673767,
                    0.7284404039382935,
                    0.7874408960342407,
                    0.8267745971679688,
                    1.1611108779907227,
                    1.5151140689849854,
                    1.4757803678512573,
                    1.5544477701187134,
                    1.6134482622146606,
                    1.5544477701187134,
                    1.5544477701187134,
                    1.6724488735198975,
                    1.2004445791244507
                ],
                [
                    1.0627766847610474,
                    1.4364467859268188,
                    1.2397782802581787,
                    1.3184456825256348,
                    1.3577793836593628,
                    1.377446174621582,
                    1.377446174621582,
                    1.1807777881622314,
                    0.7874408960342407,
                    0.8661082983016968,
                    0.8267745971679688,
                    0.7087735533714294,
                    0.8071077466011047,
                    0.8464414477348328,
                    0.925108790397644,
                    0.9644424915313721,
                    0.8857751488685608,
                    0.8464414477348328,
                    0.8464414477348328,
                    0.9447756409645081,
                    0.8857751488685608,
                    0.9841093420982361,
                    0.9447756409645081,
                    1.0824435949325562,
                    1.4954472780227661,
                    1.4757803678512573,
                    1.4954472780227661,
                    1.4954472780227661,
                    1.5151140689849854,
                    1.5151140689849854,
                    1.6724488735198975,
                    1.2004445791244507
                ],
                [
                    1.1807777881622314,
                    1.5937814712524414,
                    1.41677987575531,
                    1.5151140689849854,
                    1.5347809791564941,
                    1.2594451904296875,
                    1.3184456825256348,
                    1.4757803678512573,
                    1.3971130847930908,
                    1.377446174621582,
                    1.377446174621582,
                    1.377446174621582,
                    1.377446174621582,
                    1.3971130847930908,
                    1.4757803678512573,
                    1.4757803678512573,
                    1.4757803678512573,
                    1.41677987575531,
                    1.41677987575531,
                    1.4757803678512573,
                    1.456113576889038,
                    1.4364467859268188,
                    1.4364467859268188,
                    1.456113576889038,
                    1.5347809791564941,
                    1.5741146802902222,
                    1.5347809791564941,
                    1.5347809791564941,
                    1.5544477701187134,
                    1.5151140689849854,
                    1.6921156644821167,
                    1.2594451904296875
                ],
                [
                    1.2201114892959595,
                    1.6134482622146606,
                    1.4757803678512573,
                    1.0824435949325562,
                    0.8464414477348328,
                    0.35477036237716675,
                    0.6104393005371094,
                    1.4364467859268188,
                    1.5544477701187134,
                    1.5544477701187134,
                    1.4954472780227661,
                    1.456113576889038,
                    1.456113576889038,
                    1.4954472780227661,
                    1.5347809791564941,
                    1.5544477701187134,
                    1.5347809791564941,
                    1.4954472780227661,
                    1.4757803678512573,
                    1.4364467859268188,
                    1.4364467859268188,
                    1.4757803678512573,
                    1.4954472780227661,
                    1.4757803678512573,
                    1.4954472780227661,
                    1.5544477701187134,
                    1.5741146802902222,
                    1.6331151723861694,
                    1.6527819633483887,
                    1.6331151723861694,
                    1.7511162757873535,
                    1.298778772354126
                ],
                [
                    1.2397782802581787,
                    1.6724488735198975,
                    1.5151140689849854,
                    0.8267745971679688,
                    0.4137708842754364,
                    0.02043387107551098,
                    -0.5499045848846436,
                    -0.31390246748924255,
                    0.3941040337085724,
                    1.1021103858947754,
                    1.4954472780227661,
                    1.4954472780227661,
                    1.456113576889038,
                    1.4757803678512573,
                    1.5347809791564941,
                    1.5937814712524414,
                    1.5937814712524414,
                    1.6134482622146606,
                    1.6331151723861694,
                    1.5937814712524414,
                    1.5347809791564941,
                    1.5347809791564941,
                    1.6134482622146606,
                    1.6134482622146606,
                    1.5937814712524414,
                    1.5741146802902222,
                    1.5741146802902222,
                    1.5741146802902222,
                    1.5544477701187134,
                    1.5544477701187134,
                    1.6527819633483887,
                    1.1807777881622314
                ],
                [
                    1.2397782802581787,
                    1.7511162757873535,
                    1.6724488735198975,
                    1.5937814712524414,
                    1.6331151723861694,
                    1.377446174621582,
                    0.3941040337085724,
                    -0.6285719275474548,
                    -0.8252403736114502,
                    -0.43190351128578186,
                    0.37443721294403076,
                    1.1414440870285034,
                    1.4757803678512573,
                    1.5937814712524414,
                    1.6527819633483887,
                    1.6527819633483887,
                    1.6527819633483887,
                    1.6527819633483887,
                    1.6527819633483887,
                    1.5544477701187134,
                    1.456113576889038,
                    1.456113576889038,
                    1.4757803678512573,
                    1.456113576889038,
                    1.456113576889038,
                    1.456113576889038,
                    1.456113576889038,
                    1.456113576889038,
                    1.4364467859268188,
                    1.456113576889038,
                    1.5937814712524414,
                    1.1414440870285034
                ],
                [
                    1.2004445791244507,
                    1.790449857711792,
                    1.7117825746536255,
                    1.6331151723861694,
                    1.6921156644821167,
                    1.7511162757873535,
                    1.6527819633483887,
                    1.1021103858947754,
                    -0.1369008719921112,
                    -0.7859066724777222,
                    -0.5892382860183716,
                    0.09910139441490173,
                    1.0037761926651,
                    1.5741146802902222,
                    1.7117825746536255,
                    1.6331151723861694,
                    1.5937814712524414,
                    1.5544477701187134,
                    1.5544477701187134,
                    1.5347809791564941,
                    1.4757803678512573,
                    1.4954472780227661,
                    1.5347809791564941,
                    1.5347809791564941,
                    1.5151140689849854,
                    1.5544477701187134,
                    1.5347809791564941,
                    1.4954472780227661,
                    1.4757803678512573,
                    1.4757803678512573,
                    1.5741146802902222,
                    1.1217772960662842
                ],
                [
                    1.2397782802581787,
                    1.8101167678833008,
                    1.790449857711792,
                    1.7707830667495728,
                    1.790449857711792,
                    1.790449857711792,
                    1.7511162757873535,
                    1.8494504690170288,
                    1.0234429836273193,
                    -0.6285719275474548,
                    -0.9825751185417175,
                    -0.7269061803817749,
                    -0.43190351128578186,
                    0.2957698404788971,
                    1.1414440870285034,
                    1.5937814712524414,
                    1.6724488735198975,
                    1.5741146802902222,
                    1.4954472780227661,
                    1.4757803678512573,
                    1.4954472780227661,
                    1.5347809791564941,
                    1.5347809791564941,
                    1.5151140689849854,
                    1.5151140689849854,
                    1.5544477701187134,
                    1.5347809791564941,
                    1.5347809791564941,
                    1.5544477701187134,
                    1.5151140689849854,
                    1.5937814712524414,
                    1.1611108779907227
                ],
                [
                    1.2594451904296875,
                    1.82978355884552,
                    1.82978355884552,
                    1.8494504690170288,
                    1.8887841701507568,
                    1.8494504690170288,
                    1.790449857711792,
                    1.7314493656158447,
                    1.5937814712524414,
                    0.0007670287159271538,
                    -1.0809093713760376,
                    -0.8055735230445862,
                    -0.8645740747451782,
                    -0.8252403736114502,
                    -0.5105708837509155,
                    0.13843508064746857,
                    0.8267745971679688,
                    1.2791119813919067,
                    1.5347809791564941,
                    1.5544477701187134,
                    1.4364467859268188,
                    1.377446174621582,
                    1.4954472780227661,
                    1.4757803678512573,
                    1.4757803678512573,
                    1.4954472780227661,
                    1.5151140689849854,
                    1.5151140689849854,
                    1.5347809791564941,
                    1.4954472780227661,
                    1.5937814712524414,
                    1.1611108779907227
                ],
                [
                    1.2791119813919067,
                    1.8494504690170288,
                    1.7707830667495728,
                    1.790449857711792,
                    1.82978355884552,
                    1.82978355884552,
                    1.790449857711792,
                    1.7117825746536255,
                    1.7511162757873535,
                    0.25643613934516907,
                    -1.0415756702423096,
                    -0.7859066724777222,
                    -0.8842409253120422,
                    -0.8449072241783142,
                    -0.8449072241783142,
                    -0.9039077758789062,
                    -0.7859066724777222,
                    -0.41223669052124023,
                    0.05976755917072296,
                    0.5514388084411621,
                    0.7087735533714294,
                    1.0824435949325562,
                    1.5347809791564941,
                    1.5937814712524414,
                    1.5741146802902222,
                    1.5347809791564941,
                    1.5151140689849854,
                    1.4757803678512573,
                    1.4954472780227661,
                    1.456113576889038,
                    1.5347809791564941,
                    1.1217772960662842
                ],
                [
                    1.2594451904296875,
                    1.869117259979248,
                    1.790449857711792,
                    1.7707830667495728,
                    1.8101167678833008,
                    1.82978355884552,
                    1.8101167678833008,
                    1.82978355884552,
                    1.5937814712524414,
                    -0.21556824445724487,
                    -1.5332467555999756,
                    -1.3365782499313354,
                    -1.2775777578353882,
                    -1.0612424612045288,
                    -0.9039077758789062,
                    -0.8252403736114502,
                    -0.8449072241783142,
                    -0.9039077758789062,
                    -1.0415756702423096,
                    -1.1989104747772217,
                    -1.257910966873169,
                    -0.8645740747451782,
                    0.02043387107551098,
                    0.7284404039382935,
                    1.1414440870285034,
                    1.4364467859268188,
                    1.6134482622146606,
                    1.6134482622146606,
                    1.5741146802902222,
                    1.5151140689849854,
                    1.5544477701187134,
                    1.1217772960662842
                ],
                [
                    1.2791119813919067,
                    1.82978355884552,
                    1.7117825746536255,
                    1.6921156644821167,
                    1.7314493656158447,
                    1.790449857711792,
                    1.7511162757873535,
                    1.7511162757873535,
                    0.6104393005371094,
                    -0.5499045848846436,
                    -1.2775777578353882,
                    -1.7692488431930542,
                    -1.4742462635040283,
                    -1.1989104747772217,
                    -1.1399098634719849,
                    -0.9039077758789062,
                    -0.8055735230445862,
                    -0.7662398815155029,
                    -0.7662398815155029,
                    -1.0022419691085815,
                    -1.3169114589691162,
                    -1.4939130544662476,
                    -1.1792436838150024,
                    -1.0022419691085815,
                    -0.8842409253120422,
                    -0.31390246748924255,
                    0.1777687668800354,
                    0.6891067028045654,
                    1.1414440870285034,
                    1.377446174621582,
                    1.5544477701187134,
                    1.1611108779907227
                ],
                [
                    1.2004445791244507,
                    1.7117825746536255,
                    1.6331151723861694,
                    1.6527819633483887,
                    1.6921156644821167,
                    1.7314493656158447,
                    1.7511162757873535,
                    1.5151140689849854,
                    0.4334377348423004,
                    0.19743561744689941,
                    0.3941040337085724,
                    -0.5105708837509155,
                    -1.5332467555999756,
                    -1.4349125623703003,
                    -1.5135798454284668,
                    -0.6482387781143188,
                    0.5317719578742981,
                    0.6891067028045654,
                    0.07943440228700638,
                    -1.0219087600708008,
                    -0.5105708837509155,
                    -0.21556824445724487,
                    -0.6875724792480469,
                    -1.1399098634719849,
                    -1.1005761623382568,
                    0.13843508064746857,
                    0.8267745971679688,
                    0.7677740454673767,
                    0.8857751488685608,
                    1.1414440870285034,
                    1.456113576889038,
                    1.0431098937988281
                ],
                [
                    1.1807777881622314,
                    1.7117825746536255,
                    1.6134482622146606,
                    1.6724488735198975,
                    1.7314493656158447,
                    1.7511162757873535,
                    1.7707830667495728,
                    1.7117825746536255,
                    1.6921156644821167,
                    1.6921156644821167,
                    1.7511162757873535,
                    1.338112473487854,
                    0.49243825674057007,
                    0.47277140617370605,
                    0.47277140617370605,
                    0.8464414477348328,
                    1.5151140689849854,
                    1.6724488735198975,
                    1.41677987575531,
                    0.6694398522377014,
                    0.8464414477348328,
                    1.1414440870285034,
                    1.1217772960662842,
                    0.7677740454673767,
                    0.7087735533714294,
                    1.1217772960662842,
                    1.377446174621582,
                    1.456113576889038,
                    1.41677987575531,
                    1.377446174621582,
                    1.4954472780227661,
                    1.0627766847610474
                ],
                [
                    1.0037761926651,
                    1.4364467859268188,
                    1.41677987575531,
                    1.3971130847930908,
                    1.3971130847930908,
                    1.3184456825256348,
                    1.2594451904296875,
                    1.2201114892959595,
                    1.2004445791244507,
                    1.1414440870285034,
                    1.1807777881622314,
                    1.1414440870285034,
                    1.0824435949325562,
                    1.0431098937988281,
                    1.0037761926651,
                    0.9841093420982361,
                    0.925108790397644,
                    0.8071077466011047,
                    0.8464414477348328,
                    0.9644424915313721,
                    0.925108790397644,
                    0.8464414477348328,
                    0.925108790397644,
                    1.0431098937988281,
                    1.0234429836273193,
                    0.8267745971679688,
                    0.6694398522377014,
                    0.6301061511039734,
                    0.6694398522377014,
                    0.7874408960342407,
                    1.0234429836273193,
                    0.6891067028045654
                ],
                [
                    -0.21556824445724487,
                    -0.29423561692237854,
                    -0.21556824445724487,
                    -0.3532361388206482,
                    -0.3925698399543762,
                    -0.4515703618526459,
                    -0.5105708837509155,
                    -0.5302377343177795,
                    -0.6089051365852356,
                    -0.6482387781143188,
                    -0.5695714354515076,
                    -0.7072393298149109,
                    -0.7662398815155029,
                    -0.7859066724777222,
                    -0.7072393298149109,
                    -0.3925698399543762,
                    -0.15656772255897522,
                    -0.21556824445724487,
                    -0.2352350950241089,
                    -0.21556824445724487,
                    -0.19590140879154205,
                    -0.15656772255897522,
                    -0.1369008719921112,
                    -0.09756718575954437,
                    -0.018899815157055855,
                    0.0007670287159271538,
                    0.02043387107551098,
                    0.0007670287159271538,
                    -0.03856665641069412,
                    -0.018899815157055855,
                    0.1777687668800354,
                    0.02043387107551098
                ],
                [
                    -0.11723402887582779,
                    -0.15656772255897522,
                    -0.19590140879154205,
                    -0.21556824445724487,
                    -0.19590140879154205,
                    -0.2352350950241089,
                    -0.19590140879154205,
                    -0.19590140879154205,
                    -0.2352350950241089,
                    -0.21556824445724487,
                    -0.2352350950241089,
                    -0.2549019455909729,
                    -0.2549019455909729,
                    -0.2745687663555145,
                    -0.2549019455909729,
                    -0.31390246748924255,
                    -0.15656772255897522,
                    -0.15656772255897522,
                    -0.29423561692237854,
                    -0.2549019455909729,
                    -0.2352350950241089,
                    -0.2745687663555145,
                    -0.3729029893875122,
                    -0.31390246748924255,
                    -0.2745687663555145,
                    -0.2549019455909729,
                    -0.21556824445724487,
                    -0.21556824445724487,
                    -0.4515703618526459,
                    -0.5499045848846436,
                    -0.4909040629863739,
                    -0.43190351128578186
                ],
                [
                    -0.19590140879154205,
                    -0.41223669052124023,
                    -0.3532361388206482,
                    -0.33356931805610657,
                    -0.33356931805610657,
                    -0.41223669052124023,
                    -0.5105708837509155,
                    -0.5892382860183716,
                    -0.5499045848846436,
                    -0.5695714354515076,
                    -0.6679056286811829,
                    -0.7465730309486389,
                    -0.8055735230445862,
                    -0.8842409253120422,
                    -0.8645740747451782,
                    -0.8842409253120422,
                    -0.8449072241783142,
                    -0.8645740747451782,
                    -1.0219087600708008,
                    -1.0809093713760376,
                    -1.1005761623382568,
                    -1.1399098634719849,
                    -1.1399098634719849,
                    -1.1399098634719849,
                    -1.1399098634719849,
                    -1.1202430725097656,
                    -1.1202430725097656,
                    -1.1399098634719849,
                    -1.2382441759109497,
                    -1.3365782499313354,
                    -1.0219087600708008,
                    -0.4515703618526459
                ],
                [
                    -0.7662398815155029,
                    -1.2382441759109497,
                    -1.1399098634719849,
                    -1.1595767736434937,
                    -1.1595767736434937,
                    -1.1595767736434937,
                    -1.1989104747772217,
                    -1.2382441759109497,
                    -1.1202430725097656,
                    -1.1595767736434937,
                    -1.218577265739441,
                    -1.3169114589691162,
                    -1.297244668006897,
                    -1.2382441759109497,
                    -1.218577265739441,
                    -1.1792436838150024,
                    -1.1595767736434937,
                    -1.1005761623382568,
                    -1.1399098634719849,
                    -1.257910966873169,
                    -1.3169114589691162,
                    -1.2775777578353882,
                    -1.257910966873169,
                    -1.2382441759109497,
                    -1.2775777578353882,
                    -1.297244668006897,
                    -1.3169114589691162,
                    -1.3169114589691162,
                    -1.3169114589691162,
                    -1.0022419691085815,
                    -0.11723402887582779,
                    0.09910139441490173
                ],
                [
                    -0.7859066724777222,
                    -1.257910966873169,
                    -1.1792436838150024,
                    -1.1989104747772217,
                    -1.1792436838150024,
                    -1.1399098634719849,
                    -1.218577265739441,
                    -1.1792436838150024,
                    -1.1005761623382568,
                    -1.1989104747772217,
                    -1.2382441759109497,
                    -1.297244668006897,
                    -1.2775777578353882,
                    -1.2775777578353882,
                    -1.2382441759109497,
                    -1.218577265739441,
                    -1.1399098634719849,
                    -1.0809093713760376,
                    -1.1595767736434937,
                    -1.1989104747772217,
                    -1.218577265739441,
                    -1.2382441759109497,
                    -1.1989104747772217,
                    -1.218577265739441,
                    -1.2775777578353882,
                    -1.2775777578353882,
                    -1.218577265739441,
                    -1.1399098634719849,
                    -0.6285719275474548,
                    0.25643613934516907,
                    0.2761029899120331,
                    -0.4712372124195099
                ],
                [
                    -0.8645740747451782,
                    -1.3759119510650635,
                    -1.218577265739441,
                    -1.297244668006897,
                    -1.3365782499313354,
                    -1.257910966873169,
                    -1.2775777578353882,
                    -1.2382441759109497,
                    -1.218577265739441,
                    -1.2382441759109497,
                    -1.297244668006897,
                    -1.3365782499313354,
                    -1.2382441759109497,
                    -1.1989104747772217,
                    -1.218577265739441,
                    -1.1792436838150024,
                    -1.1005761623382568,
                    -1.1792436838150024,
                    -1.2382441759109497,
                    -1.257910966873169,
                    -1.1989104747772217,
                    -1.1989104747772217,
                    -1.1595767736434937,
                    -1.1792436838150024,
                    -1.1989104747772217,
                    -1.2382441759109497,
                    -1.0219087600708008,
                    -0.2549019455909729,
                    0.37443721294403076,
                    -0.07790034264326096,
                    -0.8645740747451782,
                    -0.9629082679748535
                ],
                [
                    -0.8055735230445862,
                    -1.2775777578353882,
                    -1.1202430725097656,
                    -1.1399098634719849,
                    -1.1792436838150024,
                    -1.1989104747772217,
                    -1.1989104747772217,
                    -1.1989104747772217,
                    -1.1792436838150024,
                    -1.1989104747772217,
                    -1.1399098634719849,
                    -0.8645740747451782,
                    -0.8645740747451782,
                    -0.9235746264457703,
                    -0.9629082679748535,
                    -0.9039077758789062,
                    -0.7662398815155029,
                    -0.8449072241783142,
                    -0.8449072241783142,
                    -0.8842409253120422,
                    -0.9235746264457703,
                    -1.1792436838150024,
                    -1.1989104747772217,
                    -1.1399098634719849,
                    -1.1202430725097656,
                    -0.7269061803817749,
                    0.02043387107551098,
                    0.35477036237716675,
                    -0.41223669052124023,
                    -1.1202430725097656,
                    -1.1595767736434937,
                    -1.0612424612045288
                ],
                [
                    -0.8842409253120422,
                    -1.3955788612365723,
                    -1.2775777578353882,
                    -1.2775777578353882,
                    -1.2775777578353882,
                    -1.2775777578353882,
                    -1.257910966873169,
                    -1.297244668006897,
                    -1.2775777578353882,
                    -1.257910966873169,
                    -1.2775777578353882,
                    -1.0612424612045288,
                    -1.0219087600708008,
                    -1.0219087600708008,
                    -1.0415756702423096,
                    -1.0612424612045288,
                    -1.0022419691085815,
                    -1.0022419691085815,
                    -0.9825751185417175,
                    -0.9629082679748535,
                    -0.9825751185417175,
                    -1.1792436838150024,
                    -1.1792436838150024,
                    -1.0809093713760376,
                    -0.6482387781143188,
                    0.09910139441490173,
                    0.09910139441490173,
                    -0.6875724792480469,
                    -1.1202430725097656,
                    -1.1792436838150024,
                    -1.1399098634719849,
                    -1.0809093713760376
                ]
            ],
            [
                [
                    0.6856405138969421,
                    1.4270315170288086,
                    1.5440932512283325,
                    1.7782167196273804,
                    1.7196859121322632,
                    1.3489903211593628,
                    1.3099697828292847,
                    1.2904595136642456,
                    1.3294800519943237,
                    1.4660521745681763,
                    1.5440932512283325,
                    1.5245829820632935,
                    1.5245829820632935,
                    1.5245829820632935,
                    1.4660521745681763,
                    1.4660521745681763,
                    1.4075212478637695,
                    1.3880109786987305,
                    1.4660521745681763,
                    1.5245829820632935,
                    1.5440932512283325,
                    1.5440932512283325,
                    1.5245829820632935,
                    1.4855624437332153,
                    1.4270315170288086,
                    1.4270315170288086,
                    1.4465417861938477,
                    1.5831139087677002,
                    1.7196859121322632,
                    1.8562579154968262,
                    1.914788842201233,
                    1.114866852760315
                ],
                [
                    0.841722846031189,
                    1.7587064504623413,
                    1.97331964969635,
                    2.2074432373046875,
                    2.148912191390991,
                    1.4855624437332153,
                    1.2709492444992065,
                    1.2709492444992065,
                    1.2709492444992065,
                    1.4270315170288086,
                    1.5831139087677002,
                    1.5831139087677002,
                    1.4270315170288086,
                    1.4855624437332153,
                    1.2904595136642456,
                    1.3489903211593628,
                    1.4465417861938477,
                    1.3489903211593628,
                    1.3685007095336914,
                    1.3489903211593628,
                    1.3880109786987305,
                    1.5050727128982544,
                    1.4465417861938477,
                    1.4465417861938477,
                    1.4855624437332153,
                    1.5636035203933716,
                    1.8952784538269043,
                    2.148912191390991,
                    2.129401922225952,
                    2.109891653060913,
                    2.2074432373046875,
                    1.3489903211593628
                ],
                [
                    0.7636816501617432,
                    1.7001756429672241,
                    1.934299111366272,
                    2.051360845565796,
                    2.129401922225952,
                    1.934299111366272,
                    1.6026241779327393,
                    1.3685007095336914,
                    1.2319285869598389,
                    1.5831139087677002,
                    1.8952784538269043,
                    1.914788842201233,
                    1.836747646331787,
                    1.8757681846618652,
                    1.7587064504623413,
                    1.7196859121322632,
                    1.8562579154968262,
                    1.8562579154968262,
                    1.836747646331787,
                    1.8562579154968262,
                    1.8757681846618652,
                    1.914788842201233,
                    1.836747646331787,
                    1.836747646331787,
                    1.836747646331787,
                    1.934299111366272,
                    2.109891653060913,
                    2.129401922225952,
                    2.031850576400757,
                    1.97331964969635,
                    2.148912191390991,
                    1.3685007095336914
                ],
                [
                    1.01731538772583,
                    1.817237377166748,
                    1.8952784538269043,
                    2.109891653060913,
                    2.1879327297210693,
                    2.070871114730835,
                    1.7001756429672241,
                    0.334455281496048,
                    0.10033166408538818,
                    0.861233115196228,
                    1.01731538772583,
                    1.2319285869598389,
                    1.2514389753341675,
                    1.0368257761001587,
                    1.01731538772583,
                    1.114866852760315,
                    1.3489903211593628,
                    1.2514389753341675,
                    1.2514389753341675,
                    1.4075212478637695,
                    1.3880109786987305,
                    1.4075212478637695,
                    1.2904595136642456,
                    0.9978051781654358,
                    1.817237377166748,
                    2.2269535064697266,
                    2.070871114730835,
                    2.090381383895874,
                    2.148912191390991,
                    2.129401922225952,
                    2.2659740447998047,
                    1.4075212478637695
                ],
                [
                    1.0368257761001587,
                    1.7391961812973022,
                    1.7196859121322632,
                    2.031850576400757,
                    2.148912191390991,
                    2.1684224605560303,
                    1.953809380531311,
                    0.5490685105323792,
                    0.7636816501617432,
                    0.7441713809967041,
                    0.11984195560216904,
                    0.29543471336364746,
                    0.29543471336364746,
                    0.23690369725227356,
                    0.19788311421871185,
                    0.334455281496048,
                    0.3929861783981323,
                    0.3539655804634094,
                    0.3149450123310089,
                    0.47102731466293335,
                    0.43200674653053284,
                    0.43200674653053284,
                    0.5295581817626953,
                    0.1783728301525116,
                    1.4075212478637695,
                    2.2074432373046875,
                    2.031850576400757,
                    2.0123403072357178,
                    2.109891653060913,
                    2.070871114730835,
                    2.2074432373046875,
                    1.3880109786987305
                ],
                [
                    0.978294849395752,
                    1.7001756429672241,
                    1.7391961812973022,
                    2.0123403072357178,
                    2.070871114730835,
                    2.031850576400757,
                    1.8562579154968262,
                    0.9978051781654358,
                    1.6026241779327393,
                    1.3099697828292847,
                    0.8222125172615051,
                    1.2904595136642456,
                    1.2709492444992065,
                    0.9002537131309509,
                    0.9587845802307129,
                    1.1343772411346436,
                    1.5050727128982544,
                    1.5440932512283325,
                    1.4855624437332153,
                    1.7001756429672241,
                    1.5050727128982544,
                    1.5245829820632935,
                    1.6416447162628174,
                    1.4855624437332153,
                    1.914788842201233,
                    2.1684224605560303,
                    2.1684224605560303,
                    2.1684224605560303,
                    2.129401922225952,
                    2.1684224605560303,
                    2.304994583129883,
                    1.4465417861938477
                ],
                [
                    0.978294849395752,
                    1.6416447162628174,
                    1.6806652545928955,
                    2.0123403072357178,
                    2.0123403072357178,
                    1.953809380531311,
                    1.1343772411346436,
                    -0.19232268631458282,
                    0.861233115196228,
                    0.9978051781654358,
                    1.01731538772583,
                    1.1929080486297607,
                    0.9978051781654358,
                    0.5880890488624573,
                    0.724661111831665,
                    0.9002537131309509,
                    1.2514389753341675,
                    1.1538875102996826,
                    1.4660521745681763,
                    1.3294800519943237,
                    1.0953565835952759,
                    1.3489903211593628,
                    1.1538875102996826,
                    1.3880109786987305,
                    1.01731538772583,
                    1.2514389753341675,
                    2.070871114730835,
                    2.1879327297210693,
                    2.090381383895874,
                    2.148912191390991,
                    2.2854843139648438,
                    1.4465417861938477
                ],
                [
                    1.0758463144302368,
                    1.7001756429672241,
                    1.6611549854278564,
                    1.9928299188613892,
                    2.031850576400757,
                    1.7391961812973022,
                    0.6271096467971802,
                    -0.05575065314769745,
                    0.3929861783981323,
                    0.6856405138969421,
                    0.841722846031189,
                    0.5880890488624573,
                    0.8027022480964661,
                    0.5685787796974182,
                    0.5685787796974182,
                    0.5880890488624573,
                    0.6466199159622192,
                    0.5490685105323792,
                    0.6661302447319031,
                    0.5490685105323792,
                    0.256413996219635,
                    0.5295581817626953,
                    0.5490685105323792,
                    1.2124183177947998,
                    0.4515170454978943,
                    0.6856405138969421,
                    1.8562579154968262,
                    2.070871114730835,
                    2.0123403072357178,
                    2.070871114730835,
                    2.2269535064697266,
                    1.4075212478637695
                ],
                [
                    1.2319285869598389,
                    1.7977269887924194,
                    1.6611549854278564,
                    2.0123403072357178,
                    2.051360845565796,
                    1.7782167196273804,
                    1.5440932512283325,
                    1.6221344470977783,
                    1.3685007095336914,
                    1.3489903211593628,
                    1.4270315170288086,
                    1.3685007095336914,
                    1.5245829820632935,
                    1.4075212478637695,
                    1.4270315170288086,
                    1.4660521745681763,
                    1.5245829820632935,
                    1.5636035203933716,
                    1.5636035203933716,
                    1.5050727128982544,
                    1.2514389753341675,
                    1.4075212478637695,
                    1.4465417861938477,
                    1.6806652545928955,
                    1.5440932512283325,
                    1.6416447162628174,
                    1.953809380531311,
                    2.051360845565796,
                    2.051360845565796,
                    2.090381383895874,
                    2.2269535064697266,
                    1.3880109786987305
                ],
                [
                    1.4075212478637695,
                    1.914788842201233,
                    1.6221344470977783,
                    1.953809380531311,
                    1.97331964969635,
                    1.953809380531311,
                    2.070871114730835,
                    1.8757681846618652,
                    1.3880109786987305,
                    1.4270315170288086,
                    1.3294800519943237,
                    1.4075212478637695,
                    1.3294800519943237,
                    1.2904595136642456,
                    1.3880109786987305,
                    1.4075212478637695,
                    1.5440932512283325,
                    1.6416447162628174,
                    1.5831139087677002,
                    1.3685007095336914,
                    1.3099697828292847,
                    1.3294800519943237,
                    1.3294800519943237,
                    1.6416447162628174,
                    2.109891653060913,
                    2.109891653060913,
                    2.090381383895874,
                    2.129401922225952,
                    2.129401922225952,
                    2.109891653060913,
                    2.2074432373046875,
                    1.3489903211593628
                ],
                [
                    1.4465417861938477,
                    2.109891653060913,
                    1.6806652545928955,
                    1.9928299188613892,
                    1.97331964969635,
                    1.914788842201233,
                    1.953809380531311,
                    1.7587064504623413,
                    1.3099697828292847,
                    1.3685007095336914,
                    1.3294800519943237,
                    1.2124183177947998,
                    1.3099697828292847,
                    1.3685007095336914,
                    1.4465417861938477,
                    1.5050727128982544,
                    1.4660521745681763,
                    1.4075212478637695,
                    1.3685007095336914,
                    1.3880109786987305,
                    1.3294800519943237,
                    1.3685007095336914,
                    1.4075212478637695,
                    1.7001756429672241,
                    2.129401922225952,
                    2.090381383895874,
                    2.070871114730835,
                    2.051360845565796,
                    2.051360845565796,
                    2.070871114730835,
                    2.2074432373046875,
                    1.3685007095336914
                ],
                [
                    1.5050727128982544,
                    2.1879327297210693,
                    1.817237377166748,
                    2.148912191390991,
                    2.070871114730835,
                    1.8562579154968262,
                    1.97331964969635,
                    2.109891653060913,
                    2.0123403072357178,
                    1.97331964969635,
                    1.953809380531311,
                    1.97331964969635,
                    2.0123403072357178,
                    2.051360845565796,
                    2.129401922225952,
                    2.129401922225952,
                    2.129401922225952,
                    2.090381383895874,
                    2.051360845565796,
                    2.031850576400757,
                    1.9928299188613892,
                    1.953809380531311,
                    2.0123403072357178,
                    2.051360845565796,
                    2.051360845565796,
                    2.051360845565796,
                    2.0123403072357178,
                    1.953809380531311,
                    1.97331964969635,
                    2.051360845565796,
                    2.2074432373046875,
                    1.4075212478637695
                ],
                [
                    1.4465417861938477,
                    2.070871114730835,
                    1.914788842201233,
                    1.7977269887924194,
                    1.3099697828292847,
                    0.7636816501617432,
                    1.1343772411346436,
                    2.0123403072357178,
                    2.1879327297210693,
                    2.1684224605560303,
                    2.090381383895874,
                    2.070871114730835,
                    2.109891653060913,
                    2.129401922225952,
                    2.1684224605560303,
                    2.1879327297210693,
                    2.1684224605560303,
                    2.090381383895874,
                    2.070871114730835,
                    2.031850576400757,
                    2.0123403072357178,
                    2.051360845565796,
                    2.070871114730835,
                    2.031850576400757,
                    2.0123403072357178,
                    2.070871114730835,
                    2.109891653060913,
                    2.148912191390991,
                    2.148912191390991,
                    2.148912191390991,
                    2.2659740447998047,
                    1.4270315170288086
                ],
                [
                    1.4660521745681763,
                    2.129401922225952,
                    1.953809380531311,
                    1.5440932512283325,
                    0.841722846031189,
                    0.23690369725227356,
                    -0.2898741364479065,
                    0.022290505468845367,
                    0.841722846031189,
                    1.6416447162628174,
                    2.090381383895874,
                    2.090381383895874,
                    2.031850576400757,
                    2.070871114730835,
                    2.129401922225952,
                    2.1879327297210693,
                    2.1879327297210693,
                    2.148912191390991,
                    2.1684224605560303,
                    2.129401922225952,
                    2.070871114730835,
                    2.090381383895874,
                    2.148912191390991,
                    2.148912191390991,
                    2.129401922225952,
                    2.109891653060913,
                    2.109891653060913,
                    2.109891653060913,
                    2.090381383895874,
                    2.090381383895874,
                    2.1879327297210693,
                    1.3489903211593628
                ],
                [
                    1.4660521745681763,
                    2.1879327297210693,
                    2.109891653060913,
                    2.324504852294922,
                    2.070871114730835,
                    1.6026241779327393,
                    0.6271096467971802,
                    -0.4654667377471924,
                    -0.5825284719467163,
                    -0.01673007383942604,
                    0.91976398229599,
                    1.7196859121322632,
                    2.031850576400757,
                    2.148912191390991,
                    2.2074432373046875,
                    2.2269535064697266,
                    2.1879327297210693,
                    2.1684224605560303,
                    2.148912191390991,
                    2.070871114730835,
                    1.97331964969635,
                    1.97331964969635,
                    1.9928299188613892,
                    2.0123403072357178,
                    1.9928299188613892,
                    1.9928299188613892,
                    1.9928299188613892,
                    1.9928299188613892,
                    1.97331964969635,
                    2.031850576400757,
                    2.1684224605560303,
                    1.3294800519943237
                ],
                [
                    1.4270315170288086,
                    2.2464637756347656,
                    2.148912191390991,
                    2.344015121459961,
                    2.1684224605560303,
                    2.1684224605560303,
                    2.031850576400757,
                    1.2709492444992065,
                    0.022290505468845367,
                    -0.5044873356819153,
                    -0.15330210328102112,
                    0.6075993776321411,
                    1.5245829820632935,
                    2.090381383895874,
                    2.2269535064697266,
                    2.1684224605560303,
                    2.129401922225952,
                    2.051360845565796,
                    2.031850576400757,
                    2.0123403072357178,
                    1.953809380531311,
                    1.953809380531311,
                    2.0123403072357178,
                    2.051360845565796,
                    2.051360845565796,
                    2.090381383895874,
                    2.070871114730835,
                    2.031850576400757,
                    2.0123403072357178,
                    2.070871114730835,
                    2.1879327297210693,
                    1.3489903211593628
                ],
                [
                    1.4855624437332153,
                    2.324504852294922,
                    2.109891653060913,
                    2.324504852294922,
                    2.2269535064697266,
                    2.1879327297210693,
                    2.148912191390991,
                    2.1684224605560303,
                    1.3099697828292847,
                    -0.30938443541526794,
                    -0.6605696678161621,
                    -0.4459564685821533,
                    -0.15330210328102112,
                    0.6271096467971802,
                    1.5245829820632935,
                    2.0123403072357178,
                    2.148912191390991,
                    2.1684224605560303,
                    2.090381383895874,
                    2.031850576400757,
                    2.0123403072357178,
                    2.031850576400757,
                    2.031850576400757,
                    2.0123403072357178,
                    2.031850576400757,
                    2.090381383895874,
                    2.090381383895874,
                    2.090381383895874,
                    2.090381383895874,
                    2.070871114730835,
                    2.2074432373046875,
                    1.4465417861938477
                ],
                [
                    1.5050727128982544,
                    2.344015121459961,
                    2.090381383895874,
                    2.324504852294922,
                    2.2854843139648438,
                    2.2074432373046875,
                    2.1879327297210693,
                    2.090381383895874,
                    1.934299111366272,
                    0.3149450123310089,
                    -0.7971416711807251,
                    -0.6800799369812012,
                    -0.7581210732460022,
                    -0.6605696678161621,
                    -0.27036383748054504,
                    0.43200674653053284,
                    1.1538875102996826,
                    1.6806652545928955,
                    1.97331964969635,
                    2.070871114730835,
                    2.0123403072357178,
                    2.0123403072357178,
                    2.129401922225952,
                    2.109891653060913,
                    2.090381383895874,
                    2.090381383895874,
                    2.051360845565796,
                    2.051360845565796,
                    2.031850576400757,
                    2.051360845565796,
                    2.2074432373046875,
                    1.4660521745681763
                ],
                [
                    1.4660521745681763,
                    2.304994583129883,
                    2.0123403072357178,
                    2.2269535064697266,
                    2.2074432373046875,
                    2.1684224605560303,
                    2.1879327297210693,
                    2.070871114730835,
                    2.090381383895874,
                    0.5880890488624573,
                    -0.777631402015686,
                    -0.6605696678161621,
                    -0.777631402015686,
                    -0.7386108040809631,
                    -0.6995902061462402,
                    -0.7386108040809631,
                    -0.6020388007164001,
                    -0.27036383748054504,
                    0.29543471336364746,
                    0.91976398229599,
                    1.2124183177947998,
                    1.7001756429672241,
                    2.1684224605560303,
                    2.1879327297210693,
                    2.129401922225952,
                    2.070871114730835,
                    2.0123403072357178,
                    1.97331964969635,
                    1.97331964969635,
                    2.0123403072357178,
                    2.1684224605560303,
                    1.4270315170288086
                ],
                [
                    1.4270315170288086,
                    2.304994583129883,
                    1.97331964969635,
                    2.1684224605560303,
                    2.148912191390991,
                    2.1684224605560303,
                    2.2074432373046875,
                    2.1879327297210693,
                    1.934299111366272,
                    0.10033166408538818,
                    -1.2458784580230713,
                    -1.1288167238235474,
                    -1.0702857971191406,
                    -0.8751828074455261,
                    -0.7191005349159241,
                    -0.6215490698814392,
                    -0.6605696678161621,
                    -0.8166519403457642,
                    -0.9337137341499329,
                    -0.9922446608543396,
                    -0.9532240033149719,
                    -0.4459564685821533,
                    0.3734758794307709,
                    0.9392743110656738,
                    1.3685007095336914,
                    1.7587064504623413,
                    2.031850576400757,
                    2.129401922225952,
                    2.090381383895874,
                    2.090381383895874,
                    2.2074432373046875,
                    1.4465417861938477
                ],
                [
                    1.3489903211593628,
                    2.2854843139648438,
                    2.109891653060913,
                    2.129401922225952,
                    2.129401922225952,
                    2.2659740447998047,
                    2.2269535064697266,
                    2.1684224605560303,
                    0.9392743110656738,
                    -0.30938443541526794,
                    -1.0507755279541016,
                    -1.46049165725708,
                    -1.1873475313186646,
                    -0.914203405380249,
                    -0.89469313621521,
                    -0.6995902061462402,
                    -0.6410593390464783,
                    -0.6215490698814392,
                    -0.6020388007164001,
                    -0.8166519403457642,
                    -1.1093063354492188,
                    -1.2653887271881104,
                    -0.9922446608543396,
                    -0.914203405380249,
                    -0.7581210732460022,
                    -0.09477123618125916,
                    0.4905376136302948,
                    1.0563360452651978,
                    1.6416447162628174,
                    1.97331964969635,
                    2.129401922225952,
                    1.5831139087677002
                ],
                [
                    1.2124183177947998,
                    2.1879327297210693,
                    2.1879327297210693,
                    2.109891653060913,
                    2.109891653060913,
                    2.1879327297210693,
                    2.1879327297210693,
                    1.914788842201233,
                    0.8027022480964661,
                    0.4905376136302948,
                    0.7051507830619812,
                    -0.15330210328102112,
                    -1.1873475313186646,
                    -1.1093063354492188,
                    -1.2263681888580322,
                    -0.38742557168006897,
                    0.783191978931427,
                    0.91976398229599,
                    0.3149450123310089,
                    -0.7971416711807251,
                    -0.2898741364479065,
                    0.0027802155818790197,
                    -0.4654667377471924,
                    -0.914203405380249,
                    -0.8751828074455261,
                    0.3929861783981323,
                    1.114866852760315,
                    1.0758463144302368,
                    1.3489903211593628,
                    1.6221344470977783,
                    1.836747646331787,
                    1.4855624437332153
                ],
                [
                    1.1929080486297607,
                    2.1684224605560303,
                    2.1684224605560303,
                    2.129401922225952,
                    2.129401922225952,
                    2.109891653060913,
                    2.109891653060913,
                    2.109891653060913,
                    2.109891653060913,
                    2.148912191390991,
                    2.2269535064697266,
                    1.7587064504623413,
                    0.8807434439659119,
                    0.8807434439659119,
                    0.9002537131309509,
                    1.2709492444992065,
                    1.953809380531311,
                    2.070871114730835,
                    1.817237377166748,
                    1.0758463144302368,
                    1.2514389753341675,
                    1.5440932512283325,
                    1.5245829820632935,
                    1.1538875102996826,
                    1.114866852760315,
                    1.5831139087677002,
                    1.8757681846618652,
                    1.953809380531311,
                    1.9928299188613892,
                    1.8562579154968262,
                    1.8757681846618652,
                    1.4660521745681763
                ],
                [
                    1.01731538772583,
                    1.914788842201233,
                    1.97331964969635,
                    1.8562579154968262,
                    1.7977269887924194,
                    1.7587064504623413,
                    1.7001756429672241,
                    1.6611549854278564,
                    1.6611549854278564,
                    1.5831139087677002,
                    1.6221344470977783,
                    1.5636035203933716,
                    1.5245829820632935,
                    1.5440932512283325,
                    1.5636035203933716,
                    1.6026241779327393,
                    1.6026241779327393,
                    1.5636035203933716,
                    1.6026241779327393,
                    1.7196859121322632,
                    1.6806652545928955,
                    1.6026241779327393,
                    1.6806652545928955,
                    1.7782167196273804,
                    1.7977269887924194,
                    1.6221344470977783,
                    1.5245829820632935,
                    1.5050727128982544,
                    1.6221344470977783,
                    1.6221344470977783,
                    1.7001756429672241,
                    1.3099697828292847
                ],
                [
                    -0.250853568315506,
                    0.11984195560216904,
                    0.3149450123310089,
                    0.11984195560216904,
                    0.08082137256860733,
                    -0.036240365356206894,
                    -0.13379181921482086,
                    -0.15330210328102112,
                    -0.250853568315506,
                    -0.30938443541526794,
                    -0.23134326934814453,
                    -0.2898741364479065,
                    -0.30938443541526794,
                    -0.250853568315506,
                    -0.11428152769804001,
                    0.275924414396286,
                    0.5880890488624573,
                    0.6271096467971802,
                    0.6271096467971802,
                    0.6466199159622192,
                    0.6661302447319031,
                    0.7051507830619812,
                    0.7441713809967041,
                    0.861233115196228,
                    0.978294849395752,
                    1.01731538772583,
                    1.0563360452651978,
                    1.0563360452651978,
                    1.0563360452651978,
                    0.9978051781654358,
                    1.0368257761001587,
                    0.6271096467971802
                ],
                [
                    -0.05575065314769745,
                    0.3149450123310089,
                    0.3929861783981323,
                    0.3929861783981323,
                    0.47102731466293335,
                    0.43200674653053284,
                    0.4515170454978943,
                    0.43200674653053284,
                    0.3539655804634094,
                    0.3929861783981323,
                    0.334455281496048,
                    0.23690369725227356,
                    0.256413996219635,
                    0.275924414396286,
                    0.334455281496048,
                    0.334455281496048,
                    0.47102731466293335,
                    0.3929861783981323,
                    0.256413996219635,
                    0.29543471336364746,
                    0.29543471336364746,
                    0.275924414396286,
                    0.19788311421871185,
                    0.23690369725227356,
                    0.29543471336364746,
                    0.3149450123310089,
                    0.3539655804634094,
                    0.3539655804634094,
                    0.10033166408538818,
                    0.022290505468845367,
                    0.022290505468845367,
                    -0.34840500354766846
                ],
                [
                    -0.19232268631458282,
                    -0.01673007383942604,
                    0.11984195560216904,
                    0.11984195560216904,
                    0.15886253118515015,
                    0.08082137256860733,
                    -0.11428152769804001,
                    -0.27036383748054504,
                    -0.34840500354766846,
                    -0.4459564685821533,
                    -0.5630182027816772,
                    -0.48497703671455383,
                    -0.5044873356819153,
                    -0.5630182027816772,
                    -0.5239976048469543,
                    -0.5435079336166382,
                    -0.5435079336166382,
                    -0.6800799369812012,
                    -0.8556725382804871,
                    -0.914203405380249,
                    -0.9337137341499329,
                    -0.9532240033149719,
                    -0.9922446608543396,
                    -1.0507755279541016,
                    -1.0702857971191406,
                    -1.0507755279541016,
                    -1.0507755279541016,
                    -1.0702857971191406,
                    -1.1678372621536255,
                    -1.2458784580230713,
                    -0.9922446608543396,
                    -0.7581210732460022
                ],
                [
                    -1.0312652587890625,
                    -1.1483269929885864,
                    -1.0312652587890625,
                    -1.1093063354492188,
                    -1.0897960662841797,
                    -0.9922446608543396,
                    -1.0702857971191406,
                    -1.1678372621536255,
                    -1.1288167238235474,
                    -1.2263681888580322,
                    -1.304409384727478,
                    -1.304409384727478,
                    -1.284899115562439,
                    -1.2458784580230713,
                    -1.2653887271881104,
                    -1.2458784580230713,
                    -1.2263681888580322,
                    -1.1483269929885864,
                    -1.1873475313186646,
                    -1.304409384727478,
                    -1.3434299230575562,
                    -1.323919653892517,
                    -1.2458784580230713,
                    -1.1483269929885864,
                    -1.1678372621536255,
                    -1.2068578004837036,
                    -1.2068578004837036,
                    -1.2068578004837036,
                    -1.284899115562439,
                    -1.0897960662841797,
                    -0.19232268631458282,
                    -0.19232268631458282
                ],
                [
                    -0.89469313621521,
                    -1.0312652587890625,
                    -0.9532240033149719,
                    -1.0507755279541016,
                    -1.0117549896240234,
                    -1.0312652587890625,
                    -1.1483269929885864,
                    -1.1093063354492188,
                    -1.0312652587890625,
                    -1.1288167238235474,
                    -1.1483269929885864,
                    -1.0897960662841797,
                    -1.0702857971191406,
                    -1.1288167238235474,
                    -1.1288167238235474,
                    -1.1678372621536255,
                    -1.1093063354492188,
                    -1.0702857971191406,
                    -1.1483269929885864,
                    -1.2068578004837036,
                    -1.2263681888580322,
                    -1.2263681888580322,
                    -1.2068578004837036,
                    -1.2068578004837036,
                    -1.2263681888580322,
                    -1.1873475313186646,
                    -1.1483269929885864,
                    -1.1093063354492188,
                    -0.7581210732460022,
                    -0.01673007383942604,
                    0.11984195560216904,
                    -0.7581210732460022
                ],
                [
                    -1.0117549896240234,
                    -1.2068578004837036,
                    -1.0702857971191406,
                    -1.1873475313186646,
                    -1.1093063354492188,
                    -1.1093063354492188,
                    -1.2068578004837036,
                    -1.1678372621536255,
                    -1.1678372621536255,
                    -1.2458784580230713,
                    -1.284899115562439,
                    -1.2458784580230713,
                    -1.1093063354492188,
                    -1.1288167238235474,
                    -1.2068578004837036,
                    -1.1873475313186646,
                    -1.1093063354492188,
                    -1.1678372621536255,
                    -1.2068578004837036,
                    -1.2263681888580322,
                    -1.1678372621536255,
                    -1.1483269929885864,
                    -1.1873475313186646,
                    -1.284899115562439,
                    -1.2458784580230713,
                    -1.2068578004837036,
                    -1.0312652587890625,
                    -0.3679153025150299,
                    0.19788311421871185,
                    -0.250853568315506,
                    -1.0117549896240234,
                    -1.2458784580230713
                ],
                [
                    -1.0117549896240234,
                    -1.1873475313186646,
                    -1.0897960662841797,
                    -1.1483269929885864,
                    -1.0702857971191406,
                    -1.0312652587890625,
                    -1.0507755279541016,
                    -1.0507755279541016,
                    -1.1093063354492188,
                    -1.1483269929885864,
                    -1.0897960662841797,
                    -0.7581210732460022,
                    -0.7386108040809631,
                    -0.8166519403457642,
                    -0.89469313621521,
                    -0.8751828074455261,
                    -0.7581210732460022,
                    -0.777631402015686,
                    -0.7581210732460022,
                    -0.7971416711807251,
                    -0.8556725382804871,
                    -1.0897960662841797,
                    -1.1483269929885864,
                    -1.1873475313186646,
                    -1.2263681888580322,
                    -0.8751828074455261,
                    -0.13379181921482086,
                    0.256413996219635,
                    -0.4459564685821533,
                    -1.0897960662841797,
                    -1.1678372621536255,
                    -1.2263681888580322
                ],
                [
                    -0.972734272480011,
                    -1.2263681888580322,
                    -1.2263681888580322,
                    -1.323919653892517,
                    -1.2263681888580322,
                    -1.1288167238235474,
                    -1.1093063354492188,
                    -1.1873475313186646,
                    -1.2068578004837036,
                    -1.2263681888580322,
                    -1.2458784580230713,
                    -1.0117549896240234,
                    -0.972734272480011,
                    -1.0117549896240234,
                    -1.0507755279541016,
                    -1.1093063354492188,
                    -1.0507755279541016,
                    -1.0117549896240234,
                    -0.972734272480011,
                    -0.972734272480011,
                    -0.972734272480011,
                    -1.1873475313186646,
                    -1.2068578004837036,
                    -1.1483269929885864,
                    -0.8556725382804871,
                    -0.21183297038078308,
                    -0.17281238734722137,
                    -0.8166519403457642,
                    -1.1873475313186646,
                    -1.2458784580230713,
                    -1.2068578004837036,
                    -1.2458784580230713
                ]
            ]
        ]
    ]
}
docs/AKS-HCI/notebooks/distributed-cifar10/test_request_pytorch/cifar_test_input_img_2_ship_pytorch.json METASEP
{
    "instances": [
        [
            [
                [
                    0.6337511539459229,
                    0.6337511539459229,
                    0.2654377818107605,
                    0.12974336743354797,
                    0.7888305187225342,
                    1.0989891290664673,
                    1.1959137916564941,
                    1.312223196029663,
                    1.4285327196121216,
                    1.54484224319458,
                    1.6223819255828857,
                    1.5642271041870117,
                    1.7968461513519287,
                    1.893770694732666,
                    1.9713103771209717,
                    2.0294651985168457,
                    1.6999214887619019,
                    1.9519253969192505,
                    2.0488500595092773,
                    2.126389741897583,
                    2.1457746028900146,
                    2.068234920501709,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1457746028900146,
                    1.9519253969192505,
                    2.0294651985168457,
                    2.184544324874878,
                    2.068234920501709,
                    1.9906952381134033,
                    2.1651594638824463,
                    2.184544324874878
                ],
                [
                    0.8663701415061951,
                    0.9051399827003479,
                    0.4980567693710327,
                    0.22666795551776886,
                    0.9439098238945007,
                    1.312223196029663,
                    1.3897628784179688,
                    1.4285327196121216,
                    1.5642271041870117,
                    1.7386913299560547,
                    1.7774611711502075,
                    1.6417667865753174,
                    1.9325405359268188,
                    2.0488500595092773,
                    2.0876197814941406,
                    2.1651594638824463,
                    1.8162310123443604,
                    1.9906952381134033,
                    2.068234920501709,
                    2.2620840072631836,
                    2.3202388286590576,
                    2.1070048809051514,
                    2.1457746028900146,
                    2.2620840072631836,
                    2.242699146270752,
                    1.9906952381134033,
                    2.126389741897583,
                    2.2814691066741943,
                    2.0876197814941406,
                    2.068234920501709,
                    2.3396236896514893,
                    2.3396236896514893
                ],
                [
                    0.9439098238945007,
                    0.9826796650886536,
                    0.6143662929534912,
                    0.32359254360198975,
                    1.0796042680740356,
                    1.4673025608062744,
                    1.5642271041870117,
                    1.4285327196121216,
                    1.6223819255828857,
                    1.893770694732666,
                    1.7968461513519287,
                    1.6805366277694702,
                    1.9131556749343872,
                    2.0294651985168457,
                    2.0294651985168457,
                    2.2039294242858887,
                    1.8550008535385132,
                    1.9906952381134033,
                    2.0876197814941406,
                    2.2039294242858887,
                    2.068234920501709,
                    1.6999214887619019,
                    2.1457746028900146,
                    2.2814691066741943,
                    2.3202388286590576,
                    2.0488500595092773,
                    2.184544324874878,
                    2.3783936500549316,
                    2.1651594638824463,
                    2.0294651985168457,
                    2.417163372039795,
                    2.3202388286590576
                ],
                [
                    1.0602192878723145,
                    1.0214494466781616,
                    0.6725209951400757,
                    0.42051711678504944,
                    1.176528811454773,
                    1.5060724020004272,
                    1.6805366277694702,
                    1.583612084388733,
                    1.719306468963623,
                    1.9906952381134033,
                    1.8550008535385132,
                    1.719306468963623,
                    1.8356159925460815,
                    2.0488500595092773,
                    1.893770694732666,
                    2.2233142852783203,
                    1.9131556749343872,
                    1.9906952381134033,
                    2.0876197814941406,
                    1.9906952381134033,
                    1.00206458568573,
                    0.9051399827003479,
                    2.0294651985168457,
                    2.2814691066741943,
                    2.3783936500549316,
                    2.068234920501709,
                    2.184544324874878,
                    2.417163372039795,
                    2.184544324874878,
                    1.9906952381134033,
                    2.3977785110473633,
                    2.300853967666626
                ],
                [
                    1.176528811454773,
                    1.1571439504623413,
                    0.7694455981254578,
                    0.42051711678504944,
                    1.2346835136413574,
                    1.5254572629928589,
                    1.7774611711502075,
                    1.583612084388733,
                    1.6611517667770386,
                    2.0488500595092773,
                    1.8743858337402344,
                    1.719306468963623,
                    1.7968461513519287,
                    2.0488500595092773,
                    1.6611517667770386,
                    2.126389741897583,
                    1.9519253969192505,
                    1.9131556749343872,
                    2.068234920501709,
                    1.6805366277694702,
                    0.6531360745429993,
                    0.827600359916687,
                    1.9131556749343872,
                    2.1651594638824463,
                    2.3590087890625,
                    2.0488500595092773,
                    2.126389741897583,
                    2.3396236896514893,
                    2.068234920501709,
                    2.1070048809051514,
                    2.3783936500549316,
                    2.2620840072631836
                ],
                [
                    1.312223196029663,
                    1.2540684938430786,
                    0.8663701415061951,
                    0.32359254360198975,
                    1.2734533548355103,
                    1.5060724020004272,
                    1.8162310123443604,
                    1.6611517667770386,
                    1.7386913299560547,
                    2.1070048809051514,
                    1.8550008535385132,
                    1.719306468963623,
                    1.719306468963623,
                    1.9906952381134033,
                    1.4285327196121216,
                    1.54484224319458,
                    1.583612084388733,
                    1.5642271041870117,
                    2.126389741897583,
                    1.312223196029663,
                    -0.25795507431030273,
                    0.6337511539459229,
                    1.8743858337402344,
                    2.0294651985168457,
                    2.3202388286590576,
                    2.010080099105835,
                    1.9519253969192505,
                    2.242699146270752,
                    1.9906952381134033,
                    2.0488500595092773,
                    2.2814691066741943,
                    2.126389741897583
                ],
                [
                    1.370378017425537,
                    1.2734533548355103,
                    0.9051399827003479,
                    0.1491282880306244,
                    1.2734533548355103,
                    1.486687421798706,
                    1.8743858337402344,
                    1.7774611711502075,
                    1.893770694732666,
                    2.126389741897583,
                    1.7968461513519287,
                    1.719306468963623,
                    1.7386913299560547,
                    1.9713103771209717,
                    1.2152986526489258,
                    0.9826796650886536,
                    1.1959137916564941,
                    1.176528811454773,
                    1.54484224319458,
                    1.1959137916564941,
                    -0.10287576168775558,
                    0.22666795551776886,
                    0.9051399827003479,
                    1.1183741092681885,
                    1.8162310123443604,
                    1.893770694732666,
                    1.7580763101577759,
                    2.126389741897583,
                    1.9519253969192505,
                    1.9325405359268188,
                    2.2233142852783203,
                    2.126389741897583
                ],
                [
                    1.5254572629928589,
                    1.3897628784179688,
                    0.9439098238945007,
                    0.2848227024078369,
                    1.5060724020004272,
                    1.7968461513519287,
                    1.9131556749343872,
                    1.9131556749343872,
                    2.068234920501709,
                    2.1651594638824463,
                    1.8356159925460815,
                    1.8356159925460815,
                    1.8356159925460815,
                    1.8550008535385132,
                    1.4673025608062744,
                    1.54484224319458,
                    0.9051399827003479,
                    0.24605286121368408,
                    -0.49057406187057495,
                    -0.8201176524162292,
                    -1.0527366399765015,
                    -1.227200984954834,
                    -1.16904616355896,
                    -1.2659708261489868,
                    -0.4130344092845917,
                    1.0989891290664673,
                    1.6223819255828857,
                    1.9906952381134033,
                    1.7968461513519287,
                    1.6805366277694702,
                    2.2039294242858887,
                    2.1457746028900146
                ],
                [
                    0.9632947444915771,
                    0.8663701415061951,
                    0.6143662929534912,
                    0.22666795551776886,
                    0.9826796650886536,
                    1.176528811454773,
                    0.9632947444915771,
                    1.3897628784179688,
                    1.6223819255828857,
                    1.6805366277694702,
                    1.5642271041870117,
                    1.6417667865753174,
                    1.6805366277694702,
                    1.4673025608062744,
                    1.312223196029663,
                    1.312223196029663,
                    0.32359254360198975,
                    -0.39364948868751526,
                    -0.7038081288337708,
                    -0.6650383472442627,
                    -0.8007327318191528,
                    -0.8201176524162292,
                    -0.6068835854530334,
                    -1.0915064811706543,
                    -0.9170421957969666,
                    -0.08349084854125977,
                    0.7112908363342285,
                    1.1183741092681885,
                    0.9439098238945007,
                    0.7306757569313049,
                    1.583612084388733,
                    1.350993037223816
                ],
                [
                    -0.2191852629184723,
                    -0.19980034232139587,
                    -0.2385701686143875,
                    -0.4130344092845917,
                    -0.39364948868751526,
                    -0.3548796772956848,
                    -0.27733999490737915,
                    0.0522037111222744,
                    0.2654377818107605,
                    0.401132196187973,
                    0.4980567693710327,
                    0.5755964517593384,
                    0.6143662929534912,
                    0.42051711678504944,
                    0.4980567693710327,
                    0.4786718487739563,
                    -0.14164559543132782,
                    -0.49057406187057495,
                    -0.5099589824676514,
                    -0.5099589824676514,
                    -0.7813478112220764,
                    -0.761962890625,
                    -0.761962890625,
                    -0.8201176524162292,
                    0.2654377818107605,
                    0.0522037111222744,
                    0.556211531162262,
                    0.5368266105651855,
                    -0.14164559543132782,
                    -0.316109836101532,
                    0.12974336743354797,
                    -0.04472101479768753
                ],
                [
                    -1.1496611833572388,
                    -0.9558120369911194,
                    -0.9751969575881958,
                    -1.110891342163086,
                    -0.8201176524162292,
                    -0.6844232082366943,
                    -0.8007327318191528,
                    -0.6844232082366943,
                    -0.6262685060501099,
                    -0.37426456809043884,
                    -0.4518042504787445,
                    -0.4324193298816681,
                    -0.37426456809043884,
                    -0.3548796772956848,
                    -0.2191852629184723,
                    -0.3354947566986084,
                    -0.6844232082366943,
                    -0.6844232082366943,
                    -0.6650383472442627,
                    -0.7813478112220764,
                    -1.0333516597747803,
                    -1.1496611833572388,
                    -0.587498664855957,
                    -0.2191852629184723,
                    0.0522037111222744,
                    -0.29672491550445557,
                    0.42051711678504944,
                    1.4285327196121216,
                    -0.005951183382421732,
                    -0.4324193298816681,
                    -0.6456534266471863,
                    -0.6068835854530334
                ],
                [
                    -1.401665210723877,
                    -1.16904616355896,
                    -0.9751969575881958,
                    -0.936427116394043,
                    -0.27733999490737915,
                    -0.37426456809043884,
                    -0.7813478112220764,
                    -1.072121500968933,
                    -0.6262685060501099,
                    -0.2385701686143875,
                    -0.587498664855957,
                    -0.6262685060501099,
                    -0.3354947566986084,
                    -0.19980034232139587,
                    -0.3548796772956848,
                    -0.5487288236618042,
                    -0.5293439030647278,
                    -0.587498664855957,
                    -0.5293439030647278,
                    -0.5487288236618042,
                    -0.6844232082366943,
                    -0.7813478112220764,
                    0.4592869281768799,
                    1.1959137916564941,
                    1.0408344268798828,
                    0.401132196187973,
                    -0.25795507431030273,
                    1.5254572629928589,
                    0.556211531162262,
                    -0.587498664855957,
                    -0.7425779700279236,
                    -0.7813478112220764
                ],
                [
                    -1.3047406673431396,
                    -0.761962890625,
                    -0.6068835854530334,
                    -0.9945818781852722,
                    -0.49057406187057495,
                    -0.49057406187057495,
                    -0.936427116394043,
                    -0.7813478112220764,
                    -0.10287576168775558,
                    0.1491282880306244,
                    0.03281864896416664,
                    -0.3354947566986084,
                    -0.39364948868751526,
                    -0.29672491550445557,
                    -0.5293439030647278,
                    -0.7425779700279236,
                    -0.8588874936103821,
                    -0.8588874936103821,
                    -0.7425779700279236,
                    -0.587498664855957,
                    -0.587498664855957,
                    -0.25795507431030273,
                    0.8663701415061951,
                    1.350993037223816,
                    1.6029969453811646,
                    1.312223196029663,
                    0.03281864896416664,
                    0.9245249032974243,
                    1.0214494466781616,
                    -0.8782724142074585,
                    -0.7813478112220764,
                    -0.8976573348045349
                ],
                [
                    -0.9945818781852722,
                    -0.7038081288337708,
                    -0.7425779700279236,
                    -0.9751969575881958,
                    -0.8395025730133057,
                    -1.110891342163086,
                    -1.0527366399765015,
                    -0.8782724142074585,
                    -0.7038081288337708,
                    -0.4324193298816681,
                    -0.14164559543132782,
                    -0.27733999490737915,
                    -0.4711891710758209,
                    -0.37426456809043884,
                    -0.39364948868751526,
                    -0.5293439030647278,
                    -0.5681137442588806,
                    -0.5293439030647278,
                    -0.5293439030647278,
                    -0.316109836101532,
                    -0.2191852629184723,
                    0.32359254360198975,
                    1.0602192878723145,
                    1.1377589702606201,
                    1.2734533548355103,
                    1.2928383350372314,
                    0.6725209951400757,
                    0.12974336743354797,
                    0.8663701415061951,
                    -0.8782724142074585,
                    -1.2659708261489868,
                    -1.1302763223648071
                ],
                [
                    -0.936427116394043,
                    -0.8976573348045349,
                    -0.8395025730133057,
                    -0.9170421957969666,
                    -0.8976573348045349,
                    -1.0333516597747803,
                    -1.072121500968933,
                    -0.761962890625,
                    -0.316109836101532,
                    -0.08349084854125977,
                    0.07158862799406052,
                    0.1491282880306244,
                    0.22666795551776886,
                    0.20728303492069244,
                    0.18789811432361603,
                    0.11035845428705215,
                    0.401132196187973,
                    0.43990203738212585,
                    0.401132196187973,
                    0.4786718487739563,
                    0.43990203738212585,
                    0.7306757569313049,
                    1.0408344268798828,
                    1.0796042680740356,
                    1.1571439504623413,
                    0.9826796650886536,
                    0.8663701415061951,
                    -0.4711891710758209,
                    -0.6844232082366943,
                    -1.0139667987823486,
                    -1.3628954887390137,
                    -1.285355806350708
                ],
                [
                    -0.5681137442588806,
                    -0.6068835854530334,
                    -0.37426456809043884,
                    -0.4130344092845917,
                    -0.316109836101532,
                    0.11035845428705215,
                    0.12974336743354797,
                    0.24605286121368408,
                    0.3623623549938202,
                    0.5174416899681091,
                    0.5755964517593384,
                    0.556211531162262,
                    0.5755964517593384,
                    0.5755964517593384,
                    0.6337511539459229,
                    0.43990203738212585,
                    0.4786718487739563,
                    0.6143662929534912,
                    0.5949813723564148,
                    0.401132196187973,
                    -0.1222606748342514,
                    0.09097354114055634,
                    0.401132196187973,
                    0.8469852805137634,
                    1.00206458568573,
                    0.827600359916687,
                    0.8082154393196106,
                    -0.39364948868751526,
                    -1.0915064811706543,
                    -0.5293439030647278,
                    -0.761962890625,
                    -1.0333516597747803
                ],
                [
                    -0.37426456809043884,
                    -0.4711891710758209,
                    -0.19980034232139587,
                    0.11035845428705215,
                    0.07158862799406052,
                    0.18789811432361603,
                    0.3623623549938202,
                    0.3429774343967438,
                    0.401132196187973,
                    0.4786718487739563,
                    0.556211531162262,
                    0.556211531162262,
                    0.556211531162262,
                    0.5368266105651855,
                    0.4980567693710327,
                    0.3623623549938202,
                    0.09097354114055634,
                    0.1685132086277008,
                    0.2654377818107605,
                    0.03281864896416664,
                    -0.6068835854530334,
                    -0.16103051602840424,
                    0.401132196187973,
                    0.6531360745429993,
                    0.8082154393196106,
                    0.7306757569313049,
                    0.7112908363342285,
                    0.12974336743354797,
                    0.3623623549938202,
                    1.2928383350372314,
                    0.556211531162262,
                    -0.39364948868751526
                ],
                [
                    -0.587498664855957,
                    -0.3354947566986084,
                    -0.14164559543132782,
                    -0.316109836101532,
                    -0.587498664855957,
                    -0.6262685060501099,
                    0.07158862799406052,
                    0.3817472755908966,
                    0.4592869281768799,
                    0.4980567693710327,
                    0.4786718487739563,
                    0.3623623549938202,
                    0.1685132086277008,
                    0.013433732092380524,
                    -0.06410592794418335,
                    -0.04472101479768753,
                    -0.06410592794418335,
                    0.1491282880306244,
                    0.5755964517593384,
                    0.43990203738212585,
                    0.11035845428705215,
                    0.42051711678504944,
                    0.7112908363342285,
                    0.5949813723564148,
                    0.6143662929534912,
                    0.4980567693710327,
                    0.5368266105651855,
                    0.4592869281768799,
                    0.6531360745429993,
                    0.7500606775283813,
                    0.6143662929534912,
                    0.43990203738212585
                ],
                [
                    -0.4518042504787445,
                    -0.7038081288337708,
                    -1.0139667987823486,
                    -1.072121500968933,
                    -0.761962890625,
                    -0.27733999490737915,
                    -0.04472101479768753,
                    0.2848227024078369,
                    0.3429774343967438,
                    0.07158862799406052,
                    -0.10287576168775558,
                    -0.16103051602840424,
                    -0.10287576168775558,
                    0.013433732092380524,
                    0.1491282880306244,
                    0.30420762300491333,
                    0.4786718487739563,
                    0.32359254360198975,
                    0.5368266105651855,
                    0.6531360745429993,
                    0.4980567693710327,
                    0.6143662929534912,
                    0.7694455981254578,
                    0.6919059157371521,
                    0.5368266105651855,
                    0.5174416899681091,
                    0.556211531162262,
                    0.3623623549938202,
                    0.11035845428705215,
                    -0.08349084854125977,
                    -0.005951183382421732,
                    0.4592869281768799
                ],
                [
                    -0.761962890625,
                    -1.2465859651565552,
                    -1.0527366399765015,
                    -0.29672491550445557,
                    0.0522037111222744,
                    0.24605286121368408,
                    0.09097354114055634,
                    -0.04472101479768753,
                    -0.14164559543132782,
                    -0.3354947566986084,
                    -0.14164559543132782,
                    0.12974336743354797,
                    0.3429774343967438,
                    0.5174416899681091,
                    0.5949813723564148,
                    0.5368266105651855,
                    0.4592869281768799,
                    0.22666795551776886,
                    0.3817472755908966,
                    0.556211531162262,
                    0.5368266105651855,
                    0.556211531162262,
                    0.6725209951400757,
                    0.7500606775283813,
                    0.5174416899681091,
                    0.3623623549938202,
                    -0.005951183382421732,
                    -0.39364948868751526,
                    -0.6456534266471863,
                    -0.9751969575881958,
                    -0.761962890625,
                    0.12974336743354797
                ],
                [
                    -0.4130344092845917,
                    -0.4324193298816681,
                    -0.3548796772956848,
                    -0.2191852629184723,
                    -0.19980034232139587,
                    -0.18041542172431946,
                    -0.04472101479768753,
                    -0.14164559543132782,
                    -0.18041542172431946,
                    0.1685132086277008,
                    0.30420762300491333,
                    0.3623623549938202,
                    0.3429774343967438,
                    0.30420762300491333,
                    0.1491282880306244,
                    -0.16103051602840424,
                    -0.5293439030647278,
                    -0.7038081288337708,
                    0.09097354114055634,
                    0.4786718487739563,
                    0.4980567693710327,
                    0.556211531162262,
                    0.5174416899681091,
                    0.3817472755908966,
                    -0.16103051602840424,
                    -0.5681137442588806,
                    -0.6844232082366943,
                    -0.8782724142074585,
                    -1.16904616355896,
                    -1.0527366399765015,
                    -1.0139667987823486,
                    -1.16904616355896
                ],
                [
                    -0.5099589824676514,
                    -0.3548796772956848,
                    -0.27733999490737915,
                    -0.27733999490737915,
                    -0.2191852629184723,
                    -0.1222606748342514,
                    -0.005951183382421732,
                    0.013433732092380524,
                    -0.16103051602840424,
                    -0.005951183382421732,
                    -0.005951183382421732,
                    0.07158862799406052,
                    0.11035845428705215,
                    0.09097354114055634,
                    -0.6650383472442627,
                    -1.2465859651565552,
                    -1.3241256475448608,
                    -1.3435105085372925,
                    -0.19980034232139587,
                    0.43990203738212585,
                    0.2654377818107605,
                    0.09097354114055634,
                    -0.2191852629184723,
                    -0.587498664855957,
                    -0.761962890625,
                    -0.8201176524162292,
                    -1.0139667987823486,
                    -1.3047406673431396,
                    -1.2659708261489868,
                    -0.9751969575881958,
                    -1.4404350519180298,
                    -1.9056730270385742
                ],
                [
                    -1.227200984954834,
                    -0.4130344092845917,
                    -0.18041542172431946,
                    -0.2191852629184723,
                    -0.18041542172431946,
                    -0.16103051602840424,
                    -0.4518042504787445,
                    -0.6650383472442627,
                    -0.8007327318191528,
                    -0.8588874936103821,
                    -0.9170421957969666,
                    -0.25795507431030273,
                    0.1491282880306244,
                    0.09097354114055634,
                    -0.5681137442588806,
                    -0.9558120369911194,
                    -0.8201176524162292,
                    -0.761962890625,
                    -0.3548796772956848,
                    -0.3354947566986084,
                    -0.5681137442588806,
                    -0.7231930494308472,
                    -0.8201176524162292,
                    -0.8588874936103821,
                    -1.072121500968933,
                    -1.2465859651565552,
                    -1.4404350519180298,
                    -1.5567445755004883,
                    -1.4210501909255981,
                    -1.5373597145080566,
                    -1.8475183248519897,
                    -1.9638278484344482
                ],
                [
                    -1.3241256475448608,
                    -0.5681137442588806,
                    -0.37426456809043884,
                    -0.39364948868751526,
                    -0.3548796772956848,
                    -0.4130344092845917,
                    -1.16904616355896,
                    -1.401665210723877,
                    -1.285355806350708,
                    -1.1884310245513916,
                    -1.110891342163086,
                    -0.29672491550445557,
                    0.18789811432361603,
                    0.1491282880306244,
                    -0.19980034232139587,
                    -0.5293439030647278,
                    -0.7231930494308472,
                    -0.8976573348045349,
                    -0.9170421957969666,
                    -0.8782724142074585,
                    -0.8588874936103821,
                    -0.8782724142074585,
                    -1.072121500968933,
                    -1.3628954887390137,
                    -1.5761295557022095,
                    -1.4792048931121826,
                    -1.5567445755004883,
                    -1.634284257888794,
                    -1.769978642463684,
                    -1.8475183248519897,
                    -1.9056730270385742,
                    -1.9638278484344482
                ],
                [
                    -1.16904616355896,
                    -0.6844232082366943,
                    -0.4130344092845917,
                    -0.39364948868751526,
                    -0.316109836101532,
                    -0.316109836101532,
                    -0.8976573348045349,
                    -1.0139667987823486,
                    -0.7813478112220764,
                    -0.7231930494308472,
                    -0.5293439030647278,
                    -0.37426456809043884,
                    -0.5293439030647278,
                    -0.8201176524162292,
                    -1.110891342163086,
                    -1.16904616355896,
                    -1.072121500968933,
                    -0.9945818781852722,
                    -0.8588874936103821,
                    -0.8395025730133057,
                    -1.0333516597747803,
                    -1.4404350519180298,
                    -1.634284257888794,
                    -1.5761295557022095,
                    -1.2465859651565552,
                    -1.3628954887390137,
                    -1.6730540990829468,
                    -1.7505937814712524,
                    -1.808748483657837,
                    -1.8475183248519897,
                    -1.9056730270385742,
                    -1.944442868232727
                ],
                [
                    -1.1302763223648071,
                    -0.7425779700279236,
                    -0.39364948868751526,
                    -0.4324193298816681,
                    -0.4518042504787445,
                    -0.5099589824676514,
                    -0.7231930494308472,
                    -0.8588874936103821,
                    -0.9558120369911194,
                    -1.0915064811706543,
                    -1.285355806350708,
                    -1.3241256475448608,
                    -1.3047406673431396,
                    -1.2078160047531128,
                    -1.1496611833572388,
                    -1.072121500968933,
                    -1.0333516597747803,
                    -1.110891342163086,
                    -1.227200984954834,
                    -1.3822803497314453,
                    -1.5373597145080566,
                    -1.5179747343063354,
                    -1.4792048931121826,
                    -1.5761295557022095,
                    -1.3435105085372925,
                    -1.5373597145080566,
                    -1.8475183248519897,
                    -1.8862881660461426,
                    -1.8669031858444214,
                    -1.944442868232727,
                    -1.9638278484344482,
                    -1.8475183248519897
                ],
                [
                    -1.3822803497314453,
                    -1.3047406673431396,
                    -1.16904616355896,
                    -1.3047406673431396,
                    -1.3628954887390137,
                    -1.459820032119751,
                    -1.5567445755004883,
                    -1.5761295557022095,
                    -1.5373597145080566,
                    -1.4404350519180298,
                    -1.3628954887390137,
                    -1.3047406673431396,
                    -1.227200984954834,
                    -1.1884310245513916,
                    -1.227200984954834,
                    -1.3047406673431396,
                    -1.4404350519180298,
                    -1.6924389600753784,
                    -1.7118239402770996,
                    -1.4985898733139038,
                    -1.4792048931121826,
                    -1.4985898733139038,
                    -1.6148992776870728,
                    -1.6924389600753784,
                    -1.634284257888794,
                    -1.808748483657837,
                    -1.9056730270385742,
                    -1.8862881660461426,
                    -1.9056730270385742,
                    -1.944442868232727,
                    -1.8862881660461426,
                    -1.828133463859558
                ],
                [
                    -1.8475183248519897,
                    -1.8669031858444214,
                    -1.9250580072402954,
                    -1.9056730270385742,
                    -1.828133463859558,
                    -1.808748483657837,
                    -1.7893636226654053,
                    -1.6730540990829468,
                    -1.4792048931121826,
                    -1.4210501909255981,
                    -1.401665210723877,
                    -1.4404350519180298,
                    -1.5373597145080566,
                    -1.6536691188812256,
                    -1.6924389600753784,
                    -1.6536691188812256,
                    -1.6924389600753784,
                    -1.5761295557022095,
                    -1.1496611833572388,
                    -1.3628954887390137,
                    -1.634284257888794,
                    -1.7118239402770996,
                    -1.7312088012695312,
                    -1.7118239402770996,
                    -1.828133463859558,
                    -1.9056730270385742,
                    -1.9250580072402954,
                    -1.9056730270385742,
                    -1.8862881660461426,
                    -1.8475183248519897,
                    -1.7893636226654053,
                    -1.9832127094268799
                ],
                [
                    -1.7893636226654053,
                    -1.828133463859558,
                    -1.9056730270385742,
                    -1.8862881660461426,
                    -1.8862881660461426,
                    -1.8475183248519897,
                    -1.828133463859558,
                    -1.808748483657837,
                    -1.7505937814712524,
                    -1.7893636226654053,
                    -1.8475183248519897,
                    -1.8475183248519897,
                    -1.769978642463684,
                    -1.6730540990829468,
                    -1.634284257888794,
                    -1.5567445755004883,
                    -1.6148992776870728,
                    -1.4210501909255981,
                    -1.0139667987823486,
                    -1.4792048931121826,
                    -1.8475183248519897,
                    -1.7505937814712524,
                    -1.6924389600753784,
                    -1.808748483657837,
                    -1.9056730270385742,
                    -1.9250580072402954,
                    -1.9056730270385742,
                    -1.8669031858444214,
                    -1.8475183248519897,
                    -1.6924389600753784,
                    -1.9250580072402954,
                    -2.1770617961883545
                ],
                [
                    -1.828133463859558,
                    -1.8475183248519897,
                    -1.9250580072402954,
                    -1.9250580072402954,
                    -1.944442868232727,
                    -1.944442868232727,
                    -1.9250580072402954,
                    -1.9056730270385742,
                    -1.8669031858444214,
                    -1.808748483657837,
                    -1.7118239402770996,
                    -1.6536691188812256,
                    -1.6148992776870728,
                    -1.634284257888794,
                    -1.6536691188812256,
                    -1.6148992776870728,
                    -1.6730540990829468,
                    -1.5373597145080566,
                    -1.1884310245513916,
                    -1.6924389600753784,
                    -1.8862881660461426,
                    -1.7312088012695312,
                    -1.8475183248519897,
                    -1.8669031858444214,
                    -1.9250580072402954,
                    -1.944442868232727,
                    -1.9056730270385742,
                    -1.8862881660461426,
                    -1.7893636226654053,
                    -1.7118239402770996,
                    -2.25460147857666,
                    -2.3515260219573975
                ],
                [
                    -1.9832127094268799,
                    -1.9056730270385742,
                    -1.944442868232727,
                    -1.8862881660461426,
                    -1.8475183248519897,
                    -1.808748483657837,
                    -1.769978642463684,
                    -1.7118239402770996,
                    -1.6730540990829468,
                    -1.6730540990829468,
                    -1.6536691188812256,
                    -1.6730540990829468,
                    -1.6924389600753784,
                    -1.7505937814712524,
                    -1.8475183248519897,
                    -1.7893636226654053,
                    -1.8862881660461426,
                    -1.7312088012695312,
                    -1.3241256475448608,
                    -1.7312088012695312,
                    -1.8475183248519897,
                    -1.8669031858444214,
                    -1.8669031858444214,
                    -1.8669031858444214,
                    -1.9638278484344482,
                    -1.9638278484344482,
                    -1.9832127094268799,
                    -1.9056730270385742,
                    -1.7312088012695312,
                    -2.0607523918151855,
                    -2.3515260219573975,
                    -2.332141160964966
                ],
                [
                    -1.8862881660461426,
                    -1.8475183248519897,
                    -1.808748483657837,
                    -1.769978642463684,
                    -1.7893636226654053,
                    -1.769978642463684,
                    -1.7505937814712524,
                    -1.7118239402770996,
                    -1.6924389600753784,
                    -1.6924389600753784,
                    -1.7312088012695312,
                    -1.769978642463684,
                    -1.8475183248519897,
                    -1.9638278484344482,
                    -2.138292074203491,
                    -2.1964468955993652,
                    -2.273986577987671,
                    -2.0607523918151855,
                    -1.5567445755004883,
                    -1.808748483657837,
                    -1.944442868232727,
                    -1.9056730270385742,
                    -1.9056730270385742,
                    -1.8862881660461426,
                    -1.9638278484344482,
                    -2.0219826698303223,
                    -2.041367530822754,
                    -1.769978642463684,
                    -1.944442868232727,
                    -2.332141160964966,
                    -2.3515260219573975,
                    -2.2933714389801025
                ]
            ],
            [
                [
                    1.3184456825256348,
                    1.2594451904296875,
                    0.8464414477348328,
                    0.6891067028045654,
                    1.377446174621582,
                    1.6724488735198975,
                    1.7314493656158447,
                    1.82978355884552,
                    1.8887841701507568,
                    1.9281178712844849,
                    1.947784662246704,
                    1.869117259979248,
                    2.0854525566101074,
                    2.1444530487060547,
                    2.203453540802002,
                    2.2427873611450195,
                    1.908450961112976,
                    2.1641199588775635,
                    2.262454032897949,
                    2.282120943069458,
                    2.3214547634124756,
                    2.282120943069458,
                    2.3214547634124756,
                    2.3214547634124756,
                    2.3411214351654053,
                    2.124786138534546,
                    2.203453540802002,
                    2.360788345336914,
                    2.2427873611450195,
                    2.124786138534546,
                    2.282120943069458,
                    2.3214547634124756
                ],
                [
                    1.5151140689849854,
                    1.4954472780227661,
                    1.0431098937988281,
                    0.7284404039382935,
                    1.4954472780227661,
                    1.8494504690170288,
                    1.869117259979248,
                    1.869117259979248,
                    1.9674514532089233,
                    2.0854525566101074,
                    2.0854525566101074,
                    1.8887841701507568,
                    2.1641199588775635,
                    2.262454032897949,
                    2.282120943069458,
                    2.360788345336914,
                    2.0067851543426514,
                    2.1837868690490723,
                    2.262454032897949,
                    2.4001221656799316,
                    2.43945574760437,
                    2.2427873611450195,
                    2.282120943069458,
                    2.4001221656799316,
                    2.4001221656799316,
                    2.1641199588775635,
                    2.282120943069458,
                    2.459122657775879,
                    2.2231204509735107,
                    2.1444530487060547,
                    2.4197888374328613,
                    2.43945574760437
                ],
                [
                    1.5347809791564941,
                    1.5151140689849854,
                    1.1021103858947754,
                    0.7677740454673767,
                    1.5347809791564941,
                    1.908450961112976,
                    1.9674514532089233,
                    1.790449857711792,
                    1.9281178712844849,
                    2.1641199588775635,
                    2.02645206451416,
                    1.8887841701507568,
                    2.0854525566101074,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.380455255508423,
                    2.02645206451416,
                    2.1641199588775635,
                    2.262454032897949,
                    2.360788345336914,
                    2.203453540802002,
                    1.790449857711792,
                    2.1837868690490723,
                    2.3214547634124756,
                    2.43945574760437,
                    2.1641199588775635,
                    2.301787853240967,
                    2.4984562397003174,
                    2.262454032897949,
                    2.0854525566101074,
                    2.4787893295288086,
                    2.380455255508423
                ],
                [
                    1.5741146802902222,
                    1.4954472780227661,
                    1.1021103858947754,
                    0.8071077466011047,
                    1.5347809791564941,
                    1.8494504690170288,
                    2.0067851543426514,
                    1.8494504690170288,
                    1.9674514532089233,
                    2.203453540802002,
                    2.046118974685669,
                    1.8494504690170288,
                    1.9281178712844849,
                    2.1444530487060547,
                    2.02645206451416,
                    2.380455255508423,
                    2.0657856464385986,
                    2.124786138534546,
                    2.2427873611450195,
                    2.203453540802002,
                    1.2004445791244507,
                    1.0234429836273193,
                    2.0657856464385986,
                    2.3214547634124756,
                    2.459122657775879,
                    2.1444530487060547,
                    2.262454032897949,
                    2.4984562397003174,
                    2.2427873611450195,
                    2.046118974685669,
                    2.43945574760437,
                    2.3411214351654053
                ],
                [
                    1.6527819633483887,
                    1.5937814712524414,
                    1.1414440870285034,
                    0.7481071949005127,
                    1.5347809791564941,
                    1.790449857711792,
                    2.0067851543426514,
                    1.7707830667495728,
                    1.8101167678833008,
                    2.2427873611450195,
                    2.02645206451416,
                    1.8101167678833008,
                    1.8494504690170288,
                    2.0854525566101074,
                    1.7511162757873535,
                    2.2231204509735107,
                    2.046118974685669,
                    2.0067851543426514,
                    2.2231204509735107,
                    2.0067851543426514,
                    0.925108790397644,
                    1.0037761926651,
                    1.9871183633804321,
                    2.2231204509735107,
                    2.43945574760437,
                    2.124786138534546,
                    2.203453540802002,
                    2.4197888374328613,
                    2.124786138534546,
                    2.124786138534546,
                    2.4001221656799316,
                    2.282120943069458
                ],
                [
                    1.6724488735198975,
                    1.6134482622146606,
                    1.1807777881622314,
                    0.6104393005371094,
                    1.5347809791564941,
                    1.7511162757873535,
                    2.02645206451416,
                    1.8101167678833008,
                    1.869117259979248,
                    2.262454032897949,
                    1.9674514532089233,
                    1.8101167678833008,
                    1.8101167678833008,
                    2.0854525566101074,
                    1.4954472780227661,
                    1.6134482622146606,
                    1.6921156644821167,
                    1.6724488735198975,
                    2.282120943069458,
                    1.5937814712524414,
                    0.02043387107551098,
                    0.8661082983016968,
                    2.046118974685669,
                    2.1641199588775635,
                    2.4197888374328613,
                    2.0854525566101074,
                    2.0067851543426514,
                    2.282120943069458,
                    2.02645206451416,
                    2.105119466781616,
                    2.3214547634124756,
                    2.1444530487060547
                ],
                [
                    1.5937814712524414,
                    1.4954472780227661,
                    1.1021103858947754,
                    0.3154366612434387,
                    1.3971130847930908,
                    1.5741146802902222,
                    1.9281178712844849,
                    1.7707830667495728,
                    1.8887841701507568,
                    2.1641199588775635,
                    1.82978355884552,
                    1.7511162757873535,
                    1.82978355884552,
                    2.105119466781616,
                    1.2791119813919067,
                    1.0431098937988281,
                    1.3184456825256348,
                    1.3577793836593628,
                    1.7511162757873535,
                    1.3577793836593628,
                    0.11876823753118515,
                    0.5514388084411621,
                    1.1807777881622314,
                    1.3184456825256348,
                    1.9871183633804321,
                    1.9871183633804321,
                    1.790449857711792,
                    2.0854525566101074,
                    1.8887841701507568,
                    1.947784662246704,
                    2.203453540802002,
                    1.9871183633804321
                ],
                [
                    1.6134482622146606,
                    1.4757803678512573,
                    1.0234429836273193,
                    0.2957698404788971,
                    1.3577793836593628,
                    1.5741146802902222,
                    1.6331151723861694,
                    1.5937814712524414,
                    1.7511162757873535,
                    1.9674514532089233,
                    1.6724488735198975,
                    1.7117825746536255,
                    1.7707830667495728,
                    1.82978355884552,
                    1.4954472780227661,
                    1.6331151723861694,
                    1.0824435949325562,
                    0.5121051073074341,
                    -0.19590140879154205,
                    -0.5892382860183716,
                    -0.7465730309486389,
                    -0.8449072241783142,
                    -0.8449072241783142,
                    -1.0612424612045288,
                    -0.29423561692237854,
                    1.1807777881622314,
                    1.6331151723861694,
                    1.947784662246704,
                    1.6724488735198975,
                    1.456113576889038,
                    1.9281178712844849,
                    1.7511162757873535
                ],
                [
                    0.9841093420982361,
                    0.8857751488685608,
                    0.6104393005371094,
                    0.19743561744689941,
                    0.8267745971679688,
                    0.9644424915313721,
                    0.7284404039382935,
                    1.1021103858947754,
                    1.3184456825256348,
                    1.3971130847930908,
                    1.298778772354126,
                    1.41677987575531,
                    1.4954472780227661,
                    1.338112473487854,
                    1.377446174621582,
                    1.4757803678512573,
                    0.5711056590080261,
                    -0.03856665641069412,
                    -0.31390246748924255,
                    -0.29423561692237854,
                    -0.3729029893875122,
                    -0.3729029893875122,
                    -0.2549019455909729,
                    -0.8645740747451782,
                    -0.8055735230445862,
                    -0.018899815157055855,
                    0.7087735533714294,
                    1.0234429836273193,
                    0.7874408960342407,
                    0.5121051073074341,
                    1.3184456825256348,
                    1.0234429836273193
                ],
                [
                    -0.15656772255897522,
                    -0.1369008719921112,
                    -0.17623455822467804,
                    -0.3532361388206482,
                    -0.2745687663555145,
                    -0.2549019455909729,
                    -0.21556824445724487,
                    0.07943440228700638,
                    0.23676930367946625,
                    0.25643613934516907,
                    0.33510351181030273,
                    0.47277140617370605,
                    0.5514388084411621,
                    0.3941040337085724,
                    0.6891067028045654,
                    0.7481071949005127,
                    0.21710245311260223,
                    -0.07790034264326096,
                    -0.05823349952697754,
                    -0.05823349952697754,
                    -0.29423561692237854,
                    -0.29423561692237854,
                    -0.41223669052124023,
                    -0.6089051365852356,
                    0.3941040337085724,
                    0.09910139441490173,
                    0.5514388084411621,
                    0.4334377348423004,
                    -0.2549019455909729,
                    -0.33356931805610657,
                    0.13843508064746857,
                    -0.05823349952697754
                ],
                [
                    -0.8842409253120422,
                    -0.7072393298149109,
                    -0.7269061803817749,
                    -0.8055735230445862,
                    -0.4712372124195099,
                    -0.3532361388206482,
                    -0.5105708837509155,
                    -0.4515703618526459,
                    -0.43190351128578186,
                    -0.2745687663555145,
                    -0.33356931805610657,
                    -0.2352350950241089,
                    -0.17623455822467804,
                    -0.09756718575954437,
                    0.1777687668800354,
                    0.07943440228700638,
                    -0.2745687663555145,
                    -0.2745687663555145,
                    -0.2549019455909729,
                    -0.31390246748924255,
                    -0.5302377343177795,
                    -0.7072393298149109,
                    -0.29423561692237854,
                    -0.07790034264326096,
                    0.1777687668800354,
                    -0.2352350950241089,
                    0.4137708842754364,
                    1.338112473487854,
                    -0.05823349952697754,
                    -0.2352350950241089,
                    -0.41223669052124023,
                    -0.3729029893875122
                ],
                [
                    -0.9629082679748535,
                    -0.7465730309486389,
                    -0.5499045848846436,
                    -0.4909040629863739,
                    0.09910139441490173,
                    -0.018899815157055855,
                    -0.4909040629863739,
                    -0.8252403736114502,
                    -0.3729029893875122,
                    0.11876823753118515,
                    -0.19590140879154205,
                    -0.15656772255897522,
                    0.1777687668800354,
                    0.3154366612434387,
                    0.21710245311260223,
                    0.0007670287159271538,
                    -0.05823349952697754,
                    -0.15656772255897522,
                    -0.1369008719921112,
                    -0.07790034264326096,
                    -0.19590140879154205,
                    -0.3729029893875122,
                    0.6891067028045654,
                    1.298778772354126,
                    1.1807777881622314,
                    0.49243825674057007,
                    -0.2745687663555145,
                    1.456113576889038,
                    0.5121051073074341,
                    -0.3925698399543762,
                    -0.4712372124195099,
                    -0.4712372124195099
                ],
                [
                    -0.8252403736114502,
                    -0.31390246748924255,
                    -0.19590140879154205,
                    -0.5892382860183716,
                    -0.11723402887582779,
                    -0.15656772255897522,
                    -0.5892382860183716,
                    -0.41223669052124023,
                    0.2761029899120331,
                    0.5711056590080261,
                    0.5121051073074341,
                    0.15810193121433258,
                    0.13843508064746857,
                    0.25643613934516907,
                    0.040100716054439545,
                    -0.19590140879154205,
                    -0.29423561692237854,
                    -0.29423561692237854,
                    -0.17623455822467804,
                    0.0007670287159271538,
                    -0.09756718575954437,
                    0.07943440228700638,
                    1.0234429836273193,
                    1.3971130847930908,
                    1.6331151723861694,
                    1.298778772354126,
                    -0.09756718575954437,
                    0.7677740454673767,
                    0.8661082983016968,
                    -0.8449072241783142,
                    -0.4909040629863739,
                    -0.43190351128578186
                ],
                [
                    -0.5105708837509155,
                    -0.2549019455909729,
                    -0.33356931805610657,
                    -0.5892382860183716,
                    -0.4909040629863739,
                    -0.7662398815155029,
                    -0.6679056286811829,
                    -0.4515703618526459,
                    -0.2549019455909729,
                    0.0007670287159271538,
                    0.2957698404788971,
                    0.21710245311260223,
                    0.05976755917072296,
                    0.15810193121433258,
                    0.13843508064746857,
                    0.02043387107551098,
                    0.0007670287159271538,
                    0.07943440228700638,
                    0.05976755917072296,
                    0.23676930367946625,
                    0.21710245311260223,
                    0.5907724499702454,
                    1.1414440870285034,
                    1.1217772960662842,
                    1.2004445791244507,
                    1.1807777881622314,
                    0.5514388084411621,
                    -0.018899815157055855,
                    0.7284404039382935,
                    -0.9039077758789062,
                    -1.0022419691085815,
                    -0.6679056286811829
                ],
                [
                    -0.41223669052124023,
                    -0.43190351128578186,
                    -0.41223669052124023,
                    -0.5105708837509155,
                    -0.5499045848846436,
                    -0.6875724792480469,
                    -0.6875724792480469,
                    -0.31390246748924255,
                    0.13843508064746857,
                    0.37443721294403076,
                    0.5514388084411621,
                    0.6891067028045654,
                    0.7874408960342407,
                    0.8071077466011047,
                    0.7481071949005127,
                    0.6694398522377014,
                    0.9447756409645081,
                    0.9841093420982361,
                    0.925108790397644,
                    0.90544193983078,
                    0.7677740454673767,
                    0.90544193983078,
                    1.0627766847610474,
                    1.0037761926651,
                    1.0431098937988281,
                    0.8857751488685608,
                    0.8071077466011047,
                    -0.4909040629863739,
                    -0.7072393298149109,
                    -1.0415756702423096,
                    -1.1792436838150024,
                    -0.9432414174079895
                ],
                [
                    0.0007670287159271538,
                    -0.09756718575954437,
                    0.07943440228700638,
                    0.02043387107551098,
                    0.05976755917072296,
                    0.49243825674057007,
                    0.5711056590080261,
                    0.7284404039382935,
                    0.8661082983016968,
                    1.0234429836273193,
                    1.1021103858947754,
                    1.1217772960662842,
                    1.1807777881622314,
                    1.2004445791244507,
                    1.2201114892959595,
                    1.0037761926651,
                    0.9841093420982361,
                    1.0824435949325562,
                    1.0234429836273193,
                    0.7284404039382935,
                    0.09910139441490173,
                    0.19743561744689941,
                    0.37443721294403076,
                    0.7481071949005127,
                    0.90544193983078,
                    0.7677740454673767,
                    0.8464414477348328,
                    -0.29423561692237854,
                    -1.0415756702423096,
                    -0.5499045848846436,
                    -0.6679056286811829,
                    -0.8055735230445862
                ],
                [
                    0.19743561744689941,
                    0.040100716054439545,
                    0.2957698404788971,
                    0.5711056590080261,
                    0.49243825674057007,
                    0.6104393005371094,
                    0.8464414477348328,
                    0.8661082983016968,
                    0.925108790397644,
                    1.0037761926651,
                    1.1021103858947754,
                    1.1611108779907227,
                    1.2201114892959595,
                    1.2201114892959595,
                    1.1414440870285034,
                    0.9447756409645081,
                    0.5711056590080261,
                    0.5711056590080261,
                    0.6104393005371094,
                    0.3154366612434387,
                    -0.41223669052124023,
                    -0.05823349952697754,
                    0.4137708842754364,
                    0.6301061511039734,
                    0.8267745971679688,
                    0.7677740454673767,
                    0.7874408960342407,
                    0.25643613934516907,
                    0.4334377348423004,
                    1.2594451904296875,
                    0.5907724499702454,
                    -0.29423561692237854
                ],
                [
                    0.02043387107551098,
                    0.19743561744689941,
                    0.35477036237716675,
                    0.15810193121433258,
                    -0.1369008719921112,
                    -0.17623455822467804,
                    0.5711056590080261,
                    0.925108790397644,
                    1.0234429836273193,
                    1.0234429836273193,
                    1.0431098937988281,
                    0.9841093420982361,
                    0.8661082983016968,
                    0.7284404039382935,
                    0.6104393005371094,
                    0.5514388084411621,
                    0.4137708842754364,
                    0.5317719578742981,
                    0.8857751488685608,
                    0.7284404039382935,
                    0.33510351181030273,
                    0.5711056590080261,
                    0.8267745971679688,
                    0.6891067028045654,
                    0.7874408960342407,
                    0.6301061511039734,
                    0.6497730016708374,
                    0.5514388084411621,
                    0.6891067028045654,
                    0.6891067028045654,
                    0.5711056590080261,
                    0.47277140617370605
                ],
                [
                    0.11876823753118515,
                    -0.19590140879154205,
                    -0.5302377343177795,
                    -0.5892382860183716,
                    -0.2549019455909729,
                    0.23676930367946625,
                    0.49243825674057007,
                    0.8071077466011047,
                    0.90544193983078,
                    0.7087735533714294,
                    0.5317719578742981,
                    0.45310458540916443,
                    0.49243825674057007,
                    0.5907724499702454,
                    0.7087735533714294,
                    0.8267745971679688,
                    0.925108790397644,
                    0.7284404039382935,
                    0.8857751488685608,
                    0.9644424915313721,
                    0.7481071949005127,
                    0.8071077466011047,
                    0.8857751488685608,
                    0.8071077466011047,
                    0.7284404039382935,
                    0.6891067028045654,
                    0.6891067028045654,
                    0.45310458540916443,
                    0.1777687668800354,
                    -0.03856665641069412,
                    0.040100716054439545,
                    0.5317719578742981
                ],
                [
                    -0.21556824445724487,
                    -0.7465730309486389,
                    -0.5302377343177795,
                    0.23676930367946625,
                    0.6301061511039734,
                    0.8267745971679688,
                    0.6497730016708374,
                    0.47277140617370605,
                    0.37443721294403076,
                    0.35477036237716675,
                    0.5514388084411621,
                    0.7284404039382935,
                    0.8661082983016968,
                    0.9841093420982361,
                    1.0037761926651,
                    0.9447756409645081,
                    0.8661082983016968,
                    0.6301061511039734,
                    0.7677740454673767,
                    0.8857751488685608,
                    0.7874408960342407,
                    0.7481071949005127,
                    0.7874408960342407,
                    0.8464414477348328,
                    0.6891067028045654,
                    0.5514388084411621,
                    0.13843508064746857,
                    -0.2352350950241089,
                    -0.4909040629863739,
                    -0.8055735230445862,
                    -0.6089051365852356,
                    0.2957698404788971
                ],
                [
                    0.19743561744689941,
                    0.1777687668800354,
                    0.23676930367946625,
                    0.3941040337085724,
                    0.3941040337085724,
                    0.3941040337085724,
                    0.5317719578742981,
                    0.37443721294403076,
                    0.2957698404788971,
                    0.7481071949005127,
                    0.90544193983078,
                    0.9447756409645081,
                    0.90544193983078,
                    0.8267745971679688,
                    0.5514388084411621,
                    0.21710245311260223,
                    -0.1369008719921112,
                    -0.31390246748924255,
                    0.49243825674057007,
                    0.8071077466011047,
                    0.7874408960342407,
                    0.7874408960342407,
                    0.7087735533714294,
                    0.5711056590080261,
                    0.09910139441490173,
                    -0.29423561692237854,
                    -0.41223669052124023,
                    -0.6285719275474548,
                    -0.9432414174079895,
                    -0.8842409253120422,
                    -0.8449072241783142,
                    -1.0022419691085815
                ],
                [
                    0.1777687668800354,
                    0.33510351181030273,
                    0.4137708842754364,
                    0.3941040337085724,
                    0.4137708842754364,
                    0.47277140617370605,
                    0.5514388084411621,
                    0.5317719578742981,
                    0.3154366612434387,
                    0.45310458540916443,
                    0.49243825674057007,
                    0.6104393005371094,
                    0.7087735533714294,
                    0.6497730016708374,
                    -0.2549019455909729,
                    -0.8842409253120422,
                    -0.9432414174079895,
                    -0.9629082679748535,
                    0.1777687668800354,
                    0.7874408960342407,
                    0.5907724499702454,
                    0.3941040337085724,
                    0.05976755917072296,
                    -0.2745687663555145,
                    -0.3925698399543762,
                    -0.4515703618526459,
                    -0.6482387781143188,
                    -0.9235746264457703,
                    -0.9432414174079895,
                    -0.8055735230445862,
                    -1.297244668006897,
                    -1.7692488431930542
                ],
                [
                    -0.5695714354515076,
                    0.2761029899120331,
                    0.49243825674057007,
                    0.45310458540916443,
                    0.45310458540916443,
                    0.4334377348423004,
                    0.11876823753118515,
                    -0.15656772255897522,
                    -0.33356931805610657,
                    -0.41223669052124023,
                    -0.4712372124195099,
                    0.23676930367946625,
                    0.6694398522377014,
                    0.6104393005371094,
                    -0.17623455822467804,
                    -0.5892382860183716,
                    -0.43190351128578186,
                    -0.3729029893875122,
                    0.040100716054439545,
                    0.02043387107551098,
                    -0.19590140879154205,
                    -0.33356931805610657,
                    -0.41223669052124023,
                    -0.43190351128578186,
                    -0.6875724792480469,
                    -0.8645740747451782,
                    -1.0612424612045288,
                    -1.1792436838150024,
                    -1.1005761623382568,
                    -1.3759119510650635,
                    -1.6905814409255981,
                    -1.8085826635360718
                ],
                [
                    -0.7269061803817749,
                    0.040100716054439545,
                    0.21710245311260223,
                    0.21710245311260223,
                    0.2761029899120331,
                    0.19743561744689941,
                    -0.6089051365852356,
                    -0.9039077758789062,
                    -0.8055735230445862,
                    -0.6679056286811829,
                    -0.6089051365852356,
                    0.15810193121433258,
                    0.5907724499702454,
                    0.5317719578742981,
                    0.1777687668800354,
                    -0.15656772255897522,
                    -0.33356931805610657,
                    -0.5105708837509155,
                    -0.5302377343177795,
                    -0.5105708837509155,
                    -0.4712372124195099,
                    -0.43190351128578186,
                    -0.5499045848846436,
                    -0.8645740747451782,
                    -1.2382441759109497,
                    -1.1595767736434937,
                    -1.2382441759109497,
                    -1.297244668006897,
                    -1.4939130544662476,
                    -1.670914649963379,
                    -1.749582052230835,
                    -1.8085826635360718
                ],
                [
                    -0.6482387781143188,
                    -0.1369008719921112,
                    0.11876823753118515,
                    0.15810193121433258,
                    0.2761029899120331,
                    0.2957698404788971,
                    -0.33356931805610657,
                    -0.5105708837509155,
                    -0.29423561692237854,
                    -0.1369008719921112,
                    0.02043387107551098,
                    0.05976755917072296,
                    -0.19590140879154205,
                    -0.5499045848846436,
                    -0.7662398815155029,
                    -0.7859066724777222,
                    -0.6679056286811829,
                    -0.6089051365852356,
                    -0.4909040629863739,
                    -0.4515703618526459,
                    -0.6089051365852356,
                    -0.9629082679748535,
                    -1.1005761623382568,
                    -1.0612424612045288,
                    -0.9629082679748535,
                    -1.1202430725097656,
                    -1.4152456521987915,
                    -1.5135798454284668,
                    -1.5725804567337036,
                    -1.670914649963379,
                    -1.7299151420593262,
                    -1.788915753364563
                ],
                [
                    -0.6089051365852356,
                    -0.21556824445724487,
                    0.13843508064746857,
                    0.07943440228700638,
                    0.02043387107551098,
                    -0.05823349952697754,
                    -0.2549019455909729,
                    -0.41223669052124023,
                    -0.5105708837509155,
                    -0.6482387781143188,
                    -0.8449072241783142,
                    -0.9235746264457703,
                    -0.9432414174079895,
                    -0.8449072241783142,
                    -0.7662398815155029,
                    -0.6285719275474548,
                    -0.5499045848846436,
                    -0.6679056286811829,
                    -0.8252403736114502,
                    -0.9825751185417175,
                    -1.1399098634719849,
                    -1.1399098634719849,
                    -1.1005761623382568,
                    -1.218577265739441,
                    -1.0612424612045288,
                    -1.2775777578353882,
                    -1.5922472476959229,
                    -1.6315809488296509,
                    -1.5922472476959229,
                    -1.6315809488296509,
                    -1.7299151420593262,
                    -1.6905814409255981
                ],
                [
                    -0.9235746264457703,
                    -0.8645740747451782,
                    -0.7269061803817749,
                    -0.8842409253120422,
                    -0.9629082679748535,
                    -1.0612424612045288,
                    -1.1595767736434937,
                    -1.1792436838150024,
                    -1.1399098634719849,
                    -1.0415756702423096,
                    -0.9629082679748535,
                    -0.9039077758789062,
                    -0.8252403736114502,
                    -0.8055735230445862,
                    -0.8252403736114502,
                    -0.8449072241783142,
                    -0.9825751185417175,
                    -1.257910966873169,
                    -1.3365782499313354,
                    -1.0809093713760376,
                    -1.1005761623382568,
                    -1.1792436838150024,
                    -1.3562451601028442,
                    -1.4349125623703003,
                    -1.3562451601028442,
                    -1.5332467555999756,
                    -1.6315809488296509,
                    -1.6315809488296509,
                    -1.6119141578674316,
                    -1.6315809488296509,
                    -1.6512478590011597,
                    -1.6905814409255981
                ],
                [
                    -1.5332467555999756,
                    -1.5725804567337036,
                    -1.6315809488296509,
                    -1.5922472476959229,
                    -1.4545793533325195,
                    -1.3955788612365723,
                    -1.3759119510650635,
                    -1.2775777578353882,
                    -1.0809093713760376,
                    -1.0219087600708008,
                    -1.0022419691085815,
                    -1.0415756702423096,
                    -1.1399098634719849,
                    -1.257910966873169,
                    -1.2775777578353882,
                    -1.257910966873169,
                    -1.3169114589691162,
                    -1.1792436838150024,
                    -0.7465730309486389,
                    -0.9825751185417175,
                    -1.297244668006897,
                    -1.4152456521987915,
                    -1.4939130544662476,
                    -1.4939130544662476,
                    -1.5529135465621948,
                    -1.6315809488296509,
                    -1.6512478590011597,
                    -1.6315809488296509,
                    -1.6119141578674316,
                    -1.5922472476959229,
                    -1.5922472476959229,
                    -1.8479163646697998
                ],
                [
                    -1.5725804567337036,
                    -1.6315809488296509,
                    -1.710248351097107,
                    -1.670914649963379,
                    -1.5529135465621948,
                    -1.4742462635040283,
                    -1.4545793533325195,
                    -1.4349125623703003,
                    -1.3759119510650635,
                    -1.3955788612365723,
                    -1.4545793533325195,
                    -1.4545793533325195,
                    -1.3759119510650635,
                    -1.257910966873169,
                    -1.1989104747772217,
                    -1.218577265739441,
                    -1.3365782499313354,
                    -1.0612424612045288,
                    -0.5695714354515076,
                    -1.1202430725097656,
                    -1.5529135465621948,
                    -1.5135798454284668,
                    -1.4939130544662476,
                    -1.6315809488296509,
                    -1.6512478590011597,
                    -1.6512478590011597,
                    -1.6315809488296509,
                    -1.5922472476959229,
                    -1.6119141578674316,
                    -1.5135798454284668,
                    -1.788915753364563,
                    -2.064251661300659
                ],
                [
                    -1.6315809488296509,
                    -1.6512478590011597,
                    -1.7299151420593262,
                    -1.710248351097107,
                    -1.6512478590011597,
                    -1.6119141578674316,
                    -1.6119141578674316,
                    -1.5725804567337036,
                    -1.5135798454284668,
                    -1.4152456521987915,
                    -1.3169114589691162,
                    -1.2775777578353882,
                    -1.218577265739441,
                    -1.218577265739441,
                    -1.2382441759109497,
                    -1.3365782499313354,
                    -1.5135798454284668,
                    -1.2382441759109497,
                    -0.7465730309486389,
                    -1.3562451601028442,
                    -1.6315809488296509,
                    -1.5135798454284668,
                    -1.6905814409255981,
                    -1.710248351097107,
                    -1.670914649963379,
                    -1.670914649963379,
                    -1.6315809488296509,
                    -1.5922472476959229,
                    -1.5725804567337036,
                    -1.6315809488296509,
                    -2.162585973739624,
                    -2.2805869579315186
                ],
                [
                    -1.749582052230835,
                    -1.670914649963379,
                    -1.710248351097107,
                    -1.6315809488296509,
                    -1.5529135465621948,
                    -1.4939130544662476,
                    -1.4545793533325195,
                    -1.4152456521987915,
                    -1.3562451601028442,
                    -1.297244668006897,
                    -1.257910966873169,
                    -1.297244668006897,
                    -1.297244668006897,
                    -1.3365782499313354,
                    -1.4152456521987915,
                    -1.5725804567337036,
                    -1.8085826635360718,
                    -1.4742462635040283,
                    -0.8842409253120422,
                    -1.4349125623703003,
                    -1.6119141578674316,
                    -1.6905814409255981,
                    -1.7299151420593262,
                    -1.7299151420593262,
                    -1.6905814409255981,
                    -1.6905814409255981,
                    -1.710248351097107,
                    -1.6119141578674316,
                    -1.5332467555999756,
                    -2.0249180793762207,
                    -2.3002538681030273,
                    -2.2805869579315186
                ],
                [
                    -1.6119141578674316,
                    -1.5725804567337036,
                    -1.5332467555999756,
                    -1.4939130544662476,
                    -1.4742462635040283,
                    -1.4742462635040283,
                    -1.4742462635040283,
                    -1.4545793533325195,
                    -1.4349125623703003,
                    -1.4152456521987915,
                    -1.4545793533325195,
                    -1.5332467555999756,
                    -1.6315809488296509,
                    -1.749582052230835,
                    -1.906916856765747,
                    -2.083918571472168,
                    -2.2609200477600098,
                    -1.8872500658035278,
                    -1.1792436838150024,
                    -1.5529135465621948,
                    -1.7692488431930542,
                    -1.749582052230835,
                    -1.749582052230835,
                    -1.7299151420593262,
                    -1.7299151420593262,
                    -1.749582052230835,
                    -1.749582052230835,
                    -1.5529135465621948,
                    -1.8085826635360718,
                    -2.3002538681030273,
                    -2.319920539855957,
                    -2.2609200477600098
                ]
            ],
            [
                [
                    2.109891653060913,
                    2.031850576400757,
                    1.5636035203933716,
                    1.4075212478637695,
                    2.109891653060913,
                    2.383035659790039,
                    2.4220564365386963,
                    2.4805872440338135,
                    2.5196077823638916,
                    2.5586283206939697,
                    2.5391180515289307,
                    2.363525390625,
                    2.4610769748687744,
                    2.4805872440338135,
                    2.5000975131988525,
                    2.5586283206939697,
                    2.2074432373046875,
                    2.4610769748687744,
                    2.5586283206939697,
                    2.617159128189087,
                    2.636669635772705,
                    2.5196077823638916,
                    2.5196077823638916,
                    2.5196077823638916,
                    2.5586283206939697,
                    2.363525390625,
                    2.4415667057037354,
                    2.597648859024048,
                    2.4805872440338135,
                    2.344015121459961,
                    2.5196077823638916,
                    2.578138589859009
                ],
                [
                    2.2464637756347656,
                    2.1879327297210693,
                    1.7001756429672241,
                    1.3685007095336914,
                    2.129401922225952,
                    2.4610769748687744,
                    2.4610769748687744,
                    2.4220564365386963,
                    2.5196077823638916,
                    2.597648859024048,
                    2.5586283206939697,
                    2.304994583129883,
                    2.5196077823638916,
                    2.5586283206939697,
                    2.5586283206939697,
                    2.617159128189087,
                    2.2659740447998047,
                    2.4415667057037354,
                    2.5196077823638916,
                    2.675690174102783,
                    2.675690174102783,
                    2.4220564365386963,
                    2.4220564365386963,
                    2.5391180515289307,
                    2.617159128189087,
                    2.383035659790039,
                    2.5196077823638916,
                    2.6952004432678223,
                    2.4610769748687744,
                    2.383035659790039,
                    2.656179904937744,
                    2.675690174102783
                ],
                [
                    2.1684224605560303,
                    2.109891653060913,
                    1.6611549854278564,
                    1.3099697828292847,
                    2.051360845565796,
                    2.4220564365386963,
                    2.4415667057037354,
                    2.2269535064697266,
                    2.363525390625,
                    2.5391180515289307,
                    2.383035659790039,
                    2.2269535064697266,
                    2.363525390625,
                    2.4415667057037354,
                    2.4220564365386963,
                    2.597648859024048,
                    2.2464637756347656,
                    2.383035659790039,
                    2.4805872440338135,
                    2.578138589859009,
                    2.383035659790039,
                    1.97331964969635,
                    2.304994583129883,
                    2.4415667057037354,
                    2.617159128189087,
                    2.363525390625,
                    2.5000975131988525,
                    2.6952004432678223,
                    2.4805872440338135,
                    2.304994583129883,
                    2.675690174102783,
                    2.597648859024048
                ],
                [
                    2.109891653060913,
                    1.9928299188613892,
                    1.5636035203933716,
                    1.2709492444992065,
                    1.953809380531311,
                    2.2269535064697266,
                    2.363525390625,
                    2.1684224605560303,
                    2.2464637756347656,
                    2.4415667057037354,
                    2.2659740447998047,
                    2.090381383895874,
                    2.1684224605560303,
                    2.383035659790039,
                    2.2659740447998047,
                    2.597648859024048,
                    2.2659740447998047,
                    2.344015121459961,
                    2.4610769748687744,
                    2.4220564365386963,
                    1.4075212478637695,
                    1.2124183177947998,
                    2.2464637756347656,
                    2.4805872440338135,
                    2.617159128189087,
                    2.324504852294922,
                    2.4415667057037354,
                    2.675690174102783,
                    2.4220564365386963,
                    2.2269535064697266,
                    2.617159128189087,
                    2.5196077823638916
                ],
                [
                    2.129401922225952,
                    2.0123403072357178,
                    1.5440932512283325,
                    1.1343772411346436,
                    1.8757681846618652,
                    2.090381383895874,
                    2.2854843139648438,
                    2.0123403072357178,
                    2.031850576400757,
                    2.363525390625,
                    2.1684224605560303,
                    1.97331964969635,
                    2.051360845565796,
                    2.304994583129883,
                    1.953809380531311,
                    2.4220564365386963,
                    2.2464637756347656,
                    2.2074432373046875,
                    2.4220564365386963,
                    2.2269535064697266,
                    1.2124183177947998,
                    1.2514389753341675,
                    2.2464637756347656,
                    2.4415667057037354,
                    2.597648859024048,
                    2.2854843139648438,
                    2.344015121459961,
                    2.5586283206939697,
                    2.2854843139648438,
                    2.304994583129883,
                    2.578138589859009,
                    2.4610769748687744
                ],
                [
                    2.070871114730835,
                    1.934299111366272,
                    1.5050727128982544,
                    0.978294849395752,
                    1.7977269887924194,
                    1.934299111366272,
                    2.1684224605560303,
                    1.934299111366272,
                    1.953809380531311,
                    2.2659740447998047,
                    2.031850576400757,
                    1.953809380531311,
                    1.953809380531311,
                    2.2074432373046875,
                    1.6806652545928955,
                    1.7977269887924194,
                    1.836747646331787,
                    1.7977269887924194,
                    2.402545928955078,
                    1.817237377166748,
                    0.3149450123310089,
                    1.1538875102996826,
                    2.2659740447998047,
                    2.324504852294922,
                    2.5391180515289307,
                    2.1684224605560303,
                    2.051360845565796,
                    2.304994583129883,
                    2.090381383895874,
                    2.2854843139648438,
                    2.5000975131988525,
                    2.2659740447998047
                ],
                [
                    1.914788842201233,
                    1.7196859121322632,
                    1.3880109786987305,
                    0.7051507830619812,
                    1.6026241779327393,
                    1.7001756429672241,
                    2.0123403072357178,
                    1.836747646331787,
                    1.8952784538269043,
                    2.051360845565796,
                    1.836747646331787,
                    1.8952784538269043,
                    1.914788842201233,
                    2.090381383895874,
                    1.3880109786987305,
                    1.1929080486297607,
                    1.4270315170288086,
                    1.4660521745681763,
                    1.8757681846618652,
                    1.6221344470977783,
                    0.4515170454978943,
                    0.841722846031189,
                    1.3685007095336914,
                    1.4270315170288086,
                    2.090381383895874,
                    2.070871114730835,
                    1.7977269887924194,
                    2.031850576400757,
                    1.8562579154968262,
                    2.051360845565796,
                    2.2854843139648438,
                    1.9928299188613892
                ],
                [
                    1.8952784538269043,
                    1.7001756429672241,
                    1.2709492444992065,
                    0.6466199159622192,
                    1.6221344470977783,
                    1.7587064504623413,
                    1.7977269887924194,
                    1.7391961812973022,
                    1.836747646331787,
                    1.8757681846618652,
                    1.6416447162628174,
                    1.7782167196273804,
                    1.7977269887924194,
                    1.7977269887924194,
                    1.5245829820632935,
                    1.7391961812973022,
                    1.2709492444992065,
                    0.8027022480964661,
                    0.15886253118515015,
                    -0.15330210328102112,
                    -0.27036383748054504,
                    -0.38742557168006897,
                    -0.5044873356819153,
                    -0.7971416711807251,
                    -0.05575065314769745,
                    1.3489903211593628,
                    1.7196859121322632,
                    1.97331964969635,
                    1.6416447162628174,
                    1.3880109786987305,
                    1.7977269887924194,
                    1.5440932512283325
                ],
                [
                    1.2709492444992065,
                    1.1538875102996826,
                    0.9002537131309509,
                    0.5100479125976562,
                    1.0953565835952759,
                    1.1929080486297607,
                    0.91976398229599,
                    1.2709492444992065,
                    1.4270315170288086,
                    1.3685007095336914,
                    1.2904595136642456,
                    1.4660521745681763,
                    1.5831139087677002,
                    1.3880109786987305,
                    1.4075212478637695,
                    1.6026241779327393,
                    0.8807434439659119,
                    0.4515170454978943,
                    0.275924414396286,
                    0.275924414396286,
                    0.23690369725227356,
                    0.23690369725227356,
                    0.275924414396286,
                    -0.4654667377471924,
                    -0.5044873356819153,
                    0.19788311421871185,
                    0.861233115196228,
                    1.1343772411346436,
                    0.8222125172615051,
                    0.4515170454978943,
                    1.2124183177947998,
                    0.8807434439659119
                ],
                [
                    0.1783728301525116,
                    0.23690369725227356,
                    0.1783728301525116,
                    -0.036240365356206894,
                    0.0027802155818790197,
                    0.0027802155818790197,
                    0.0027802155818790197,
                    0.275924414396286,
                    0.3929861783981323,
                    0.3929861783981323,
                    0.4515170454978943,
                    0.5880890488624573,
                    0.7441713809967041,
                    0.6271096467971802,
                    0.9002537131309509,
                    1.0368257761001587,
                    0.6466199159622192,
                    0.4905376136302948,
                    0.5880890488624573,
                    0.5100479125976562,
                    0.3149450123310089,
                    0.334455281496048,
                    0.11984195560216904,
                    -0.19232268631458282,
                    0.6856405138969421,
                    0.334455281496048,
                    0.7051507830619812,
                    0.5295581817626953,
                    -0.15330210328102112,
                    -0.17281238734722137,
                    0.275924414396286,
                    0.061311084777116776
                ],
                [
                    -0.48497703671455383,
                    -0.23134326934814453,
                    -0.30938443541526794,
                    -0.5044873356819153,
                    -0.13379181921482086,
                    0.022290505468845367,
                    -0.19232268631458282,
                    -0.15330210328102112,
                    -0.13379181921482086,
                    0.08082137256860733,
                    -0.01673007383942604,
                    0.022290505468845367,
                    0.1783728301525116,
                    0.3929861783981323,
                    0.724661111831665,
                    0.6271096467971802,
                    0.275924414396286,
                    0.256413996219635,
                    0.256413996219635,
                    0.11984195560216904,
                    -0.05575065314769745,
                    -0.19232268631458282,
                    0.15886253118515015,
                    0.275924414396286,
                    0.3929861783981323,
                    -0.0752609446644783,
                    0.4905376136302948,
                    1.3294800519943237,
                    0.0027802155818790197,
                    0.061311084777116776,
                    -0.09477123618125916,
                    -0.036240365356206894
                ],
                [
                    -0.5044873356819153,
                    -0.19232268631458282,
                    -0.0752609446644783,
                    -0.15330210328102112,
                    0.5490685105323792,
                    0.4515170454978943,
                    -0.01673007383942604,
                    -0.38742557168006897,
                    0.04180079698562622,
                    0.6271096467971802,
                    0.256413996219635,
                    0.2173934131860733,
                    0.6661302447319031,
                    0.9978051781654358,
                    0.9978051781654358,
                    0.724661111831665,
                    0.5490685105323792,
                    0.3149450123310089,
                    0.256413996219635,
                    0.256413996219635,
                    0.1783728301525116,
                    0.0027802155818790197,
                    0.9978051781654358,
                    1.5050727128982544,
                    1.2904595136642456,
                    0.5490685105323792,
                    -0.27036383748054504,
                    1.3685007095336914,
                    0.5100479125976562,
                    -0.09477123618125916,
                    -0.11428152769804001,
                    -0.11428152769804001
                ],
                [
                    -0.27036383748054504,
                    0.3149450123310089,
                    0.3539655804634094,
                    -0.19232268631458282,
                    0.29543471336364746,
                    0.3149450123310089,
                    -0.09477123618125916,
                    0.08082137256860733,
                    0.783191978931427,
                    1.114866852760315,
                    1.0563360452651978,
                    0.724661111831665,
                    0.8027022480964661,
                    0.9978051781654358,
                    0.783191978931427,
                    0.4905376136302948,
                    0.3149450123310089,
                    0.2173934131860733,
                    0.29543471336364746,
                    0.5100479125976562,
                    0.3929861783981323,
                    0.4515170454978943,
                    1.2709492444992065,
                    1.5440932512283325,
                    1.7391961812973022,
                    1.3880109786987305,
                    -0.036240365356206894,
                    0.7441713809967041,
                    0.9002537131309509,
                    -0.5825284719467163,
                    -0.17281238734722137,
                    -0.09477123618125916
                ],
                [
                    0.11984195560216904,
                    0.3929861783981323,
                    0.23690369725227356,
                    -0.15330210328102112,
                    -0.01673007383942604,
                    -0.250853568315506,
                    -0.11428152769804001,
                    0.1393522471189499,
                    0.334455281496048,
                    0.6075993776321411,
                    0.91976398229599,
                    0.8807434439659119,
                    0.7636816501617432,
                    0.91976398229599,
                    0.861233115196228,
                    0.6856405138969421,
                    0.6271096467971802,
                    0.6466199159622192,
                    0.6075993776321411,
                    0.8027022480964661,
                    0.7051507830619812,
                    0.91976398229599,
                    1.3294800519943237,
                    1.2319285869598389,
                    1.3099697828292847,
                    1.3099697828292847,
                    0.6661302447319031,
                    0.08082137256860733,
                    0.841722846031189,
                    -0.6605696678161621,
                    -0.6995902061462402,
                    -0.34840500354766846
                ],
                [
                    0.256413996219635,
                    0.275924414396286,
                    0.2173934131860733,
                    0.0027802155818790197,
                    0.04180079698562622,
                    -0.01673007383942604,
                    0.022290505468845367,
                    0.3929861783981323,
                    0.8807434439659119,
                    1.0563360452651978,
                    1.2124183177947998,
                    1.3685007095336914,
                    1.4855624437332153,
                    1.5050727128982544,
                    1.4855624437332153,
                    1.3880109786987305,
                    1.6221344470977783,
                    1.6026241779327393,
                    1.4855624437332153,
                    1.3685007095336914,
                    1.1343772411346436,
                    1.1538875102996826,
                    1.1929080486297607,
                    1.0563360452651978,
                    1.114866852760315,
                    0.9978051781654358,
                    0.9587845802307129,
                    -0.2898741364479065,
                    -0.5239976048469543,
                    -0.836162269115448,
                    -0.914203405380249,
                    -0.6410593390464783
                ],
                [
                    0.724661111831665,
                    0.6856405138969421,
                    0.783191978931427,
                    0.6075993776321411,
                    0.7636816501617432,
                    1.2709492444992065,
                    1.3685007095336914,
                    1.5440932512283325,
                    1.7001756429672241,
                    1.7782167196273804,
                    1.817237377166748,
                    1.836747646331787,
                    1.8562579154968262,
                    1.8757681846618652,
                    1.914788842201233,
                    1.6806652545928955,
                    1.6416447162628174,
                    1.7001756429672241,
                    1.5831139087677002,
                    1.114866852760315,
                    0.3929861783981323,
                    0.4124964475631714,
                    0.4905376136302948,
                    0.8027022480964661,
                    0.9978051781654358,
                    0.91976398229599,
                    1.0563360452651978,
                    -0.01673007383942604,
                    -0.7971416711807251,
                    -0.42644616961479187,
                    -0.4654667377471924,
                    -0.5435079336166382
                ],
                [
                    0.9978051781654358,
                    0.8807434439659119,
                    1.0368257761001587,
                    1.2124183177947998,
                    1.1929080486297607,
                    1.3880109786987305,
                    1.6416447162628174,
                    1.7001756429672241,
                    1.7782167196273804,
                    1.836747646331787,
                    1.8757681846618652,
                    1.8757681846618652,
                    1.8757681846618652,
                    1.836747646331787,
                    1.7001756429672241,
                    1.4855624437332153,
                    1.0953565835952759,
                    1.0953565835952759,
                    1.0758463144302368,
                    0.6661302447319031,
                    -0.11428152769804001,
                    0.15886253118515015,
                    0.5490685105323792,
                    0.7636816501617432,
                    1.0368257761001587,
                    0.9978051781654358,
                    1.0368257761001587,
                    0.5490685105323792,
                    0.6466199159622192,
                    1.3099697828292847,
                    0.7441713809967041,
                    -0.05575065314769745
                ],
                [
                    0.841722846031189,
                    1.0953565835952759,
                    1.1733977794647217,
                    0.841722846031189,
                    0.5295581817626953,
                    0.5685787796974182,
                    1.3294800519943237,
                    1.7196859121322632,
                    1.836747646331787,
                    1.8952784538269043,
                    1.8562579154968262,
                    1.7196859121322632,
                    1.5050727128982544,
                    1.3099697828292847,
                    1.0368257761001587,
                    0.9392743110656738,
                    0.8027022480964661,
                    0.9002537131309509,
                    1.2514389753341675,
                    1.0758463144302368,
                    0.6466199159622192,
                    0.841722846031189,
                    1.0368257761001587,
                    0.9002537131309509,
                    1.0758463144302368,
                    0.9392743110656738,
                    0.91976398229599,
                    0.8222125172615051,
                    0.861233115196228,
                    0.7051507830619812,
                    0.7051507830619812,
                    0.6661302447319031
                ],
                [
                    0.9392743110656738,
                    0.6661302447319031,
                    0.275924414396286,
                    0.1393522471189499,
                    0.47102731466293335,
                    0.978294849395752,
                    1.2319285869598389,
                    1.5636035203933716,
                    1.6611549854278564,
                    1.4465417861938477,
                    1.2514389753341675,
                    1.114866852760315,
                    1.0953565835952759,
                    1.1343772411346436,
                    1.1343772411346436,
                    1.2124183177947998,
                    1.2904595136642456,
                    1.0563360452651978,
                    1.2124183177947998,
                    1.3099697828292847,
                    1.0953565835952759,
                    1.1538875102996826,
                    1.1929080486297607,
                    1.1343772411346436,
                    1.0563360452651978,
                    0.9978051781654358,
                    0.9587845802307129,
                    0.7051507830619812,
                    0.3734758794307709,
                    0.08082137256860733,
                    0.2173934131860733,
                    0.7636816501617432
                ],
                [
                    0.5685787796974182,
                    0.061311084777116776,
                    0.256413996219635,
                    1.01731538772583,
                    1.4465417861938477,
                    1.6221344470977783,
                    1.4075212478637695,
                    1.2124183177947998,
                    1.0758463144302368,
                    0.9587845802307129,
                    1.114866852760315,
                    1.2514389753341675,
                    1.3880109786987305,
                    1.4855624437332153,
                    1.5050727128982544,
                    1.4075212478637695,
                    1.2904595136642456,
                    0.9978051781654358,
                    1.1343772411346436,
                    1.2319285869598389,
                    1.1538875102996826,
                    1.1343772411346436,
                    1.1929080486297607,
                    1.2514389753341675,
                    0.978294849395752,
                    0.8222125172615051,
                    0.43200674653053284,
                    0.04180079698562622,
                    -0.21183297038078308,
                    -0.5239976048469543,
                    -0.30938443541526794,
                    0.5880890488624573
                ],
                [
                    1.01731538772583,
                    0.9978051781654358,
                    1.0563360452651978,
                    1.2124183177947998,
                    1.2124183177947998,
                    1.1733977794647217,
                    1.2709492444992065,
                    1.0953565835952759,
                    0.978294849395752,
                    1.3685007095336914,
                    1.4855624437332153,
                    1.4660521745681763,
                    1.3880109786987305,
                    1.3099697828292847,
                    1.0563360452651978,
                    0.7051507830619812,
                    0.29543471336364746,
                    0.08082137256860733,
                    0.841722846031189,
                    1.1538875102996826,
                    1.1538875102996826,
                    1.1538875102996826,
                    1.114866852760315,
                    0.9392743110656738,
                    0.3734758794307709,
                    -0.036240365356206894,
                    -0.15330210328102112,
                    -0.3679153025150299,
                    -0.6605696678161621,
                    -0.5825284719467163,
                    -0.5435079336166382,
                    -0.6995902061462402
                ],
                [
                    0.9978051781654358,
                    1.1343772411346436,
                    1.2319285869598389,
                    1.1929080486297607,
                    1.1733977794647217,
                    1.2124183177947998,
                    1.2709492444992065,
                    1.2124183177947998,
                    0.978294849395752,
                    1.114866852760315,
                    1.114866852760315,
                    1.1538875102996826,
                    1.1929080486297607,
                    1.114866852760315,
                    0.23690369725227356,
                    -0.38742557168006897,
                    -0.5044873356819153,
                    -0.5630182027816772,
                    0.5490685105323792,
                    1.1343772411346436,
                    0.9392743110656738,
                    0.7441713809967041,
                    0.43200674653053284,
                    0.061311084777116776,
                    -0.11428152769804001,
                    -0.19232268631458282,
                    -0.38742557168006897,
                    -0.6605696678161621,
                    -0.6800799369812012,
                    -0.5044873356819153,
                    -0.9922446608543396,
                    -1.46049165725708
                ],
                [
                    0.19788311421871185,
                    1.01731538772583,
                    1.2514389753341675,
                    1.1929080486297607,
                    1.1929080486297607,
                    1.1538875102996826,
                    0.783191978931427,
                    0.4905376136302948,
                    0.3149450123310089,
                    0.23690369725227356,
                    0.15886253118515015,
                    0.783191978931427,
                    1.1733977794647217,
                    1.0758463144302368,
                    0.334455281496048,
                    -0.11428152769804001,
                    0.0027802155818790197,
                    0.0027802155818790197,
                    0.3929861783981323,
                    0.3734758794307709,
                    0.1393522471189499,
                    -0.01673007383942604,
                    -0.09477123618125916,
                    -0.11428152769804001,
                    -0.3679153025150299,
                    -0.5435079336166382,
                    -0.7581210732460022,
                    -0.8751828074455261,
                    -0.7971416711807251,
                    -1.0702857971191406,
                    -1.3824505805969238,
                    -1.4800019264221191
                ],
                [
                    -0.05575065314769745,
                    0.7051507830619812,
                    0.9002537131309509,
                    0.8807434439659119,
                    0.9587845802307129,
                    0.861233115196228,
                    0.04180079698562622,
                    -0.27036383748054504,
                    -0.19232268631458282,
                    -0.036240365356206894,
                    0.022290505468845367,
                    0.724661111831665,
                    1.1343772411346436,
                    1.0563360452651978,
                    0.6856405138969421,
                    0.334455281496048,
                    0.10033166408538818,
                    -0.13379181921482086,
                    -0.15330210328102112,
                    -0.15330210328102112,
                    -0.15330210328102112,
                    -0.11428152769804001,
                    -0.27036383748054504,
                    -0.5825284719467163,
                    -0.8751828074455261,
                    -0.7971416711807251,
                    -0.89469313621521,
                    -0.9532240033149719,
                    -1.1483269929885864,
                    -1.3629401922225952,
                    -1.440981388092041,
                    -1.4995123147964478
                ],
                [
                    -0.01673007383942604,
                    0.47102731466293335,
                    0.724661111831665,
                    0.783191978931427,
                    0.91976398229599,
                    0.9392743110656738,
                    0.275924414396286,
                    0.10033166408538818,
                    0.29543471336364746,
                    0.43200674653053284,
                    0.5880890488624573,
                    0.6271096467971802,
                    0.3539655804634094,
                    0.0027802155818790197,
                    -0.250853568315506,
                    -0.30938443541526794,
                    -0.250853568315506,
                    -0.21183297038078308,
                    -0.09477123618125916,
                    -0.11428152769804001,
                    -0.2898741364479065,
                    -0.6605696678161621,
                    -0.8166519403457642,
                    -0.7581210732460022,
                    -0.5630182027816772,
                    -0.7191005349159241,
                    -1.0312652587890625,
                    -1.0897960662841797,
                    -1.2068578004837036,
                    -1.3434299230575562,
                    -1.421471118927002,
                    -1.46049165725708
                ],
                [
                    0.04180079698562622,
                    0.43200674653053284,
                    0.783191978931427,
                    0.724661111831665,
                    0.6661302447319031,
                    0.5685787796974182,
                    0.3539655804634094,
                    0.19788311421871185,
                    0.08082137256860733,
                    -0.21183297038078308,
                    -0.4459564685821533,
                    -0.5239976048469543,
                    -0.5435079336166382,
                    -0.4459564685821533,
                    -0.2898741364479065,
                    -0.250853568315506,
                    -0.250853568315506,
                    -0.2898741364479065,
                    -0.38742557168006897,
                    -0.6215490698814392,
                    -0.8166519403457642,
                    -0.8166519403457642,
                    -0.777631402015686,
                    -0.8751828074455261,
                    -0.6995902061462402,
                    -0.89469313621521,
                    -1.2068578004837036,
                    -1.2458784580230713,
                    -1.2263681888580322,
                    -1.284899115562439,
                    -1.304409384727478,
                    -1.284899115562439
                ],
                [
                    -0.34840500354766846,
                    -0.27036383748054504,
                    -0.15330210328102112,
                    -0.2898741364479065,
                    -0.42644616961479187,
                    -0.5435079336166382,
                    -0.6215490698814392,
                    -0.6410593390464783,
                    -0.6215490698814392,
                    -0.6800799369812012,
                    -0.6410593390464783,
                    -0.5825284719467163,
                    -0.5239976048469543,
                    -0.4459564685821533,
                    -0.38742557168006897,
                    -0.5044873356819153,
                    -0.7191005349159241,
                    -0.89469313621521,
                    -0.89469313621521,
                    -0.7386108040809631,
                    -0.777631402015686,
                    -0.8166519403457642,
                    -0.972734272480011,
                    -1.0702857971191406,
                    -0.9922446608543396,
                    -1.1678372621536255,
                    -1.2653887271881104,
                    -1.2458784580230713,
                    -1.2653887271881104,
                    -1.284899115562439,
                    -1.2068578004837036,
                    -1.284899115562439
                ],
                [
                    -1.0702857971191406,
                    -1.1093063354492188,
                    -1.1678372621536255,
                    -1.1483269929885864,
                    -1.0507755279541016,
                    -1.0312652587890625,
                    -1.0117549896240234,
                    -0.89469313621521,
                    -0.6995902061462402,
                    -0.6800799369812012,
                    -0.6800799369812012,
                    -0.7191005349159241,
                    -0.8166519403457642,
                    -0.89469313621521,
                    -0.8751828074455261,
                    -0.9337137341499329,
                    -1.0312652587890625,
                    -0.836162269115448,
                    -0.328894704580307,
                    -0.6215490698814392,
                    -0.9532240033149719,
                    -1.0507755279541016,
                    -1.1288167238235474,
                    -1.1093063354492188,
                    -1.1873475313186646,
                    -1.2653887271881104,
                    -1.284899115562439,
                    -1.2653887271881104,
                    -1.2458784580230713,
                    -1.2458784580230713,
                    -1.2458784580230713,
                    -1.5385328531265259
                ],
                [
                    -1.2458784580230713,
                    -1.284899115562439,
                    -1.3629401922225952,
                    -1.3434299230575562,
                    -1.2653887271881104,
                    -1.1873475313186646,
                    -1.1873475313186646,
                    -1.1483269929885864,
                    -1.0897960662841797,
                    -1.0702857971191406,
                    -1.1288167238235474,
                    -1.1288167238235474,
                    -1.0507755279541016,
                    -0.9337137341499329,
                    -0.836162269115448,
                    -0.89469313621521,
                    -1.0702857971191406,
                    -0.7581210732460022,
                    -0.19232268631458282,
                    -0.7581210732460022,
                    -1.1873475313186646,
                    -1.1288167238235474,
                    -1.0897960662841797,
                    -1.2263681888580322,
                    -1.2653887271881104,
                    -1.284899115562439,
                    -1.2653887271881104,
                    -1.2263681888580322,
                    -1.2458784580230713,
                    -1.1873475313186646,
                    -1.4995123147964478,
                    -1.8311872482299805
                ],
                [
                    -1.3434299230575562,
                    -1.3629401922225952,
                    -1.440981388092041,
                    -1.421471118927002,
                    -1.3629401922225952,
                    -1.323919653892517,
                    -1.323919653892517,
                    -1.284899115562439,
                    -1.2263681888580322,
                    -1.1093063354492188,
                    -0.9922446608543396,
                    -0.9532240033149719,
                    -0.89469313621521,
                    -0.89469313621521,
                    -0.89469313621521,
                    -1.0312652587890625,
                    -1.2458784580230713,
                    -0.9337137341499329,
                    -0.4069358706474304,
                    -0.9922446608543396,
                    -1.2653887271881104,
                    -1.1288167238235474,
                    -1.284899115562439,
                    -1.304409384727478,
                    -1.304409384727478,
                    -1.304409384727478,
                    -1.2653887271881104,
                    -1.2263681888580322,
                    -1.2068578004837036,
                    -1.323919653892517,
                    -1.9482489824295044,
                    -2.1238415241241455
                ],
                [
                    -1.46049165725708,
                    -1.3824505805969238,
                    -1.421471118927002,
                    -1.3434299230575562,
                    -1.2458784580230713,
                    -1.1678372621536255,
                    -1.1288167238235474,
                    -1.0702857971191406,
                    -1.0117549896240234,
                    -0.972734272480011,
                    -0.9337137341499329,
                    -0.972734272480011,
                    -0.972734272480011,
                    -1.0312652587890625,
                    -1.0897960662841797,
                    -1.2653887271881104,
                    -1.5190225839614868,
                    -1.1873475313186646,
                    -0.5630182027816772,
                    -1.0702857971191406,
                    -1.2458784580230713,
                    -1.284899115562439,
                    -1.304409384727478,
                    -1.304409384727478,
                    -1.323919653892517,
                    -1.323919653892517,
                    -1.3434299230575562,
                    -1.2458784580230713,
                    -1.1678372621536255,
                    -1.7531460523605347,
                    -2.1628620624542236,
                    -2.1628620624542236
                ],
                [
                    -1.304409384727478,
                    -1.2458784580230713,
                    -1.2068578004837036,
                    -1.1678372621536255,
                    -1.1288167238235474,
                    -1.1288167238235474,
                    -1.1288167238235474,
                    -1.0897960662841797,
                    -1.0897960662841797,
                    -1.1483269929885864,
                    -1.1873475313186646,
                    -1.2458784580230713,
                    -1.3434299230575562,
                    -1.46049165725708,
                    -1.6360843181610107,
                    -1.8311872482299805,
                    -2.006779909133911,
                    -1.577553391456604,
                    -0.8166519403457642,
                    -1.1678372621536255,
                    -1.3629401922225952,
                    -1.3434299230575562,
                    -1.3434299230575562,
                    -1.323919653892517,
                    -1.3629401922225952,
                    -1.3629401922225952,
                    -1.3824505805969238,
                    -1.2068578004837036,
                    -1.4995123147964478,
                    -2.0653107166290283,
                    -2.1628620624542236,
                    -2.0848209857940674
                ]
            ]
        ]
    ]
}
docs/AKS-HCI/notebooks/distributed-cifar10/test_request_pytorch/cifar_test_input_img_1_ship_pytorch.json METASEP
{
    "instances": [
        [
            [
                [
                    2.126389741897583,
                    2.0488500595092773,
                    2.068234920501709,
                    2.068234920501709,
                    2.068234920501709,
                    2.068234920501709,
                    2.068234920501709,
                    2.068234920501709,
                    2.068234920501709,
                    2.068234920501709,
                    2.0876197814941406,
                    2.0876197814941406,
                    2.0876197814941406,
                    2.0876197814941406,
                    2.0876197814941406,
                    2.0876197814941406,
                    2.0876197814941406,
                    2.068234920501709,
                    2.0488500595092773,
                    2.0294651985168457,
                    2.068234920501709,
                    2.068234920501709,
                    2.068234920501709,
                    2.0876197814941406,
                    2.068234920501709,
                    2.0876197814941406,
                    2.068234920501709,
                    2.068234920501709,
                    2.068234920501709,
                    2.0876197814941406,
                    2.0876197814941406,
                    2.068234920501709
                ],
                [
                    2.184544324874878,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1651594638824463,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.126389741897583,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.126389741897583
                ],
                [
                    2.1651594638824463,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.126389741897583,
                    2.126389741897583,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.126389741897583,
                    2.1070048809051514,
                    1.9713103771209717,
                    2.0488500595092773,
                    2.0488500595092773,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.126389741897583,
                    2.126389741897583,
                    2.1070048809051514
                ],
                [
                    2.184544324874878,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.126389741897583,
                    2.126389741897583,
                    2.0876197814941406,
                    2.068234920501709,
                    1.9906952381134033,
                    1.893770694732666,
                    1.176528811454773,
                    1.6223819255828857,
                    1.583612084388733,
                    1.9906952381134033,
                    2.1457746028900146,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583
                ],
                [
                    2.1651594638824463,
                    2.1070048809051514,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.126389741897583,
                    2.126389741897583,
                    2.1070048809051514,
                    2.1070048809051514,
                    2.126389741897583,
                    2.126389741897583,
                    2.1457746028900146,
                    2.0876197814941406,
                    1.8162310123443604,
                    1.5060724020004272,
                    0.7306757569313049,
                    1.350993037223816,
                    1.719306468963623,
                    2.0294651985168457,
                    2.1651594638824463,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146
                ],
                [
                    2.2039294242858887,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.126389741897583,
                    2.126389741897583,
                    2.1070048809051514,
                    2.126389741897583,
                    2.1651594638824463,
                    2.1651594638824463,
                    2.1070048809051514,
                    2.068234920501709,
                    2.126389741897583,
                    2.010080099105835,
                    1.6029969453811646,
                    1.3316081762313843,
                    1.1571439504623413,
                    0.9439098238945007,
                    0.7694455981254578,
                    1.1377589702606201,
                    1.583612084388733,
                    1.9519253969192505,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1457746028900146,
                    2.1651594638824463,
                    2.1651594638824463,
                    2.1651594638824463
                ],
                [
                    1.9906952381134033,
                    1.9906952381134033,
                    2.068234920501709,
                    2.0488500595092773,
                    2.1070048809051514,
                    2.1651594638824463,
                    2.1651594638824463,
                    2.1457746028900146,
                    2.1651594638824463,
                    2.1651594638824463,
                    2.2039294242858887,
                    2.2039294242858887,
                    1.9325405359268188,
                    1.9131556749343872,
                    2.0876197814941406,
                    1.8550008535385132,
                    1.1183741092681885,
                    0.6919059157371521,
                    0.6531360745429993,
                    0.556211531162262,
                    0.3623623549938202,
                    0.3429774343967438,
                    0.5949813723564148,
                    1.40914785861969,
                    2.0876197814941406,
                    2.1457746028900146,
                    2.126389741897583,
                    2.126389741897583,
                    2.126389741897583,
                    2.1457746028900146,
                    2.1651594638824463,
                    2.2039294242858887
                ],
                [
                    1.6805366277694702,
                    1.9131556749343872,
                    2.0294651985168457,
                    1.9713103771209717,
                    2.010080099105835,
                    2.1070048809051514,
                    2.1651594638824463,
                    2.184544324874878,
                    2.2039294242858887,
                    2.2039294242858887,
                    2.2039294242858887,
                    2.2233142852783203,
                    1.4673025608062744,
                    1.8162310123443604,
                    2.0876197814941406,
                    1.719306468963623,
                    1.312223196029663,
                    1.1571439504623413,
                    1.1377589702606201,
                    0.9245249032974243,
                    0.7694455981254578,
                    0.6531360745429993,
                    0.7112908363342285,
                    1.176528811454773,
                    2.010080099105835,
                    2.1070048809051514,
                    2.0876197814941406,
                    2.0876197814941406,
                    2.1070048809051514,
                    2.1457746028900146,
                    2.1651594638824463,
                    2.184544324874878
                ],
                [
                    1.7580763101577759,
                    1.8550008535385132,
                    1.9325405359268188,
                    1.9325405359268188,
                    1.9713103771209717,
                    2.0488500595092773,
                    2.1457746028900146,
                    2.184544324874878,
                    2.184544324874878,
                    2.184544324874878,
                    2.1651594638824463,
                    2.2039294242858887,
                    1.3897628784179688,
                    1.8356159925460815,
                    2.0876197814941406,
                    2.0294651985168457,
                    1.6223819255828857,
                    1.6223819255828857,
                    1.8162310123443604,
                    1.6029969453811646,
                    1.6223819255828857,
                    1.6417667865753174,
                    1.7774611711502075,
                    1.7968461513519287,
                    1.9325405359268188,
                    1.9906952381134033,
                    1.9906952381134033,
                    2.0294651985168457,
                    2.0294651985168457,
                    2.126389741897583,
                    2.1651594638824463,
                    2.184544324874878
                ],
                [
                    -0.14164559543132782,
                    -0.1222606748342514,
                    -0.025336099788546562,
                    0.20728303492069244,
                    0.9051399827003479,
                    1.9325405359268188,
                    2.126389741897583,
                    2.1651594638824463,
                    2.1457746028900146,
                    2.126389741897583,
                    2.126389741897583,
                    2.0876197814941406,
                    1.719306468963623,
                    1.9519253969192505,
                    2.068234920501709,
                    2.1457746028900146,
                    1.9906952381134033,
                    1.9713103771209717,
                    2.0488500595092773,
                    1.9325405359268188,
                    1.9325405359268188,
                    1.7774611711502075,
                    1.4673025608062744,
                    1.1571439504623413,
                    0.9051399827003479,
                    0.8082154393196106,
                    0.8082154393196106,
                    1.176528811454773,
                    1.893770694732666,
                    2.126389741897583,
                    2.1457746028900146,
                    2.184544324874878
                ],
                [
                    -0.316109836101532,
                    -0.4324193298816681,
                    -0.3354947566986084,
                    -0.27733999490737915,
                    0.401132196187973,
                    1.8743858337402344,
                    1.9713103771209717,
                    2.010080099105835,
                    2.1457746028900146,
                    2.1070048809051514,
                    2.0488500595092773,
                    2.0294651985168457,
                    2.010080099105835,
                    2.0488500595092773,
                    2.068234920501709,
                    2.0294651985168457,
                    2.0488500595092773,
                    2.0488500595092773,
                    2.010080099105835,
                    1.893770694732666,
                    1.2734533548355103,
                    0.7500606775283813,
                    0.401132196187973,
                    0.22666795551776886,
                    0.1685132086277008,
                    0.0522037111222744,
                    -0.08349084854125977,
                    0.4592869281768799,
                    1.7580763101577759,
                    2.1070048809051514,
                    2.126389741897583,
                    2.1651594638824463
                ],
                [
                    1.350993037223816,
                    1.2152986526489258,
                    1.4285327196121216,
                    1.4479176998138428,
                    1.6223819255828857,
                    1.893770694732666,
                    1.6999214887619019,
                    1.6611517667770386,
                    1.7580763101577759,
                    1.8356159925460815,
                    1.8162310123443604,
                    1.6417667865753174,
                    1.6223819255828857,
                    1.6611517667770386,
                    1.7580763101577759,
                    1.8356159925460815,
                    1.9325405359268188,
                    1.9519253969192505,
                    1.9325405359268188,
                    1.7968461513519287,
                    1.1183741092681885,
                    0.9632947444915771,
                    1.0796042680740356,
                    1.0214494466781616,
                    1.176528811454773,
                    0.8663701415061951,
                    0.32359254360198975,
                    1.1571439504623413,
                    1.8162310123443604,
                    2.0488500595092773,
                    2.1070048809051514,
                    2.1457746028900146
                ],
                [
                    1.312223196029663,
                    1.2734533548355103,
                    1.486687421798706,
                    1.719306468963623,
                    1.893770694732666,
                    1.719306468963623,
                    1.5060724020004272,
                    0.8857550621032715,
                    1.00206458568573,
                    1.583612084388733,
                    0.9439098238945007,
                    -0.5293439030647278,
                    -0.6262685060501099,
                    -0.4711891710758209,
                    -0.27733999490737915,
                    -0.06410592794418335,
                    0.22666795551776886,
                    0.5368266105651855,
                    1.486687421798706,
                    1.893770694732666,
                    1.7968461513519287,
                    1.8356159925460815,
                    1.893770694732666,
                    1.7774611711502075,
                    1.8550008535385132,
                    1.6805366277694702,
                    1.370378017425537,
                    1.8743858337402344,
                    1.8162310123443604,
                    1.8550008535385132,
                    2.068234920501709,
                    2.126389741897583
                ],
                [
                    -0.2385701686143875,
                    -0.27733999490737915,
                    -0.2385701686143875,
                    -0.005951183382421732,
                    0.24605286121368408,
                    0.8663701415061951,
                    1.2734533548355103,
                    1.2540684938430786,
                    1.6029969453811646,
                    1.7580763101577759,
                    0.6337511539459229,
                    -1.3822803497314453,
                    -1.5567445755004883,
                    -1.4792048931121826,
                    -1.401665210723877,
                    -1.1496611833572388,
                    -0.4518042504787445,
                    0.6531360745429993,
                    1.8550008535385132,
                    2.1070048809051514,
                    2.0876197814941406,
                    1.9713103771209717,
                    1.893770694732666,
                    1.583612084388733,
                    1.486687421798706,
                    1.6611517667770386,
                    1.6805366277694702,
                    1.4285327196121216,
                    1.0408344268798828,
                    1.2152986526489258,
                    1.6611517667770386,
                    1.8550008535385132
                ],
                [
                    -1.2465859651565552,
                    -1.0915064811706543,
                    -1.2078160047531128,
                    -1.110891342163086,
                    -0.04472101479768753,
                    0.2654377818107605,
                    0.4980567693710327,
                    1.350993037223816,
                    1.719306468963623,
                    1.5642271041870117,
                    0.7306757569313049,
                    -0.4324193298816681,
                    -0.587498664855957,
                    -0.4711891710758209,
                    0.24605286121368408,
                    1.0796042680740356,
                    1.583612084388733,
                    1.8550008535385132,
                    1.8162310123443604,
                    1.54484224319458,
                    1.1183741092681885,
                    0.6337511539459229,
                    0.42051711678504944,
                    0.11035845428705215,
                    -0.005951183382421732,
                    0.09097354114055634,
                    0.20728303492069244,
                    0.1491282880306244,
                    0.0522037111222744,
                    0.24605286121368408,
                    1.0989891290664673,
                    1.3897628784179688
                ],
                [
                    -1.6536691188812256,
                    -1.3047406673431396,
                    -0.7813478112220764,
                    0.03281864896416664,
                    0.12974336743354797,
                    -0.5681137442588806,
                    -0.1222606748342514,
                    0.7306757569313049,
                    0.9245249032974243,
                    1.1377589702606201,
                    1.0989891290664673,
                    1.0796042680740356,
                    1.1183741092681885,
                    1.40914785861969,
                    1.7968461513519287,
                    1.4479176998138428,
                    0.9439098238945007,
                    0.6531360745429993,
                    0.3817472755908966,
                    0.12974336743354797,
                    -0.18041542172431946,
                    -0.5293439030647278,
                    -0.6068835854530334,
                    -0.5099589824676514,
                    -0.39364948868751526,
                    -0.3548796772956848,
                    -0.06410592794418335,
                    0.24605286121368408,
                    0.4786718487739563,
                    0.6143662929534912,
                    1.2152986526489258,
                    1.1571439504623413
                ],
                [
                    -2.1770617961883545,
                    -1.9250580072402954,
                    0.1685132086277008,
                    1.5642271041870117,
                    0.24605286121368408,
                    -0.14164559543132782,
                    0.30420762300491333,
                    0.9051399827003479,
                    1.0796042680740356,
                    1.583612084388733,
                    1.8356159925460815,
                    1.9906952381134033,
                    1.9131556749343872,
                    2.0294651985168457,
                    1.9519253969192505,
                    0.9826796650886536,
                    0.3623623549938202,
                    0.24605286121368408,
                    0.32359254360198975,
                    0.3817472755908966,
                    0.556211531162262,
                    0.4592869281768799,
                    0.4592869281768799,
                    0.556211531162262,
                    0.6143662929534912,
                    0.6725209951400757,
                    0.9245249032974243,
                    1.1959137916564941,
                    1.2540684938430786,
                    1.0214494466781616,
                    0.7694455981254578,
                    0.6143662929534912
                ],
                [
                    -2.332141160964966,
                    -1.3047406673431396,
                    1.4479176998138428,
                    1.9325405359268188,
                    1.3897628784179688,
                    1.4285327196121216,
                    1.6805366277694702,
                    1.9519253969192505,
                    2.010080099105835,
                    2.0876197814941406,
                    2.068234920501709,
                    2.0294651985168457,
                    1.6223819255828857,
                    1.893770694732666,
                    1.8550008535385132,
                    1.6417667865753174,
                    1.40914785861969,
                    1.0602192878723145,
                    1.312223196029663,
                    1.2152986526489258,
                    1.2346835136413574,
                    1.3316081762313843,
                    1.2928383350372314,
                    1.1377589702606201,
                    0.9051399827003479,
                    0.8857550621032715,
                    0.6919059157371521,
                    0.3623623549938202,
                    0.20728303492069244,
                    0.11035845428705215,
                    0.0522037111222744,
                    0.24605286121368408
                ],
                [
                    -1.6730540990829468,
                    0.3817472755908966,
                    1.2540684938430786,
                    1.176528811454773,
                    1.1377589702606201,
                    1.2928383350372314,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.3316081762313843,
                    1.2734533548355103,
                    1.2928383350372314,
                    1.2540684938430786,
                    1.00206458568573,
                    1.0602192878723145,
                    0.556211531162262,
                    0.42051711678504944,
                    0.3817472755908966,
                    0.5949813723564148,
                    0.401132196187973,
                    -0.2385701686143875,
                    -0.2191852629184723,
                    0.12974336743354797,
                    0.013433732092380524,
                    -0.27733999490737915,
                    -0.6456534266471863,
                    -0.6650383472442627,
                    -0.6262685060501099,
                    -0.6068835854530334,
                    -0.39364948868751526,
                    -0.08349084854125977,
                    0.07158862799406052,
                    0.07158862799406052
                ],
                [
                    -0.06410592794418335,
                    0.7112908363342285,
                    0.3429774343967438,
                    0.22666795551776886,
                    0.11035845428705215,
                    0.0522037111222744,
                    0.03281864896416664,
                    0.09097354114055634,
                    0.11035845428705215,
                    0.0522037111222744,
                    0.03281864896416664,
                    0.07158862799406052,
                    0.07158862799406052,
                    -0.025336099788546562,
                    -0.4130344092845917,
                    -0.49057406187057495,
                    -0.4518042504787445,
                    -0.14164559543132782,
                    -0.25795507431030273,
                    -0.6068835854530334,
                    -0.6068835854530334,
                    -0.6068835854530334,
                    -0.7425779700279236,
                    -0.8201176524162292,
                    -0.8782724142074585,
                    -0.8201176524162292,
                    -0.6262685060501099,
                    -0.4711891710758209,
                    -0.3354947566986084,
                    -0.19980034232139587,
                    -0.08349084854125977,
                    0.09097354114055634
                ],
                [
                    -1.0139667987823486,
                    -0.9558120369911194,
                    -0.936427116394043,
                    -0.8782724142074585,
                    -0.8007327318191528,
                    -0.7425779700279236,
                    -0.7425779700279236,
                    -0.6844232082366943,
                    -0.6068835854530334,
                    -0.4518042504787445,
                    -0.3548796772956848,
                    -0.2385701686143875,
                    -0.19980034232139587,
                    -0.14164559543132782,
                    -0.14164559543132782,
                    -0.10287576168775558,
                    -0.19980034232139587,
                    -0.29672491550445557,
                    -0.37426456809043884,
                    -0.49057406187057495,
                    -0.587498664855957,
                    -0.7813478112220764,
                    -0.8976573348045349,
                    -0.8782724142074585,
                    -0.8782724142074585,
                    -0.936427116394043,
                    -0.8782724142074585,
                    -0.8395025730133057,
                    -0.6456534266471863,
                    -0.2385701686143875,
                    -0.005951183382421732,
                    0.20728303492069244
                ],
                [
                    -2.1770617961883545,
                    -2.370911121368408,
                    -2.25460147857666,
                    -2.080137252807617,
                    -2.080137252807617,
                    -2.0219826698303223,
                    -2.041367530822754,
                    -2.0025975704193115,
                    -1.9250580072402954,
                    -1.769978642463684,
                    -1.6148992776870728,
                    -1.4985898733139038,
                    -1.4210501909255981,
                    -1.2659708261489868,
                    -1.1496611833572388,
                    -1.072121500968933,
                    -1.0527366399765015,
                    -1.0333516597747803,
                    -1.1302763223648071,
                    -1.2659708261489868,
                    -1.3628954887390137,
                    -1.401665210723877,
                    -1.401665210723877,
                    -1.3241256475448608,
                    -1.3241256475448608,
                    -1.3241256475448608,
                    -1.0333516597747803,
                    -0.7425779700279236,
                    -0.4130344092845917,
                    -0.10287576168775558,
                    0.09097354114055634,
                    0.22666795551776886
                ],
                [
                    -1.7312088012695312,
                    -2.215831756591797,
                    -2.273986577987671,
                    -1.808748483657837,
                    -1.7312088012695312,
                    -2.0025975704193115,
                    -2.273986577987671,
                    -2.370911121368408,
                    -2.4096808433532715,
                    -2.429065704345703,
                    -2.429065704345703,
                    -2.429065704345703,
                    -2.312756299972534,
                    -2.332141160964966,
                    -2.4096808433532715,
                    -2.370911121368408,
                    -2.1770617961883545,
                    -1.9638278484344482,
                    -2.0219826698303223,
                    -2.0219826698303223,
                    -2.0219826698303223,
                    -2.0025975704193115,
                    -1.8475183248519897,
                    -1.6730540990829468,
                    -1.3241256475448608,
                    -0.7813478112220764,
                    -0.2385701686143875,
                    -0.04472101479768753,
                    -0.18041542172431946,
                    -0.06410592794418335,
                    0.1685132086277008,
                    0.5368266105651855
                ],
                [
                    -1.7505937814712524,
                    -1.9250580072402954,
                    -2.1770617961883545,
                    -1.9056730270385742,
                    -1.0527366399765015,
                    -1.072121500968933,
                    -1.4792048931121826,
                    -1.9056730270385742,
                    -2.138292074203491,
                    -2.332141160964966,
                    -2.39029598236084,
                    -2.429065704345703,
                    -2.099522113800049,
                    -1.3241256475448608,
                    -1.828133463859558,
                    -2.2352166175842285,
                    -2.3515260219573975,
                    -2.3515260219573975,
                    -2.2933714389801025,
                    -2.157676935195923,
                    -1.944442868232727,
                    -1.634284257888794,
                    -1.227200984954834,
                    -0.761962890625,
                    -0.06410592794418335,
                    0.3623623549938202,
                    0.12974336743354797,
                    -0.2191852629184723,
                    -0.16103051602840424,
                    0.12974336743354797,
                    0.401132196187973,
                    0.9051399827003479
                ],
                [
                    -2.1189072132110596,
                    -2.1770617961883545,
                    -2.3515260219573975,
                    -2.370911121368408,
                    -1.5567445755004883,
                    -1.16904616355896,
                    -1.3822803497314453,
                    -1.7312088012695312,
                    -2.080137252807617,
                    -2.3515260219573975,
                    -2.39029598236084,
                    -2.429065704345703,
                    -2.2933714389801025,
                    -0.14164559543132782,
                    0.6919059157371521,
                    0.11035845428705215,
                    -0.25795507431030273,
                    -0.39364948868751526,
                    -0.39364948868751526,
                    -0.316109836101532,
                    -0.14164559543132782,
                    0.24605286121368408,
                    0.556211531162262,
                    0.4980567693710327,
                    0.03281864896416664,
                    -0.39364948868751526,
                    -0.37426456809043884,
                    -0.10287576168775558,
                    0.07158862799406052,
                    0.32359254360198975,
                    0.7500606775283813,
                    1.1377589702606201
                ],
                [
                    -1.6536691188812256,
                    -2.1964468955993652,
                    -2.429065704345703,
                    -2.429065704345703,
                    -2.1964468955993652,
                    -1.8475183248519897,
                    -1.808748483657837,
                    -2.0219826698303223,
                    -2.2933714389801025,
                    -2.39029598236084,
                    -2.39029598236084,
                    -2.370911121368408,
                    -2.429065704345703,
                    -1.110891342163086,
                    1.0989891290664673,
                    1.54484224319458,
                    1.370378017425537,
                    1.3316081762313843,
                    1.350993037223816,
                    1.1959137916564941,
                    0.9051399827003479,
                    0.4786718487739563,
                    -0.04472101479768753,
                    -0.4324193298816681,
                    -0.587498664855957,
                    -0.4130344092845917,
                    -0.06410592794418335,
                    0.07158862799406052,
                    0.12974336743354797,
                    0.5174416899681091,
                    0.8857550621032715,
                    1.1571439504623413
                ],
                [
                    -1.0915064811706543,
                    -1.9250580072402954,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.3515260219573975,
                    -2.1964468955993652,
                    -2.080137252807617,
                    -2.1964468955993652,
                    -2.3515260219573975,
                    -2.39029598236084,
                    -2.39029598236084,
                    -2.3515260219573975,
                    -2.4096808433532715,
                    -1.808748483657837,
                    0.5368266105651855,
                    1.5060724020004272,
                    1.350993037223816,
                    1.2734533548355103,
                    1.0408344268798828,
                    0.5755964517593384,
                    -0.1222606748342514,
                    -0.6650383472442627,
                    -0.8588874936103821,
                    -0.6068835854530334,
                    -0.16103051602840424,
                    -0.005951183382421732,
                    -0.005951183382421732,
                    0.07158862799406052,
                    0.3623623549938202,
                    0.7112908363342285,
                    0.9245249032974243,
                    1.1377589702606201
                ],
                [
                    -0.8201176524162292,
                    -1.5179747343063354,
                    -2.4096808433532715,
                    -2.39029598236084,
                    -2.39029598236084,
                    -2.332141160964966,
                    -2.2933714389801025,
                    -2.3515260219573975,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.370911121368408,
                    -2.4096808433532715,
                    -1.9056730270385742,
                    0.32359254360198975,
                    1.54484224319458,
                    1.40914785861969,
                    0.8469852805137634,
                    -0.08349084854125977,
                    -0.7813478112220764,
                    -0.9945818781852722,
                    -0.7813478112220764,
                    -0.4518042504787445,
                    -0.08349084854125977,
                    0.0522037111222744,
                    -0.06410592794418335,
                    -0.08349084854125977,
                    0.12974336743354797,
                    0.42051711678504944,
                    0.7694455981254578,
                    0.9826796650886536,
                    1.176528811454773
                ],
                [
                    -0.6456534266471863,
                    -1.3822803497314453,
                    -2.312756299972534,
                    -2.370911121368408,
                    -2.39029598236084,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.4096808433532715,
                    -2.429065704345703,
                    -2.138292074203491,
                    -0.4518042504787445,
                    0.6143662929534912,
                    -0.16103051602840424,
                    -0.9945818781852722,
                    -1.3435105085372925,
                    -0.9945818781852722,
                    -0.5099589824676514,
                    -0.19980034232139587,
                    -0.06410592794418335,
                    -0.025336099788546562,
                    -0.04472101479768753,
                    -0.005951183382421732,
                    0.0522037111222744,
                    0.20728303492069244,
                    0.43990203738212585,
                    0.7112908363342285,
                    1.00206458568573,
                    1.2152986526489258
                ],
                [
                    -0.7425779700279236,
                    -1.5955144166946411,
                    -2.0607523918151855,
                    -2.215831756591797,
                    -2.273986577987671,
                    -2.332141160964966,
                    -2.39029598236084,
                    -2.39029598236084,
                    -2.370911121368408,
                    -2.370911121368408,
                    -2.370911121368408,
                    -2.39029598236084,
                    -2.429065704345703,
                    -2.3515260219573975,
                    -1.6148992776870728,
                    -1.0527366399765015,
                    -1.401665210723877,
                    -1.3241256475448608,
                    -0.8782724142074585,
                    -0.2385701686143875,
                    0.12974336743354797,
                    0.1685132086277008,
                    -0.04472101479768753,
                    -0.18041542172431946,
                    -0.10287576168775558,
                    0.11035845428705215,
                    0.2654377818107605,
                    0.3429774343967438,
                    0.5949813723564148,
                    0.8469852805137634,
                    1.0989891290664673,
                    1.2152986526489258
                ],
                [
                    -0.8395025730133057,
                    -1.5373597145080566,
                    -1.7312088012695312,
                    -1.828133463859558,
                    -1.9056730270385742,
                    -2.0025975704193115,
                    -2.099522113800049,
                    -2.1189072132110596,
                    -2.080137252807617,
                    -2.0607523918151855,
                    -2.041367530822754,
                    -2.0607523918151855,
                    -2.0607523918151855,
                    -1.9832127094268799,
                    -1.7118239402770996,
                    -1.1884310245513916,
                    -0.7425779700279236,
                    -0.4130344092845917,
                    -0.18041542172431946,
                    0.0522037111222744,
                    0.2654377818107605,
                    0.11035845428705215,
                    -0.16103051602840424,
                    -0.19980034232139587,
                    -0.04472101479768753,
                    0.11035845428705215,
                    0.2654377818107605,
                    0.43990203738212585,
                    0.6531360745429993,
                    0.9439098238945007,
                    1.1571439504623413,
                    1.1959137916564941
                ],
                [
                    -0.7813478112220764,
                    -1.227200984954834,
                    -1.3047406673431396,
                    -1.3628954887390137,
                    -1.4404350519180298,
                    -1.5179747343063354,
                    -1.5373597145080566,
                    -1.4985898733139038,
                    -1.4792048931121826,
                    -1.4404350519180298,
                    -1.401665210723877,
                    -1.3628954887390137,
                    -1.285355806350708,
                    -1.110891342163086,
                    -0.8588874936103821,
                    -0.4130344092845917,
                    -0.18041542172431946,
                    0.03281864896416664,
                    0.1491282880306244,
                    0.03281864896416664,
                    0.03281864896416664,
                    -0.14164559543132782,
                    -0.2191852629184723,
                    -0.06410592794418335,
                    0.07158862799406052,
                    0.20728303492069244,
                    0.30420762300491333,
                    0.4592869281768799,
                    0.6337511539459229,
                    0.827600359916687,
                    1.0602192878723145,
                    1.176528811454773
                ]
            ],
            [
                [
                    2.203453540802002,
                    2.124786138534546,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1641199588775635,
                    2.1641199588775635,
                    2.1641199588775635,
                    2.1641199588775635,
                    2.1641199588775635,
                    2.1444530487060547,
                    2.124786138534546,
                    2.124786138534546,
                    2.1641199588775635,
                    2.1641199588775635,
                    2.1444530487060547,
                    2.124786138534546,
                    2.1444530487060547,
                    2.1641199588775635,
                    2.1641199588775635,
                    2.1641199588775635,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1444530487060547,
                    2.1641199588775635,
                    2.1641199588775635,
                    2.1444530487060547
                ],
                [
                    2.262454032897949,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.203453540802002,
                    2.1837868690490723,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.203453540802002
                ],
                [
                    2.2427873611450195,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.203453540802002,
                    2.1837868690490723,
                    2.1641199588775635,
                    2.1837868690490723,
                    2.203453540802002,
                    2.203453540802002,
                    2.105119466781616,
                    2.203453540802002,
                    2.1641199588775635,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.203453540802002,
                    2.203453540802002,
                    2.1837868690490723
                ],
                [
                    2.262454032897949,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.203453540802002,
                    2.203453540802002,
                    2.1641199588775635,
                    2.1444530487060547,
                    2.105119466781616,
                    2.02645206451416,
                    1.3577793836593628,
                    1.82978355884552,
                    1.7117825746536255,
                    2.0657856464385986,
                    2.203453540802002,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002
                ],
                [
                    2.2427873611450195,
                    2.1837868690490723,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.203453540802002,
                    2.203453540802002,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.203453540802002,
                    2.203453540802002,
                    2.262454032897949,
                    2.2427873611450195,
                    2.0067851543426514,
                    1.7117825746536255,
                    0.9644424915313721,
                    1.6134482622146606,
                    1.869117259979248,
                    2.0854525566101074,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107
                ],
                [
                    2.282120943069458,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.203453540802002,
                    2.2231204509735107,
                    2.203453540802002,
                    2.1837868690490723,
                    2.203453540802002,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.203453540802002,
                    2.1641199588775635,
                    2.2427873611450195,
                    2.124786138534546,
                    1.82978355884552,
                    1.6134482622146606,
                    1.4757803678512573,
                    1.2791119813919067,
                    1.1021103858947754,
                    1.4364467859268188,
                    1.8101167678833008,
                    2.0657856464385986,
                    2.203453540802002,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2427873611450195,
                    2.2427873611450195,
                    2.2427873611450195
                ],
                [
                    2.0854525566101074,
                    2.046118974685669,
                    2.105119466781616,
                    2.0657856464385986,
                    2.1444530487060547,
                    2.2231204509735107,
                    2.2427873611450195,
                    2.2427873611450195,
                    2.203453540802002,
                    2.203453540802002,
                    2.2231204509735107,
                    2.2427873611450195,
                    2.0854525566101074,
                    2.0657856464385986,
                    2.2427873611450195,
                    2.02645206451416,
                    1.456113576889038,
                    1.1217772960662842,
                    1.1217772960662842,
                    1.0431098937988281,
                    0.7874408960342407,
                    0.7087735533714294,
                    0.90544193983078,
                    1.6331151723861694,
                    2.262454032897949,
                    2.2427873611450195,
                    2.2231204509735107,
                    2.203453540802002,
                    2.2231204509735107,
                    2.262454032897949,
                    2.2427873611450195,
                    2.2427873611450195
                ],
                [
                    1.908450961112976,
                    2.105119466781616,
                    2.1837868690490723,
                    2.1444530487060547,
                    2.1837868690490723,
                    2.2427873611450195,
                    2.262454032897949,
                    2.2427873611450195,
                    2.2427873611450195,
                    2.2427873611450195,
                    2.2231204509735107,
                    2.262454032897949,
                    1.5937814712524414,
                    1.947784662246704,
                    2.2231204509735107,
                    1.869117259979248,
                    1.5937814712524414,
                    1.5347809791564941,
                    1.5347809791564941,
                    1.338112473487854,
                    1.1611108779907227,
                    1.0037761926651,
                    1.0431098937988281,
                    1.4954472780227661,
                    2.282120943069458,
                    2.282120943069458,
                    2.262454032897949,
                    2.262454032897949,
                    2.282120943069458,
                    2.282120943069458,
                    2.282120943069458,
                    2.262454032897949
                ],
                [
                    2.1837868690490723,
                    2.2231204509735107,
                    2.262454032897949,
                    2.282120943069458,
                    2.301787853240967,
                    2.262454032897949,
                    2.2427873611450195,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2231204509735107,
                    2.2427873611450195,
                    2.282120943069458,
                    1.4757803678512573,
                    1.9281178712844849,
                    2.1837868690490723,
                    2.124786138534546,
                    1.7707830667495728,
                    1.82978355884552,
                    2.0657856464385986,
                    1.869117259979248,
                    1.9281178712844849,
                    1.9871183633804321,
                    2.1641199588775635,
                    2.203453540802002,
                    2.301787853240967,
                    2.262454032897949,
                    2.282120943069458,
                    2.301787853240967,
                    2.301787853240967,
                    2.301787853240967,
                    2.301787853240967,
                    2.262454032897949
                ],
                [
                    0.33510351181030273,
                    0.2957698404788971,
                    0.37443721294403076,
                    0.6301061511039734,
                    1.2791119813919067,
                    2.1837868690490723,
                    2.2231204509735107,
                    2.1837868690490723,
                    2.1641199588775635,
                    2.203453540802002,
                    2.2427873611450195,
                    2.2427873611450195,
                    1.82978355884552,
                    2.0657856464385986,
                    2.1837868690490723,
                    2.2427873611450195,
                    2.105119466781616,
                    2.105119466781616,
                    2.2231204509735107,
                    2.1444530487060547,
                    2.2427873611450195,
                    2.1641199588775635,
                    1.8887841701507568,
                    1.5937814712524414,
                    1.298778772354126,
                    1.1021103858947754,
                    1.1217772960662842,
                    1.4954472780227661,
                    2.203453540802002,
                    2.3214547634124756,
                    2.301787853240967,
                    2.301787853240967
                ],
                [
                    0.13843508064746857,
                    -0.03856665641069412,
                    0.040100716054439545,
                    0.07943440228700638,
                    0.7087735533714294,
                    2.0854525566101074,
                    2.0657856464385986,
                    2.02645206451416,
                    2.1444530487060547,
                    2.1837868690490723,
                    2.2231204509735107,
                    2.2427873611450195,
                    2.1837868690490723,
                    2.203453540802002,
                    2.2427873611450195,
                    2.203453540802002,
                    2.2231204509735107,
                    2.2427873611450195,
                    2.2427873611450195,
                    2.1444530487060547,
                    1.6331151723861694,
                    1.2004445791244507,
                    0.8267745971679688,
                    0.6497730016708374,
                    0.5121051073074341,
                    0.33510351181030273,
                    0.19743561744689941,
                    0.7677740454673767,
                    2.0657856464385986,
                    2.3214547634124756,
                    2.301787853240967,
                    2.301787853240967
                ],
                [
                    1.7511162757873535,
                    1.5544477701187134,
                    1.7314493656158447,
                    1.7314493656158447,
                    1.8494504690170288,
                    2.046118974685669,
                    1.7707830667495728,
                    1.6921156644821167,
                    1.7707830667495728,
                    1.947784662246704,
                    2.02645206451416,
                    1.9281178712844849,
                    1.8887841701507568,
                    1.9281178712844849,
                    2.0067851543426514,
                    2.0854525566101074,
                    2.1837868690490723,
                    2.2231204509735107,
                    2.2427873611450195,
                    2.124786138534546,
                    1.5937814712524414,
                    1.4757803678512573,
                    1.5151140689849854,
                    1.3971130847930908,
                    1.456113576889038,
                    1.0824435949325562,
                    0.5514388084411621,
                    1.41677987575531,
                    2.105119466781616,
                    2.301787853240967,
                    2.3214547634124756,
                    2.301787853240967
                ],
                [
                    1.6527819633483887,
                    1.5544477701187134,
                    1.7314493656158447,
                    1.8494504690170288,
                    2.0067851543426514,
                    1.8887841701507568,
                    1.6724488735198975,
                    1.0037761926651,
                    1.1217772960662842,
                    1.7707830667495728,
                    1.2004445791244507,
                    -0.21556824445724487,
                    -0.17623455822467804,
                    -0.03856665641069412,
                    0.11876823753118515,
                    0.2957698404788971,
                    0.5711056590080261,
                    0.8661082983016968,
                    1.82978355884552,
                    2.2231204509735107,
                    2.1444530487060547,
                    2.1641199588775635,
                    2.1837868690490723,
                    2.02645206451416,
                    2.0657856464385986,
                    1.8887841701507568,
                    1.5741146802902222,
                    2.105119466781616,
                    2.046118974685669,
                    2.105119466781616,
                    2.282120943069458,
                    2.3214547634124756
                ],
                [
                    0.13843508064746857,
                    0.040100716054439545,
                    0.040100716054439545,
                    0.15810193121433258,
                    0.4334377348423004,
                    1.1611108779907227,
                    1.5347809791564941,
                    1.4954472780227661,
                    1.8887841701507568,
                    2.105119466781616,
                    0.9644424915313721,
                    -1.0219087600708008,
                    -1.0415756702423096,
                    -0.9825751185417175,
                    -0.9825751185417175,
                    -0.7662398815155029,
                    -0.17623455822467804,
                    0.8857751488685608,
                    2.046118974685669,
                    2.282120943069458,
                    2.2427873611450195,
                    2.124786138534546,
                    2.0657856464385986,
                    1.7314493656158447,
                    1.6724488735198975,
                    1.869117259979248,
                    1.8887841701507568,
                    1.6331151723861694,
                    1.2397782802581787,
                    1.456113576889038,
                    1.9281178712844849,
                    2.124786138534546
                ],
                [
                    -0.8252403736114502,
                    -0.7269061803817749,
                    -0.8645740747451782,
                    -0.7465730309486389,
                    0.35477036237716675,
                    0.6301061511039734,
                    0.6694398522377014,
                    1.5151140689849854,
                    2.0657856464385986,
                    1.9674514532089233,
                    1.1217772960662842,
                    -0.03856665641069412,
                    -0.21556824445724487,
                    -0.11723402887582779,
                    0.5514388084411621,
                    1.3577793836593628,
                    1.7511162757873535,
                    1.947784662246704,
                    1.8887841701507568,
                    1.5741146802902222,
                    1.2397782802581787,
                    0.8464414477348328,
                    0.6104393005371094,
                    0.2957698404788971,
                    0.19743561744689941,
                    0.3154366612434387,
                    0.45310458540916443,
                    0.37443721294403076,
                    0.2761029899120331,
                    0.5907724499702454,
                    1.456113576889038,
                    1.7511162757873535
                ],
                [
                    -1.3759119510650635,
                    -1.0415756702423096,
                    -0.4909040629863739,
                    0.4137708842754364,
                    0.5514388084411621,
                    -0.31390246748924255,
                    -0.15656772255897522,
                    0.6891067028045654,
                    1.1217772960662842,
                    1.3971130847930908,
                    1.3971130847930908,
                    1.377446174621582,
                    1.3971130847930908,
                    1.6921156644821167,
                    2.0657856464385986,
                    1.7117825746536255,
                    1.1414440870285034,
                    0.8267745971679688,
                    0.5317719578742981,
                    0.25643613934516907,
                    0.040100716054439545,
                    -0.2352350950241089,
                    -0.33356931805610657,
                    -0.2352350950241089,
                    -0.09756718575954437,
                    -0.03856665641069412,
                    0.23676930367946625,
                    0.5514388084411621,
                    0.8071077466011047,
                    1.0037761926651,
                    1.6331151723861694,
                    1.5741146802902222
                ],
                [
                    -2.1232521533966064,
                    -1.8479163646697998,
                    0.33510351181030273,
                    1.82978355884552,
                    0.5317719578742981,
                    0.0007670287159271538,
                    0.19743561744689941,
                    0.7677740454673767,
                    1.1414440870285034,
                    1.6921156644821167,
                    1.9871183633804321,
                    2.1837868690490723,
                    2.1837868690490723,
                    2.3214547634124756,
                    2.262454032897949,
                    1.298778772354126,
                    0.7087735533714294,
                    0.6104393005371094,
                    0.6891067028045654,
                    0.7874408960342407,
                    0.9447756409645081,
                    0.8267745971679688,
                    0.8267745971679688,
                    0.9447756409645081,
                    1.0037761926651,
                    1.0627766847610474,
                    1.3184456825256348,
                    1.5937814712524414,
                    1.6527819633483887,
                    1.4364467859268188,
                    1.1807777881622314,
                    1.0234429836273193
                ],
                [
                    -2.319920539855957,
                    -1.1989104747772217,
                    1.6527819633483887,
                    2.1444530487060547,
                    1.6134482622146606,
                    1.6527819633483887,
                    1.7511162757873535,
                    1.9871183633804321,
                    2.105119466781616,
                    2.2231204509735107,
                    2.262454032897949,
                    2.262454032897949,
                    1.9281178712844849,
                    2.262454032897949,
                    2.262454032897949,
                    2.0657856464385986,
                    1.8494504690170288,
                    1.5151140689849854,
                    1.82978355884552,
                    1.7707830667495728,
                    1.7511162757873535,
                    1.790449857711792,
                    1.7511162757873535,
                    1.5937814712524414,
                    1.377446174621582,
                    1.338112473487854,
                    1.1414440870285034,
                    0.8267745971679688,
                    0.6497730016708374,
                    0.45310458540916443,
                    0.3941040337085724,
                    0.6104393005371094
                ],
                [
                    -1.5332467555999756,
                    0.6301061511039734,
                    1.5937814712524414,
                    1.4364467859268188,
                    1.456113576889038,
                    1.7314493656158447,
                    1.7314493656158447,
                    1.6724488735198975,
                    1.6331151723861694,
                    1.5741146802902222,
                    1.6527819633483887,
                    1.6527819633483887,
                    1.377446174621582,
                    1.4757803678512573,
                    1.0431098937988281,
                    0.90544193983078,
                    0.7481071949005127,
                    0.9447756409645081,
                    0.7874408960342407,
                    0.19743561744689941,
                    0.2761029899120331,
                    0.6694398522377014,
                    0.5317719578742981,
                    0.23676930367946625,
                    -0.15656772255897522,
                    -0.21556824445724487,
                    -0.17623455822467804,
                    -0.1369008719921112,
                    0.040100716054439545,
                    0.19743561744689941,
                    0.35477036237716675,
                    0.37443721294403076
                ],
                [
                    0.23676930367946625,
                    1.1021103858947754,
                    0.7284404039382935,
                    0.6104393005371094,
                    0.5711056590080261,
                    0.5711056590080261,
                    0.5317719578742981,
                    0.5317719578742981,
                    0.5317719578742981,
                    0.47277140617370605,
                    0.47277140617370605,
                    0.5121051073074341,
                    0.5121051073074341,
                    0.4334377348423004,
                    0.05976755917072296,
                    -0.018899815157055855,
                    -0.05823349952697754,
                    0.21710245311260223,
                    0.09910139441490173,
                    -0.2745687663555145,
                    -0.21556824445724487,
                    -0.11723402887582779,
                    -0.21556824445724487,
                    -0.3925698399543762,
                    -0.5105708837509155,
                    -0.3925698399543762,
                    -0.2352350950241089,
                    -0.11723402887582779,
                    -0.03856665641069412,
                    0.040100716054439545,
                    0.19743561744689941,
                    0.4137708842754364
                ],
                [
                    -0.7072393298149109,
                    -0.6482387781143188,
                    -0.6482387781143188,
                    -0.5892382860183716,
                    -0.4909040629863739,
                    -0.41223669052124023,
                    -0.41223669052124023,
                    -0.3532361388206482,
                    -0.2352350950241089,
                    -0.07790034264326096,
                    0.02043387107551098,
                    0.15810193121433258,
                    0.2761029899120331,
                    0.25643613934516907,
                    0.1777687668800354,
                    0.19743561744689941,
                    0.25643613934516907,
                    0.19743561744689941,
                    0.07943440228700638,
                    -0.07790034264326096,
                    -0.2745687663555145,
                    -0.43190351128578186,
                    -0.5105708837509155,
                    -0.6089051365852356,
                    -0.5695714354515076,
                    -0.4515703618526459,
                    -0.4515703618526459,
                    -0.4909040629863739,
                    -0.3729029893875122,
                    -0.07790034264326096,
                    0.23676930367946625,
                    0.5121051073074341
                ],
                [
                    -1.9265837669372559,
                    -2.2019195556640625,
                    -2.1035852432250977,
                    -1.906916856765747,
                    -1.906916856765747,
                    -1.9265837669372559,
                    -1.9265837669372559,
                    -1.8282495737075806,
                    -1.710248351097107,
                    -1.5725804567337036,
                    -1.4152456521987915,
                    -1.257910966873169,
                    -1.0612424612045288,
                    -0.9432414174079895,
                    -0.9039077758789062,
                    -0.8645740747451782,
                    -0.7072393298149109,
                    -0.6875724792480469,
                    -0.8252403736114502,
                    -1.0022419691085815,
                    -1.1005761623382568,
                    -1.0809093713760376,
                    -1.0612424612045288,
                    -1.0612424612045288,
                    -1.0219087600708008,
                    -0.8842409253120422,
                    -0.6679056286811829,
                    -0.4515703618526459,
                    -0.19590140879154205,
                    0.02043387107551098,
                    0.25643613934516907,
                    0.45310458540916443
                ],
                [
                    -1.5135798454284668,
                    -2.1035852432250977,
                    -2.162585973739624,
                    -1.5529135465621948,
                    -1.5332467555999756,
                    -1.9265837669372559,
                    -2.2019195556640625,
                    -2.2609200477600098,
                    -2.339587450027466,
                    -2.3789210319519043,
                    -2.3789210319519043,
                    -2.339587450027466,
                    -2.162585973739624,
                    -2.064251661300659,
                    -2.0445847511291504,
                    -1.9659174680709839,
                    -1.8479163646697998,
                    -1.670914649963379,
                    -1.7692488431930542,
                    -1.8085826635360718,
                    -1.670914649963379,
                    -1.5529135465621948,
                    -1.4349125623703003,
                    -1.2775777578353882,
                    -1.0415756702423096,
                    -0.6482387781143188,
                    -0.15656772255897522,
                    0.0007670287159271538,
                    -0.15656772255897522,
                    0.0007670287159271538,
                    0.3154366612434387,
                    0.7284404039382935
                ],
                [
                    -1.6119141578674316,
                    -1.8872500658035278,
                    -2.0445847511291504,
                    -1.6119141578674316,
                    -0.8252403736114502,
                    -1.0415756702423096,
                    -1.4349125623703003,
                    -1.8085826635360718,
                    -2.1232521533966064,
                    -2.319920539855957,
                    -2.3789210319519043,
                    -2.418254852294922,
                    -2.083918571472168,
                    -1.1595767736434937,
                    -1.4349125623703003,
                    -1.710248351097107,
                    -1.8282495737075806,
                    -1.8282495737075806,
                    -1.8282495737075806,
                    -1.7299151420593262,
                    -1.5725804567337036,
                    -1.3365782499313354,
                    -1.0219087600708008,
                    -0.5105708837509155,
                    0.02043387107551098,
                    0.15810193121433258,
                    -0.05823349952697754,
                    -0.3532361388206482,
                    -0.2352350950241089,
                    0.21710245311260223,
                    0.5711056590080261,
                    1.1021103858947754
                ],
                [
                    -2.1232521533966064,
                    -2.2215864658355713,
                    -2.2215864658355713,
                    -2.1822526454925537,
                    -1.5529135465621948,
                    -1.3955788612365723,
                    -1.5725804567337036,
                    -1.7692488431930542,
                    -2.064251661300659,
                    -2.339587450027466,
                    -2.3789210319519043,
                    -2.398587942123413,
                    -2.2609200477600098,
                    -0.11723402887582779,
                    0.6891067028045654,
                    0.09910139441490173,
                    -0.21556824445724487,
                    -0.3532361388206482,
                    -0.3925698399543762,
                    -0.3532361388206482,
                    -0.31390246748924255,
                    -0.15656772255897522,
                    0.05976755917072296,
                    0.05976755917072296,
                    -0.33356931805610657,
                    -0.7269061803817749,
                    -0.5695714354515076,
                    -0.1369008719921112,
                    0.13843508064746857,
                    0.47277140617370605,
                    0.9644424915313721,
                    1.3971130847930908
                ],
                [
                    -1.6315809488296509,
                    -2.2215864658355713,
                    -2.3592543601989746,
                    -2.339587450027466,
                    -2.3002538681030273,
                    -2.1822526454925537,
                    -2.1822526454925537,
                    -2.2215864658355713,
                    -2.3002538681030273,
                    -2.398587942123413,
                    -2.398587942123413,
                    -2.3789210319519043,
                    -2.418254852294922,
                    -1.2775777578353882,
                    0.09910139441490173,
                    0.13843508064746857,
                    0.07943440228700638,
                    0.0007670287159271538,
                    -0.07790034264326096,
                    -0.19590140879154205,
                    -0.2549019455909729,
                    -0.5302377343177795,
                    -0.9432414174079895,
                    -1.1202430725097656,
                    -1.0219087600708008,
                    -0.5892382860183716,
                    -0.09756718575954437,
                    0.1777687668800354,
                    0.35477036237716675,
                    0.7677740454673767,
                    1.1611108779907227,
                    1.456113576889038
                ],
                [
                    -0.9039077758789062,
                    -1.8479163646697998,
                    -2.398587942123413,
                    -2.398587942123413,
                    -2.398587942123413,
                    -2.3789210319519043,
                    -2.3592543601989746,
                    -2.3789210319519043,
                    -2.398587942123413,
                    -2.418254852294922,
                    -2.418254852294922,
                    -2.418254852294922,
                    -2.398587942123413,
                    -2.1822526454925537,
                    -1.5332467555999756,
                    -1.4939130544662476,
                    -1.5135798454284668,
                    -1.4742462635040283,
                    -1.4349125623703003,
                    -1.4545793533325195,
                    -1.5922472476959229,
                    -1.670914649963379,
                    -1.4742462635040283,
                    -0.9039077758789062,
                    -0.2549019455909729,
                    0.05976755917072296,
                    0.09910139441490173,
                    0.23676930367946625,
                    0.5907724499702454,
                    1.0431098937988281,
                    1.2594451904296875,
                    1.4757803678512573
                ],
                [
                    -0.5695714354515076,
                    -1.3955788612365723,
                    -2.398587942123413,
                    -2.398587942123413,
                    -2.418254852294922,
                    -2.398587942123413,
                    -2.398587942123413,
                    -2.418254852294922,
                    -2.418254852294922,
                    -2.418254852294922,
                    -2.418254852294922,
                    -2.418254852294922,
                    -2.3789210319519043,
                    -2.3592543601989746,
                    -1.9265837669372559,
                    -1.788915753364563,
                    -1.9265837669372559,
                    -1.9265837669372559,
                    -1.9265837669372559,
                    -1.8479163646697998,
                    -1.6119141578674316,
                    -1.1202430725097656,
                    -0.6089051365852356,
                    -0.19590140879154205,
                    0.02043387107551098,
                    0.05976755917072296,
                    0.07943440228700638,
                    0.3154366612434387,
                    0.6694398522377014,
                    1.1021103858947754,
                    1.338112473487854,
                    1.5347809791564941
                ],
                [
                    -0.41223669052124023,
                    -1.2382441759109497,
                    -2.2805869579315186,
                    -2.3789210319519043,
                    -2.3789210319519043,
                    -2.3592543601989746,
                    -2.3592543601989746,
                    -2.3789210319519043,
                    -2.398587942123413,
                    -2.418254852294922,
                    -2.418254852294922,
                    -2.398587942123413,
                    -2.3592543601989746,
                    -2.398587942123413,
                    -2.0445847511291504,
                    -1.8085826635360718,
                    -2.083918571472168,
                    -2.162585973739624,
                    -1.8872500658035278,
                    -1.2775777578353882,
                    -0.6482387781143188,
                    -0.15656772255897522,
                    0.05976755917072296,
                    0.02043387107551098,
                    0.0007670287159271538,
                    0.13843508064746857,
                    0.23676930367946625,
                    0.4334377348423004,
                    0.7087735533714294,
                    1.0431098937988281,
                    1.3577793836593628,
                    1.5544477701187134
                ],
                [
                    -0.4712372124195099,
                    -1.4152456521987915,
                    -1.9659174680709839,
                    -2.1822526454925537,
                    -2.2215864658355713,
                    -2.2019195556640625,
                    -2.2215864658355713,
                    -2.2805869579315186,
                    -2.339587450027466,
                    -2.339587450027466,
                    -2.339587450027466,
                    -2.3592543601989746,
                    -2.3002538681030273,
                    -2.319920539855957,
                    -2.162585973739624,
                    -2.005251169204712,
                    -1.8872500658035278,
                    -1.4349125623703003,
                    -0.9039077758789062,
                    -0.4909040629863739,
                    -0.19590140879154205,
                    0.05976755917072296,
                    0.05976755917072296,
                    0.040100716054439545,
                    0.09910139441490173,
                    0.2957698404788971,
                    0.49243825674057007,
                    0.6104393005371094,
                    0.8857751488685608,
                    1.2004445791244507,
                    1.456113576889038,
                    1.5544477701187134
                ],
                [
                    -0.5302377343177795,
                    -1.297244668006897,
                    -1.5529135465621948,
                    -1.7299151420593262,
                    -1.8282495737075806,
                    -1.8675832748413086,
                    -1.906916856765747,
                    -1.9659174680709839,
                    -2.005251169204712,
                    -2.005251169204712,
                    -1.9855842590332031,
                    -1.9659174680709839,
                    -1.8872500658035278,
                    -1.8085826635360718,
                    -1.6315809488296509,
                    -1.3365782499313354,
                    -1.0415756702423096,
                    -0.6875724792480469,
                    -0.41223669052124023,
                    -0.21556824445724487,
                    -0.03856665641069412,
                    -0.018899815157055855,
                    -0.018899815157055855,
                    0.07943440228700638,
                    0.19743561744689941,
                    0.3154366612434387,
                    0.5121051073074341,
                    0.7284404039382935,
                    0.9644424915313721,
                    1.298778772354126,
                    1.5151140689849854,
                    1.5544477701187134
                ],
                [
                    -0.43190351128578186,
                    -0.9432414174079895,
                    -1.1005761623382568,
                    -1.218577265739441,
                    -1.3169114589691162,
                    -1.3759119510650635,
                    -1.3759119510650635,
                    -1.3365782499313354,
                    -1.3365782499313354,
                    -1.3169114589691162,
                    -1.2775777578353882,
                    -1.1989104747772217,
                    -1.1005761623382568,
                    -1.0219087600708008,
                    -0.7662398815155029,
                    -0.5302377343177795,
                    -0.3925698399543762,
                    -0.2745687663555145,
                    -0.1369008719921112,
                    -0.03856665641069412,
                    0.07943440228700638,
                    0.02043387107551098,
                    0.040100716054439545,
                    0.15810193121433258,
                    0.25643613934516907,
                    0.4334377348423004,
                    0.5711056590080261,
                    0.7677740454673767,
                    0.9447756409645081,
                    1.1807777881622314,
                    1.41677987575531,
                    1.5151140689849854
                ]
            ],
            [
                [
                    2.363525390625,
                    2.2854843139648438,
                    2.304994583129883,
                    2.304994583129883,
                    2.304994583129883,
                    2.304994583129883,
                    2.304994583129883,
                    2.304994583129883,
                    2.304994583129883,
                    2.304994583129883,
                    2.324504852294922,
                    2.324504852294922,
                    2.324504852294922,
                    2.324504852294922,
                    2.324504852294922,
                    2.324504852294922,
                    2.324504852294922,
                    2.324504852294922,
                    2.324504852294922,
                    2.304994583129883,
                    2.344015121459961,
                    2.344015121459961,
                    2.304994583129883,
                    2.2659740447998047,
                    2.2854843139648438,
                    2.324504852294922,
                    2.304994583129883,
                    2.304994583129883,
                    2.304994583129883,
                    2.324504852294922,
                    2.324504852294922,
                    2.304994583129883
                ],
                [
                    2.4220564365386963,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.383035659790039,
                    2.383035659790039,
                    2.383035659790039,
                    2.383035659790039,
                    2.383035659790039,
                    2.383035659790039,
                    2.324504852294922,
                    2.324504852294922,
                    2.344015121459961,
                    2.344015121459961,
                    2.402545928955078,
                    2.4220564365386963,
                    2.402545928955078,
                    2.363525390625,
                    2.344015121459961,
                    2.383035659790039,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.383035659790039,
                    2.383035659790039,
                    2.363525390625
                ],
                [
                    2.402545928955078,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.363525390625,
                    2.344015121459961,
                    2.2854843139648438,
                    2.2854843139648438,
                    2.344015121459961,
                    2.383035659790039,
                    2.324504852294922,
                    2.4220564365386963,
                    2.363525390625,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.363525390625,
                    2.363525390625,
                    2.344015121459961
                ],
                [
                    2.4220564365386963,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.363525390625,
                    2.344015121459961,
                    2.2659740447998047,
                    2.2854843139648438,
                    2.304994583129883,
                    2.2854843139648438,
                    1.6221344470977783,
                    2.051360845565796,
                    1.934299111366272,
                    2.2659740447998047,
                    2.363525390625,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.344015121459961,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625
                ],
                [
                    2.402545928955078,
                    2.344015121459961,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.344015121459961,
                    2.344015121459961,
                    2.363525390625,
                    2.363525390625,
                    2.344015121459961,
                    2.344015121459961,
                    2.363525390625,
                    2.363525390625,
                    2.383035659790039,
                    2.402545928955078,
                    2.2659740447998047,
                    2.051360845565796,
                    1.2709492444992065,
                    1.836747646331787,
                    2.090381383895874,
                    2.304994583129883,
                    2.402545928955078,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.383035659790039,
                    2.383035659790039,
                    2.383035659790039,
                    2.383035659790039
                ],
                [
                    2.4220564365386963,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.344015121459961,
                    2.363525390625,
                    2.383035659790039,
                    2.383035659790039,
                    2.383035659790039,
                    2.344015121459961,
                    2.402545928955078,
                    2.304994583129883,
                    2.031850576400757,
                    1.8757681846618652,
                    1.817237377166748,
                    1.6806652545928955,
                    1.4660521745681763,
                    1.7196859121322632,
                    2.070871114730835,
                    2.304994583129883,
                    2.402545928955078,
                    2.363525390625,
                    2.363525390625,
                    2.363525390625,
                    2.383035659790039,
                    2.402545928955078,
                    2.402545928955078,
                    2.402545928955078
                ],
                [
                    2.2464637756347656,
                    2.2269535064697266,
                    2.2854843139648438,
                    2.2659740447998047,
                    2.324504852294922,
                    2.383035659790039,
                    2.363525390625,
                    2.363525390625,
                    2.383035659790039,
                    2.383035659790039,
                    2.402545928955078,
                    2.4220564365386963,
                    2.2659740447998047,
                    2.2464637756347656,
                    2.4220564365386963,
                    2.2269535064697266,
                    1.7587064504623413,
                    1.4855624437332153,
                    1.5050727128982544,
                    1.4855624437332153,
                    1.2319285869598389,
                    1.114866852760315,
                    1.2319285869598389,
                    1.8952784538269043,
                    2.4415667057037354,
                    2.344015121459961,
                    2.324504852294922,
                    2.363525390625,
                    2.383035659790039,
                    2.402545928955078,
                    2.402545928955078,
                    2.4220564365386963
                ],
                [
                    2.109891653060913,
                    2.324504852294922,
                    2.4220564365386963,
                    2.344015121459961,
                    2.344015121459961,
                    2.383035659790039,
                    2.363525390625,
                    2.383035659790039,
                    2.4220564365386963,
                    2.4220564365386963,
                    2.402545928955078,
                    2.4415667057037354,
                    1.7391961812973022,
                    2.090381383895874,
                    2.363525390625,
                    2.031850576400757,
                    1.8757681846618652,
                    1.8757681846618652,
                    1.8952784538269043,
                    1.7391961812973022,
                    1.6026241779327393,
                    1.4270315170288086,
                    1.3880109786987305,
                    1.7587064504623413,
                    2.4610769748687744,
                    2.4220564365386963,
                    2.402545928955078,
                    2.4220564365386963,
                    2.4220564365386963,
                    2.4220564365386963,
                    2.4220564365386963,
                    2.4220564365386963
                ],
                [
                    2.4805872440338135,
                    2.5196077823638916,
                    2.578138589859009,
                    2.5196077823638916,
                    2.4610769748687744,
                    2.402545928955078,
                    2.363525390625,
                    2.363525390625,
                    2.402545928955078,
                    2.402545928955078,
                    2.402545928955078,
                    2.4415667057037354,
                    1.6026241779327393,
                    2.031850576400757,
                    2.2854843139648438,
                    2.2464637756347656,
                    2.0123403072357178,
                    2.109891653060913,
                    2.363525390625,
                    2.2074432373046875,
                    2.344015121459961,
                    2.363525390625,
                    2.4610769748687744,
                    2.4805872440338135,
                    2.5196077823638916,
                    2.4610769748687744,
                    2.4610769748687744,
                    2.4610769748687744,
                    2.4415667057037354,
                    2.4415667057037354,
                    2.4415667057037354,
                    2.4220564365386963
                ],
                [
                    0.6856405138969421,
                    0.6661302447319031,
                    0.7636816501617432,
                    0.91976398229599,
                    1.5050727128982544,
                    2.324504852294922,
                    2.324504852294922,
                    2.304994583129883,
                    2.344015121459961,
                    2.363525390625,
                    2.383035659790039,
                    2.363525390625,
                    1.953809380531311,
                    2.1879327297210693,
                    2.304994583129883,
                    2.383035659790039,
                    2.304994583129883,
                    2.363525390625,
                    2.4805872440338135,
                    2.4415667057037354,
                    2.597648859024048,
                    2.5196077823638916,
                    2.1879327297210693,
                    1.8952784538269043,
                    1.5831139087677002,
                    1.4075212478637695,
                    1.3880109786987305,
                    1.7001756429672241,
                    2.363525390625,
                    2.4415667057037354,
                    2.4415667057037354,
                    2.4415667057037354
                ],
                [
                    0.5295581817626953,
                    0.3734758794307709,
                    0.4515170454978943,
                    0.4515170454978943,
                    0.9978051781654358,
                    2.2854843139648438,
                    2.1684224605560303,
                    2.148912191390991,
                    2.324504852294922,
                    2.344015121459961,
                    2.344015121459961,
                    2.363525390625,
                    2.363525390625,
                    2.383035659790039,
                    2.4220564365386963,
                    2.383035659790039,
                    2.4220564365386963,
                    2.4610769748687744,
                    2.4805872440338135,
                    2.4220564365386963,
                    1.934299111366272,
                    1.5050727128982544,
                    1.1343772411346436,
                    0.9587845802307129,
                    0.8807434439659119,
                    0.7636816501617432,
                    0.5685787796974182,
                    1.01731538772583,
                    2.2464637756347656,
                    2.4415667057037354,
                    2.4220564365386963,
                    2.4415667057037354
                ],
                [
                    2.148912191390991,
                    1.97331964969635,
                    2.148912191390991,
                    2.129401922225952,
                    2.2074432373046875,
                    2.2854843139648438,
                    1.8952784538269043,
                    1.7977269887924194,
                    1.953809380531311,
                    2.109891653060913,
                    2.1684224605560303,
                    2.051360845565796,
                    2.129401922225952,
                    2.1684224605560303,
                    2.2659740447998047,
                    2.324504852294922,
                    2.402545928955078,
                    2.4415667057037354,
                    2.4805872440338135,
                    2.402545928955078,
                    1.836747646331787,
                    1.7391961812973022,
                    1.817237377166748,
                    1.7196859121322632,
                    1.8952784538269043,
                    1.6026241779327393,
                    0.978294849395752,
                    1.7196859121322632,
                    2.324504852294922,
                    2.4220564365386963,
                    2.4415667057037354,
                    2.4415667057037354
                ],
                [
                    2.109891653060913,
                    2.0123403072357178,
                    2.148912191390991,
                    2.344015121459961,
                    2.4805872440338135,
                    2.2074432373046875,
                    1.836747646331787,
                    1.1733977794647217,
                    1.3489903211593628,
                    1.953809380531311,
                    1.4465417861938477,
                    0.1393522471189499,
                    0.23690369725227356,
                    0.3539655804634094,
                    0.4905376136302948,
                    0.6466199159622192,
                    0.91976398229599,
                    1.1733977794647217,
                    2.070871114730835,
                    2.402545928955078,
                    2.363525390625,
                    2.4220564365386963,
                    2.4610769748687744,
                    2.324504852294922,
                    2.402545928955078,
                    2.2464637756347656,
                    1.914788842201233,
                    2.402545928955078,
                    2.344015121459961,
                    2.324504852294922,
                    2.5000975131988525,
                    2.5000975131988525
                ],
                [
                    0.7441713809967041,
                    0.6466199159622192,
                    0.5295581817626953,
                    0.724661111831665,
                    0.9978051781654358,
                    1.5440932512283325,
                    1.7782167196273804,
                    1.7587064504623413,
                    2.1879327297210693,
                    2.344015121459961,
                    1.3489903211593628,
                    -0.42644616961479187,
                    -0.4459564685821533,
                    -0.4459564685821533,
                    -0.4654667377471924,
                    -0.30938443541526794,
                    0.29543471336364746,
                    1.2709492444992065,
                    2.324504852294922,
                    2.4805872440338135,
                    2.4805872440338135,
                    2.402545928955078,
                    2.324504852294922,
                    2.0123403072357178,
                    1.914788842201233,
                    2.070871114730835,
                    2.129401922225952,
                    1.953809380531311,
                    1.6026241779327393,
                    1.7782167196273804,
                    2.2074432373046875,
                    2.344015121459961
                ],
                [
                    -0.11428152769804001,
                    0.0027802155818790197,
                    -0.27036383748054504,
                    -0.23134326934814453,
                    0.8027022480964661,
                    0.978294849395752,
                    0.978294849395752,
                    1.817237377166748,
                    2.344015121459961,
                    2.2269535064697266,
                    1.4855624437332153,
                    0.47102731466293335,
                    0.334455281496048,
                    0.4124964475631714,
                    1.0563360452651978,
                    1.817237377166748,
                    2.129401922225952,
                    2.304994583129883,
                    2.2074432373046875,
                    1.914788842201233,
                    1.5831139087677002,
                    1.1733977794647217,
                    0.9587845802307129,
                    0.6466199159622192,
                    0.5100479125976562,
                    0.5880890488624573,
                    0.7441713809967041,
                    0.724661111831665,
                    0.6466199159622192,
                    0.9002537131309509,
                    1.7391961812973022,
                    1.9928299188613892
                ],
                [
                    -0.7191005349159241,
                    -0.38742557168006897,
                    0.04180079698562622,
                    0.7636816501617432,
                    0.8222125172615051,
                    -0.0752609446644783,
                    0.08082137256860733,
                    0.91976398229599,
                    1.3294800519943237,
                    1.6221344470977783,
                    1.6416447162628174,
                    1.6806652545928955,
                    1.7196859121322632,
                    2.0123403072357178,
                    2.383035659790039,
                    2.0123403072357178,
                    1.4075212478637695,
                    1.1343772411346436,
                    0.8807434439659119,
                    0.6856405138969421,
                    0.47102731466293335,
                    0.1783728301525116,
                    0.08082137256860733,
                    0.1783728301525116,
                    0.275924414396286,
                    0.3149450123310089,
                    0.6075993776321411,
                    0.91976398229599,
                    1.1733977794647217,
                    1.3685007095336914,
                    1.934299111366272,
                    1.836747646331787
                ],
                [
                    -1.5385328531265259,
                    -1.304409384727478,
                    0.724661111831665,
                    2.070871114730835,
                    0.7051507830619812,
                    0.1783728301525116,
                    0.3929861783981323,
                    0.9392743110656738,
                    1.2904595136642456,
                    1.8952784538269043,
                    2.1684224605560303,
                    2.324504852294922,
                    2.304994583129883,
                    2.4610769748687744,
                    2.4220564365386963,
                    1.4855624437332153,
                    0.9587845802307129,
                    0.9392743110656738,
                    1.0953565835952759,
                    1.2319285869598389,
                    1.4270315170288086,
                    1.3294800519943237,
                    1.3294800519943237,
                    1.4270315170288086,
                    1.4660521745681763,
                    1.5050727128982544,
                    1.7587064504623413,
                    2.0123403072357178,
                    2.031850576400757,
                    1.836747646331787,
                    1.5440932512283325,
                    1.3489903211593628
                ],
                [
                    -1.7531460523605347,
                    -0.6800799369812012,
                    2.0123403072357178,
                    2.4415667057037354,
                    1.914788842201233,
                    1.8952784538269043,
                    2.031850576400757,
                    2.2464637756347656,
                    2.402545928955078,
                    2.578138589859009,
                    2.5586283206939697,
                    2.4415667057037354,
                    2.070871114730835,
                    2.4415667057037354,
                    2.4805872440338135,
                    2.344015121459961,
                    2.2269535064697266,
                    1.953809380531311,
                    2.2659740447998047,
                    2.2464637756347656,
                    2.2854843139648438,
                    2.344015121459961,
                    2.304994583129883,
                    2.148912191390991,
                    1.914788842201233,
                    1.8562579154968262,
                    1.6221344470977783,
                    1.2709492444992065,
                    1.0758463144302368,
                    0.91976398229599,
                    0.861233115196228,
                    0.9978051781654358
                ],
                [
                    -0.836162269115448,
                    1.2709492444992065,
                    2.109891653060913,
                    1.9928299188613892,
                    2.0123403072357178,
                    2.2464637756347656,
                    2.2659740447998047,
                    2.2074432373046875,
                    2.2074432373046875,
                    2.2269535064697266,
                    2.2269535064697266,
                    2.090381383895874,
                    1.817237377166748,
                    1.97331964969635,
                    1.5440932512283325,
                    1.4465417861938477,
                    1.3685007095336914,
                    1.5831139087677002,
                    1.4075212478637695,
                    0.8222125172615051,
                    0.91976398229599,
                    1.2904595136642456,
                    1.1538875102996826,
                    0.861233115196228,
                    0.47102731466293335,
                    0.4124964475631714,
                    0.3734758794307709,
                    0.334455281496048,
                    0.5100479125976562,
                    0.724661111831665,
                    0.861233115196228,
                    0.8222125172615051
                ],
                [
                    0.91976398229599,
                    1.817237377166748,
                    1.5636035203933716,
                    1.4660521745681763,
                    1.4270315170288086,
                    1.4855624437332153,
                    1.5245829820632935,
                    1.5440932512283325,
                    1.5245829820632935,
                    1.4855624437332153,
                    1.4660521745681763,
                    1.4660521745681763,
                    1.4465417861938477,
                    1.4075212478637695,
                    0.9587845802307129,
                    0.783191978931427,
                    0.783191978931427,
                    1.0953565835952759,
                    0.9587845802307129,
                    0.6075993776321411,
                    0.6661302447319031,
                    0.7636816501617432,
                    0.5880890488624573,
                    0.43200674653053284,
                    0.3149450123310089,
                    0.3929861783981323,
                    0.4905376136302948,
                    0.5295581817626953,
                    0.5880890488624573,
                    0.6271096467971802,
                    0.6661302447319031,
                    0.8222125172615051
                ],
                [
                    -0.09477123618125916,
                    -0.01673007383942604,
                    0.15886253118515015,
                    0.256413996219635,
                    0.3929861783981323,
                    0.5490685105323792,
                    0.6466199159622192,
                    0.7051507830619812,
                    0.7441713809967041,
                    0.9002537131309509,
                    0.9978051781654358,
                    1.1343772411346436,
                    1.3099697828292847,
                    1.4075212478637695,
                    1.2904595136642456,
                    1.1929080486297607,
                    1.1343772411346436,
                    1.0563360452651978,
                    0.9587845802307129,
                    0.8027022480964661,
                    0.6661302447319031,
                    0.4905376136302948,
                    0.3539655804634094,
                    0.256413996219635,
                    0.29543471336364746,
                    0.3734758794307709,
                    0.29543471336364746,
                    0.15886253118515015,
                    0.23690369725227356,
                    0.47102731466293335,
                    0.6271096467971802,
                    0.8222125172615051
                ],
                [
                    -1.421471118927002,
                    -1.7336357831954956,
                    -1.5385328531265259,
                    -1.284899115562439,
                    -1.2068578004837036,
                    -1.1288167238235474,
                    -1.0897960662841797,
                    -1.0312652587890625,
                    -1.0117549896240234,
                    -0.8556725382804871,
                    -0.7191005349159241,
                    -0.5239976048469543,
                    -0.15330210328102112,
                    0.1393522471189499,
                    0.23690369725227356,
                    0.23690369725227356,
                    0.256413996219635,
                    0.23690369725227356,
                    0.11984195560216904,
                    -0.036240365356206894,
                    -0.15330210328102112,
                    -0.19232268631458282,
                    -0.21183297038078308,
                    -0.23134326934814453,
                    -0.17281238734722137,
                    -0.0752609446644783,
                    0.022290505468845367,
                    0.10033166408538818,
                    0.275924414396286,
                    0.43200674653053284,
                    0.5295581817626953,
                    0.6856405138969421
                ],
                [
                    -1.1483269929885864,
                    -1.8311872482299805,
                    -1.8506975173950195,
                    -1.1873475313186646,
                    -1.0897960662841797,
                    -1.421471118927002,
                    -1.6360843181610107,
                    -1.7531460523605347,
                    -1.8897180557250977,
                    -1.9287385940551758,
                    -1.9287385940551758,
                    -1.8311872482299805,
                    -1.401960849761963,
                    -1.1288167238235474,
                    -1.0507755279541016,
                    -1.0117549896240234,
                    -0.836162269115448,
                    -0.6410593390464783,
                    -0.7191005349159241,
                    -0.7386108040809631,
                    -0.6995902061462402,
                    -0.6800799369812012,
                    -0.6020388007164001,
                    -0.4654667377471924,
                    -0.250853568315506,
                    0.08082137256860733,
                    0.47102731466293335,
                    0.47102731466293335,
                    0.2173934131860733,
                    0.275924414396286,
                    0.4515170454978943,
                    0.861233115196228
                ],
                [
                    -1.3434299230575562,
                    -1.7141255140304565,
                    -1.8702077865600586,
                    -1.421471118927002,
                    -0.5825284719467163,
                    -0.7386108040809631,
                    -1.1093063354492188,
                    -1.4995123147964478,
                    -1.8116768598556519,
                    -2.006779909133911,
                    -2.0848209857940674,
                    -2.0848209857940674,
                    -1.5385328531265259,
                    -0.4459564685821533,
                    -0.6995902061462402,
                    -1.0117549896240234,
                    -1.0507755279541016,
                    -1.0117549896240234,
                    -0.9922446608543396,
                    -0.8751828074455261,
                    -0.777631402015686,
                    -0.6020388007164001,
                    -0.2898741364479065,
                    0.1783728301525116,
                    0.6271096467971802,
                    0.6856405138969421,
                    0.4124964475631714,
                    0.0027802155818790197,
                    0.04180079698562622,
                    0.3734758794307709,
                    0.6271096467971802,
                    1.1929080486297607
                ],
                [
                    -1.8897180557250977,
                    -2.0458004474639893,
                    -2.0653107166290283,
                    -2.006779909133911,
                    -1.323919653892517,
                    -1.1093063354492188,
                    -1.304409384727478,
                    -1.5385328531265259,
                    -1.8311872482299805,
                    -2.0848209857940674,
                    -2.1433517932891846,
                    -2.1628620624542236,
                    -1.9287385940551758,
                    0.3929861783981323,
                    1.2709492444992065,
                    0.6661302447319031,
                    0.334455281496048,
                    0.2173934131860733,
                    0.19788311421871185,
                    0.256413996219635,
                    0.23690369725227356,
                    0.3734758794307709,
                    0.5880890488624573,
                    0.5295581817626953,
                    0.04180079698562622,
                    -0.4459564685821533,
                    -0.328894704580307,
                    0.04180079698562622,
                    0.29543471336364746,
                    0.5880890488624573,
                    0.9978051781654358,
                    1.4855624437332153
                ],
                [
                    -1.5385328531265259,
                    -2.0848209857940674,
                    -2.1628620624542236,
                    -2.1433517932891846,
                    -2.0848209857940674,
                    -1.8897180557250977,
                    -1.8897180557250977,
                    -1.9872695207595825,
                    -2.0848209857940674,
                    -2.1628620624542236,
                    -2.1823723316192627,
                    -2.1628620624542236,
                    -2.1823723316192627,
                    -0.972734272480011,
                    0.6271096467971802,
                    0.6661302447319031,
                    0.5880890488624573,
                    0.5295581817626953,
                    0.4515170454978943,
                    0.29543471336364746,
                    0.15886253118515015,
                    -0.15330210328102112,
                    -0.6020388007164001,
                    -0.8751828074455261,
                    -0.8556725382804871,
                    -0.5044873356819153,
                    -0.01673007383942604,
                    0.23690369725227356,
                    0.4124964475631714,
                    0.861233115196228,
                    1.2124183177947998,
                    1.5636035203933716
                ],
                [
                    -0.972734272480011,
                    -1.8116768598556519,
                    -2.2018826007843018,
                    -2.1823723316192627,
                    -2.22139310836792,
                    -2.1238415241241455,
                    -2.0458004474639893,
                    -2.1238415241241455,
                    -2.1823723316192627,
                    -2.22139310836792,
                    -2.22139310836792,
                    -2.2018826007843018,
                    -2.2018826007843018,
                    -2.006779909133911,
                    -1.0702857971191406,
                    -0.89469313621521,
                    -0.914203405380249,
                    -0.8751828074455261,
                    -0.914203405380249,
                    -1.0702857971191406,
                    -1.2653887271881104,
                    -1.401960849761963,
                    -1.323919653892517,
                    -0.836162269115448,
                    -0.23134326934814453,
                    0.04180079698562622,
                    0.11984195560216904,
                    0.275924414396286,
                    0.6466199159622192,
                    1.114866852760315,
                    1.3489903211593628,
                    1.6026241779327393
                ],
                [
                    -0.6215490698814392,
                    -1.3824505805969238,
                    -2.2018826007843018,
                    -2.1823723316192627,
                    -2.22139310836792,
                    -2.1823723316192627,
                    -2.1238415241241455,
                    -2.1823723316192627,
                    -2.22139310836792,
                    -2.22139310836792,
                    -2.22139310836792,
                    -2.22139310836792,
                    -2.22139310836792,
                    -2.1823723316192627,
                    -1.4800019264221191,
                    -1.1678372621536255,
                    -1.323919653892517,
                    -1.3824505805969238,
                    -1.5190225839614868,
                    -1.558043122291565,
                    -1.46049165725708,
                    -1.1288167238235474,
                    -0.6215490698814392,
                    -0.17281238734722137,
                    0.022290505468845367,
                    0.022290505468845367,
                    0.08082137256860733,
                    0.334455281496048,
                    0.7051507830619812,
                    1.1733977794647217,
                    1.4270315170288086,
                    1.6611549854278564
                ],
                [
                    -0.4069358706474304,
                    -1.2458784580230713,
                    -2.1628620624542236,
                    -2.2018826007843018,
                    -2.22139310836792,
                    -2.2018826007843018,
                    -2.1628620624542236,
                    -2.1823723316192627,
                    -2.2018826007843018,
                    -2.22139310836792,
                    -2.22139310836792,
                    -2.2018826007843018,
                    -2.1823723316192627,
                    -2.22139310836792,
                    -1.6751048564910889,
                    -1.304409384727478,
                    -1.7726563215255737,
                    -1.9872695207595825,
                    -1.7921665906906128,
                    -1.1483269929885864,
                    -0.6410593390464783,
                    -0.2898741364479065,
                    -0.05575065314769745,
                    -0.036240365356206894,
                    -0.01673007383942604,
                    0.10033166408538818,
                    0.23690369725227356,
                    0.4515170454978943,
                    0.724661111831665,
                    1.114866852760315,
                    1.4465417861938477,
                    1.7001756429672241
                ],
                [
                    -0.48497703671455383,
                    -1.4995123147964478,
                    -2.006779909133911,
                    -2.1433517932891846,
                    -2.1823723316192627,
                    -2.1433517932891846,
                    -2.1433517932891846,
                    -2.1823723316192627,
                    -2.2018826007843018,
                    -2.2018826007843018,
                    -2.2018826007843018,
                    -2.1823723316192627,
                    -2.1043312549591064,
                    -2.1823723316192627,
                    -1.9677592515945435,
                    -1.7531460523605347,
                    -1.7336357831954956,
                    -1.421471118927002,
                    -1.0117549896240234,
                    -0.6215490698814392,
                    -0.250853568315506,
                    -0.01673007383942604,
                    -0.036240365356206894,
                    -0.05575065314769745,
                    0.022290505468845367,
                    0.23690369725227356,
                    0.4515170454978943,
                    0.6075993776321411,
                    0.91976398229599,
                    1.2709492444992065,
                    1.5440932512283325,
                    1.7001756429672241
                ],
                [
                    -0.6215490698814392,
                    -1.5190225839614868,
                    -1.7921665906906128,
                    -1.8897180557250977,
                    -1.9287385940551758,
                    -1.9287385940551758,
                    -1.9677592515945435,
                    -1.9872695207595825,
                    -1.9872695207595825,
                    -1.9677592515945435,
                    -1.9482489824295044,
                    -1.9287385940551758,
                    -1.8311872482299805,
                    -1.8116768598556519,
                    -1.694615125656128,
                    -1.3434299230575562,
                    -0.914203405380249,
                    -0.6410593390464783,
                    -0.5630182027816772,
                    -0.5044873356819153,
                    -0.17281238734722137,
                    -0.0752609446644783,
                    -0.13379181921482086,
                    -0.036240365356206894,
                    0.10033166408538818,
                    0.256413996219635,
                    0.47102731466293335,
                    0.724661111831665,
                    0.978294849395752,
                    1.3489903211593628,
                    1.6026241779327393,
                    1.6806652545928955
                ],
                [
                    -0.6020388007164001,
                    -1.284899115562439,
                    -1.4800019264221191,
                    -1.4995123147964478,
                    -1.5385328531265259,
                    -1.577553391456604,
                    -1.558043122291565,
                    -1.4800019264221191,
                    -1.440981388092041,
                    -1.421471118927002,
                    -1.3629401922225952,
                    -1.323919653892517,
                    -1.3434299230575562,
                    -1.284899115562439,
                    -1.0702857971191406,
                    -0.777631402015686,
                    -0.6020388007164001,
                    -0.42644616961479187,
                    -0.328894704580307,
                    -0.328894704580307,
                    -0.13379181921482086,
                    -0.15330210328102112,
                    -0.11428152769804001,
                    0.061311084777116776,
                    0.1783728301525116,
                    0.3734758794307709,
                    0.5295581817626953,
                    0.7636816501617432,
                    0.9587845802307129,
                    1.2514389753341675,
                    1.5050727128982544,
                    1.6611549854278564
                ]
            ]
        ]
    ]
}
docs/AKS-HCI/notebooks/distributed-cifar10/test_request_pytorch/cifar_test_input_img_0_cat_pytorch.json METASEP
{
    "instances": [
        [
            [
                [
                    0.6337511539459229,
                    0.6531360745429993,
                    0.7694455981254578,
                    0.7888305187225342,
                    0.6725209951400757,
                    0.5949813723564148,
                    0.7112908363342285,
                    0.6531360745429993,
                    0.6337511539459229,
                    0.6531360745429993,
                    0.6919059157371521,
                    0.6725209951400757,
                    0.6919059157371521,
                    0.7888305187225342,
                    0.8469852805137634,
                    0.8663701415061951,
                    0.8082154393196106,
                    0.7112908363342285,
                    0.6725209951400757,
                    0.6725209951400757,
                    0.5949813723564148,
                    0.4592869281768799,
                    0.4786718487739563,
                    0.43990203738212585,
                    0.4592869281768799,
                    0.3429774343967438,
                    0.2848227024078369,
                    0.30420762300491333,
                    0.3429774343967438,
                    0.22666795551776886,
                    0.013433732092380524,
                    -0.18041542172431946
                ],
                [
                    0.5174416899681091,
                    0.4980567693710327,
                    0.6531360745429993,
                    0.7888305187225342,
                    0.7112908363342285,
                    0.6725209951400757,
                    0.7500606775283813,
                    0.7112908363342285,
                    0.7306757569313049,
                    0.5949813723564148,
                    0.5755964517593384,
                    0.6531360745429993,
                    0.7306757569313049,
                    0.8663701415061951,
                    0.8857550621032715,
                    0.8857550621032715,
                    0.8469852805137634,
                    0.6725209951400757,
                    0.556211531162262,
                    0.4980567693710327,
                    0.3817472755908966,
                    0.2654377818107605,
                    0.2848227024078369,
                    0.30420762300491333,
                    0.4592869281768799,
                    0.42051711678504944,
                    0.3817472755908966,
                    0.32359254360198975,
                    0.3429774343967438,
                    0.20728303492069244,
                    -0.005951183382421732,
                    -0.1222606748342514
                ],
                [
                    0.4980567693710327,
                    0.4980567693710327,
                    0.6337511539459229,
                    0.8082154393196106,
                    0.6725209951400757,
                    0.7306757569313049,
                    0.7694455981254578,
                    0.7694455981254578,
                    0.7306757569313049,
                    0.7112908363342285,
                    0.6337511539459229,
                    0.6143662929534912,
                    0.6919059157371521,
                    0.7888305187225342,
                    0.8082154393196106,
                    0.8469852805137634,
                    0.8663701415061951,
                    0.6531360745429993,
                    0.3817472755908966,
                    -0.08349084854125977,
                    -0.29672491550445557,
                    -0.5293439030647278,
                    -0.4711891710758209,
                    -0.2191852629184723,
                    -0.10287576168775558,
                    0.1685132086277008,
                    0.3429774343967438,
                    0.2848227024078369,
                    0.32359254360198975,
                    0.2654377818107605,
                    0.09097354114055634,
                    -0.10287576168775558
                ],
                [
                    0.5755964517593384,
                    0.5755964517593384,
                    0.6725209951400757,
                    0.9439098238945007,
                    0.8082154393196106,
                    0.8082154393196106,
                    0.8469852805137634,
                    0.8469852805137634,
                    0.7694455981254578,
                    0.7694455981254578,
                    0.8082154393196106,
                    1.2734533548355103,
                    1.00206458568573,
                    0.6143662929534912,
                    0.7112908363342285,
                    0.7500606775283813,
                    0.6337511539459229,
                    0.4592869281768799,
                    -0.4130344092845917,
                    -0.4324193298816681,
                    -0.5293439030647278,
                    -0.6456534266471863,
                    -0.8782724142074585,
                    -0.9945818781852722,
                    -0.761962890625,
                    -0.8201176524162292,
                    -0.2385701686143875,
                    0.12974336743354797,
                    0.2848227024078369,
                    0.2848227024078369,
                    0.20728303492069244,
                    0.03281864896416664
                ],
                [
                    0.5755964517593384,
                    0.5949813723564148,
                    0.6919059157371521,
                    0.8663701415061951,
                    0.8469852805137634,
                    0.7306757569313049,
                    0.8469852805137634,
                    0.7888305187225342,
                    0.7500606775283813,
                    0.7500606775283813,
                    0.9245249032974243,
                    2.3396236896514893,
                    1.350993037223816,
                    0.4980567693710327,
                    0.401132196187973,
                    0.32359254360198975,
                    -0.27733999490737915,
                    -0.9170421957969666,
                    -0.7813478112220764,
                    -0.2385701686143875,
                    -0.25795507431030273,
                    -0.37426456809043884,
                    -0.5487288236618042,
                    -0.6262685060501099,
                    -0.9945818781852722,
                    -0.8007327318191528,
                    -0.7813478112220764,
                    -0.39364948868751526,
                    0.0522037111222744,
                    0.24605286121368408,
                    0.1491282880306244,
                    0.07158862799406052
                ],
                [
                    0.43990203738212585,
                    0.1491282880306244,
                    0.09097354114055634,
                    0.42051711678504944,
                    0.6919059157371521,
                    0.7694455981254578,
                    0.8082154393196106,
                    0.8082154393196106,
                    0.7306757569313049,
                    0.7694455981254578,
                    0.7306757569313049,
                    1.0602192878723145,
                    0.6143662929534912,
                    0.0522037111222744,
                    -0.5487288236618042,
                    -1.1496611833572388,
                    -1.0915064811706543,
                    -1.1496611833572388,
                    -0.7038081288337708,
                    -0.14164559543132782,
                    -0.06410592794418335,
                    -0.1222606748342514,
                    -0.2191852629184723,
                    -0.6068835854530334,
                    -0.5099589824676514,
                    -0.6650383472442627,
                    -1.3047406673431396,
                    -1.1302763223648071,
                    -0.3354947566986084,
                    0.2848227024078369,
                    0.24605286121368408,
                    0.1685132086277008
                ],
                [
                    0.03281864896416664,
                    -0.316109836101532,
                    -1.5179747343063354,
                    -0.7231930494308472,
                    0.5368266105651855,
                    0.8663701415061951,
                    0.827600359916687,
                    0.8663701415061951,
                    0.8469852805137634,
                    0.7888305187225342,
                    0.7500606775283813,
                    0.42051711678504944,
                    0.07158862799406052,
                    0.03281864896416664,
                    -0.49057406187057495,
                    -1.110891342163086,
                    -0.9170421957969666,
                    -1.0333516597747803,
                    -0.8201176524162292,
                    0.12974336743354797,
                    0.401132196187973,
                    -0.025336099788546562,
                    -0.39364948868751526,
                    -0.3548796772956848,
                    -0.19980034232139587,
                    -0.7813478112220764,
                    -1.2078160047531128,
                    -1.5373597145080566,
                    -0.8976573348045349,
                    0.12974336743354797,
                    0.30420762300491333,
                    0.1685132086277008
                ],
                [
                    0.11035845428705215,
                    -0.5099589824676514,
                    -1.6148992776870728,
                    -1.072121500968933,
                    0.3429774343967438,
                    0.8082154393196106,
                    0.7694455981254578,
                    0.827600359916687,
                    0.8857550621032715,
                    0.6919059157371521,
                    0.2848227024078369,
                    -0.10287576168775558,
                    0.09097354114055634,
                    0.3623623549938202,
                    -0.18041542172431946,
                    -0.7231930494308472,
                    -0.6650383472442627,
                    -0.7813478112220764,
                    -0.936427116394043,
                    -0.025336099788546562,
                    0.7306757569313049,
                    0.20728303492069244,
                    -0.4518042504787445,
                    -0.37426456809043884,
                    -0.49057406187057495,
                    -0.7813478112220764,
                    -1.3822803497314453,
                    -1.4792048931121826,
                    -1.3241256475448608,
                    -0.3548796772956848,
                    0.24605286121368408,
                    0.20728303492069244
                ],
                [
                    0.8663701415061951,
                    -0.4324193298816681,
                    -1.3822803497314453,
                    -0.025336099788546562,
                    0.5368266105651855,
                    0.6919059157371521,
                    0.7306757569313049,
                    0.7888305187225342,
                    0.7694455981254578,
                    0.9439098238945007,
                    -0.2385701686143875,
                    -0.005951183382421732,
                    0.6143662929534912,
                    0.5949813723564148,
                    -0.08349084854125977,
                    -0.761962890625,
                    -0.8395025730133057,
                    -0.8007327318191528,
                    -0.8782724142074585,
                    -0.8588874936103821,
                    0.24605286121368408,
                    0.401132196187973,
                    -0.2385701686143875,
                    -0.7425779700279236,
                    -0.8201176524162292,
                    -0.761962890625,
                    -1.0527366399765015,
                    -1.3435105085372925,
                    -1.6536691188812256,
                    -0.9945818781852722,
                    0.1491282880306244,
                    0.22666795551776886
                ],
                [
                    1.0602192878723145,
                    0.1685132086277008,
                    -0.6068835854530334,
                    0.556211531162262,
                    0.9439098238945007,
                    0.6337511539459229,
                    0.5949813723564148,
                    0.5368266105651855,
                    1.583612084388733,
                    2.1651594638824463,
                    1.583612084388733,
                    0.5949813723564148,
                    0.9439098238945007,
                    0.43990203738212585,
                    -0.005951183382421732,
                    -0.6262685060501099,
                    -0.761962890625,
                    -0.9945818781852722,
                    -1.285355806350708,
                    -0.9558120369911194,
                    0.22666795551776886,
                    0.3429774343967438,
                    0.1491282880306244,
                    -0.37426456809043884,
                    -0.761962890625,
                    -0.7425779700279236,
                    -0.8007327318191528,
                    -0.9751969575881958,
                    -1.459820032119751,
                    -1.6536691188812256,
                    -0.587498664855957,
                    0.12974336743354797
                ],
                [
                    1.1183741092681885,
                    -0.3354947566986084,
                    0.32359254360198975,
                    0.7694455981254578,
                    1.00206458568573,
                    0.5755964517593384,
                    0.6531360745429993,
                    -0.06410592794418335,
                    1.6999214887619019,
                    2.1651594638824463,
                    1.8356159925460815,
                    0.7500606775283813,
                    1.1183741092681885,
                    0.5949813723564148,
                    -0.005951183382421732,
                    -0.10287576168775558,
                    -0.9170421957969666,
                    -0.8782724142074585,
                    -1.5567445755004883,
                    -0.6650383472442627,
                    0.9632947444915771,
                    0.6143662929534912,
                    0.5755964517593384,
                    -0.3548796772956848,
                    -0.7425779700279236,
                    -0.4324193298816681,
                    -0.7231930494308472,
                    -0.9170421957969666,
                    -1.285355806350708,
                    -1.634284257888794,
                    -1.285355806350708,
                    -0.4130344092845917
                ],
                [
                    1.2152986526489258,
                    -0.49057406187057495,
                    0.18789811432361603,
                    0.8663701415061951,
                    1.1959137916564941,
                    0.7888305187225342,
                    0.9245249032974243,
                    0.1685132086277008,
                    -0.16103051602840424,
                    1.3316081762313843,
                    1.4285327196121216,
                    0.8663701415061951,
                    1.1571439504623413,
                    1.2346835136413574,
                    0.1685132086277008,
                    -0.16103051602840424,
                    -0.4518042504787445,
                    -0.8007327318191528,
                    -1.6924389600753784,
                    -0.005951183382421732,
                    1.6417667865753174,
                    0.6725209951400757,
                    0.401132196187973,
                    -0.6262685060501099,
                    -0.8201176524162292,
                    -0.6068835854530334,
                    -0.4130344092845917,
                    -0.7813478112220764,
                    -1.0139667987823486,
                    -1.3628954887390137,
                    -1.227200984954834,
                    -0.9558120369911194
                ],
                [
                    1.2346835136413574,
                    -0.6844232082366943,
                    0.03281864896416664,
                    0.9632947444915771,
                    0.9439098238945007,
                    0.7888305187225342,
                    1.0214494466781616,
                    0.6531360745429993,
                    -0.5487288236618042,
                    0.827600359916687,
                    0.827600359916687,
                    0.22666795551776886,
                    1.176528811454773,
                    1.7580763101577759,
                    0.6725209951400757,
                    -0.04472101479768753,
                    -0.10287576168775558,
                    -0.19980034232139587,
                    -1.459820032119751,
                    0.4786718487739563,
                    1.3316081762313843,
                    0.5755964517593384,
                    -0.04472101479768753,
                    -0.6650383472442627,
                    -0.8007327318191528,
                    -0.8007327318191528,
                    -0.587498664855957,
                    -0.761962890625,
                    -0.8007327318191528,
                    -1.0139667987823486,
                    -0.8976573348045349,
                    -1.0139667987823486
                ],
                [
                    1.2346835136413574,
                    -0.6262685060501099,
                    0.5174416899681091,
                    1.1571439504623413,
                    -0.1222606748342514,
                    0.20728303492069244,
                    0.9245249032974243,
                    0.8082154393196106,
                    -0.4324193298816681,
                    0.42051711678504944,
                    0.3817472755908966,
                    0.8082154393196106,
                    1.2346835136413574,
                    1.9519253969192505,
                    1.0602192878723145,
                    0.30420762300491333,
                    0.013433732092380524,
                    -0.16103051602840424,
                    -1.0527366399765015,
                    0.556211531162262,
                    1.176528811454773,
                    0.4592869281768799,
                    -0.2191852629184723,
                    -0.7425779700279236,
                    -0.8782724142074585,
                    -1.0333516597747803,
                    -0.8782724142074585,
                    -0.5099589824676514,
                    -0.49057406187057495,
                    -0.6844232082366943,
                    -0.5487288236618042,
                    -0.6068835854530334
                ],
                [
                    1.3316081762313843,
                    -0.3354947566986084,
                    0.827600359916687,
                    1.176528811454773,
                    -0.39364948868751526,
                    -0.5099589824676514,
                    0.5949813723564148,
                    0.8082154393196106,
                    -0.49057406187057495,
                    -0.19980034232139587,
                    0.24605286121368408,
                    1.40914785861969,
                    1.2540684938430786,
                    0.9051399827003479,
                    0.3817472755908966,
                    0.556211531162262,
                    0.401132196187973,
                    -0.4324193298816681,
                    -1.0527366399765015,
                    0.5174416899681091,
                    1.0408344268798828,
                    0.22666795551776886,
                    0.09097354114055634,
                    -0.29672491550445557,
                    -0.7813478112220764,
                    -0.6650383472442627,
                    -0.587498664855957,
                    -0.316109836101532,
                    -0.19980034232139587,
                    -0.49057406187057495,
                    -0.5487288236618042,
                    -0.16103051602840424
                ],
                [
                    1.3897628784179688,
                    0.12974336743354797,
                    0.9051399827003479,
                    1.1377589702606201,
                    0.09097354114055634,
                    -0.9170421957969666,
                    0.2848227024078369,
                    0.5755964517593384,
                    -0.19980034232139587,
                    0.09097354114055634,
                    0.3429774343967438,
                    2.0294651985168457,
                    2.2620840072631836,
                    0.3817472755908966,
                    0.18789811432361603,
                    0.11035845428705215,
                    -0.08349084854125977,
                    -0.3354947566986084,
                    -0.587498664855957,
                    0.3623623549938202,
                    0.827600359916687,
                    0.5174416899681091,
                    -0.25795507431030273,
                    -0.7425779700279236,
                    -1.0527366399765015,
                    -0.7425779700279236,
                    -0.39364948868751526,
                    -0.25795507431030273,
                    -0.10287576168775558,
                    -0.4324193298816681,
                    -0.08349084854125977,
                    0.20728303492069244
                ],
                [
                    1.5060724020004272,
                    0.401132196187973,
                    0.827600359916687,
                    1.2734533548355103,
                    0.827600359916687,
                    -0.9170421957969666,
                    0.013433732092380524,
                    0.24605286121368408,
                    0.24605286121368408,
                    -0.5681137442588806,
                    0.556211531162262,
                    0.9245249032974243,
                    0.7112908363342285,
                    0.2848227024078369,
                    -0.2385701686143875,
                    -0.2385701686143875,
                    -0.4711891710758209,
                    -0.39364948868751526,
                    -0.25795507431030273,
                    0.8857550621032715,
                    0.5949813723564148,
                    0.43990203738212585,
                    0.18789811432361603,
                    -0.316109836101532,
                    -0.9170421957969666,
                    -0.8976573348045349,
                    -0.6068835854530334,
                    -0.4711891710758209,
                    -0.3548796772956848,
                    -0.005951183382421732,
                    0.4980567693710327,
                    0.3623623549938202
                ],
                [
                    1.719306468963623,
                    0.7306757569313049,
                    0.7500606775283813,
                    1.1183741092681885,
                    0.9826796650886536,
                    -0.6068835854530334,
                    -0.5681137442588806,
                    0.5949813723564148,
                    0.43990203738212585,
                    -0.37426456809043884,
                    0.07158862799406052,
                    -0.14164559543132782,
                    -0.2191852629184723,
                    -0.18041542172431946,
                    -0.4518042504787445,
                    -0.19980034232139587,
                    -0.761962890625,
                    -0.4711891710758209,
                    0.3623623549938202,
                    -0.14164559543132782,
                    -1.110891342163086,
                    0.0522037111222744,
                    0.1491282880306244,
                    -0.9751969575881958,
                    -1.2659708261489868,
                    -1.3047406673431396,
                    -1.0527366399765015,
                    -0.4518042504787445,
                    -0.18041542172431946,
                    0.3429774343967438,
                    0.4786718487739563,
                    0.2848227024078369
                ],
                [
                    1.6805366277694702,
                    1.0214494466781616,
                    0.8082154393196106,
                    0.9245249032974243,
                    0.9826796650886536,
                    -0.025336099788546562,
                    -0.761962890625,
                    0.30420762300491333,
                    0.5368266105651855,
                    0.18789811432361603,
                    -0.4130344092845917,
                    -0.936427116394043,
                    0.1685132086277008,
                    -0.025336099788546562,
                    0.07158862799406052,
                    0.42051711678504944,
                    -0.7813478112220764,
                    -0.6456534266471863,
                    0.4786718487739563,
                    0.12974336743354797,
                    -0.16103051602840424,
                    -0.3548796772956848,
                    -0.9751969575881958,
                    -1.1884310245513916,
                    -1.5761295557022095,
                    -1.16904616355896,
                    -0.761962890625,
                    0.1491282880306244,
                    0.5755964517593384,
                    0.6725209951400757,
                    0.556211531162262,
                    0.4980567693710327
                ],
                [
                    1.4285327196121216,
                    1.1959137916564941,
                    0.8857550621032715,
                    0.9439098238945007,
                    1.00206458568573,
                    0.3623623549938202,
                    -0.761962890625,
                    -0.1222606748342514,
                    -0.06410592794418335,
                    0.22666795551776886,
                    0.3623623549938202,
                    -1.072121500968933,
                    0.07158862799406052,
                    -0.3354947566986084,
                    0.3817472755908966,
                    1.1377589702606201,
                    -0.18041542172431946,
                    -1.0139667987823486,
                    0.11035845428705215,
                    0.22666795551776886,
                    0.1685132086277008,
                    -0.7038081288337708,
                    -1.4404350519180298,
                    -1.4210501909255981,
                    -1.5179747343063354,
                    -0.6844232082366943,
                    -0.08349084854125977,
                    0.7306757569313049,
                    0.8857550621032715,
                    0.7500606775283813,
                    0.6337511539459229,
                    0.4592869281768799
                ],
                [
                    0.7694455981254578,
                    1.350993037223816,
                    1.0408344268798828,
                    1.00206458568573,
                    1.0796042680740356,
                    0.5174416899681091,
                    -0.5099589824676514,
                    0.11035845428705215,
                    0.8857550621032715,
                    -0.4324193298816681,
                    -0.6262685060501099,
                    -0.8782724142074585,
                    -0.6262685060501099,
                    -0.06410592794418335,
                    1.0214494466781616,
                    1.2734533548355103,
                    0.4786718487739563,
                    -0.49057406187057495,
                    -0.7038081288337708,
                    -0.7425779700279236,
                    -1.2659708261489868,
                    -1.5373597145080566,
                    -1.6924389600753784,
                    -1.9638278484344482,
                    -1.5373597145080566,
                    -1.2659708261489868,
                    -0.3354947566986084,
                    0.3623623549938202,
                    0.3623623549938202,
                    0.0522037111222744,
                    0.03281864896416664,
                    -0.10287576168775558
                ],
                [
                    -0.16103051602840424,
                    1.350993037223816,
                    1.00206458568573,
                    1.0214494466781616,
                    1.0796042680740356,
                    0.24605286121368408,
                    -0.8201176524162292,
                    0.4786718487739563,
                    2.3202388286590576,
                    1.8162310123443604,
                    0.1491282880306244,
                    0.1685132086277008,
                    0.4592869281768799,
                    0.9826796650886536,
                    1.2540684938430786,
                    1.3316081762313843,
                    0.827600359916687,
                    -0.005951183382421732,
                    -0.29672491550445557,
                    -1.2465859651565552,
                    -1.7505937814712524,
                    -1.769978642463684,
                    -1.4792048931121826,
                    -1.3047406673431396,
                    -1.2465859651565552,
                    -1.3047406673431396,
                    -1.0915064811706543,
                    -1.0333516597747803,
                    -0.9170421957969666,
                    -1.0915064811706543,
                    -1.285355806350708,
                    -1.3628954887390137
                ],
                [
                    -0.8976573348045349,
                    0.9632947444915771,
                    0.9439098238945007,
                    0.9826796650886536,
                    1.00206458568573,
                    0.2848227024078369,
                    -0.316109836101532,
                    1.6611517667770386,
                    2.475318193435669,
                    2.4559333324432373,
                    1.6029969453811646,
                    -0.025336099788546562,
                    -0.2191852629184723,
                    -0.025336099788546562,
                    -0.18041542172431946,
                    -0.06410592794418335,
                    -0.4130344092845917,
                    -1.110891342163086,
                    -1.110891342163086,
                    -1.2659708261489868,
                    -1.4210501909255981,
                    -1.459820032119751,
                    -1.4404350519180298,
                    -1.3435105085372925,
                    -1.3435105085372925,
                    -1.4404350519180298,
                    -1.5955144166946411,
                    -1.4404350519180298,
                    -1.285355806350708,
                    -1.4985898733139038,
                    -1.5955144166946411,
                    -1.6148992776870728
                ],
                [
                    -1.634284257888794,
                    -0.5681137442588806,
                    0.3623623549938202,
                    0.827600359916687,
                    1.0214494466781616,
                    0.7694455981254578,
                    0.7694455981254578,
                    2.3396236896514893,
                    2.475318193435669,
                    1.9713103771209717,
                    -0.29672491550445557,
                    -1.2659708261489868,
                    -1.401665210723877,
                    -1.4792048931121826,
                    -1.4792048931121826,
                    -1.4985898733139038,
                    -1.5567445755004883,
                    -1.6148992776870728,
                    -1.5373597145080566,
                    -1.6148992776870728,
                    -1.6924389600753784,
                    -1.5373597145080566,
                    -1.5373597145080566,
                    -1.5955144166946411,
                    -1.6148992776870728,
                    -1.5373597145080566,
                    -1.5373597145080566,
                    -1.459820032119751,
                    -1.3628954887390137,
                    -1.401665210723877,
                    -1.4404350519180298,
                    -1.5567445755004883
                ],
                [
                    -1.8669031858444214,
                    -1.8669031858444214,
                    -1.285355806350708,
                    0.11035845428705215,
                    0.7888305187225342,
                    0.12974336743354797,
                    1.3316081762313843,
                    2.4947030544281006,
                    2.242699146270752,
                    0.30420762300491333,
                    -1.2465859651565552,
                    -1.459820032119751,
                    -1.459820032119751,
                    -1.4404350519180298,
                    -1.4792048931121826,
                    -1.459820032119751,
                    -1.5179747343063354,
                    -1.6148992776870728,
                    -1.6730540990829468,
                    -1.769978642463684,
                    -1.7505937814712524,
                    -1.6730540990829468,
                    -1.6924389600753784,
                    -1.6148992776870728,
                    -1.5567445755004883,
                    -1.3435105085372925,
                    -1.227200984954834,
                    -1.285355806350708,
                    -1.3435105085372925,
                    -1.459820032119751,
                    -1.5373597145080566,
                    -1.4404350519180298
                ],
                [
                    -1.4985898733139038,
                    -1.8475183248519897,
                    -1.769978642463684,
                    -1.0139667987823486,
                    0.0522037111222744,
                    0.0522037111222744,
                    1.7386913299560547,
                    2.5140879154205322,
                    1.1959137916564941,
                    -1.1496611833572388,
                    -1.3822803497314453,
                    -1.459820032119751,
                    -1.4210501909255981,
                    -1.4210501909255981,
                    -1.5373597145080566,
                    -1.5567445755004883,
                    -1.5955144166946411,
                    -1.634284257888794,
                    -1.7312088012695312,
                    -1.6730540990829468,
                    -1.6536691188812256,
                    -1.6536691188812256,
                    -1.5955144166946411,
                    -1.5373597145080566,
                    -1.285355806350708,
                    -1.227200984954834,
                    -1.1884310245513916,
                    -1.285355806350708,
                    -1.3822803497314453,
                    -1.459820032119751,
                    -1.072121500968933,
                    -0.8201176524162292
                ],
                [
                    -1.4210501909255981,
                    -1.7505937814712524,
                    -1.828133463859558,
                    -1.634284257888794,
                    -1.1496611833572388,
                    0.0522037111222744,
                    1.9131556749343872,
                    2.2233142852783203,
                    -0.025336099788546562,
                    -1.3047406673431396,
                    -1.4792048931121826,
                    -1.3435105085372925,
                    -1.3822803497314453,
                    -1.5761295557022095,
                    -1.5761295557022095,
                    -1.5179747343063354,
                    -1.5373597145080566,
                    -1.5955144166946411,
                    -1.5955144166946411,
                    -1.5761295557022095,
                    -1.5761295557022095,
                    -1.5567445755004883,
                    -1.3822803497314453,
                    -1.3047406673431396,
                    -1.3822803497314453,
                    -1.5373597145080566,
                    -1.5955144166946411,
                    -1.7312088012695312,
                    -1.4404350519180298,
                    -1.0139667987823486,
                    -0.7813478112220764,
                    -0.9558120369911194
                ],
                [
                    -1.459820032119751,
                    -1.7505937814712524,
                    -1.8669031858444214,
                    -1.7505937814712524,
                    -1.5761295557022095,
                    -0.9170421957969666,
                    1.486687421798706,
                    1.6611517667770386,
                    -0.5487288236618042,
                    -1.16904616355896,
                    -1.3822803497314453,
                    -1.4985898733139038,
                    -1.3047406673431396,
                    -1.4985898733139038,
                    -1.6536691188812256,
                    -1.5567445755004883,
                    -1.5179747343063354,
                    -1.4985898733139038,
                    -1.5179747343063354,
                    -1.5373597145080566,
                    -1.4404350519180298,
                    -1.6730540990829468,
                    -1.6730540990829468,
                    -1.4985898733139038,
                    -1.5179747343063354,
                    -1.6730540990829468,
                    -1.8862881660461426,
                    -1.6536691188812256,
                    -1.1302763223648071,
                    -1.1302763223648071,
                    -1.5373597145080566,
                    -1.4404350519180298
                ],
                [
                    -1.459820032119751,
                    -1.7505937814712524,
                    -1.808748483657837,
                    -1.7893636226654053,
                    -1.634284257888794,
                    -1.5373597145080566,
                    -0.4130344092845917,
                    0.8663701415061951,
                    -1.1884310245513916,
                    -1.3822803497314453,
                    -1.4210501909255981,
                    -1.401665210723877,
                    -1.2465859651565552,
                    -1.3047406673431396,
                    -1.3822803497314453,
                    -1.5567445755004883,
                    -1.6148992776870728,
                    -1.634284257888794,
                    -1.5373597145080566,
                    -1.4792048931121826,
                    -1.5373597145080566,
                    -1.6148992776870728,
                    -1.6536691188812256,
                    -1.6730540990829468,
                    -1.7118239402770996,
                    -1.6536691188812256,
                    -1.5761295557022095,
                    -1.2078160047531128,
                    -1.5179747343063354,
                    -1.828133463859558,
                    -2.138292074203491,
                    -1.4404350519180298
                ],
                [
                    -1.110891342163086,
                    -1.6148992776870728,
                    -1.828133463859558,
                    -1.6924389600753784,
                    -1.7118239402770996,
                    -1.5955144166946411,
                    -1.6148992776870728,
                    -1.0527366399765015,
                    -1.4792048931121826,
                    -1.828133463859558,
                    -1.9056730270385742,
                    -1.6924389600753784,
                    -1.4792048931121826,
                    -1.3435105085372925,
                    -1.3047406673431396,
                    -1.401665210723877,
                    -1.3435105085372925,
                    -1.2659708261489868,
                    -1.3241256475448608,
                    -1.401665210723877,
                    -1.459820032119751,
                    -1.5567445755004883,
                    -1.6730540990829468,
                    -1.7893636226654053,
                    -1.6148992776870728,
                    -1.227200984954834,
                    -0.8976573348045349,
                    -1.0139667987823486,
                    -1.3435105085372925,
                    -1.6924389600753784,
                    -2.1770617961883545,
                    -1.6536691188812256
                ],
                [
                    -1.2465859651565552,
                    -1.4792048931121826,
                    -1.7505937814712524,
                    -1.5955144166946411,
                    -1.6730540990829468,
                    -1.6148992776870728,
                    -1.5761295557022095,
                    -1.6536691188812256,
                    -1.6148992776870728,
                    -1.9056730270385742,
                    -1.9832127094268799,
                    -1.8475183248519897,
                    -1.9056730270385742,
                    -1.8669031858444214,
                    -1.7312088012695312,
                    -1.5179747343063354,
                    -1.3435105085372925,
                    -1.227200984954834,
                    -1.1496611833572388,
                    -0.9751969575881958,
                    -1.0915064811706543,
                    -1.4792048931121826,
                    -1.5955144166946411,
                    -1.5955144166946411,
                    -1.2659708261489868,
                    -0.7813478112220764,
                    -0.316109836101532,
                    -0.6262685060501099,
                    -1.2659708261489868,
                    -1.9250580072402954,
                    -1.8669031858444214,
                    -2.041367530822754
                ],
                [
                    -1.3822803497314453,
                    -1.3435105085372925,
                    -1.5567445755004883,
                    -1.5955144166946411,
                    -1.6536691188812256,
                    -1.6536691188812256,
                    -1.6536691188812256,
                    -1.6924389600753784,
                    -1.7312088012695312,
                    -1.9250580072402954,
                    -2.0025975704193115,
                    -1.8669031858444214,
                    -1.944442868232727,
                    -1.8669031858444214,
                    -2.0607523918151855,
                    -2.080137252807617,
                    -1.808748483657837,
                    -1.5179747343063354,
                    -1.2465859651565552,
                    -0.9945818781852722,
                    -1.1496611833572388,
                    -1.401665210723877,
                    -1.4210501909255981,
                    -1.5567445755004883,
                    -1.1302763223648071,
                    -0.7038081288337708,
                    -0.39364948868751526,
                    -0.7038081288337708,
                    -1.4985898733139038,
                    -1.9638278484344482,
                    -1.769978642463684,
                    -2.0219826698303223
                ]
            ],
            [
                [
                    -0.21556824445724487,
                    -0.2352350950241089,
                    -0.1369008719921112,
                    -0.09756718575954437,
                    -0.21556824445724487,
                    -0.2745687663555145,
                    -0.15656772255897522,
                    -0.19590140879154205,
                    -0.2352350950241089,
                    -0.19590140879154205,
                    -0.1369008719921112,
                    -0.2352350950241089,
                    -0.2352350950241089,
                    -0.11723402887582779,
                    -0.11723402887582779,
                    -0.07790034264326096,
                    -0.11723402887582779,
                    -0.19590140879154205,
                    -0.2352350950241089,
                    -0.21556824445724487,
                    -0.2745687663555145,
                    -0.31390246748924255,
                    -0.31390246748924255,
                    -0.33356931805610657,
                    -0.31390246748924255,
                    -0.43190351128578186,
                    -0.4909040629863739,
                    -0.5105708837509155,
                    -0.5105708837509155,
                    -0.5499045848846436,
                    -0.6285719275474548,
                    -0.7465730309486389
                ],
                [
                    -0.21556824445724487,
                    -0.2549019455909729,
                    -0.17623455822467804,
                    -0.1369008719921112,
                    -0.21556824445724487,
                    -0.19590140879154205,
                    -0.11723402887582779,
                    -0.17623455822467804,
                    -0.1369008719921112,
                    -0.2549019455909729,
                    -0.2352350950241089,
                    -0.2549019455909729,
                    -0.19590140879154205,
                    -0.07790034264326096,
                    -0.11723402887582779,
                    -0.15656772255897522,
                    -0.15656772255897522,
                    -0.2352350950241089,
                    -0.21556824445724487,
                    -0.15656772255897522,
                    -0.2549019455909729,
                    -0.3729029893875122,
                    -0.41223669052124023,
                    -0.4515703618526459,
                    -0.3532361388206482,
                    -0.41223669052124023,
                    -0.41223669052124023,
                    -0.5105708837509155,
                    -0.4909040629863739,
                    -0.5499045848846436,
                    -0.6285719275474548,
                    -0.6875724792480469
                ],
                [
                    -0.2549019455909729,
                    -0.2745687663555145,
                    -0.2352350950241089,
                    -0.2352350950241089,
                    -0.33356931805610657,
                    -0.15656772255897522,
                    -0.11723402887582779,
                    -0.11723402887582779,
                    -0.15656772255897522,
                    -0.15656772255897522,
                    -0.17623455822467804,
                    -0.2745687663555145,
                    -0.2352350950241089,
                    -0.15656772255897522,
                    -0.17623455822467804,
                    -0.19590140879154205,
                    -0.1369008719921112,
                    -0.17623455822467804,
                    -0.2352350950241089,
                    -0.5302377343177795,
                    -0.6482387781143188,
                    -0.8842409253120422,
                    -0.9039077758789062,
                    -0.7465730309486389,
                    -0.7269061803817749,
                    -0.5302377343177795,
                    -0.3925698399543762,
                    -0.4712372124195099,
                    -0.4712372124195099,
                    -0.4909040629863739,
                    -0.5499045848846436,
                    -0.6679056286811829
                ],
                [
                    -0.31390246748924255,
                    -0.2549019455909729,
                    -0.2745687663555145,
                    -0.21556824445724487,
                    -0.2549019455909729,
                    -0.11723402887582779,
                    -0.05823349952697754,
                    -0.07790034264326096,
                    -0.15656772255897522,
                    -0.11723402887582779,
                    0.0007670287159271538,
                    0.45310458540916443,
                    0.13843508064746857,
                    -0.2352350950241089,
                    -0.15656772255897522,
                    -0.17623455822467804,
                    -0.21556824445724487,
                    -0.2352350950241089,
                    -0.8449072241783142,
                    -0.7072393298149109,
                    -0.6482387781143188,
                    -0.6482387781143188,
                    -0.9432414174079895,
                    -1.1792436838150024,
                    -1.0415756702423096,
                    -1.1989104747772217,
                    -0.7465730309486389,
                    -0.4909040629863739,
                    -0.41223669052124023,
                    -0.43190351128578186,
                    -0.4712372124195099,
                    -0.5695714354515076
                ],
                [
                    -0.31390246748924255,
                    -0.17623455822467804,
                    -0.15656772255897522,
                    -0.17623455822467804,
                    -0.17623455822467804,
                    -0.19590140879154205,
                    -0.05823349952697754,
                    -0.1369008719921112,
                    -0.19590140879154205,
                    -0.1369008719921112,
                    0.09910139441490173,
                    1.790449857711792,
                    0.6497730016708374,
                    -0.17623455822467804,
                    -0.2352350950241089,
                    -0.29423561692237854,
                    -0.8449072241783142,
                    -1.3759119510650635,
                    -1.0612424612045288,
                    -0.3925698399543762,
                    -0.2549019455909729,
                    -0.17623455822467804,
                    -0.41223669052124023,
                    -0.5695714354515076,
                    -1.0022419691085815,
                    -0.8842409253120422,
                    -0.9825751185417175,
                    -0.7859066724777222,
                    -0.5302377343177795,
                    -0.43190351128578186,
                    -0.5695714354515076,
                    -0.5892382860183716
                ],
                [
                    -0.2745687663555145,
                    -0.3729029893875122,
                    -0.4515703618526459,
                    -0.21556824445724487,
                    -0.15656772255897522,
                    -0.19590140879154205,
                    -0.1369008719921112,
                    -0.15656772255897522,
                    -0.2352350950241089,
                    -0.1369008719921112,
                    -0.09756718575954437,
                    0.2957698404788971,
                    -0.018899815157055855,
                    -0.41223669052124023,
                    -0.9432414174079895,
                    -1.4349125623703003,
                    -1.2775777578353882,
                    -1.3169114589691162,
                    -0.7859066724777222,
                    -0.19590140879154205,
                    -0.03856665641069412,
                    -0.018899815157055855,
                    -0.1369008719921112,
                    -0.5302377343177795,
                    -0.4515703618526459,
                    -0.6285719275474548,
                    -1.2775777578353882,
                    -1.2775777578353882,
                    -0.7662398815155029,
                    -0.3532361388206482,
                    -0.4909040629863739,
                    -0.5499045848846436
                ],
                [
                    -0.4515703618526459,
                    -0.5499045848846436,
                    -1.6905814409255981,
                    -0.9629082679748535,
                    -0.11723402887582779,
                    -0.09756718575954437,
                    -0.15656772255897522,
                    -0.09756718575954437,
                    -0.11723402887582779,
                    -0.1369008719921112,
                    -0.05823349952697754,
                    -0.31390246748924255,
                    -0.4909040629863739,
                    -0.29423561692237854,
                    -0.7072393298149109,
                    -1.1005761623382568,
                    -0.7859066724777222,
                    -0.9432414174079895,
                    -0.7662398815155029,
                    0.13843508064746857,
                    0.37443721294403076,
                    -0.09756718575954437,
                    -0.4712372124195099,
                    -0.41223669052124023,
                    -0.2352350950241089,
                    -0.7859066724777222,
                    -1.0219087600708008,
                    -1.4939130544662476,
                    -1.218577265739441,
                    -0.4909040629863739,
                    -0.4712372124195099,
                    -0.5892382860183716
                ],
                [
                    -0.15656772255897522,
                    -0.5302377343177795,
                    -1.5725804567337036,
                    -1.1595767736434937,
                    -0.2352350950241089,
                    -0.11723402887582779,
                    -0.17623455822467804,
                    -0.1369008719921112,
                    -0.07790034264326096,
                    -0.19590140879154205,
                    -0.2745687663555145,
                    -0.5695714354515076,
                    -0.2549019455909729,
                    0.15810193121433258,
                    -0.33356931805610657,
                    -0.7072393298149109,
                    -0.5499045848846436,
                    -0.6875724792480469,
                    -0.9039077758789062,
                    -0.09756718575954437,
                    0.5907724499702454,
                    0.02043387107551098,
                    -0.5892382860183716,
                    -0.4909040629863739,
                    -0.5892382860183716,
                    -0.8252403736114502,
                    -1.2382441759109497,
                    -1.3759119510650635,
                    -1.4939130544662476,
                    -0.7859066724777222,
                    -0.3925698399543762,
                    -0.5105708837509155
                ],
                [
                    0.7481071949005127,
                    -0.3532361388206482,
                    -1.2775777578353882,
                    -0.03856665641069412,
                    0.02043387107551098,
                    -0.19590140879154205,
                    -0.11723402887582779,
                    -0.018899815157055855,
                    -0.03856665641069412,
                    0.23676930367946625,
                    -0.6679056286811829,
                    -0.3532361388206482,
                    0.35477036237716675,
                    0.3941040337085724,
                    -0.2352350950241089,
                    -0.8449072241783142,
                    -0.8252403736114502,
                    -0.7465730309486389,
                    -0.8842409253120422,
                    -1.0219087600708008,
                    0.040100716054439545,
                    0.23676930367946625,
                    -0.3925698399543762,
                    -0.8645740747451782,
                    -0.9039077758789062,
                    -0.8055735230445862,
                    -0.9825751185417175,
                    -1.297244668006897,
                    -1.7299151420593262,
                    -1.257910966873169,
                    -0.33356931805610657,
                    -0.3925698399543762
                ],
                [
                    1.0431098937988281,
                    0.3154366612434387,
                    -0.4515703618526459,
                    0.6104393005371094,
                    0.5121051073074341,
                    -0.1369008719921112,
                    -0.1369008719921112,
                    -0.09756718575954437,
                    1.1217772960662842,
                    1.790449857711792,
                    1.1217772960662842,
                    0.15810193121433258,
                    0.5907724499702454,
                    0.15810193121433258,
                    -0.2549019455909729,
                    -0.7465730309486389,
                    -0.7662398815155029,
                    -0.9629082679748535,
                    -1.297244668006897,
                    -1.0809093713760376,
                    0.040100716054439545,
                    0.19743561744689941,
                    0.02043387107551098,
                    -0.4909040629863739,
                    -0.8252403736114502,
                    -0.7465730309486389,
                    -0.7465730309486389,
                    -0.9235746264457703,
                    -1.4545793533325195,
                    -1.8282495737075806,
                    -0.9432414174079895,
                    -0.3925698399543762
                ],
                [
                    1.1807777881622314,
                    -0.1369008719921112,
                    0.5514388084411621,
                    0.90544193983078,
                    0.6497730016708374,
                    -0.21556824445724487,
                    -0.09756718575954437,
                    -0.6679056286811829,
                    1.456113576889038,
                    1.9871183633804321,
                    1.338112473487854,
                    0.23676930367946625,
                    0.7087735533714294,
                    0.2761029899120331,
                    -0.29423561692237854,
                    -0.2352350950241089,
                    -0.9235746264457703,
                    -0.8449072241783142,
                    -1.5529135465621948,
                    -0.7465730309486389,
                    0.8267745971679688,
                    0.47277140617370605,
                    0.47277140617370605,
                    -0.4515703618526459,
                    -0.7859066724777222,
                    -0.41223669052124023,
                    -0.6875724792480469,
                    -0.8645740747451782,
                    -1.257910966873169,
                    -1.710248351097107,
                    -1.5135798454284668,
                    -0.8252403736114502
                ],
                [
                    1.338112473487854,
                    -0.29423561692237854,
                    0.4137708842754364,
                    1.0234429836273193,
                    0.8661082983016968,
                    -0.05823349952697754,
                    0.0007670287159271538,
                    -0.5892382860183716,
                    -0.5499045848846436,
                    1.1611108779907227,
                    0.9447756409645081,
                    0.37443721294403076,
                    0.7481071949005127,
                    0.9447756409645081,
                    -0.07790034264326096,
                    -0.31390246748924255,
                    -0.4909040629863739,
                    -0.7662398815155029,
                    -1.670914649963379,
                    -0.03856665641069412,
                    1.5347809791564941,
                    0.5711056590080261,
                    0.3154366612434387,
                    -0.6679056286811829,
                    -0.8449072241783142,
                    -0.5892382860183716,
                    -0.3729029893875122,
                    -0.7072393298149109,
                    -0.9432414174079895,
                    -1.3759119510650635,
                    -1.3365782499313354,
                    -1.3169114589691162
                ],
                [
                    1.3971130847930908,
                    -0.5302377343177795,
                    0.21710245311260223,
                    1.1217772960662842,
                    0.6497730016708374,
                    0.0007670287159271538,
                    0.0007670287159271538,
                    -0.2745687663555145,
                    -1.0809093713760376,
                    0.6104393005371094,
                    0.4137708842754364,
                    -0.17623455822467804,
                    0.8464414477348328,
                    1.5544477701187134,
                    0.5121051073074341,
                    -0.19590140879154205,
                    -0.17623455822467804,
                    -0.17623455822467804,
                    -1.4349125623703003,
                    0.47277140617370605,
                    1.2594451904296875,
                    0.5121051073074341,
                    -0.09756718575954437,
                    -0.6875724792480469,
                    -0.7859066724777222,
                    -0.7662398815155029,
                    -0.5499045848846436,
                    -0.7072393298149109,
                    -0.7072393298149109,
                    -0.9825751185417175,
                    -0.9629082679748535,
                    -1.3365782499313354
                ],
                [
                    1.3577793836593628,
                    -0.5499045848846436,
                    0.6104393005371094,
                    1.2791119813919067,
                    -0.2549019455909729,
                    -0.33356931805610657,
                    0.02043387107551098,
                    -0.1369008719921112,
                    -1.0022419691085815,
                    0.1777687668800354,
                    0.040100716054439545,
                    0.5121051073074341,
                    1.0037761926651,
                    1.82978355884552,
                    0.9644424915313721,
                    0.15810193121433258,
                    -0.11723402887582779,
                    -0.17623455822467804,
                    -1.0219087600708008,
                    0.5711056590080261,
                    1.1414440870285034,
                    0.4137708842754364,
                    -0.2549019455909729,
                    -0.7465730309486389,
                    -0.8449072241783142,
                    -0.9825751185417175,
                    -0.8449072241783142,
                    -0.4515703618526459,
                    -0.43190351128578186,
                    -0.6875724792480469,
                    -0.6679056286811829,
                    -0.9825751185417175
                ],
                [
                    1.4364467859268188,
                    -0.31390246748924255,
                    0.8661082983016968,
                    1.2397782802581787,
                    -0.2745687663555145,
                    -0.6679056286811829,
                    -0.07790034264326096,
                    -0.018899815157055855,
                    -0.9629082679748535,
                    -0.33356931805610657,
                    0.0007670287159271538,
                    1.2201114892959595,
                    1.1217772960662842,
                    0.8267745971679688,
                    0.33510351181030273,
                    0.3941040337085724,
                    0.25643613934516907,
                    -0.4515703618526459,
                    -1.0219087600708008,
                    0.5711056590080261,
                    1.0234429836273193,
                    0.19743561744689941,
                    0.09910139441490173,
                    -0.2745687663555145,
                    -0.7269061803817749,
                    -0.5892382860183716,
                    -0.5302377343177795,
                    -0.2549019455909729,
                    -0.1369008719921112,
                    -0.5302377343177795,
                    -0.7465730309486389,
                    -0.5499045848846436
                ],
                [
                    1.456113576889038,
                    0.11876823753118515,
                    0.8661082983016968,
                    1.0824435949325562,
                    0.2761029899120331,
                    -0.7859066724777222,
                    -0.05823349952697754,
                    0.040100716054439545,
                    -0.5695714354515076,
                    -0.05823349952697754,
                    0.15810193121433258,
                    1.9281178712844849,
                    2.2231204509735107,
                    0.2957698404788971,
                    0.13843508064746857,
                    -0.03856665641069412,
                    -0.21556824445724487,
                    -0.3729029893875122,
                    -0.6875724792480469,
                    0.21710245311260223,
                    0.7087735533714294,
                    0.47277140617370605,
                    -0.29423561692237854,
                    -0.7465730309486389,
                    -1.0022419691085815,
                    -0.6875724792480469,
                    -0.3729029893875122,
                    -0.2745687663555145,
                    -0.2549019455909729,
                    -0.7269061803817749,
                    -0.5302377343177795,
                    -0.3729029893875122
                ],
                [
                    1.5741146802902222,
                    0.45310458540916443,
                    0.8071077466011047,
                    1.1611108779907227,
                    0.925108790397644,
                    -0.7269061803817749,
                    0.040100716054439545,
                    0.05976755917072296,
                    -0.03856665641069412,
                    -0.8449072241783142,
                    0.3941040337085724,
                    0.7874408960342407,
                    0.5711056590080261,
                    0.1777687668800354,
                    -0.33356931805610657,
                    -0.33356931805610657,
                    -0.43190351128578186,
                    -0.43190351128578186,
                    -0.6482387781143188,
                    0.3941040337085724,
                    0.2957698404788971,
                    0.35477036237716675,
                    0.13843508064746857,
                    -0.3532361388206482,
                    -0.9235746264457703,
                    -0.8645740747451782,
                    -0.5892382860183716,
                    -0.6285719275474548,
                    -0.7859066724777222,
                    -0.6875724792480469,
                    -0.29423561692237854,
                    -0.3729029893875122
                ],
                [
                    1.8101167678833008,
                    0.8464414477348328,
                    0.8661082983016968,
                    1.2004445791244507,
                    1.1611108779907227,
                    -0.41223669052124023,
                    -0.5302377343177795,
                    0.5121051073074341,
                    0.2761029899120331,
                    -0.5892382860183716,
                    -0.1369008719921112,
                    -0.3532361388206482,
                    -0.41223669052124023,
                    -0.3532361388206482,
                    -0.6285719275474548,
                    -0.2549019455909729,
                    -0.6285719275474548,
                    -0.3925698399543762,
                    0.09910139441490173,
                    -0.5302377343177795,
                    -1.3169114589691162,
                    -0.05823349952697754,
                    0.05976755917072296,
                    -1.0612424612045288,
                    -1.3169114589691162,
                    -1.3169114589691162,
                    -1.0415756702423096,
                    -0.5892382860183716,
                    -0.5695714354515076,
                    -0.21556824445724487,
                    -0.1369008719921112,
                    -0.2549019455909729
                ],
                [
                    1.7314493656158447,
                    1.2004445791244507,
                    1.0234429836273193,
                    1.1414440870285034,
                    1.2004445791244507,
                    0.15810193121433258,
                    -0.6875724792480469,
                    0.3154366612434387,
                    0.49243825674057007,
                    0.09910139441490173,
                    -0.6482387781143188,
                    -1.1595767736434937,
                    -0.03856665641069412,
                    -0.2352350950241089,
                    -0.11723402887582779,
                    0.3941040337085724,
                    -0.6089051365852356,
                    -0.5302377343177795,
                    0.3154366612434387,
                    -0.11723402887582779,
                    -0.2745687663555145,
                    -0.4712372124195099,
                    -1.0809093713760376,
                    -1.257910966873169,
                    -1.6119141578674316,
                    -1.1989104747772217,
                    -1.0612424612045288,
                    -0.3532361388206482,
                    -0.07790034264326096,
                    -0.05823349952697754,
                    -0.15656772255897522,
                    -0.2352350950241089
                ],
                [
                    1.3577793836593628,
                    1.298778772354126,
                    1.0431098937988281,
                    1.1021103858947754,
                    1.1611108779907227,
                    0.5121051073074341,
                    -0.6482387781143188,
                    -0.03856665641069412,
                    0.02043387107551098,
                    0.25643613934516907,
                    0.21710245311260223,
                    -1.257910966873169,
                    -0.09756718575954437,
                    -0.5105708837509155,
                    0.21710245311260223,
                    1.0431098937988281,
                    -0.09756718575954437,
                    -0.9432414174079895,
                    -0.07790034264326096,
                    0.02043387107551098,
                    0.11876823753118515,
                    -0.7269061803817749,
                    -1.4545793533325195,
                    -1.4152456521987915,
                    -1.4545793533325195,
                    -0.6482387781143188,
                    -0.6285719275474548,
                    -0.09756718575954437,
                    -0.03856665641069412,
                    -0.19590140879154205,
                    -0.2352350950241089,
                    -0.31390246748924255
                ],
                [
                    0.6497730016708374,
                    1.377446174621582,
                    1.0824435949325562,
                    0.9841093420982361,
                    1.1414440870285034,
                    0.6694398522377014,
                    -0.3925698399543762,
                    0.23676930367946625,
                    1.0234429836273193,
                    -0.3532361388206482,
                    -0.6482387781143188,
                    -0.9039077758789062,
                    -0.6482387781143188,
                    -0.09756718575954437,
                    0.9841093420982361,
                    1.1611108779907227,
                    0.49243825674057007,
                    -0.4515703618526459,
                    -0.8842409253120422,
                    -0.9039077758789062,
                    -1.218577265739441,
                    -1.3955788612365723,
                    -1.5135798454284668,
                    -1.7692488431930542,
                    -1.297244668006897,
                    -1.0219087600708008,
                    -0.4515703618526459,
                    0.040100716054439545,
                    0.0007670287159271538,
                    -0.2745687663555145,
                    -0.19590140879154205,
                    -0.3532361388206482
                ],
                [
                    -0.05823349952697754,
                    1.5151140689849854,
                    1.0824435949325562,
                    0.90544193983078,
                    1.1021103858947754,
                    0.4137708842754364,
                    -0.7072393298149109,
                    0.5907724499702454,
                    2.43945574760437,
                    1.947784662246704,
                    0.33510351181030273,
                    0.35477036237716675,
                    0.6497730016708374,
                    1.1611108779907227,
                    1.4364467859268188,
                    1.3577793836593628,
                    0.9644424915313721,
                    0.19743561744689941,
                    -0.2745687663555145,
                    -1.1989104747772217,
                    -1.4545793533325195,
                    -1.3562451601028442,
                    -1.0415756702423096,
                    -0.8252403736114502,
                    -0.7465730309486389,
                    -0.7662398815155029,
                    -0.4712372124195099,
                    -0.43190351128578186,
                    -0.3729029893875122,
                    -0.5302377343177795,
                    -0.6089051365852356,
                    -0.6482387781143188
                ],
                [
                    -0.3532361388206482,
                    1.456113576889038,
                    1.1807777881622314,
                    0.9644424915313721,
                    1.0627766847610474,
                    0.45310458540916443,
                    -0.21556824445724487,
                    1.7314493656158447,
                    2.537790060043335,
                    2.5574567317962646,
                    1.9871183633804321,
                    0.3941040337085724,
                    0.1777687668800354,
                    0.35477036237716675,
                    0.19743561744689941,
                    0.19743561744689941,
                    0.02043387107551098,
                    -0.5892382860183716,
                    -0.7072393298149109,
                    -0.8055735230445862,
                    -0.7662398815155029,
                    -0.7662398815155029,
                    -0.7465730309486389,
                    -0.5892382860183716,
                    -0.5695714354515076,
                    -0.6285719275474548,
                    -0.5302377343177795,
                    -0.3729029893875122,
                    -0.29423561692237854,
                    -0.5105708837509155,
                    -0.5105708837509155,
                    -0.5499045848846436
                ],
                [
                    -0.6679056286811829,
                    0.2761029899120331,
                    0.8857751488685608,
                    1.0037761926651,
                    1.1611108779907227,
                    0.925108790397644,
                    0.8464414477348328,
                    2.4001221656799316,
                    2.518122911453247,
                    2.124786138534546,
                    0.25643613934516907,
                    -0.6875724792480469,
                    -0.8449072241783142,
                    -0.9235746264457703,
                    -0.9432414174079895,
                    -1.0022419691085815,
                    -0.8645740747451782,
                    -0.8252403736114502,
                    -0.8252403736114502,
                    -0.8055735230445862,
                    -0.7269061803817749,
                    -0.6482387781143188,
                    -0.6679056286811829,
                    -0.7072393298149109,
                    -0.6679056286811829,
                    -0.5892382860183716,
                    -0.5695714354515076,
                    -0.5302377343177795,
                    -0.5302377343177795,
                    -0.5695714354515076,
                    -0.5499045848846436,
                    -0.6482387781143188
                ],
                [
                    -0.6285719275474548,
                    -0.7072393298149109,
                    -0.41223669052124023,
                    0.5907724499702454,
                    1.1021103858947754,
                    0.25643613934516907,
                    1.298778772354126,
                    2.4984562397003174,
                    2.4001221656799316,
                    0.7087735533714294,
                    -0.5695714354515076,
                    -0.7662398815155029,
                    -0.7662398815155029,
                    -0.7465730309486389,
                    -0.7859066724777222,
                    -0.7662398815155029,
                    -0.7269061803817749,
                    -0.7662398815155029,
                    -0.8055735230445862,
                    -0.8645740747451782,
                    -0.7859066724777222,
                    -0.7269061803817749,
                    -0.7465730309486389,
                    -0.6679056286811829,
                    -0.6089051365852356,
                    -0.3925698399543762,
                    -0.3925698399543762,
                    -0.43190351128578186,
                    -0.41223669052124023,
                    -0.4712372124195099,
                    -0.5695714354515076,
                    -0.3925698399543762
                ],
                [
                    -0.2352350950241089,
                    -0.5695714354515076,
                    -0.7465730309486389,
                    -0.33356931805610657,
                    0.49243825674057007,
                    0.25643613934516907,
                    1.7707830667495728,
                    2.5574567317962646,
                    1.4757803678512573,
                    -0.5892382860183716,
                    -0.6285719275474548,
                    -0.6875724792480469,
                    -0.6482387781143188,
                    -0.6482387781143188,
                    -0.7859066724777222,
                    -0.8055735230445862,
                    -0.8055735230445862,
                    -0.8252403736114502,
                    -0.8449072241783142,
                    -0.7859066724777222,
                    -0.7269061803817749,
                    -0.6679056286811829,
                    -0.6089051365852356,
                    -0.5499045848846436,
                    -0.29423561692237854,
                    -0.2549019455909729,
                    -0.2745687663555145,
                    -0.29423561692237854,
                    -0.29423561692237854,
                    -0.3532361388206482,
                    0.0007670287159271538,
                    0.2761029899120331
                ],
                [
                    -0.17623455822467804,
                    -0.4712372124195099,
                    -0.7269061803817749,
                    -0.7859066724777222,
                    -0.5499045848846436,
                    0.4334377348423004,
                    2.0854525566101074,
                    2.4001221656799316,
                    0.3941040337085724,
                    -0.6089051365852356,
                    -0.7072393298149109,
                    -0.5695714354515076,
                    -0.6089051365852356,
                    -0.8055735230445862,
                    -0.8055735230445862,
                    -0.7859066724777222,
                    -0.7662398815155029,
                    -0.7859066724777222,
                    -0.7269061803817749,
                    -0.6875724792480469,
                    -0.6482387781143188,
                    -0.5105708837509155,
                    -0.33356931805610657,
                    -0.2549019455909729,
                    -0.3532361388206482,
                    -0.5105708837509155,
                    -0.5499045848846436,
                    -0.6285719275474548,
                    -0.29423561692237854,
                    0.13843508064746857,
                    0.2957698404788971,
                    0.040100716054439545
                ],
                [
                    -0.2549019455909729,
                    -0.4909040629863739,
                    -0.6679056286811829,
                    -0.7269061803817749,
                    -0.7859066724777222,
                    -0.33356931805610657,
                    1.8887841701507568,
                    2.0657856464385986,
                    0.05976755917072296,
                    -0.3729029893875122,
                    -0.5695714354515076,
                    -0.7072393298149109,
                    -0.5105708837509155,
                    -0.7072393298149109,
                    -0.8449072241783142,
                    -0.8055735230445862,
                    -0.7662398815155029,
                    -0.7072393298149109,
                    -0.6679056286811829,
                    -0.6679056286811829,
                    -0.5105708837509155,
                    -0.6089051365852356,
                    -0.5892382860183716,
                    -0.41223669052124023,
                    -0.43190351128578186,
                    -0.5892382860183716,
                    -0.7465730309486389,
                    -0.43190351128578186,
                    0.11876823753118515,
                    0.05976755917072296,
                    -0.4909040629863739,
                    -0.5302377343177795
                ],
                [
                    -0.29423561692237854,
                    -0.5105708837509155,
                    -0.6089051365852356,
                    -0.6875724792480469,
                    -0.6875724792480469,
                    -0.7662398815155029,
                    0.19743561744689941,
                    1.456113576889038,
                    -0.4515703618526459,
                    -0.5105708837509155,
                    -0.5695714354515076,
                    -0.5499045848846436,
                    -0.3925698399543762,
                    -0.4515703618526459,
                    -0.5302377343177795,
                    -0.7859066724777222,
                    -0.8645740747451782,
                    -0.8449072241783142,
                    -0.6875724792480469,
                    -0.6089051365852356,
                    -0.6089051365852356,
                    -0.5499045848846436,
                    -0.5892382860183716,
                    -0.6089051365852356,
                    -0.6482387781143188,
                    -0.5892382860183716,
                    -0.41223669052124023,
                    0.040100716054439545,
                    -0.2549019455909729,
                    -0.6482387781143188,
                    -1.2382441759109497,
                    -0.5892382860183716
                ],
                [
                    0.02043387107551098,
                    -0.4515703618526459,
                    -0.6875724792480469,
                    -0.6285719275474548,
                    -0.7072393298149109,
                    -0.6679056286811829,
                    -0.8645740747451782,
                    -0.31390246748924255,
                    -0.6679056286811829,
                    -0.9039077758789062,
                    -1.0219087600708008,
                    -0.8055735230445862,
                    -0.5892382860183716,
                    -0.4515703618526459,
                    -0.41223669052124023,
                    -0.6089051365852356,
                    -0.5695714354515076,
                    -0.4712372124195099,
                    -0.4712372124195099,
                    -0.5105708837509155,
                    -0.5499045848846436,
                    -0.5695714354515076,
                    -0.6875724792480469,
                    -0.7859066724777222,
                    -0.6285719275474548,
                    -0.21556824445724487,
                    0.1777687668800354,
                    0.15810193121433258,
                    -0.1369008719921112,
                    -0.5105708837509155,
                    -1.1595767736434937,
                    -0.7465730309486389
                ],
                [
                    -0.1369008719921112,
                    -0.41223669052124023,
                    -0.7465730309486389,
                    -0.6285719275474548,
                    -0.6482387781143188,
                    -0.6089051365852356,
                    -0.6875724792480469,
                    -0.8252403736114502,
                    -0.7465730309486389,
                    -1.0022419691085815,
                    -1.1005761623382568,
                    -0.9629082679748535,
                    -1.0219087600708008,
                    -0.9825751185417175,
                    -0.8449072241783142,
                    -0.7269061803817749,
                    -0.5499045848846436,
                    -0.43190351128578186,
                    -0.2745687663555145,
                    -0.07790034264326096,
                    -0.19590140879154205,
                    -0.5499045848846436,
                    -0.6875724792480469,
                    -0.6875724792480469,
                    -0.3532361388206482,
                    0.13843508064746857,
                    0.6497730016708374,
                    0.4334377348423004,
                    -0.15656772255897522,
                    -0.8055735230445862,
                    -0.8055735230445862,
                    -1.1595767736434937
                ],
                [
                    -0.31390246748924255,
                    -0.3532361388206482,
                    -0.6679056286811829,
                    -0.7269061803817749,
                    -0.6679056286811829,
                    -0.6089051365852356,
                    -0.7072393298149109,
                    -0.8252403736114502,
                    -0.8645740747451782,
                    -1.0612424612045288,
                    -1.1202430725097656,
                    -0.9825751185417175,
                    -1.0612424612045288,
                    -0.9825751185417175,
                    -1.1792436838150024,
                    -1.2775777578353882,
                    -1.0415756702423096,
                    -0.7072393298149109,
                    -0.3729029893875122,
                    -0.07790034264326096,
                    -0.2352350950241089,
                    -0.5302377343177795,
                    -0.5499045848846436,
                    -0.7072393298149109,
                    -0.2745687663555145,
                    0.15810193121433258,
                    0.45310458540916443,
                    0.23676930367946625,
                    -0.4712372124195099,
                    -0.9039077758789062,
                    -0.7662398815155029,
                    -1.1005761623382568
                ]
            ],
            [
                [
                    -1.2653887271881104,
                    -1.304409384727478,
                    -1.2263681888580322,
                    -1.1873475313186646,
                    -1.323919653892517,
                    -1.421471118927002,
                    -1.304409384727478,
                    -1.3434299230575562,
                    -1.3629401922225952,
                    -1.421471118927002,
                    -1.421471118927002,
                    -1.2068578004837036,
                    -1.2653887271881104,
                    -1.421471118927002,
                    -1.3434299230575562,
                    -1.3629401922225952,
                    -1.440981388092041,
                    -1.4800019264221191,
                    -1.46049165725708,
                    -1.3824505805969238,
                    -1.3629401922225952,
                    -1.3434299230575562,
                    -1.3434299230575562,
                    -1.3824505805969238,
                    -1.3629401922225952,
                    -1.46049165725708,
                    -1.3824505805969238,
                    -1.421471118927002,
                    -1.4800019264221191,
                    -1.5190225839614868,
                    -1.5190225839614868,
                    -1.577553391456604
                ],
                [
                    -1.2263681888580322,
                    -1.440981388092041,
                    -1.3434299230575562,
                    -1.1288167238235474,
                    -1.2653887271881104,
                    -1.3824505805969238,
                    -1.304409384727478,
                    -1.3434299230575562,
                    -1.323919653892517,
                    -1.4800019264221191,
                    -1.421471118927002,
                    -1.1678372621536255,
                    -1.2068578004837036,
                    -1.421471118927002,
                    -1.440981388092041,
                    -1.577553391456604,
                    -1.6360843181610107,
                    -1.577553391456604,
                    -1.421471118927002,
                    -1.2458784580230713,
                    -1.1873475313186646,
                    -1.1483269929885864,
                    -1.2068578004837036,
                    -1.284899115562439,
                    -1.2458784580230713,
                    -1.323919653892517,
                    -1.3434299230575562,
                    -1.4800019264221191,
                    -1.558043122291565,
                    -1.6165740489959717,
                    -1.597063660621643,
                    -1.558043122291565
                ],
                [
                    -1.304409384727478,
                    -1.577553391456604,
                    -1.5190225839614868,
                    -1.284899115562439,
                    -1.401960849761963,
                    -1.3629401922225952,
                    -1.3434299230575562,
                    -1.3434299230575562,
                    -1.3824505805969238,
                    -1.3824505805969238,
                    -1.284899115562439,
                    -1.1093063354492188,
                    -1.2263681888580322,
                    -1.4800019264221191,
                    -1.4995123147964478,
                    -1.5385328531265259,
                    -1.46049165725708,
                    -1.304409384727478,
                    -1.1678372621536255,
                    -1.2653887271881104,
                    -1.2068578004837036,
                    -1.2458784580230713,
                    -1.304409384727478,
                    -1.2458784580230713,
                    -1.284899115562439,
                    -1.1483269929885864,
                    -1.2263681888580322,
                    -1.46049165725708,
                    -1.5385328531265259,
                    -1.558043122291565,
                    -1.558043122291565,
                    -1.577553391456604
                ],
                [
                    -1.440981388092041,
                    -1.597063660621643,
                    -1.6165740489959717,
                    -1.3629401922225952,
                    -1.3824505805969238,
                    -1.323919653892517,
                    -1.284899115562439,
                    -1.284899115562439,
                    -1.3629401922225952,
                    -1.3434299230575562,
                    -1.1093063354492188,
                    -0.3679153025150299,
                    -0.7581210732460022,
                    -1.421471118927002,
                    -1.304409384727478,
                    -1.1678372621536255,
                    -1.0897960662841797,
                    -0.914203405380249,
                    -1.304409384727478,
                    -0.9532240033149719,
                    -0.7386108040809631,
                    -0.5825284719467163,
                    -0.9337137341499329,
                    -1.2458784580230713,
                    -1.2068578004837036,
                    -1.46049165725708,
                    -1.3434299230575562,
                    -1.323919653892517,
                    -1.3824505805969238,
                    -1.46049165725708,
                    -1.46049165725708,
                    -1.5190225839614868
                ],
                [
                    -1.421471118927002,
                    -1.284899115562439,
                    -1.2653887271881104,
                    -1.304409384727478,
                    -1.3824505805969238,
                    -1.440981388092041,
                    -1.304409384727478,
                    -1.3629401922225952,
                    -1.421471118927002,
                    -1.401960849761963,
                    -1.0702857971191406,
                    0.978294849395752,
                    -0.13379181921482086,
                    -1.1288167238235474,
                    -1.0507755279541016,
                    -0.836162269115448,
                    -1.2458784580230713,
                    -1.6165740489959717,
                    -1.1288167238235474,
                    -0.30938443541526794,
                    -0.05575065314769745,
                    0.08082137256860733,
                    -0.17281238734722137,
                    -0.4069358706474304,
                    -0.914203405380249,
                    -0.8556725382804871,
                    -1.304409384727478,
                    -1.3434299230575562,
                    -1.284899115562439,
                    -1.323919653892517,
                    -1.5190225839614868,
                    -1.5190225839614868
                ],
                [
                    -1.1678372621536255,
                    -0.972734272480011,
                    -1.1093063354492188,
                    -1.1873475313186646,
                    -1.3629401922225952,
                    -1.46049165725708,
                    -1.421471118927002,
                    -1.421471118927002,
                    -1.4995123147964478,
                    -1.46049165725708,
                    -1.401960849761963,
                    -0.5630182027816772,
                    -0.6995902061462402,
                    -1.0897960662841797,
                    -1.3824505805969238,
                    -1.6165740489959717,
                    -1.3824505805969238,
                    -1.3434299230575562,
                    -0.7386108040809631,
                    -0.0752609446644783,
                    0.11984195560216904,
                    0.15886253118515015,
                    0.04180079698562622,
                    -0.34840500354766846,
                    -0.328894704580307,
                    -0.5435079336166382,
                    -1.304409384727478,
                    -1.4995123147964478,
                    -1.2653887271881104,
                    -1.0897960662841797,
                    -1.3629401922225952,
                    -1.440981388092041
                ],
                [
                    -1.1093063354492188,
                    -0.6605696678161621,
                    -1.8897180557250977,
                    -1.6751048564910889,
                    -1.284899115562439,
                    -1.3824505805969238,
                    -1.440981388092041,
                    -1.3824505805969238,
                    -1.401960849761963,
                    -1.4995123147964478,
                    -1.46049165725708,
                    -1.2068578004837036,
                    -1.0702857971191406,
                    -0.7581210732460022,
                    -0.8556725382804871,
                    -1.1093063354492188,
                    -0.8166519403457642,
                    -0.972734272480011,
                    -0.777631402015686,
                    0.1393522471189499,
                    0.3539655804634094,
                    -0.11428152769804001,
                    -0.4654667377471924,
                    -0.38742557168006897,
                    -0.21183297038078308,
                    -0.7191005349159241,
                    -0.8751828074455261,
                    -1.46049165725708,
                    -1.5190225839614868,
                    -1.0897960662841797,
                    -1.284899115562439,
                    -1.46049165725708
                ],
                [
                    -0.4654667377471924,
                    -0.42644616961479187,
                    -1.4800019264221191,
                    -1.421471118927002,
                    -1.1288167238235474,
                    -1.401960849761963,
                    -1.5190225839614868,
                    -1.46049165725708,
                    -1.2653887271881104,
                    -1.2263681888580322,
                    -1.2263681888580322,
                    -1.2653887271881104,
                    -0.7191005349159241,
                    -0.13379181921482086,
                    -0.4069358706474304,
                    -0.6800799369812012,
                    -0.5044873356819153,
                    -0.6215490698814392,
                    -0.8751828074455261,
                    -0.13379181921482086,
                    0.5100479125976562,
                    -0.036240365356206894,
                    -0.6410593390464783,
                    -0.5044873356819153,
                    -0.5825284719467163,
                    -0.777631402015686,
                    -1.0897960662841797,
                    -1.2653887271881104,
                    -1.597063660621643,
                    -1.2458784580230713,
                    -1.2263681888580322,
                    -1.46049165725708
                ],
                [
                    0.5880890488624573,
                    -0.17281238734722137,
                    -1.0702857971191406,
                    -0.01673007383942604,
                    -0.6215490698814392,
                    -1.3824505805969238,
                    -1.421471118927002,
                    -1.2458784580230713,
                    -0.9337137341499329,
                    -0.3679153025150299,
                    -1.0702857971191406,
                    -0.6995902061462402,
                    0.1393522471189499,
                    0.275924414396286,
                    -0.250853568315506,
                    -0.777631402015686,
                    -0.7191005349159241,
                    -0.6215490698814392,
                    -0.7971416711807251,
                    -1.0312652587890625,
                    -0.036240365356206894,
                    0.1783728301525116,
                    -0.4069358706474304,
                    -0.8556725382804871,
                    -0.8751828074455261,
                    -0.7386108040809631,
                    -0.914203405380249,
                    -1.1873475313186646,
                    -1.694615125656128,
                    -1.5385328531265259,
                    -1.0702857971191406,
                    -1.3434299230575562
                ],
                [
                    0.9587845802307129,
                    0.5685787796974182,
                    -0.17281238734722137,
                    0.6856405138969421,
                    -0.036240365356206894,
                    -1.2263681888580322,
                    -1.304409384727478,
                    -1.0507755279541016,
                    0.6271096467971802,
                    1.6416447162628174,
                    1.01731538772583,
                    0.10033166408538818,
                    0.6075993776321411,
                    0.2173934131860733,
                    -0.13379181921482086,
                    -0.6800799369812012,
                    -0.6800799369812012,
                    -0.836162269115448,
                    -1.1873475313186646,
                    -1.0897960662841797,
                    -0.036240365356206894,
                    0.15886253118515015,
                    0.0027802155818790197,
                    -0.48497703671455383,
                    -0.777631402015686,
                    -0.6995902061462402,
                    -0.6995902061462402,
                    -0.836162269115448,
                    -1.3824505805969238,
                    -1.9287385940551758,
                    -1.3629401922225952,
                    -1.1093063354492188
                ],
                [
                    1.1929080486297607,
                    0.15886253118515015,
                    0.861233115196228,
                    1.0563360452651978,
                    0.15886253118515015,
                    -1.2458784580230713,
                    -1.2263681888580322,
                    -1.304409384727478,
                    1.2709492444992065,
                    2.1879327297210693,
                    1.4465417861938477,
                    0.334455281496048,
                    0.8027022480964661,
                    0.3539655804634094,
                    -0.19232268631458282,
                    -0.19232268631458282,
                    -0.8751828074455261,
                    -0.7191005349159241,
                    -1.440981388092041,
                    -0.7191005349159241,
                    0.783191978931427,
                    0.4515170454978943,
                    0.47102731466293335,
                    -0.42644616961479187,
                    -0.7191005349159241,
                    -0.34840500354766846,
                    -0.6800799369812012,
                    -0.7971416711807251,
                    -1.0702857971191406,
                    -1.577553391456604,
                    -1.6165740489959717,
                    -1.323919653892517
                ],
                [
                    1.4660521745681763,
                    0.04180079698562622,
                    0.7636816501617432,
                    1.2514389753341675,
                    0.43200674653053284,
                    -1.0702857971191406,
                    -1.1483269929885864,
                    -1.3629401922225952,
                    -0.6605696678161621,
                    1.4465417861938477,
                    0.978294849395752,
                    0.3734758794307709,
                    0.724661111831665,
                    0.8807434439659119,
                    -0.15330210328102112,
                    -0.3679153025150299,
                    -0.48497703671455383,
                    -0.6800799369812012,
                    -1.558043122291565,
                    -0.01673007383942604,
                    1.5245829820632935,
                    0.5490685105323792,
                    0.3149450123310089,
                    -0.6215490698814392,
                    -0.7581210732460022,
                    -0.5044873356819153,
                    -0.38742557168006897,
                    -0.6410593390464783,
                    -0.6995902061462402,
                    -1.1483269929885864,
                    -1.284899115562439,
                    -1.7141255140304565
                ],
                [
                    1.5636035203933716,
                    -0.17281238734722137,
                    0.5880890488624573,
                    1.3880109786987305,
                    0.3734758794307709,
                    -0.89469313621521,
                    -1.1873475313186646,
                    -1.304409384727478,
                    -1.3629401922225952,
                    0.7441713809967041,
                    0.23690369725227356,
                    -0.38742557168006897,
                    0.6661302447319031,
                    1.3489903211593628,
                    0.29543471336364746,
                    -0.30938443541526794,
                    -0.17281238734722137,
                    -0.09477123618125916,
                    -1.304409384727478,
                    0.5100479125976562,
                    1.2514389753341675,
                    0.5100479125976562,
                    -0.05575065314769745,
                    -0.6020388007164001,
                    -0.6800799369812012,
                    -0.6605696678161621,
                    -0.5630182027816772,
                    -0.6410593390464783,
                    -0.48497703671455383,
                    -0.7971416711807251,
                    -0.972734272480011,
                    -1.7531460523605347
                ],
                [
                    1.5440932512283325,
                    -0.21183297038078308,
                    0.9587845802307129,
                    1.5245829820632935,
                    -0.30938443541526794,
                    -0.9337137341499329,
                    -1.0897960662841797,
                    -1.2458784580230713,
                    -1.46049165725708,
                    0.11984195560216904,
                    -0.21183297038078308,
                    0.256413996219635,
                    0.8027022480964661,
                    1.6806652545928955,
                    0.841722846031189,
                    0.061311084777116776,
                    -0.13379181921482086,
                    -0.09477123618125916,
                    -0.89469313621521,
                    0.6466199159622192,
                    1.1733977794647217,
                    0.43200674653053284,
                    -0.19232268631458282,
                    -0.6605696678161621,
                    -0.7386108040809631,
                    -0.8556725382804871,
                    -0.8166519403457642,
                    -0.38742557168006897,
                    -0.2898741364479065,
                    -0.6410593390464783,
                    -0.8751828074455261,
                    -1.558043122291565
                ],
                [
                    1.6026241779327393,
                    -0.036240365356206894,
                    1.1343772411346436,
                    1.4465417861938477,
                    -0.09477123618125916,
                    -0.914203405380249,
                    -1.0117549896240234,
                    -1.1483269929885864,
                    -1.558043122291565,
                    -0.5044873356819153,
                    -0.21183297038078308,
                    1.0758463144302368,
                    1.0758463144302368,
                    0.8807434439659119,
                    0.5100479125976562,
                    0.3929861783981323,
                    0.2173934131860733,
                    -0.3679153025150299,
                    -0.8556725382804871,
                    0.6856405138969421,
                    1.0953565835952759,
                    0.256413996219635,
                    0.15886253118515015,
                    -0.17281238734722137,
                    -0.6020388007164001,
                    -0.4459564685821533,
                    -0.4654667377471924,
                    -0.19232268631458282,
                    -0.05575065314769745,
                    -0.6605696678161621,
                    -1.1873475313186646,
                    -1.304409384727478
                ],
                [
                    1.6221344470977783,
                    0.43200674653053284,
                    1.1733977794647217,
                    1.3099697828292847,
                    0.5490685105323792,
                    -0.7191005349159241,
                    -0.5044873356819153,
                    -0.7191005349159241,
                    -1.2068578004837036,
                    -0.4069358706474304,
                    0.04180079698562622,
                    1.8952784538269043,
                    2.2659740447998047,
                    0.4515170454978943,
                    0.3149450123310089,
                    -0.036240365356206894,
                    -0.250853568315506,
                    -0.3679153025150299,
                    -0.7581210732460022,
                    0.08082137256860733,
                    0.6271096467971802,
                    0.47102731466293335,
                    -0.250853568315506,
                    -0.6605696678161621,
                    -0.89469313621521,
                    -0.5239976048469543,
                    -0.2898741364479065,
                    -0.2898741364479065,
                    -0.4069358706474304,
                    -1.1678372621536255,
                    -1.284899115562439,
                    -1.284899115562439
                ],
                [
                    1.7587064504623413,
                    0.9002537131309509,
                    1.2514389753341675,
                    1.4465417861938477,
                    1.1343772411346436,
                    -0.4654667377471924,
                    0.23690369725227356,
                    -0.01673007383942604,
                    -0.6215490698814392,
                    -1.4995123147964478,
                    0.3734758794307709,
                    0.8027022480964661,
                    0.5295581817626953,
                    0.061311084777116776,
                    -0.5044873356819153,
                    -0.4654667377471924,
                    -0.42644616961479187,
                    -0.5239976048469543,
                    -1.0897960662841797,
                    -0.19232268631458282,
                    -0.09477123618125916,
                    0.23690369725227356,
                    0.08082137256860733,
                    -0.328894704580307,
                    -0.8166519403457642,
                    -0.7191005349159241,
                    -0.38742557168006897,
                    -0.6215490698814392,
                    -1.1483269929885864,
                    -1.3434299230575562,
                    -1.1483269929885864,
                    -1.323919653892517
                ],
                [
                    1.97331964969635,
                    1.2904595136642456,
                    1.3685007095336914,
                    1.5636035203933716,
                    1.4075212478637695,
                    -0.17281238734722137,
                    -0.23134326934814453,
                    0.6075993776321411,
                    -0.05575065314769745,
                    -1.0312652587890625,
                    -0.17281238734722137,
                    -0.3679153025150299,
                    -0.48497703671455383,
                    -0.48497703671455383,
                    -0.7971416711807251,
                    -0.30938443541526794,
                    -0.5044873356819153,
                    -0.3679153025150299,
                    -0.23134326934814453,
                    -0.972734272480011,
                    -1.597063660621643,
                    -0.17281238734722137,
                    0.022290505468845367,
                    -1.0312652587890625,
                    -1.2263681888580322,
                    -1.1873475313186646,
                    -0.9532240033149719,
                    -0.6995902061462402,
                    -0.972734272480011,
                    -0.89469313621521,
                    -0.972734272480011,
                    -1.1678372621536255
                ],
                [
                    1.7782167196273804,
                    1.5245829820632935,
                    1.4660521745681763,
                    1.5440932512283325,
                    1.4465417861938477,
                    0.3734758794307709,
                    -0.34840500354766846,
                    0.5685787796974182,
                    0.5295581817626953,
                    -0.05575065314769745,
                    -0.6605696678161621,
                    -1.1483269929885864,
                    -0.11428152769804001,
                    -0.34840500354766846,
                    -0.27036383748054504,
                    0.3734758794307709,
                    -0.4069358706474304,
                    -0.4069358706474304,
                    0.11984195560216904,
                    -0.4069358706474304,
                    -0.42644616961479187,
                    -0.5435079336166382,
                    -1.0897960662841797,
                    -1.2068578004837036,
                    -1.46049165725708,
                    -1.0507755279541016,
                    -1.440981388092041,
                    -1.0702857971191406,
                    -1.0117549896240234,
                    -1.1678372621536255,
                    -1.3434299230575562,
                    -1.323919653892517
                ],
                [
                    1.2904595136642456,
                    1.4270315170288086,
                    1.3099697828292847,
                    1.3880109786987305,
                    1.3685007095336914,
                    0.7441713809967041,
                    -0.2898741364479065,
                    0.3539655804634094,
                    0.3149450123310089,
                    0.4124964475631714,
                    0.23690369725227356,
                    -1.2263681888580322,
                    -0.11428152769804001,
                    -0.5435079336166382,
                    0.1783728301525116,
                    1.0563360452651978,
                    0.08082137256860733,
                    -0.7971416711807251,
                    -0.21183297038078308,
                    -0.17281238734722137,
                    0.08082137256860733,
                    -0.6995902061462402,
                    -1.3629401922225952,
                    -1.2458784580230713,
                    -1.2068578004837036,
                    -0.4069358706474304,
                    -1.0507755279541016,
                    -0.89469313621521,
                    -0.972734272480011,
                    -1.2068578004837036,
                    -1.2458784580230713,
                    -1.323919653892517
                ],
                [
                    0.6271096467971802,
                    1.4270315170288086,
                    1.1929080486297607,
                    1.1343772411346436,
                    1.2904595136642456,
                    0.9002537131309509,
                    -0.05575065314769745,
                    0.6271096467971802,
                    1.3880109786987305,
                    -0.05575065314769745,
                    -0.5239976048469543,
                    -0.7971416711807251,
                    -0.5435079336166382,
                    0.04180079698562622,
                    1.1538875102996826,
                    1.2319285869598389,
                    0.6661302447319031,
                    -0.250853568315506,
                    -0.9337137341499329,
                    -0.9922446608543396,
                    -1.1093063354492188,
                    -1.1678372621536255,
                    -1.2263681888580322,
                    -1.421471118927002,
                    -0.8751828074455261,
                    -0.6020388007164001,
                    -0.7581210732460022,
                    -0.6215490698814392,
                    -0.7386108040809631,
                    -1.0312652587890625,
                    -0.8751828074455261,
                    -0.9922446608543396
                ],
                [
                    0.19788311421871185,
                    1.6806652545928955,
                    1.2124183177947998,
                    1.0563360452651978,
                    1.2709492444992065,
                    0.6466199159622192,
                    -0.4459564685821533,
                    0.8807434439659119,
                    2.656179904937744,
                    2.1684224605560303,
                    0.5880890488624573,
                    0.6466199159622192,
                    0.978294849395752,
                    1.5245829820632935,
                    1.836747646331787,
                    1.6221344470977783,
                    1.3099697828292847,
                    0.5685787796974182,
                    -0.09477123618125916,
                    -1.0117549896240234,
                    -1.0897960662841797,
                    -0.89469313621521,
                    -0.5239976048469543,
                    -0.23134326934814453,
                    -0.0752609446644783,
                    -0.05575065314769745,
                    0.15886253118515015,
                    0.10033166408538818,
                    0.11984195560216904,
                    -0.036240365356206894,
                    -0.036240365356206894,
                    0.022290505468845367
                ],
                [
                    0.3734758794307709,
                    1.934299111366272,
                    1.5245829820632935,
                    1.2319285869598389,
                    1.3294800519943237,
                    0.7051507830619812,
                    -0.01673007383942604,
                    1.8562579154968262,
                    2.597648859024048,
                    2.6952004432678223,
                    2.304994583129883,
                    0.841722846031189,
                    0.6856405138969421,
                    0.9392743110656738,
                    0.8222125172615051,
                    0.7441713809967041,
                    0.6661302447319031,
                    0.10033166408538818,
                    -0.19232268631458282,
                    -0.250853568315506,
                    -0.05575065314769745,
                    -0.0752609446644783,
                    0.022290505468845367,
                    0.2173934131860733,
                    0.334455281496048,
                    0.3149450123310089,
                    0.4124964475631714,
                    0.5295581817626953,
                    0.5490685105323792,
                    0.3539655804634094,
                    0.4515170454978943,
                    0.3539655804634094
                ],
                [
                    0.4124964475631714,
                    1.0563360452651978,
                    1.4465417861938477,
                    1.4465417861938477,
                    1.5245829820632935,
                    1.1733977794647217,
                    0.978294849395752,
                    2.402545928955078,
                    2.4805872440338135,
                    2.2269535064697266,
                    0.7636816501617432,
                    -0.05575065314769745,
                    -0.17281238734722137,
                    -0.17281238734722137,
                    -0.13379181921482086,
                    -0.250853568315506,
                    0.022290505468845367,
                    0.11984195560216904,
                    -0.01673007383942604,
                    0.04180079698562622,
                    0.2173934131860733,
                    0.2173934131860733,
                    0.23690369725227356,
                    0.275924414396286,
                    0.3539655804634094,
                    0.4905376136302948,
                    0.4515170454978943,
                    0.4515170454978943,
                    0.4124964475631714,
                    0.3929861783981323,
                    0.4905376136302948,
                    0.3734758794307709
                ],
                [
                    0.5295581817626953,
                    0.3149450123310089,
                    0.3929861783981323,
                    1.2124183177947998,
                    1.5050727128982544,
                    0.4515170454978943,
                    1.3099697828292847,
                    2.5000975131988525,
                    2.5586283206939697,
                    1.1929080486297607,
                    0.256413996219635,
                    0.08082137256860733,
                    0.10033166408538818,
                    0.1393522471189499,
                    0.11984195560216904,
                    0.04180079698562622,
                    0.061311084777116776,
                    0.061311084777116776,
                    0.022290505468845367,
                    -0.01673007383942604,
                    0.11984195560216904,
                    0.2173934131860733,
                    0.2173934131860733,
                    0.3149450123310089,
                    0.3929861783981323,
                    0.6075993776321411,
                    0.5490685105323792,
                    0.5490685105323792,
                    0.6271096467971802,
                    0.5880890488624573,
                    0.5100479125976562,
                    0.6856405138969421
                ],
                [
                    0.9392743110656738,
                    0.5100479125976562,
                    0.19788311421871185,
                    0.43200674653053284,
                    1.0368257761001587,
                    0.5685787796974182,
                    1.8562579154968262,
                    2.636669635772705,
                    1.7782167196273804,
                    0.08082137256860733,
                    0.275924414396286,
                    0.2173934131860733,
                    0.256413996219635,
                    0.256413996219635,
                    0.1393522471189499,
                    0.022290505468845367,
                    -0.01673007383942604,
                    -0.036240365356206894,
                    -0.01673007383942604,
                    0.061311084777116776,
                    0.1783728301525116,
                    0.334455281496048,
                    0.3929861783981323,
                    0.47102731466293335,
                    0.7051507830619812,
                    0.7441713809967041,
                    0.6466199159622192,
                    0.6856405138969421,
                    0.783191978931427,
                    0.7441713809967041,
                    1.0368257761001587,
                    1.3294800519943237
                ],
                [
                    0.9978051781654358,
                    0.6466199159622192,
                    0.3149450123310089,
                    0.15886253118515015,
                    0.23690369725227356,
                    0.978294849395752,
                    2.344015121459961,
                    2.597648859024048,
                    0.7636816501617432,
                    0.0027802155818790197,
                    0.1783728301525116,
                    0.334455281496048,
                    0.29543471336364746,
                    0.10033166408538818,
                    0.10033166408538818,
                    0.10033166408538818,
                    0.10033166408538818,
                    0.10033166408538818,
                    0.1783728301525116,
                    0.256413996219635,
                    0.334455281496048,
                    0.5295581817626953,
                    0.7051507830619812,
                    0.783191978931427,
                    0.7051507830619812,
                    0.5295581817626953,
                    0.5100479125976562,
                    0.47102731466293335,
                    0.861233115196228,
                    1.2514389753341675,
                    1.3294800519943237,
                    1.0758463144302368
                ],
                [
                    0.9392743110656738,
                    0.6856405138969421,
                    0.47102731466293335,
                    0.3734758794307709,
                    0.23690369725227356,
                    0.47102731466293335,
                    2.324504852294922,
                    2.344015121459961,
                    0.5100479125976562,
                    0.23690369725227356,
                    0.29543471336364746,
                    0.19788311421871185,
                    0.3734758794307709,
                    0.1783728301525116,
                    0.04180079698562622,
                    0.10033166408538818,
                    0.15886253118515015,
                    0.23690369725227356,
                    0.3149450123310089,
                    0.3539655804634094,
                    0.5100479125976562,
                    0.47102731466293335,
                    0.4905376136302948,
                    0.6661302447319031,
                    0.6466199159622192,
                    0.4905376136302948,
                    0.3734758794307709,
                    0.7636816501617432,
                    1.3294800519943237,
                    1.2124183177947998,
                    0.5490685105323792,
                    0.4905376136302948
                ],
                [
                    0.91976398229599,
                    0.6466199159622192,
                    0.5685787796974182,
                    0.5295581817626953,
                    0.47102731466293335,
                    0.2173934131860733,
                    0.8807434439659119,
                    1.8952784538269043,
                    0.10033166408538818,
                    0.1393522471189499,
                    0.275924414396286,
                    0.3149450123310089,
                    0.4905376136302948,
                    0.4124964475631714,
                    0.334455281496048,
                    0.11984195560216904,
                    0.08082137256860733,
                    0.11984195560216904,
                    0.3149450123310089,
                    0.4124964475631714,
                    0.43200674653053284,
                    0.4905376136302948,
                    0.47102731466293335,
                    0.43200674653053284,
                    0.4124964475631714,
                    0.47102731466293335,
                    0.724661111831665,
                    1.2514389753341675,
                    0.978294849395752,
                    0.5100479125976562,
                    -0.21183297038078308,
                    0.43200674653053284
                ],
                [
                    1.2319285869598389,
                    0.6661302447319031,
                    0.4515170454978943,
                    0.6271096467971802,
                    0.4905376136302948,
                    0.3539655804634094,
                    -0.01673007383942604,
                    0.3734758794307709,
                    0.0027802155818790197,
                    -0.17281238734722137,
                    -0.17281238734722137,
                    0.061311084777116776,
                    0.275924414396286,
                    0.4124964475631714,
                    0.4515170454978943,
                    0.275924414396286,
                    0.334455281496048,
                    0.4515170454978943,
                    0.4905376136302948,
                    0.47102731466293335,
                    0.4515170454978943,
                    0.43200674653053284,
                    0.334455281496048,
                    0.2173934131860733,
                    0.3734758794307709,
                    0.783191978931427,
                    1.2709492444992065,
                    1.3099697828292847,
                    1.0563360452651978,
                    0.6271096467971802,
                    -0.11428152769804001,
                    0.256413996219635
                ],
                [
                    1.0563360452651978,
                    0.6661302447319031,
                    0.3539655804634094,
                    0.5685787796974182,
                    0.4905376136302948,
                    0.3929861783981323,
                    0.2173934131860733,
                    -0.036240365356206894,
                    0.022290505468845367,
                    -0.19232268631458282,
                    -0.23134326934814453,
                    -0.09477123618125916,
                    -0.15330210328102112,
                    -0.11428152769804001,
                    0.022290505468845367,
                    0.11984195560216904,
                    0.275924414396286,
                    0.4124964475631714,
                    0.5880890488624573,
                    0.8222125172615051,
                    0.7441713809967041,
                    0.3929861783981323,
                    0.256413996219635,
                    0.256413996219635,
                    0.5880890488624573,
                    1.0953565835952759,
                    1.6221344470977783,
                    1.4855624437332153,
                    0.978294849395752,
                    0.3149450123310089,
                    0.23690369725227356,
                    -0.13379181921482086
                ],
                [
                    0.9002537131309509,
                    0.6856405138969421,
                    0.3539655804634094,
                    0.3929861783981323,
                    0.3929861783981323,
                    0.3539655804634094,
                    0.1783728301525116,
                    0.022290505468845367,
                    0.0027802155818790197,
                    -0.17281238734722137,
                    -0.250853568315506,
                    -0.11428152769804001,
                    -0.19232268631458282,
                    -0.11428152769804001,
                    -0.30938443541526794,
                    -0.48497703671455383,
                    -0.27036383748054504,
                    0.08082137256860733,
                    0.4515170454978943,
                    0.7441713809967041,
                    0.6075993776321411,
                    0.334455281496048,
                    0.3149450123310089,
                    0.1783728301525116,
                    0.6075993776321411,
                    1.0368257761001587,
                    1.3294800519943237,
                    1.1929080486297607,
                    0.6075993776321411,
                    0.19788311421871185,
                    0.29543471336364746,
                    -0.0752609446644783
                ]
            ]
        ]
    ]
}
docs/AKS-HCI/notebooks/distributed-cifar10/test_imgs/test_img_4_frog.jpg METASEP

docs/AKS-HCI/notebooks/distributed-cifar10/test_imgs/test_img_3_plane.jpg METASEP

docs/AKS-HCI/notebooks/distributed-cifar10/test_imgs/test_img_2_ship.jpg METASEP

docs/AKS-HCI/notebooks/distributed-cifar10/test_imgs/test_img_1_ship.jpg METASEP

docs/AKS-HCI/notebooks/distributed-cifar10/test_imgs/test_img_0_cat.jpg METASEP

docs/AKS-HCI/notebooks/distributed-cifar10/pytorch-script/conda_dependencies.yml METASEP

channels:
- conda-forge
dependencies:
- python=3.6.2
- pip:
  - azureml-defaults
  - torch==1.6.0
  - torchvision==0.7.0
  - future==0.17.1

docs/AKS-HCI/cli/mnist/train_env/conda.yml METASEP
channels:
  - anaconda
  - conda-forge
dependencies:
  - python=3.6.2
  - pip:
      - 'azureml-dataset-runtime[pandas,fuse]~=1.34.0'
      - azureml-defaults~=1.34.0
  - scikit-learn==0.22.1
docs/AKS-HCI/cli/mnist/model/conda.yml METASEP
name: mnist-demo-env

dependencies:
  - python=3.6.2

  - pip:
    - azureml-dataset-runtime[pandas,fuse]~=1.24.0.0
    - azureml-defaults~=1.24.0.0
    - scikit-learn==0.22.1

channels:
  - anaconda
  - conda-forge

examples/training/train-using-nfs/scikit-learn-on-amlarc-with-nfs/scripts/train.py METASEP
# Copyright (c) Microsoft. All rights reserved.
# Licensed under the MIT license.

import os
import argparse
import pandas

from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
# sklearn.externals.joblib is removed in 0.23
from sklearn import __version__ as sklearnver
from packaging.version import Version
if Version(sklearnver) < Version("0.23.0"):
    from sklearn.externals import joblib
else:
    import joblib

parser = argparse.ArgumentParser()
parser.add_argument('--data-dir', required=True, help='path to input data directory')
args = parser.parse_args()

# get input data
data_file = os.path.join(args.data_dir, 'iris.csv')
df = pandas.read_csv(data_file)

x_col = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
y_col = ['species']
x_df = df.loc[:, x_col]
y_df = df.loc[:, y_col]

#dividing X,y into train and test data
x_train, x_test, y_train, y_test = train_test_split(x_df, y_df, test_size=0.2, random_state=223)

data = {'train': {'X': x_train, 'y': y_train},

        'test': {'X': x_test, 'y': y_test}}

clf = DecisionTreeClassifier().fit(data['train']['X'], data['train']['y'])
model_file_name = 'decision_tree.pkl'

print('Accuracy of Decision Tree classifier on training set: {:.2f}'.format(clf.score(x_train, y_train)))
print('Accuracy of Decision Tree classifier on test set: {:.2f}'.format(clf.score(x_test, y_test)))

os.makedirs('./outputs', exist_ok=True)
with open(model_file_name, 'wb') as file:
    joblib.dump(value=clf, filename='outputs/' + model_file_name)

examples/training/train-using-nfs/pytorch-on-amlarc-with-nfs/scripts/train.py METASEP
from azureml.core.run import Run

import argparse
import os
import torch
import torch.distributed as dist
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim

from math import ceil
from random import Random
from torch.multiprocessing import Process
from torch.autograd import Variable
from torchvision import datasets, transforms

parser = argparse.ArgumentParser()
parser.add_argument('--data-dir', required=True, help='path to input data directory')
parser.add_argument('--backend', required=True, help='Pytorch backend (gloo or nccl)')
args = parser.parse_args()



class Partition(object):
    def __init__(self, data, index):
        self.data = data
        self.index = index

    def __len__(self):
        return len(self.index)

    def __getitem__(self, index):
        data_idx = self.index[index]
        return self.data[data_idx]


class DataPartitioner(object):
    def __init__(self, data, sizes=[0.7, 0.2, 0.1], seed=1234):
        self.data = data
        self.partitions = []
        rng = Random()
        rng.seed(seed)
        data_len = len(data)
        indexes = [x for x in range(0, data_len)]
        rng.shuffle(indexes)

        for frac in sizes:
            part_len = int(frac * data_len)
            self.partitions.append(indexes[0:part_len])
            indexes = indexes[part_len:]

    def use(self, partition):
        return Partition(self.data, self.partitions[partition])


class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
        self.conv2_drop = nn.Dropout2d()
        self.fc1 = nn.Linear(320, 50)
        self.fc2 = nn.Linear(50, 10)

    def forward(self, x):
        x = F.relu(F.max_pool2d(self.conv1(x), 2))
        x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
        x = x.view(-1, 320)
        x = F.relu(self.fc1(x))
        x = F.dropout(x, training=self.training)
        x = self.fc2(x)
        return F.log_softmax(x)


def partition_dataset():
    dataset = datasets.MNIST(
        args.data_dir,
        train=True,
        download=False,
        transform=transforms.Compose([
            transforms.ToTensor(),
            transforms.Normalize((0.1307, ), (0.3081, ))
        ]))

    size = dist.get_world_size()
    bsz = 128 // size
    partition_sizes = [1.0 / size for _ in range(size)]
    partition = DataPartitioner(dataset, partition_sizes)
    partition = partition.use(dist.get_rank())
    train_set = torch.utils.data.DataLoader(
        partition, batch_size=bsz, shuffle=True)
    return train_set, bsz


def average_gradients(model):
    size = float(dist.get_world_size())
    for param in model.parameters():
        dist.all_reduce(param.grad.data, op=dist.reduce_op.SUM)
        param.grad.data /= size


def run(rank, size):
    torch.manual_seed(1234)
    train_set, bsz = partition_dataset()
    model = Net()
    optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)

    num_batches = ceil(len(train_set.dataset) / float(bsz))
    for epoch in range(5):
        epoch_loss = 0.0
        for data, target in train_set:
            data, target = Variable(data), Variable(target)
            optimizer.zero_grad()
            output = model(data)
            loss = F.nll_loss(output, target)
            epoch_loss += loss.data
            loss.backward()
            average_gradients(model)
            optimizer.step()

        if dist.get_rank() == 0:
            run_object.log('Training loss', epoch_loss / num_batches)


if __name__ == "__main__":
    run_object = Run.get_context()
    dist.init_process_group(args.backend)
    run(dist.get_rank(), dist.get_world_size())

docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/aml_src/utils.py METASEP
from collections import defaultdict, deque
import datetime
import pickle
import time

import torch
import torch.distributed as dist

import errno
import os


class SmoothedValue(object):
    """Track a series of values and provide access to smoothed values over a
    window or the global series average.
    """

    def __init__(self, window_size=20, fmt=None):
        if fmt is None:
            fmt = "{median:.4f} ({global_avg:.4f})"
        self.deque = deque(maxlen=window_size)
        self.total = 0.0
        self.count = 0
        self.fmt = fmt

    def update(self, value, n=1):
        self.deque.append(value)
        self.count += n
        self.total += value * n

    def synchronize_between_processes(self):
        """
        Warning: does not synchronize the deque!
        """
        if not is_dist_avail_and_initialized():
            return
        t = torch.tensor([self.count, self.total], dtype=torch.float64, device='cuda')
        dist.barrier()
        dist.all_reduce(t)
        t = t.tolist()
        self.count = int(t[0])
        self.total = t[1]

    @property
    def median(self):
        d = torch.tensor(list(self.deque))
        return d.median().item()

    @property
    def avg(self):
        d = torch.tensor(list(self.deque), dtype=torch.float32)
        return d.mean().item()

    @property
    def global_avg(self):
        return self.total / self.count

    @property
    def max(self):
        return max(self.deque)

    @property
    def value(self):
        return self.deque[-1]

    def __str__(self):
        return self.fmt.format(
            median=self.median,
            avg=self.avg,
            global_avg=self.global_avg,
            max=self.max,
            value=self.value)


def all_gather(data):
    """
    Run all_gather on arbitrary picklable data (not necessarily tensors)
    Args:
        data: any picklable object
    Returns:
        list[data]: list of data gathered from each rank
    """
    world_size = get_world_size()
    if world_size == 1:
        return [data]

    # serialized to a Tensor
    buffer = pickle.dumps(data)
    storage = torch.ByteStorage.from_buffer(buffer)
    tensor = torch.ByteTensor(storage).to("cuda")

    # obtain Tensor size of each rank
    local_size = torch.tensor([tensor.numel()], device="cuda")
    size_list = [torch.tensor([0], device="cuda") for _ in range(world_size)]
    dist.all_gather(size_list, local_size)
    size_list = [int(size.item()) for size in size_list]
    max_size = max(size_list)

    # receiving Tensor from all ranks
    # we pad the tensor because torch all_gather does not support
    # gathering tensors of different shapes
    tensor_list = []
    for _ in size_list:
        tensor_list.append(torch.empty((max_size,), dtype=torch.uint8, device="cuda"))
    if local_size != max_size:
        padding = torch.empty(size=(max_size - local_size,), dtype=torch.uint8, device="cuda")
        tensor = torch.cat((tensor, padding), dim=0)
    dist.all_gather(tensor_list, tensor)

    data_list = []
    for size, tensor in zip(size_list, tensor_list):
        buffer = tensor.cpu().numpy().tobytes()[:size]
        data_list.append(pickle.loads(buffer))

    return data_list


def reduce_dict(input_dict, average=True):
    """
    Args:
        input_dict (dict): all the values will be reduced
        average (bool): whether to do average or sum
    Reduce the values in the dictionary from all processes so that all processes
    have the averaged results. Returns a dict with the same fields as
    input_dict, after reduction.
    """
    world_size = get_world_size()
    if world_size < 2:
        return input_dict
    with torch.no_grad():
        names = []
        values = []
        # sort the keys so that they are consistent across processes
        for k in sorted(input_dict.keys()):
            names.append(k)
            values.append(input_dict[k])
        values = torch.stack(values, dim=0)
        dist.all_reduce(values)
        if average:
            values /= world_size
        reduced_dict = {k: v for k, v in zip(names, values)}
    return reduced_dict


class MetricLogger(object):
    def __init__(self, delimiter="\t"):
        self.meters = defaultdict(SmoothedValue)
        self.delimiter = delimiter

    def update(self, **kwargs):
        for k, v in kwargs.items():
            if isinstance(v, torch.Tensor):
                v = v.item()
            assert isinstance(v, (float, int))
            self.meters[k].update(v)

    def __getattr__(self, attr):
        if attr in self.meters:
            return self.meters[attr]
        if attr in self.__dict__:
            return self.__dict__[attr]
        raise AttributeError("'{}' object has no attribute '{}'".format(
            type(self).__name__, attr))

    def __str__(self):
        loss_str = []
        for name, meter in self.meters.items():
            loss_str.append(
                "{}: {}".format(name, str(meter))
            )
        return self.delimiter.join(loss_str)

    def synchronize_between_processes(self):
        for meter in self.meters.values():
            meter.synchronize_between_processes()

    def add_meter(self, name, meter):
        self.meters[name] = meter

    def log_every(self, iterable, print_freq, header=None):
        i = 0
        if not header:
            header = ''
        start_time = time.time()
        end = time.time()
        iter_time = SmoothedValue(fmt='{avg:.4f}')
        data_time = SmoothedValue(fmt='{avg:.4f}')
        space_fmt = ':' + str(len(str(len(iterable)))) + 'd'
        if torch.cuda.is_available():
            log_msg = self.delimiter.join([
                header,
                '[{0' + space_fmt + '}/{1}]',
                'eta: {eta}',
                '{meters}',
                'time: {time}',
                'data: {data}',
                'max mem: {memory:.0f}'
            ])
        else:
            log_msg = self.delimiter.join([
                header,
                '[{0' + space_fmt + '}/{1}]',
                'eta: {eta}',
                '{meters}',
                'time: {time}',
                'data: {data}'
            ])
        MB = 1024.0 * 1024.0
        for obj in iterable:
            data_time.update(time.time() - end)
            yield obj
            iter_time.update(time.time() - end)
            if i % print_freq == 0 or i == len(iterable) - 1:
                eta_seconds = iter_time.global_avg * (len(iterable) - i)
                eta_string = str(datetime.timedelta(seconds=int(eta_seconds)))
                if torch.cuda.is_available():
                    print(log_msg.format(
                        i, len(iterable), eta=eta_string,
                        meters=str(self),
                        time=str(iter_time), data=str(data_time),
                        memory=torch.cuda.max_memory_allocated() / MB))
                else:
                    print(log_msg.format(
                        i, len(iterable), eta=eta_string,
                        meters=str(self),
                        time=str(iter_time), data=str(data_time)))
            i += 1
            end = time.time()
        total_time = time.time() - start_time
        total_time_str = str(datetime.timedelta(seconds=int(total_time)))
        print('{} Total time: {} ({:.4f} s / it)'.format(
            header, total_time_str, total_time / len(iterable)))


def collate_fn(batch):
    return tuple(zip(*batch))


def warmup_lr_scheduler(optimizer, warmup_iters, warmup_factor):

    def f(x):
        if x >= warmup_iters:
            return 1
        alpha = float(x) / warmup_iters
        return warmup_factor * (1 - alpha) + alpha

    return torch.optim.lr_scheduler.LambdaLR(optimizer, f)


def mkdir(path):
    try:
        os.makedirs(path)
    except OSError as e:
        if e.errno != errno.EEXIST:
            raise


def setup_for_distributed(is_master):
    """
    This function disables printing when not in master process
    """
    import builtins as __builtin__
    builtin_print = __builtin__.print

    def print(*args, **kwargs):
        force = kwargs.pop('force', False)
        if is_master or force:
            builtin_print(*args, **kwargs)

    __builtin__.print = print


def is_dist_avail_and_initialized():
    if not dist.is_available():
        return False
    if not dist.is_initialized():
        return False
    return True


def get_world_size():
    if not is_dist_avail_and_initialized():
        return 1
    return dist.get_world_size()


def get_rank():
    if not is_dist_avail_and_initialized():
        return 0
    return dist.get_rank()


def is_main_process():
    return get_rank() == 0


def save_on_master(*args, **kwargs):
    if is_main_process():
        torch.save(*args, **kwargs)


def init_distributed_mode(args):
    if 'RANK' in os.environ and 'WORLD_SIZE' in os.environ:
        args.rank = int(os.environ["RANK"])
        args.world_size = int(os.environ['WORLD_SIZE'])
        args.gpu = int(os.environ['LOCAL_RANK'])
    elif 'SLURM_PROCID' in os.environ:
        args.rank = int(os.environ['SLURM_PROCID'])
        args.gpu = args.rank % torch.cuda.device_count()
    else:
        print('Not using distributed mode')
        args.distributed = False
        return

    args.distributed = True

    torch.cuda.set_device(args.gpu)
    args.dist_backend = 'nccl'
    print('| distributed init (rank {}): {}'.format(
        args.rank, args.dist_url), flush=True)
    torch.distributed.init_process_group(backend=args.dist_backend, init_method=args.dist_url,
                                         world_size=args.world_size, rank=args.rank)
    torch.distributed.barrier()
    setup_for_distributed(args.rank == 0)

docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/aml_src/transforms.py METASEP
import random

from torchvision.transforms import functional as F


def _flip_coco_person_keypoints(kps, width):
    flip_inds = [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]
    flipped_data = kps[:, flip_inds]
    flipped_data[..., 0] = width - flipped_data[..., 0]
    # Maintain COCO convention that if visibility == 0, then x, y = 0
    inds = flipped_data[..., 2] == 0
    flipped_data[inds] = 0
    return flipped_data


class Compose(object):
    def __init__(self, transforms):
        self.transforms = transforms

    def __call__(self, image, target):
        for t in self.transforms:
            image, target = t(image, target)
        return image, target


class RandomHorizontalFlip(object):
    def __init__(self, prob):
        self.prob = prob

    def __call__(self, image, target):
        if random.random() < self.prob:
            height, width = image.shape[-2:]
            image = image.flip(-1)
            bbox = target["boxes"]
            bbox[:, [0, 2]] = width - bbox[:, [2, 0]]
            target["boxes"] = bbox
            if "masks" in target:
                target["masks"] = target["masks"].flip(-1)
            if "keypoints" in target:
                keypoints = target["keypoints"]
                keypoints = _flip_coco_person_keypoints(keypoints, width)
                target["keypoints"] = keypoints
        return image, target


class ToTensor(object):
    def __call__(self, image, target):
        image = F.to_tensor(image)
        return image, target

docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/aml_src/obj_segment_step_training.py METASEP
import os
import numpy as np
import torch
import torch.utils.data
from PIL import Image


class PennFudanDataset(torch.utils.data.Dataset):
    def __init__(self, root, transforms=None):
        self.root = root
        self.transforms = transforms
        # load all image files, sorting them to
        # ensure that they are aligned
        self.imgs = list(sorted(os.listdir(os.path.join(root, "PNGImages"))))
        self.masks = list(sorted(os.listdir(os.path.join(root, "PedMasks"))))

    def __getitem__(self, idx):
        # load images ad masks
        img_path = os.path.join(self.root, "PNGImages", self.imgs[idx])
        mask_path = os.path.join(self.root, "PedMasks", self.masks[idx])
        img = Image.open(img_path).convert("RGB")
        # note that we haven't converted the mask to RGB,
        # because each color corresponds to a different instance
        # with 0 being background
        mask = Image.open(mask_path)

        mask = np.array(mask)
        # instances are encoded as different colors
        obj_ids = np.unique(mask)
        # first id is the background, so remove it
        obj_ids = obj_ids[1:]

        # split the color-encoded mask into a set
        # of binary masks
        masks = mask == obj_ids[:, None, None]

        # get bounding box coordinates for each mask
        num_objs = len(obj_ids)
        boxes = []
        for i in range(num_objs):
            pos = np.where(masks[i])
            xmin = np.min(pos[1])
            xmax = np.max(pos[1])
            ymin = np.min(pos[0])
            ymax = np.max(pos[0])
            boxes.append([xmin, ymin, xmax, ymax])

        boxes = torch.as_tensor(boxes, dtype=torch.float32)
        # there is only one class
        labels = torch.ones((num_objs,), dtype=torch.int64)
        masks = torch.as_tensor(masks, dtype=torch.uint8)

        image_id = torch.tensor([idx])
        area = (boxes[:, 3] - boxes[:, 1]) * (boxes[:, 2] - boxes[:, 0])
        # suppose all instances are not crowd
        iscrowd = torch.zeros((num_objs,), dtype=torch.int64)

        target = {}
        target["boxes"] = boxes
        target["labels"] = labels
        target["masks"] = masks
        target["image_id"] = image_id
        target["area"] = area
        target["iscrowd"] = iscrowd

        if self.transforms is not None:
            img, target = self.transforms(img, target)

        return img, target

    def __len__(self):
        return len(self.imgs)


import torchvision
from torchvision.models.detection.faster_rcnn import FastRCNNPredictor
from torchvision.models.detection.mask_rcnn import MaskRCNNPredictor


def get_instance_segmentation_model(num_classes):
    # load an instance segmentation model pre-trained on COCO
    model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=True)

    # get the number of input features for the classifier
    in_features = model.roi_heads.box_predictor.cls_score.in_features
    # replace the pre-trained head with a new one
    model.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes)

    # now get the number of input features for the mask classifier
    in_features_mask = model.roi_heads.mask_predictor.conv5_mask.in_channels
    hidden_layer = 256
    # and replace the mask predictor with a new one
    model.roi_heads.mask_predictor = MaskRCNNPredictor(in_features_mask,
                                                       hidden_layer,
                                                       num_classes)

    return model

from engine import train_one_epoch, evaluate
import utils
import transforms as T


def get_transform(train):
    transforms = []
    # converts the image, a PIL image, into a PyTorch Tensor
    transforms.append(T.ToTensor())
    if train:
        # during training, randomly flip the training images
        # and ground-truth for data augmentation
        transforms.append(T.RandomHorizontalFlip(0.5))
    return T.Compose(transforms)


def main():
    # use our dataset and defined transformations
    dataset = PennFudanDataset(args.train_split, get_transform(train=True))
    dataset_test = PennFudanDataset(args.test_split, get_transform(train=False))
    num_workers = 1

    # define training and validation data loaders
    data_loader = torch.utils.data.DataLoader(
        dataset, batch_size=2, shuffle=True, num_workers=num_workers,
        collate_fn=utils.collate_fn)

    data_loader_test = torch.utils.data.DataLoader(
        dataset_test, batch_size=1, shuffle=False, num_workers=num_workers,
        collate_fn=utils.collate_fn)

    device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')

    # our dataset has two classes only - background and person
    num_classes = 2

    # get the model using our helper function
    model = get_instance_segmentation_model(num_classes)
    # move model to the right device
    model.to(device)

    # construct an optimizer
    params = [p for p in model.parameters() if p.requires_grad]
    optimizer = torch.optim.SGD(params, lr=0.005,
                                momentum=0.9, weight_decay=0.0005)

    # and a learning rate scheduler which decreases the learning rate by
    # 10x every 3 epochs
    lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer,
                                                   step_size=3,
                                                   gamma=0.1)

    # let's train it for 10 epochs
    num_epochs = args.epochs

    for epoch in range(num_epochs):
        # train for one epoch, printing every 10 iterations
        train_one_epoch(model, optimizer, data_loader, device, epoch, print_freq=10)
        # update the learning rate
        lr_scheduler.step()
        # evaluate on the test dataset
        evaluate(model, data_loader_test, device=device)

    filename = os.path.join('outputs', 'obj_segmentation.pkl')
    torch.save(model, filename)

    # filename = os.path.join('outputs', 'model.pt')
    # torch.save(model.state_dict(), filename)



import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--train-split', type=str, help='training split data output path')
    parser.add_argument('--test-split', type=str, help='test split data output path')
    parser.add_argument('--epochs', type=int, default=1)

    args = parser.parse_args()

    main()
docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/aml_src/obj_segment_step_data_process.py METASEP
import argparse
import os
import random
import shutil

parser = argparse.ArgumentParser()
parser.add_argument('--data-path', type=str, help='input data path')
parser.add_argument('--train-split', type=str, help='training split data output path')
parser.add_argument('--test-split', type=str, help='test split data output path')
parser.add_argument('--test-size', type=int, help='test split data size')

args = parser.parse_args()
types = ["PNGImages", "PedMasks"]
img_mask_list = [[os.path.join(args.data_path, type, file) for file in sorted(os.listdir(os.path.join(args.data_path, type))) ] for type in types]
print("img_mask_list", img_mask_list)
test_indices = random.sample(range(len(img_mask_list[0])), args.test_size)

test_img_folder, test_mask_folder = [os.path.join(args.test_split, type) for type in types]
train_img_folder, train_mask_folder = [os.path.join(args.train_split, type) for type in types]

os.makedirs(test_img_folder, exist_ok=True)
os.makedirs(test_mask_folder, exist_ok=True)
os.makedirs(train_img_folder, exist_ok=True)
os.makedirs(train_mask_folder, exist_ok=True)
print("test_img_folder",test_img_folder)
for idx, img_mask in enumerate(zip(*img_mask_list)):
    img, mask = img_mask
    if idx in test_indices:
        print("img path", img)
        print("mask path", mask)
        shutil.copy(img, test_img_folder)
        shutil.copy(mask, test_mask_folder)
    else:
        shutil.copy(img, train_img_folder)
        shutil.copy(mask, train_mask_folder)

docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/aml_src/engine.py METASEP
import math
import sys
import time
import torch

import torchvision.models.detection.mask_rcnn

from coco_utils import get_coco_api_from_dataset
from coco_eval import CocoEvaluator
import utils


def train_one_epoch(model, optimizer, data_loader, device, epoch, print_freq):
    model.train()
    metric_logger = utils.MetricLogger(delimiter="  ")
    metric_logger.add_meter('lr', utils.SmoothedValue(window_size=1, fmt='{value:.6f}'))
    header = 'Epoch: [{}]'.format(epoch)

    lr_scheduler = None
    if epoch == 0:
        warmup_factor = 1. / 1000
        warmup_iters = min(1000, len(data_loader) - 1)

        lr_scheduler = utils.warmup_lr_scheduler(optimizer, warmup_iters, warmup_factor)

    for images, targets in metric_logger.log_every(data_loader, print_freq, header):
        images = list(image.to(device) for image in images)
        targets = [{k: v.to(device) for k, v in t.items()} for t in targets]

        loss_dict = model(images, targets)

        losses = sum(loss for loss in loss_dict.values())

        # reduce losses over all GPUs for logging purposes
        loss_dict_reduced = utils.reduce_dict(loss_dict)
        losses_reduced = sum(loss for loss in loss_dict_reduced.values())

        loss_value = losses_reduced.item()

        if not math.isfinite(loss_value):
            print("Loss is {}, stopping training".format(loss_value))
            print(loss_dict_reduced)
            sys.exit(1)

        optimizer.zero_grad()
        losses.backward()
        optimizer.step()

        if lr_scheduler is not None:
            lr_scheduler.step()

        metric_logger.update(loss=losses_reduced, **loss_dict_reduced)
        metric_logger.update(lr=optimizer.param_groups[0]["lr"])

    return metric_logger


def _get_iou_types(model):
    model_without_ddp = model
    if isinstance(model, torch.nn.parallel.DistributedDataParallel):
        model_without_ddp = model.module
    iou_types = ["bbox"]
    if isinstance(model_without_ddp, torchvision.models.detection.MaskRCNN):
        iou_types.append("segm")
    if isinstance(model_without_ddp, torchvision.models.detection.KeypointRCNN):
        iou_types.append("keypoints")
    return iou_types


@torch.no_grad()
def evaluate(model, data_loader, device):
    n_threads = torch.get_num_threads()
    # FIXME remove this and make paste_masks_in_image run on the GPU
    torch.set_num_threads(1)
    cpu_device = torch.device("cpu")
    model.eval()
    metric_logger = utils.MetricLogger(delimiter="  ")
    header = 'Test:'

    coco = get_coco_api_from_dataset(data_loader.dataset)
    iou_types = _get_iou_types(model)
    coco_evaluator = CocoEvaluator(coco, iou_types)

    for images, targets in metric_logger.log_every(data_loader, 100, header):
        images = list(img.to(device) for img in images)

        if torch.cuda.is_available():
            torch.cuda.synchronize()
        model_time = time.time()
        outputs = model(images)

        outputs = [{k: v.to(cpu_device) for k, v in t.items()} for t in outputs]
        model_time = time.time() - model_time

        res = {target["image_id"].item(): output for target, output in zip(targets, outputs)}
        evaluator_time = time.time()
        coco_evaluator.update(res)
        evaluator_time = time.time() - evaluator_time
        metric_logger.update(model_time=model_time, evaluator_time=evaluator_time)

    # gather the stats from all processes
    metric_logger.synchronize_between_processes()
    print("Averaged stats:", metric_logger)
    coco_evaluator.synchronize_between_processes()

    # accumulate predictions from all images
    coco_evaluator.accumulate()
    coco_evaluator.summarize()
    torch.set_num_threads(n_threads)
    return coco_evaluator

docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/aml_src/coco_utils.py METASEP
import copy
import os
from PIL import Image

import torch
import torch.utils.data
import torchvision

from pycocotools import mask as coco_mask
from pycocotools.coco import COCO

import transforms as T


class FilterAndRemapCocoCategories(object):
    def __init__(self, categories, remap=True):
        self.categories = categories
        self.remap = remap

    def __call__(self, image, target):
        anno = target["annotations"]
        anno = [obj for obj in anno if obj["category_id"] in self.categories]
        if not self.remap:
            target["annotations"] = anno
            return image, target
        anno = copy.deepcopy(anno)
        for obj in anno:
            obj["category_id"] = self.categories.index(obj["category_id"])
        target["annotations"] = anno
        return image, target


def convert_coco_poly_to_mask(segmentations, height, width):
    masks = []
    for polygons in segmentations:
        rles = coco_mask.frPyObjects(polygons, height, width)
        mask = coco_mask.decode(rles)
        if len(mask.shape) < 3:
            mask = mask[..., None]
        mask = torch.as_tensor(mask, dtype=torch.uint8)
        mask = mask.any(dim=2)
        masks.append(mask)
    if masks:
        masks = torch.stack(masks, dim=0)
    else:
        masks = torch.zeros((0, height, width), dtype=torch.uint8)
    return masks


class ConvertCocoPolysToMask(object):
    def __call__(self, image, target):
        w, h = image.size

        image_id = target["image_id"]
        image_id = torch.tensor([image_id])

        anno = target["annotations"]

        anno = [obj for obj in anno if obj['iscrowd'] == 0]

        boxes = [obj["bbox"] for obj in anno]
        # guard against no boxes via resizing
        boxes = torch.as_tensor(boxes, dtype=torch.float32).reshape(-1, 4)
        boxes[:, 2:] += boxes[:, :2]
        boxes[:, 0::2].clamp_(min=0, max=w)
        boxes[:, 1::2].clamp_(min=0, max=h)

        classes = [obj["category_id"] for obj in anno]
        classes = torch.tensor(classes, dtype=torch.int64)

        segmentations = [obj["segmentation"] for obj in anno]
        masks = convert_coco_poly_to_mask(segmentations, h, w)

        keypoints = None
        if anno and "keypoints" in anno[0]:
            keypoints = [obj["keypoints"] for obj in anno]
            keypoints = torch.as_tensor(keypoints, dtype=torch.float32)
            num_keypoints = keypoints.shape[0]
            if num_keypoints:
                keypoints = keypoints.view(num_keypoints, -1, 3)

        keep = (boxes[:, 3] > boxes[:, 1]) & (boxes[:, 2] > boxes[:, 0])
        boxes = boxes[keep]
        classes = classes[keep]
        masks = masks[keep]
        if keypoints is not None:
            keypoints = keypoints[keep]

        target = {}
        target["boxes"] = boxes
        target["labels"] = classes
        target["masks"] = masks
        target["image_id"] = image_id
        if keypoints is not None:
            target["keypoints"] = keypoints

        # for conversion to coco api
        area = torch.tensor([obj["area"] for obj in anno])
        iscrowd = torch.tensor([obj["iscrowd"] for obj in anno])
        target["area"] = area
        target["iscrowd"] = iscrowd

        return image, target


def _coco_remove_images_without_annotations(dataset, cat_list=None):
    def _has_only_empty_bbox(anno):
        return all(any(o <= 1 for o in obj["bbox"][2:]) for obj in anno)

    def _count_visible_keypoints(anno):
        return sum(sum(1 for v in ann["keypoints"][2::3] if v > 0) for ann in anno)

    min_keypoints_per_image = 10

    def _has_valid_annotation(anno):
        # if it's empty, there is no annotation
        if len(anno) == 0:
            return False
        # if all boxes have close to zero area, there is no annotation
        if _has_only_empty_bbox(anno):
            return False
        # keypoints task have a slight different critera for considering
        # if an annotation is valid
        if "keypoints" not in anno[0]:
            return True
        # for keypoint detection tasks, only consider valid images those
        # containing at least min_keypoints_per_image
        if _count_visible_keypoints(anno) >= min_keypoints_per_image:
            return True
        return False

    assert isinstance(dataset, torchvision.datasets.CocoDetection)
    ids = []
    for ds_idx, img_id in enumerate(dataset.ids):
        ann_ids = dataset.coco.getAnnIds(imgIds=img_id, iscrowd=None)
        anno = dataset.coco.loadAnns(ann_ids)
        if cat_list:
            anno = [obj for obj in anno if obj["category_id"] in cat_list]
        if _has_valid_annotation(anno):
            ids.append(ds_idx)

    dataset = torch.utils.data.Subset(dataset, ids)
    return dataset


def convert_to_coco_api(ds):
    coco_ds = COCO()
    # annotation IDs need to start at 1, not 0, see torchvision issue #1530
    ann_id = 1
    dataset = {'images': [], 'categories': [], 'annotations': []}
    categories = set()
    for img_idx in range(len(ds)):
        # find better way to get target
        # targets = ds.get_annotations(img_idx)
        img, targets = ds[img_idx]
        image_id = targets["image_id"].item()
        img_dict = {}
        img_dict['id'] = image_id
        img_dict['height'] = img.shape[-2]
        img_dict['width'] = img.shape[-1]
        dataset['images'].append(img_dict)
        bboxes = targets["boxes"]
        bboxes[:, 2:] -= bboxes[:, :2]
        bboxes = bboxes.tolist()
        labels = targets['labels'].tolist()
        areas = targets['area'].tolist()
        iscrowd = targets['iscrowd'].tolist()
        if 'masks' in targets:
            masks = targets['masks']
            # make masks Fortran contiguous for coco_mask
            masks = masks.permute(0, 2, 1).contiguous().permute(0, 2, 1)
        if 'keypoints' in targets:
            keypoints = targets['keypoints']
            keypoints = keypoints.reshape(keypoints.shape[0], -1).tolist()
        num_objs = len(bboxes)
        for i in range(num_objs):
            ann = {}
            ann['image_id'] = image_id
            ann['bbox'] = bboxes[i]
            ann['category_id'] = labels[i]
            categories.add(labels[i])
            ann['area'] = areas[i]
            ann['iscrowd'] = iscrowd[i]
            ann['id'] = ann_id
            if 'masks' in targets:
                ann["segmentation"] = coco_mask.encode(masks[i].numpy())
            if 'keypoints' in targets:
                ann['keypoints'] = keypoints[i]
                ann['num_keypoints'] = sum(k != 0 for k in keypoints[i][2::3])
            dataset['annotations'].append(ann)
            ann_id += 1
    dataset['categories'] = [{'id': i} for i in sorted(categories)]
    coco_ds.dataset = dataset
    coco_ds.createIndex()
    return coco_ds


def get_coco_api_from_dataset(dataset):
    for _ in range(10):
        if isinstance(dataset, torchvision.datasets.CocoDetection):
            break
        if isinstance(dataset, torch.utils.data.Subset):
            dataset = dataset.dataset
    if isinstance(dataset, torchvision.datasets.CocoDetection):
        return dataset.coco
    return convert_to_coco_api(dataset)


class CocoDetection(torchvision.datasets.CocoDetection):
    def __init__(self, img_folder, ann_file, transforms):
        super(CocoDetection, self).__init__(img_folder, ann_file)
        self._transforms = transforms

    def __getitem__(self, idx):
        img, target = super(CocoDetection, self).__getitem__(idx)
        image_id = self.ids[idx]
        target = dict(image_id=image_id, annotations=target)
        if self._transforms is not None:
            img, target = self._transforms(img, target)
        return img, target


def get_coco(root, image_set, transforms, mode='instances'):
    anno_file_template = "{}_{}2017.json"
    PATHS = {
        "train": ("train2017", os.path.join("annotations", anno_file_template.format(mode, "train"))),
        "val": ("val2017", os.path.join("annotations", anno_file_template.format(mode, "val"))),
        # "train": ("val2017", os.path.join("annotations", anno_file_template.format(mode, "val")))
    }

    t = [ConvertCocoPolysToMask()]

    if transforms is not None:
        t.append(transforms)
    transforms = T.Compose(t)

    img_folder, ann_file = PATHS[image_set]
    img_folder = os.path.join(root, img_folder)
    ann_file = os.path.join(root, ann_file)

    dataset = CocoDetection(img_folder, ann_file, transforms=transforms)

    if image_set == "train":
        dataset = _coco_remove_images_without_annotations(dataset)

    # dataset = torch.utils.data.Subset(dataset, [i for i in range(500)])

    return dataset


def get_coco_kp(root, image_set, transforms):
    return get_coco(root, image_set, transforms, mode="person_keypoints")

docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/aml_src/coco_eval.py METASEP
import json
import tempfile

import numpy as np
import copy
import time
import torch
import torch._six

from pycocotools.cocoeval import COCOeval
from pycocotools.coco import COCO
import pycocotools.mask as mask_util

from collections import defaultdict

import utils


class CocoEvaluator(object):
    def __init__(self, coco_gt, iou_types):
        assert isinstance(iou_types, (list, tuple))
        coco_gt = copy.deepcopy(coco_gt)
        self.coco_gt = coco_gt

        self.iou_types = iou_types
        self.coco_eval = {}
        for iou_type in iou_types:
            self.coco_eval[iou_type] = COCOeval(coco_gt, iouType=iou_type)

        self.img_ids = []
        self.eval_imgs = {k: [] for k in iou_types}

    def update(self, predictions):
        img_ids = list(np.unique(list(predictions.keys())))
        self.img_ids.extend(img_ids)

        for iou_type in self.iou_types:
            results = self.prepare(predictions, iou_type)
            coco_dt = loadRes(self.coco_gt, results) if results else COCO()
            coco_eval = self.coco_eval[iou_type]

            coco_eval.cocoDt = coco_dt
            coco_eval.params.imgIds = list(img_ids)
            img_ids, eval_imgs = evaluate(coco_eval)

            self.eval_imgs[iou_type].append(eval_imgs)

    def synchronize_between_processes(self):
        for iou_type in self.iou_types:
            self.eval_imgs[iou_type] = np.concatenate(self.eval_imgs[iou_type], 2)
            create_common_coco_eval(self.coco_eval[iou_type], self.img_ids, self.eval_imgs[iou_type])

    def accumulate(self):
        for coco_eval in self.coco_eval.values():
            coco_eval.accumulate()

    def summarize(self):
        for iou_type, coco_eval in self.coco_eval.items():
            print("IoU metric: {}".format(iou_type))
            coco_eval.summarize()

    def prepare(self, predictions, iou_type):
        if iou_type == "bbox":
            return self.prepare_for_coco_detection(predictions)
        elif iou_type == "segm":
            return self.prepare_for_coco_segmentation(predictions)
        elif iou_type == "keypoints":
            return self.prepare_for_coco_keypoint(predictions)
        else:
            raise ValueError("Unknown iou type {}".format(iou_type))

    def prepare_for_coco_detection(self, predictions):
        coco_results = []
        for original_id, prediction in predictions.items():
            if len(prediction) == 0:
                continue

            boxes = prediction["boxes"]
            boxes = convert_to_xywh(boxes).tolist()
            scores = prediction["scores"].tolist()
            labels = prediction["labels"].tolist()

            coco_results.extend(
                [
                    {
                        "image_id": original_id,
                        "category_id": labels[k],
                        "bbox": box,
                        "score": scores[k],
                    }
                    for k, box in enumerate(boxes)
                ]
            )
        return coco_results

    def prepare_for_coco_segmentation(self, predictions):
        coco_results = []
        for original_id, prediction in predictions.items():
            if len(prediction) == 0:
                continue

            scores = prediction["scores"]
            labels = prediction["labels"]
            masks = prediction["masks"]

            masks = masks > 0.5

            scores = prediction["scores"].tolist()
            labels = prediction["labels"].tolist()

            rles = [
                mask_util.encode(np.array(mask[0, :, :, np.newaxis], dtype=np.uint8, order="F"))[0]
                for mask in masks
            ]
            for rle in rles:
                rle["counts"] = rle["counts"].decode("utf-8")

            coco_results.extend(
                [
                    {
                        "image_id": original_id,
                        "category_id": labels[k],
                        "segmentation": rle,
                        "score": scores[k],
                    }
                    for k, rle in enumerate(rles)
                ]
            )
        return coco_results

    def prepare_for_coco_keypoint(self, predictions):
        coco_results = []
        for original_id, prediction in predictions.items():
            if len(prediction) == 0:
                continue

            boxes = prediction["boxes"]
            boxes = convert_to_xywh(boxes).tolist()
            scores = prediction["scores"].tolist()
            labels = prediction["labels"].tolist()
            keypoints = prediction["keypoints"]
            keypoints = keypoints.flatten(start_dim=1).tolist()

            coco_results.extend(
                [
                    {
                        "image_id": original_id,
                        "category_id": labels[k],
                        'keypoints': keypoint,
                        "score": scores[k],
                    }
                    for k, keypoint in enumerate(keypoints)
                ]
            )
        return coco_results


def convert_to_xywh(boxes):
    xmin, ymin, xmax, ymax = boxes.unbind(1)
    return torch.stack((xmin, ymin, xmax - xmin, ymax - ymin), dim=1)


def merge(img_ids, eval_imgs):
    all_img_ids = utils.all_gather(img_ids)
    all_eval_imgs = utils.all_gather(eval_imgs)

    merged_img_ids = []
    for p in all_img_ids:
        merged_img_ids.extend(p)

    merged_eval_imgs = []
    for p in all_eval_imgs:
        merged_eval_imgs.append(p)

    merged_img_ids = np.array(merged_img_ids)
    merged_eval_imgs = np.concatenate(merged_eval_imgs, 2)

    # keep only unique (and in sorted order) images
    merged_img_ids, idx = np.unique(merged_img_ids, return_index=True)
    merged_eval_imgs = merged_eval_imgs[..., idx]

    return merged_img_ids, merged_eval_imgs


def create_common_coco_eval(coco_eval, img_ids, eval_imgs):
    img_ids, eval_imgs = merge(img_ids, eval_imgs)
    img_ids = list(img_ids)
    eval_imgs = list(eval_imgs.flatten())

    coco_eval.evalImgs = eval_imgs
    coco_eval.params.imgIds = img_ids
    coco_eval._paramsEval = copy.deepcopy(coco_eval.params)


#################################################################
# From pycocotools, just removed the prints and fixed
# a Python3 bug about unicode not defined
#################################################################

# Ideally, pycocotools wouldn't have hard-coded prints
# so that we could avoid copy-pasting those two functions

def createIndex(self):
    # create index
    # print('creating index...')
    anns, cats, imgs = {}, {}, {}
    imgToAnns, catToImgs = defaultdict(list), defaultdict(list)
    if 'annotations' in self.dataset:
        for ann in self.dataset['annotations']:
            imgToAnns[ann['image_id']].append(ann)
            anns[ann['id']] = ann

    if 'images' in self.dataset:
        for img in self.dataset['images']:
            imgs[img['id']] = img

    if 'categories' in self.dataset:
        for cat in self.dataset['categories']:
            cats[cat['id']] = cat

    if 'annotations' in self.dataset and 'categories' in self.dataset:
        for ann in self.dataset['annotations']:
            catToImgs[ann['category_id']].append(ann['image_id'])

    # print('index created!')

    # create class members
    self.anns = anns
    self.imgToAnns = imgToAnns
    self.catToImgs = catToImgs
    self.imgs = imgs
    self.cats = cats


maskUtils = mask_util


def loadRes(self, resFile):
    """
    Load result file and return a result api object.
    :param   resFile (str)     : file name of result file
    :return: res (obj)         : result api object
    """
    res = COCO()
    res.dataset['images'] = [img for img in self.dataset['images']]

    # print('Loading and preparing results...')
    # tic = time.time()
    if isinstance(resFile, torch._six.string_classes):
        anns = json.load(open(resFile))
    elif type(resFile) == np.ndarray:
        anns = self.loadNumpyAnnotations(resFile)
    else:
        anns = resFile
    assert type(anns) == list, 'results in not an array of objects'
    annsImgIds = [ann['image_id'] for ann in anns]
    assert set(annsImgIds) == (set(annsImgIds) & set(self.getImgIds())), \
        'Results do not correspond to current coco set'
    if 'caption' in anns[0]:
        imgIds = set([img['id'] for img in res.dataset['images']]) & set([ann['image_id'] for ann in anns])
        res.dataset['images'] = [img for img in res.dataset['images'] if img['id'] in imgIds]
        for id, ann in enumerate(anns):
            ann['id'] = id + 1
    elif 'bbox' in anns[0] and not anns[0]['bbox'] == []:
        res.dataset['categories'] = copy.deepcopy(self.dataset['categories'])
        for id, ann in enumerate(anns):
            bb = ann['bbox']
            x1, x2, y1, y2 = [bb[0], bb[0] + bb[2], bb[1], bb[1] + bb[3]]
            if 'segmentation' not in ann:
                ann['segmentation'] = [[x1, y1, x1, y2, x2, y2, x2, y1]]
            ann['area'] = bb[2] * bb[3]
            ann['id'] = id + 1
            ann['iscrowd'] = 0
    elif 'segmentation' in anns[0]:
        res.dataset['categories'] = copy.deepcopy(self.dataset['categories'])
        for id, ann in enumerate(anns):
            # now only support compressed RLE format as segmentation results
            ann['area'] = maskUtils.area(ann['segmentation'])
            if 'bbox' not in ann:
                ann['bbox'] = maskUtils.toBbox(ann['segmentation'])
            ann['id'] = id + 1
            ann['iscrowd'] = 0
    elif 'keypoints' in anns[0]:
        res.dataset['categories'] = copy.deepcopy(self.dataset['categories'])
        for id, ann in enumerate(anns):
            s = ann['keypoints']
            x = s[0::3]
            y = s[1::3]
            x1, x2, y1, y2 = np.min(x), np.max(x), np.min(y), np.max(y)
            ann['area'] = (x2 - x1) * (y2 - y1)
            ann['id'] = id + 1
            ann['bbox'] = [x1, y1, x2 - x1, y2 - y1]
    # print('DONE (t={:0.2f}s)'.format(time.time()- tic))

    res.dataset['annotations'] = anns
    createIndex(res)
    return res


def evaluate(self):
    '''
    Run per image evaluation on given images and store results (a list of dict) in self.evalImgs
    :return: None
    '''
    # tic = time.time()
    # print('Running per image evaluation...')
    p = self.params
    # add backward compatibility if useSegm is specified in params
    if p.useSegm is not None:
        p.iouType = 'segm' if p.useSegm == 1 else 'bbox'
        print('useSegm (deprecated) is not None. Running {} evaluation'.format(p.iouType))
    # print('Evaluate annotation type *{}*'.format(p.iouType))
    p.imgIds = list(np.unique(p.imgIds))
    if p.useCats:
        p.catIds = list(np.unique(p.catIds))
    p.maxDets = sorted(p.maxDets)
    self.params = p

    self._prepare()
    # loop through images, area range, max detection number
    catIds = p.catIds if p.useCats else [-1]

    if p.iouType == 'segm' or p.iouType == 'bbox':
        computeIoU = self.computeIoU
    elif p.iouType == 'keypoints':
        computeIoU = self.computeOks
    self.ious = {
        (imgId, catId): computeIoU(imgId, catId)
        for imgId in p.imgIds
        for catId in catIds}

    evaluateImg = self.evaluateImg
    maxDet = p.maxDets[-1]
    evalImgs = [
        evaluateImg(imgId, catId, areaRng, maxDet)
        for catId in catIds
        for areaRng in p.areaRng
        for imgId in p.imgIds
    ]
    # this is NOT in the pycocotools code, but could be done outside
    evalImgs = np.asarray(evalImgs).reshape(len(catIds), len(p.areaRng), len(p.imgIds))
    self._paramsEval = copy.deepcopy(self.params)
    # toc = time.time()
    # print('DONE (t={:0.2f}s).'.format(toc-tic))
    return p.imgIds, evalImgs

#################################################################
# end of straight copy from pycocotools, just removing the prints
#################################################################

docs/AKS-HCI/notebooks/mnist/mnist_script/utils.py METASEP
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

import gzip
import numpy as np
import struct


# load compressed MNIST gz files and return numpy arrays
def load_data(filename, label=False):
    with gzip.open(filename) as gz:
        struct.unpack('I', gz.read(4))
        n_items = struct.unpack('>I', gz.read(4))
        if not label:
            n_rows = struct.unpack('>I', gz.read(4))[0]
            n_cols = struct.unpack('>I', gz.read(4))[0]
            res = np.frombuffer(gz.read(n_items[0] * n_rows * n_cols), dtype=np.uint8)
            res = res.reshape(n_items[0], n_rows * n_cols)
        else:
            res = np.frombuffer(gz.read(n_items[0]), dtype=np.uint8)
            res = res.reshape(n_items[0], 1)
    return res


# one-hot encode a 1-D array
def one_hot_encode(array, num_of_classes):
    return np.eye(num_of_classes)[array.reshape(-1)]

docs/AKS-HCI/notebooks/mnist/mnist_script/train.py METASEP

import argparse
import os
import numpy as np
import glob

from sklearn.linear_model import LogisticRegression
import joblib

from azureml.core import Run
from utils import load_data

# let user feed in 2 parameters, the dataset to mount or download, and the regularization rate of the logistic regression model
parser = argparse.ArgumentParser()
parser.add_argument('--data-folder', type=str, dest='data_folder', help='data folder mounting point')
parser.add_argument('--regularization', type=float, dest='reg', default=0.01, help='regularization rate')
args = parser.parse_args()

data_folder = args.data_folder
print('Data folder:', data_folder)

# load train and test set into numpy arrays
# note we scale the pixel intensity values to 0-1 (by dividing it with 255.0) so the model can converge faster.
X_train = load_data(glob.glob(os.path.join(data_folder, '**/train-images-idx3-ubyte.gz'), recursive=True)[0], False) / 255.0
X_test = load_data(glob.glob(os.path.join(data_folder, '**/t10k-images-idx3-ubyte.gz'), recursive=True)[0], False) / 255.0
y_train = load_data(glob.glob(os.path.join(data_folder, '**/train-labels-idx1-ubyte.gz'), recursive=True)[0], True).reshape(-1)
y_test = load_data(glob.glob(os.path.join(data_folder, '**/t10k-labels-idx1-ubyte.gz'), recursive=True)[0], True).reshape(-1)

print(X_train.shape, y_train.shape, X_test.shape, y_test.shape, sep = '\n')

# get hold of the current run
run = Run.get_context()

print('Train a logistic regression model with regularization rate of', args.reg)
clf = LogisticRegression(C=1.0/args.reg, solver="liblinear", multi_class="auto", random_state=42)
clf.fit(X_train, y_train)

print('Predict the test set')
y_hat = clf.predict(X_test)

# calculate accuracy on the prediction
acc = np.average(y_hat == y_test)
print('Accuracy is', acc)

run.log('regularization rate', np.float(args.reg))
run.log('accuracy', np.float(acc))

os.makedirs('outputs', exist_ok=True)
# note file saved in the outputs folder is automatically uploaded into experiment record
joblib.dump(value=clf, filename='outputs/sklearn_mnist_model.pkl')

docs/AKS-HCI/notebooks/distributed-cifar10/pytorch-script/cifar_dist_main.py METASEP
'''Train CIFAR10 with PyTorch.'''
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
import torch.distributed as dist

import torchvision.transforms as transforms

import os
import argparse

import sys
from PIL import Image
if sys.version_info[0] == 2:
    import cPickle as pickle
else:
    import pickle

import tarfile
import torch.utils.data as data
import numpy as np

class CIFAR10_DS(data.Dataset):
    """`CIFAR10 <https://www.cs.toronto.edu/~kriz/cifar.html>`_ Dataset.

    Args:
        data_path (string): Root directory of dataset where directory
        train (bool, optional): If True, creates dataset from training set, otherwise
            creates from test set.
        transform (callable, optional): A function/transform that takes in an PIL image
            and returns a transformed version. E.g, ``transforms.RandomCrop``
        target_transform (callable, optional): A function/transform that takes in the
            target and transforms it.
    """

    train_list = [
        'data_batch_1',
        'data_batch_2',
        'data_batch_3',
        'data_batch_4',
        'data_batch_5'
    ]

    test_list = [
        'test_batch'
    ]
    meta = {
        'filename': 'batches.meta',
        'key': 'label_names'
    }

    def __init__(self, data_path, train=True,
                 transform=None, target_transform=None):
        self.data_path = os.path.expanduser(data_path)
        self.transform = transform
        self.target_transform = target_transform
        self.train = train  # training set or test set

        if self.train:
            file_list = self.train_list
        else:
            file_list = self.test_list

        self.data = []
        self.targets = []

        # now load the picked numpy arrays
        with tarfile.open(os.path.join(self.data_path, 'cifar-10-python.tar.gz'), mode='r:gz') as tar:
            for file_name in file_list:
                buf = tar.extractfile(f'cifar-10-batches-py/{file_name}')
                entry = pickle.load(buf, encoding='latin1')

                self.data.append(entry['data'])
                if 'labels' in entry:
                    self.targets.extend(entry['labels'])
                else:
                    self.targets.extend(entry['fine_labels'])

            meta_file_name = self.meta['filename']
            meta_buf = tar.extractfile(f'cifar-10-batches-py/{meta_file_name}')
            meta_entry = pickle.load(meta_buf, encoding='latin1')
            self.classes = meta_entry[self.meta['key']]

        self.class_to_idx = {_class: i for i, _class in enumerate(self.classes)}
        self.data = np.vstack(self.data).reshape(-1, 3, 32, 32)
        self.data = self.data.transpose((0, 2, 3, 1))  # convert to HWC

    def __getitem__(self, index):
        """
        Args:
            index (int): Index

        Returns:
            tuple: (image, target) where target is index of the target class.
        """
        img, target = self.data[index], self.targets[index]

        # doing this so that it is consistent with all other datasets
        # to return a PIL Image
        img = Image.fromarray(img)

        if self.transform is not None:
            img = self.transform(img)

        if self.target_transform is not None:
            target = self.target_transform(target)

        return img, target

    def __len__(self):
        return len(self.data)


# from utils import progress_bar
class BasicBlock(nn.Module):
    expansion = 1

    def __init__(self, in_planes, planes, stride=1):
        super(BasicBlock, self).__init__()
        self.conv1 = nn.Conv2d(
            in_planes, planes, kernel_size=3, stride=stride, padding=1, bias=False)
        self.bn1 = nn.BatchNorm2d(planes)
        self.conv2 = nn.Conv2d(planes, planes, kernel_size=3,
                               stride=1, padding=1, bias=False)
        self.bn2 = nn.BatchNorm2d(planes)

        self.shortcut = nn.Sequential()
        if stride != 1 or in_planes != self.expansion*planes:
            self.shortcut = nn.Sequential(
                nn.Conv2d(in_planes, self.expansion*planes,
                          kernel_size=1, stride=stride, bias=False),
                nn.BatchNorm2d(self.expansion*planes)
            )

    def forward(self, x):
        out = F.relu(self.bn1(self.conv1(x)))
        out = self.bn2(self.conv2(out))
        out += self.shortcut(x)
        out = F.relu(out)
        return out

class Root(nn.Module):
    def __init__(self, in_channels, out_channels, kernel_size=1):
        super(Root, self).__init__()
        self.conv = nn.Conv2d(
            in_channels, out_channels, kernel_size,
            stride=1, padding=(kernel_size - 1) // 2, bias=False)
        self.bn = nn.BatchNorm2d(out_channels)

    def forward(self, xs):
        x = torch.cat(xs, 1)
        out = F.relu(self.bn(self.conv(x)))
        return out

class Tree(nn.Module):
    def __init__(self, block, in_channels, out_channels, level=1, stride=1):
        super(Tree, self).__init__()
        self.root = Root(2*out_channels, out_channels)
        if level == 1:
            self.left_tree = block(in_channels, out_channels, stride=stride)
            self.right_tree = block(out_channels, out_channels, stride=1)
        else:
            self.left_tree = Tree(block, in_channels,
                                  out_channels, level=level-1, stride=stride)
            self.right_tree = Tree(block, out_channels,
                                   out_channels, level=level-1, stride=1)

    def forward(self, x):
        out1 = self.left_tree(x)
        out2 = self.right_tree(out1)
        out = self.root([out1, out2])
        return out


class SimpleDLA(nn.Module):
    def __init__(self, block=BasicBlock, num_classes=10):
        super(SimpleDLA, self).__init__()
        self.base = nn.Sequential(
            nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1, bias=False),
            nn.BatchNorm2d(16),
            nn.ReLU(True)
        )

        self.layer1 = nn.Sequential(
            nn.Conv2d(16, 16, kernel_size=3, stride=1, padding=1, bias=False),
            nn.BatchNorm2d(16),
            nn.ReLU(True)
        )

        self.layer2 = nn.Sequential(
            nn.Conv2d(16, 32, kernel_size=3, stride=1, padding=1, bias=False),
            nn.BatchNorm2d(32),
            nn.ReLU(True)
        )

        self.layer3 = Tree(block,  32,  64, level=1, stride=1)
        self.layer4 = Tree(block,  64, 128, level=2, stride=2)
        self.layer5 = Tree(block, 128, 256, level=2, stride=2)
        self.layer6 = Tree(block, 256, 512, level=1, stride=2)
        self.linear = nn.Linear(512, num_classes)

    def forward(self, x):
        out = self.base(x)
        out = self.layer1(out)
        out = self.layer2(out)
        out = self.layer3(out)
        out = self.layer4(out)
        out = self.layer5(out)
        out = self.layer6(out)
        out = F.avg_pool2d(out, 4)
        out = out.view(out.size(0), -1)
        out = self.linear(out)
        return out

parser = argparse.ArgumentParser(description='PyTorch CIFAR10 Training')
parser.add_argument('--lr', default=0.1, type=float, help='learning rate')

parser.add_argument('-j', '--workers', default=4, type=int, metavar='N',
                    help='number of data loading workers (default: 4)')
parser.add_argument('--world-size', default=2, type=int,
                    help='number of distributed processes')
parser.add_argument('--dist-url', type=str,
                    help='url used to set up distributed training')
parser.add_argument('--dist-backend', default='nccl', type=str,
                    help='distributed backend')
parser.add_argument('--cluster-type', default='cpu', type=str,
                    help='nodes are cpu or gpu')

parser.add_argument('--data-folder', type=str, dest='data_folder', help='data folder mounting point')
parser.add_argument('--epochs', type=int, default=1)

args = parser.parse_args()

print("data fold", args.data_folder)

device = 'cuda' if torch.cuda.is_available() else 'cpu'
best_acc = 0  # best test accuracy
start_epoch = 0  # start from epoch 0 or last checkpoint epoch

args.distributed = args.world_size >= 2

if args.distributed:
    dist.init_process_group(backend=args.dist_backend)
    print("rank= ", torch.distributed.get_rank())
    print("world_size= ", torch.distributed.get_world_size())

# Data
print('==> Preparing data..')


transform_train = transforms.Compose([
    transforms.RandomCrop(32, padding=4),
    transforms.RandomHorizontalFlip(),
    transforms.ToTensor(),
    transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),
])

transform_test = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),
])

print("data_folder", args.data_folder)

trainset = CIFAR10_DS(
    data_path=args.data_folder, train=True, transform=transform_train)

if args.distributed:
    train_sampler = torch.utils.data.distributed.DistributedSampler(trainset)
else:
    train_sampler = None

trainloader = torch.utils.data.DataLoader(
    trainset, batch_size=128, shuffle=(train_sampler is None),
    num_workers=args.workers, pin_memory=True, sampler=train_sampler)

testset = CIFAR10_DS(
    data_path=args.data_folder, train=False, transform=transform_test)

testloader = torch.utils.data.DataLoader(
    testset, batch_size=100, shuffle=False,
    num_workers=args.workers, pin_memory=True)

classes = ('plane', 'car', 'bird', 'cat', 'deer',
           'dog', 'frog', 'horse', 'ship', 'truck')

# Model
print('==> Building model..')

net = SimpleDLA()
net = net.to(device)
if not args.distributed:
    if args.cluster_type == "gpu":
        net = torch.nn.DataParallel(net).cuda()
else:
    if args.cluster_type == "gpu":
        net.cuda()
    net = torch.nn.parallel.DistributedDataParallel(net)

# define loss function (criterion) and optimizer
criterion = nn.CrossEntropyLoss().cuda() if args.cluster_type == "gpu" else nn.CrossEntropyLoss()

optimizer = optim.SGD(net.parameters(), lr=args.lr,
                      momentum=0.9, weight_decay=5e-4)
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=200)


# Training
def train(epoch):
    print('\nEpoch: %d' % epoch)
    net.train()
    train_loss = 0
    correct = 0
    total = 0
    for batch_idx, (inputs, targets) in enumerate(trainloader):
        inputs, targets = inputs.to(device), targets.to(device)
        optimizer.zero_grad()
        outputs = net(inputs)
        loss = criterion(outputs, targets)
        loss.backward()
        optimizer.step()

        train_loss += loss.item()
        _, predicted = outputs.max(1)
        total += targets.size(0)
        correct += predicted.eq(targets).sum().item()
        print(batch_idx, len(trainloader), 'Loss: %.3f | Acc: %.3f%% (%d/%d)'
                     % (train_loss/(batch_idx+1), 100.*correct/total, correct, total))


def test(epoch):
    global best_acc
    net.eval()
    test_loss = 0
    correct = 0
    total = 0
    with torch.no_grad():
        for batch_idx, (inputs, targets) in enumerate(testloader):
            inputs, targets = inputs.to(device), targets.to(device)
            outputs = net(inputs)
            loss = criterion(outputs, targets)

            test_loss += loss.item()
            _, predicted = outputs.max(1)
            total += targets.size(0)
            correct += predicted.eq(targets).sum().item()

            print(batch_idx, len(testloader), 'Loss: %.3f | Acc: %.3f%% (%d/%d)'
                         % (test_loss / (batch_idx + 1), 100. * correct / total, correct, total))


for epoch in range(args.epochs):
    print("epoch", epoch)
    train(epoch)
    test(epoch)
    scheduler.step()

if not args.distributed or torch.distributed.get_rank() == 0:
    print("saving model to outputs/cifar10torch.pt...")
    os.makedirs('outputs', exist_ok=True)
    torch.save(net.state_dict(), "outputs/cifar10torch.pt")



docs/AKS-HCI/cli/mnist/mnist_script/utils.py METASEP
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

import gzip
import numpy as np
import struct


# load compressed MNIST gz files and return numpy arrays
def load_data(filename, label=False):
    with gzip.open(filename) as gz:
        struct.unpack('I', gz.read(4))
        n_items = struct.unpack('>I', gz.read(4))
        if not label:
            n_rows = struct.unpack('>I', gz.read(4))[0]
            n_cols = struct.unpack('>I', gz.read(4))[0]
            res = np.frombuffer(gz.read(n_items[0] * n_rows * n_cols), dtype=np.uint8)
            res = res.reshape(n_items[0], n_rows * n_cols)
        else:
            res = np.frombuffer(gz.read(n_items[0]), dtype=np.uint8)
            res = res.reshape(n_items[0], 1)
    return res


# one-hot encode a 1-D array
def one_hot_encode(array, num_of_classes):
    return np.eye(num_of_classes)[array.reshape(-1)]

docs/AKS-HCI/cli/mnist/mnist_script/train.py METASEP

import argparse
import os
import numpy as np
import glob

from sklearn.linear_model import LogisticRegression
import joblib

from azureml.core import Run
from utils import load_data

# let user feed in 2 parameters, the dataset to mount or download, and the regularization rate of the logistic regression model
parser = argparse.ArgumentParser()
parser.add_argument('--data-folder', type=str, dest='data_folder', help='data folder mounting point')
parser.add_argument('--regularization', type=float, dest='reg', default=0.01, help='regularization rate')
args = parser.parse_args()

data_folder = args.data_folder
print('Data folder:', data_folder)

# load train and test set into numpy arrays
# note we scale the pixel intensity values to 0-1 (by dividing it with 255.0) so the model can converge faster.
X_train = load_data(glob.glob(os.path.join(data_folder, '**/train-images-idx3-ubyte.gz'), recursive=True)[0], False) / 255.0
X_test = load_data(glob.glob(os.path.join(data_folder, '**/t10k-images-idx3-ubyte.gz'), recursive=True)[0], False) / 255.0
y_train = load_data(glob.glob(os.path.join(data_folder, '**/train-labels-idx1-ubyte.gz'), recursive=True)[0], True).reshape(-1)
y_test = load_data(glob.glob(os.path.join(data_folder, '**/t10k-labels-idx1-ubyte.gz'), recursive=True)[0], True).reshape(-1)

print(X_train.shape, y_train.shape, X_test.shape, y_test.shape, sep = '\n')

# get hold of the current run
run = Run.get_context()

print('Train a logistic regression model with regularization rate of', args.reg)
clf = LogisticRegression(C=1.0/args.reg, solver="liblinear", multi_class="auto", random_state=42)
clf.fit(X_train, y_train)

print('Predict the test set')
y_hat = clf.predict(X_test)

# calculate accuracy on the prediction
acc = np.average(y_hat == y_test)
print('Accuracy is', acc)

run.log('regularization rate', np.float(args.reg))
run.log('accuracy', np.float(acc))

os.makedirs('outputs', exist_ok=True)
# note file saved in the outputs folder is automatically uploaded into experiment record
joblib.dump(value=clf, filename='outputs/sklearn_mnist_model.pkl')

examples/training/train-using-nfs/scikit-learn-on-amlarc-with-nfs/scikit-learn-on-amlarc-with-nfs.ipynb METASEP
{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "Copyright (c) Microsoft Corporation. All rights reserved.\n",
    "\n",
    "Licensed under the MIT License."
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "#  Train using Azure Arc-enabled Machine Learning with NFS-mounted data\n",
    "\n",
    "This example notebook demonstrates how to train a simple Machine Learning model from data stored on an NFS server.\n",
    "For this example we will be training a simple model using scikit-learn.\n",
    "\n",
    "* Setup an NFS Server\n",
    "* Copy the Iris data to the NFS Server\n",
    "* Configure NFS Server mounts on your Kubernetes Cluster\n",
    "* Setup your connection to Azure Machine Learning\n",
    "* Create the necessary Azure Machine Learning objects\n",
    "* Submit a Training Run"
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Setup an NFS Server\n",
    "This notebook assumes that you either have access to an existing NFS server or know how to set one up.  Setting up and configuring NFS is beyond\n",
    "the scope of this example.  To complete this notebook you will need to know the address of your NFS server and know how to copy files onto it."
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "nfs_mount_path = '/nfs_share'\n",
    "\n",
    "import os, shutil\n",
    "iris_dir = os.path.join(nfs_mount_path, 'iris')\n",
    "shutil.rmtree(iris_dir, ignore_errors=True)\n",
    "os.makedirs(iris_dir, exist_ok=True)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Copy the Iris data to the NFS Server\n",
    "The iris.csv file (located in this directory) contains the training data.  The following code copies this file into your NFS share."
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "shutil.copyfile('iris.csv', os.path.join(iris_dir, 'iris.csv'))"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Cofigure NFS Server mounts on your Kubernetes Cluster\n",
    "\n",
    "Follow the instructions [here](../amlarc-nfs-setup/README.md) to configure your Azure Arc-enabled Machine Learning cluster to mount your NFS server."
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Setup your connection to Azure Machine Learning"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "# Check core SDK version number\n",
    "import azureml.core\n",
    "\n",
    "print(\"SDK version:\", azureml.core.VERSION)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "# Connect to the Workspace described by local configuration\n",
    "from azureml.core import Workspace\n",
    "\n",
    "ws = Workspace.from_config()\n",
    "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')"
   ],
   "outputs": [],
   "metadata": {
    "tags": [
     "create workspace"
    ]
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Create the necessary Azure Machine Learning objects"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "# Create an Experiment\n",
    "from azureml.core import Experiment\n",
    "experiment_name = 'train-on-amlarc-with-nfs'\n",
    "experiment = Experiment(workspace = ws, name = experiment_name)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "# Create a Docker-based environment with scikit-learn installed\n",
    "from azureml.core import Environment\n",
    "from azureml.core.runconfig import DockerConfiguration\n",
    "from azureml.core.conda_dependencies import CondaDependencies\n",
    "\n",
    "env_name = 'AzureML-sklearn-0.24-ubuntu18.04-py37-cuda11-gpu'\n",
    "myenv = Environment.get(workspace=ws, name=env_name)\n",
    "\n",
    "# Enable Docker\n",
    "docker_config = DockerConfiguration(use_docker=True)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "# Specify the name of an existing Azure Arc-enabled Machine Learning compute target\n",
    "amlarc_cluster = 'amlarc'"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Submit a Training Run"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "from azureml.core import ScriptRunConfig\n",
    "\n",
    "# Configure the run.  For this example we will use the NFS data path set above.\n",
    "src = ScriptRunConfig(source_directory='scripts', \n",
    "                      script='train.py', \n",
    "                      compute_target=amlarc_cluster,\n",
    "                      environment=myenv,\n",
    "                      arguments=['--data-dir', iris_dir],\n",
    "                      docker_runtime_config=docker_config)\n",
    " \n",
    "run = experiment.submit(config=src)\n",
    "run"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "Note: if you need to cancel a run, you can follow [these instructions](https://aka.ms/aml-docs-cancel-run)."
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "# Shows output of the run on stdout.\n",
    "run.wait_for_completion(show_output=True)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "run.get_metrics()"
   ],
   "outputs": [],
   "metadata": {}
  }
 ],
 "metadata": {
  "authors": [
   {
    "name": "dasommer"
   }
  ],
  "category": "training",
  "compute": [
   "AMLArc"
  ],
  "datasets": [
   "Iris"
  ],
  "deployment": [
   "None"
  ],
  "exclude_from_index": false,
  "framework": [
   "Scikit-learn"
  ],
  "friendly_name": "Train a model on Iris using Scikit-learn and NFS-mounted data",
  "index_order": 1,
  "kernelspec": {
   "display_name": "Python 3.6",
   "language": "python",
   "name": "python36"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.9"
  },
  "tags": [
   "None"
  ],
  "task": "Train a model on Iris using Scikit-learn and NFS-mounted data"
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
examples/training/train-using-nfs/scikit-learn-on-amlarc-with-nfs/iris.csv METASEP
sepal_length,sepal_width,petal_length,petal_width,species
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5.4,3.7,1.5,0.2,Iris-setosa
4.8,3.4,1.6,0.2,Iris-setosa
4.8,3,1.4,0.1,Iris-setosa
4.3,3,1.1,0.1,Iris-setosa
5.8,4,1.2,0.2,Iris-setosa
5.7,4.4,1.5,0.4,Iris-setosa
5.4,3.9,1.3,0.4,Iris-setosa
5.1,3.5,1.4,0.3,Iris-setosa
5.7,3.8,1.7,0.3,Iris-setosa
5.1,3.8,1.5,0.3,Iris-setosa
5.4,3.4,1.7,0.2,Iris-setosa
5.1,3.7,1.5,0.4,Iris-setosa
4.6,3.6,1,0.2,Iris-setosa
5.1,3.3,1.7,0.5,Iris-setosa
4.8,3.4,1.9,0.2,Iris-setosa
5,3,1.6,0.2,Iris-setosa
5,3.4,1.6,0.4,Iris-setosa
5.2,3.5,1.5,0.2,Iris-setosa
5.2,3.4,1.4,0.2,Iris-setosa
4.7,3.2,1.6,0.2,Iris-setosa
4.8,3.1,1.6,0.2,Iris-setosa
5.4,3.4,1.5,0.4,Iris-setosa
5.2,4.1,1.5,0.1,Iris-setosa
5.5,4.2,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5,3.2,1.2,0.2,Iris-setosa
5.5,3.5,1.3,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
4.4,3,1.3,0.2,Iris-setosa
5.1,3.4,1.5,0.2,Iris-setosa
5,3.5,1.3,0.3,Iris-setosa
4.5,2.3,1.3,0.3,Iris-setosa
4.4,3.2,1.3,0.2,Iris-setosa
5,3.5,1.6,0.6,Iris-setosa
5.1,3.8,1.9,0.4,Iris-setosa
4.8,3,1.4,0.3,Iris-setosa
5.1,3.8,1.6,0.2,Iris-setosa
4.6,3.2,1.4,0.2,Iris-setosa
5.3,3.7,1.5,0.2,Iris-setosa
5,3.3,1.4,0.2,Iris-setosa
7,3.2,4.7,1.4,Iris-versicolor
6.4,3.2,4.5,1.5,Iris-versicolor
6.9,3.1,4.9,1.5,Iris-versicolor
5.5,2.3,4,1.3,Iris-versicolor
6.5,2.8,4.6,1.5,Iris-versicolor
5.7,2.8,4.5,1.3,Iris-versicolor
6.3,3.3,4.7,1.6,Iris-versicolor
4.9,2.4,3.3,1,Iris-versicolor
6.6,2.9,4.6,1.3,Iris-versicolor
5.2,2.7,3.9,1.4,Iris-versicolor
5,2,3.5,1,Iris-versicolor
5.9,3,4.2,1.5,Iris-versicolor
6,2.2,4,1,Iris-versicolor
6.1,2.9,4.7,1.4,Iris-versicolor
5.6,2.9,3.6,1.3,Iris-versicolor
6.7,3.1,4.4,1.4,Iris-versicolor
5.6,3,4.5,1.5,Iris-versicolor
5.8,2.7,4.1,1,Iris-versicolor
6.2,2.2,4.5,1.5,Iris-versicolor
5.6,2.5,3.9,1.1,Iris-versicolor
5.9,3.2,4.8,1.8,Iris-versicolor
6.1,2.8,4,1.3,Iris-versicolor
6.3,2.5,4.9,1.5,Iris-versicolor
6.1,2.8,4.7,1.2,Iris-versicolor
6.4,2.9,4.3,1.3,Iris-versicolor
6.6,3,4.4,1.4,Iris-versicolor
6.8,2.8,4.8,1.4,Iris-versicolor
6.7,3,5,1.7,Iris-versicolor
6,2.9,4.5,1.5,Iris-versicolor
5.7,2.6,3.5,1,Iris-versicolor
5.5,2.4,3.8,1.1,Iris-versicolor
5.5,2.4,3.7,1,Iris-versicolor
5.8,2.7,3.9,1.2,Iris-versicolor
6,2.7,5.1,1.6,Iris-versicolor
5.4,3,4.5,1.5,Iris-versicolor
6,3.4,4.5,1.6,Iris-versicolor
6.7,3.1,4.7,1.5,Iris-versicolor
6.3,2.3,4.4,1.3,Iris-versicolor
5.6,3,4.1,1.3,Iris-versicolor
5.5,2.5,4,1.3,Iris-versicolor
5.5,2.6,4.4,1.2,Iris-versicolor
6.1,3,4.6,1.4,Iris-versicolor
5.8,2.6,4,1.2,Iris-versicolor
5,2.3,3.3,1,Iris-versicolor
5.6,2.7,4.2,1.3,Iris-versicolor
5.7,3,4.2,1.2,Iris-versicolor
5.7,2.9,4.2,1.3,Iris-versicolor
6.2,2.9,4.3,1.3,Iris-versicolor
5.1,2.5,3,1.1,Iris-versicolor
5.7,2.8,4.1,1.3,Iris-versicolor
6.3,3.3,6,2.5,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica
7.1,3,5.9,2.1,Iris-virginica
6.3,2.9,5.6,1.8,Iris-virginica
6.5,3,5.8,2.2,Iris-virginica
7.6,3,6.6,2.1,Iris-virginica
4.9,2.5,4.5,1.7,Iris-virginica
7.3,2.9,6.3,1.8,Iris-virginica
6.7,2.5,5.8,1.8,Iris-virginica
7.2,3.6,6.1,2.5,Iris-virginica
6.5,3.2,5.1,2,Iris-virginica
6.4,2.7,5.3,1.9,Iris-virginica
6.8,3,5.5,2.1,Iris-virginica
5.7,2.5,5,2,Iris-virginica
5.8,2.8,5.1,2.4,Iris-virginica
6.4,3.2,5.3,2.3,Iris-virginica
6.5,3,5.5,1.8,Iris-virginica
7.7,3.8,6.7,2.2,Iris-virginica
7.7,2.6,6.9,2.3,Iris-virginica
6,2.2,5,1.5,Iris-virginica
6.9,3.2,5.7,2.3,Iris-virginica
5.6,2.8,4.9,2,Iris-virginica
7.7,2.8,6.7,2,Iris-virginica
6.3,2.7,4.9,1.8,Iris-virginica
6.7,3.3,5.7,2.1,Iris-virginica
7.2,3.2,6,1.8,Iris-virginica
6.2,2.8,4.8,1.8,Iris-virginica
6.1,3,4.9,1.8,Iris-virginica
6.4,2.8,5.6,2.1,Iris-virginica
7.2,3,5.8,1.6,Iris-virginica
7.4,2.8,6.1,1.9,Iris-virginica
7.9,3.8,6.4,2,Iris-virginica
6.4,2.8,5.6,2.2,Iris-virginica
6.3,2.8,5.1,1.5,Iris-virginica
6.1,2.6,5.6,1.4,Iris-virginica
7.7,3,6.1,2.3,Iris-virginica
6.3,3.4,5.6,2.4,Iris-virginica
6.4,3.1,5.5,1.8,Iris-virginica
6,3,4.8,1.8,Iris-virginica
6.9,3.1,5.4,2.1,Iris-virginica
6.7,3.1,5.6,2.4,Iris-virginica
6.9,3.1,5.1,2.3,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica
6.8,3.2,5.9,2.3,Iris-virginica
6.7,3.3,5.7,2.5,Iris-virginica
6.7,3,5.2,2.3,Iris-virginica
6.3,2.5,5,1.9,Iris-virginica
6.5,3,5.2,2,Iris-virginica
6.2,3.4,5.4,2.3,Iris-virginica
5.9,3,5.1,1.8,Iris-virginica

examples/training/train-using-nfs/pytorch-on-amlarc-with-nfs/pytorch-on-amlarc-with-nfs.ipynb METASEP
{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "Copyright (c) Microsoft Corporation. All rights reserved.\n",
    "\n",
    "Licensed under the MIT License."
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "#  Train using Distributed Pytorch on Azure Arc-enabled Machine Learning with NFS-mounted data\n",
    "\n",
    "This example notebook demonstrates how to train a Deep Learning model using Pytorch and data stored on an NFS server.\n",
    "\n",
    "* Setup an NFS Server\n",
    "* Download training data to the NFS Server\n",
    "* Configure NFS Server mounts on your Kubernetes Cluster\n",
    "* Setup your connection to Azure Machine Learning\n",
    "* Create the necessary Azure Machine Learning objects\n",
    "* Submit a Training Run"
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Setup an NFS Server\n",
    "This notebook assumes that you either have access to an existing NFS server or know how to set one up.  Setting up and configuring NFS is beyond\n",
    "the scope of this example.  To complete this notebook you will need to know the address of your NFS server and know how to mount it locally so that it is accessible to this notebook.\n",
    "\n",
    "Once you have a working NFS server mount, configure the 'nfs_mount_path' variable below to point to it."
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "nfs_mount_path = '/nfs_share'\n",
    "\n",
    "import os, shutil\n",
    "mnist_dir = os.path.join(nfs_mount_path, 'mnist')\n",
    "shutil.rmtree(mnist_dir, ignore_errors=True)\n",
    "os.makedirs(mnist_dir, exist_ok=True)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Download training data to the NFS Server\n",
    "This step uses the Torchvision utilities (from PyTorch) to download the MNIST data to the NFS server."
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "%pip install torchvision==0.10.0\n",
    "\n",
    "from torchvision import datasets\n",
    "import os\n",
    "\n",
    "datasets.MNIST(mnist_dir, train=True, download=True)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Cofigure NFS Server mounts on your Kubernetes Cluster\n",
    "\n",
    "Follow the instructions [here](../amlarc-nfs-setup/README.md) to configure your Azure Arc-enabled Machine Learning cluster to mount your NFS server."
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Setup your connection to Azure Machine Learning"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "# Check core SDK version number\n",
    "import azureml.core\n",
    "\n",
    "print(\"SDK version:\", azureml.core.VERSION)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "# Connect to the Workspace described by local configuration\n",
    "from azureml.core import Workspace\n",
    "\n",
    "ws = Workspace.from_config()\n",
    "print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')"
   ],
   "outputs": [],
   "metadata": {
    "tags": [
     "create workspace"
    ]
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Create the necessary Azure Machine Learning objects"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "# Create an Experiment\n",
    "from azureml.core import Experiment\n",
    "experiment_name = 'train-on-amlarc-with-nfs'\n",
    "experiment = Experiment(workspace = ws, name = experiment_name)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "# Create a Docker-based environment with Pytorch installed\n",
    "from azureml.core import Environment\n",
    "from azureml.core.runconfig import DockerConfiguration\n",
    "from azureml.core.conda_dependencies import CondaDependencies\n",
    "\n",
    "env_name = 'AzureML-pytorch-1.9-ubuntu18.04-py37-cuda11-gpu'\n",
    "myenv = Environment.get(workspace=ws, name=env_name)\n",
    "\n",
    "# Enable Docker\n",
    "docker_config = DockerConfiguration(use_docker=True)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "# Specify the name of an existing Azure Arc-enabled Machine Learning compute target\n",
    "amlarc_cluster = 'amlarc'"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Submit a Training Run"
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "from azureml.core import ScriptRunConfig\n",
    "from azureml.core.runconfig import PyTorchConfiguration\n",
    "\n",
    "# Configure the run.  For this example we will use the NFS data path set above.\n",
    "backend = 'Gloo'\n",
    "dist_config = PyTorchConfiguration(communication_backend=backend, node_count = 3)\n",
    "\n",
    "src = ScriptRunConfig(source_directory='scripts', \n",
    "                      script='train.py', \n",
    "                      compute_target=amlarc_cluster,\n",
    "                      environment=myenv,\n",
    "                      arguments=['--data-dir', mnist_dir, '--backend', backend],\n",
    "                      docker_runtime_config=docker_config,\n",
    "                      distributed_job_config=dist_config)\n",
    " \n",
    "run = experiment.submit(config=src)\n",
    "run"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "Note: if you need to cancel a run, you can follow [these instructions](https://aka.ms/aml-docs-cancel-run)."
   ],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "# Shows output of the run on stdout.\n",
    "run.wait_for_completion(show_output=True)"
   ],
   "outputs": [],
   "metadata": {}
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "source": [
    "run.get_metrics()"
   ],
   "outputs": [],
   "metadata": {}
  }
 ],
 "metadata": {
  "authors": [
   {
    "name": "nigup"
   }
  ],
  "category": "training",
  "compute": [
   "AML Compute"
  ],
  "datasets": [
   "Diabetes"
  ],
  "deployment": [
   "None"
  ],
  "exclude_from_index": false,
  "framework": [
   "None"
  ],
  "friendly_name": "Train on Azure Machine Learning Compute",
  "index_order": 1,
  "kernelspec": {
   "name": "python3",
   "display_name": "Python 3.6.9 64-bit ('reinforcement-learning': venv)"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.9"
  },
  "tags": [
   "None"
  ],
  "task": "Submit a run on Azure Machine Learning Compute.",
  "interpreter": {
   "hash": "35af1fdeebffda251ef6c74d8fab833455f029e14e41c2b8f9cd1519f2f9f445"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
examples/training/train-using-nfs/amlarc-nfs-setup/mount-config.yaml METASEP
apiVersion: v1
data:
  mounts.yaml: |
    mountPoints:
    - mountPath: /nfs_share
      mountType: nfs
      name: amlarc-nfs-share-0
      path: /disks/4TB/code/nfs_share
      server: <nfs-server-ip>
kind: ConfigMap
metadata:
  name: mount-config
  namespace: azureml

examples/training/train-using-nfs/amlarc-nfs-setup/README.md METASEP
# Setting up an NFS Server on AML Arc

Before you can run any of the examples in this section you will need to setup an NFS mount on your
Arc-enabled Kubernetes cluster.

The included mount-config.yaml file can be used as a template to do this. You will need to replace `<nfs-server-ip>` with the
actual address of your server. Then run the following:

```
kubectl apply -f mount-config.yaml
```

More detailed documentation on ephemeral NFS volume usage in Arc-enabled Machine Learning 
can be found [here](../../../docs/setup-ephemeral-nfs-volume.md)

examples/training/additional-sdk-examples/003-Distributed TensorFlow with parameter server/distributed-tensorflow-with-parameter-server.ipynb METASEP
{
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "Copyright (c) Microsoft Corporation. All rights reserved.\n",
        "\n",
        "Licensed under the MIT License."
      ],
      "metadata": {}
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Distributed TensorFlow with parameter server\n",
        "In this tutorial, you will train a TensorFlow model on the [MNIST](http://yann.lecun.com/exdb/mnist/) dataset using native [distributed TensorFlow](https://www.tensorflow.org/deploy/distributed)."
      ],
      "metadata": {}
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Prerequisites\n",
        "* Understand the [architecture and terms](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture) introduced by Azure Machine Learning (AML)\n",
        "* If you are using an Azure Machine Learning Notebook VM, you are all set. Otherwise, go through the [configuration notebook](../../../../configuration.ipynb) to:\n",
        "    * install the AML SDK\n",
        "    * create a workspace and its configuration file (`config.json`)\n",
        "* Review the [tutorial](../train-hyperparameter-tune-deploy-with-tensorflow/train-hyperparameter-tune-deploy-with-tensorflow.ipynb) on single-node TensorFlow training using the SDK"
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "# Check core SDK version number\n",
        "import azureml.core\n",
        "\n",
        "print(\"SDK version:\", azureml.core.VERSION)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605482214964
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Initialize workspace\n",
        "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "from azureml.core.workspace import Workspace\n",
        "\n",
        "ws = Workspace.from_config()\n",
        "print('Workspace name: ' + ws.name, \n",
        "      'Azure region: ' + ws.location, \n",
        "      'Subscription id: ' + ws.subscription_id, \n",
        "      'Resource group: ' + ws.resource_group, sep = '\\n')"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605482222110
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Specify Amlarc compute\n"
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "from azureml.core.compute import ComputeTarget, KubernetesCompute\n",
        "from azureml.core.compute_target import ComputeTargetException\n",
        "\n",
        "# choose a name for your Kubernetes compute\n",
        "compute_name = 'gpucluster-1x'\n",
        "compute_target = ComputeTarget(workspace=ws, name=compute_name)\n",
        "\n",
        "# use get_status() to get a detailed status for the Kubernetes compute target. \n",
        "print(compute_target, compute_target.get_status())"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605482246224
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Train model on the remote compute\n",
        "Now that we have the cluster ready to go, let's run our distributed training job."
      ],
      "metadata": {}
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Create a project directory\n",
        "Create a directory that will contain all the necessary code from your local machine that you will need access to on the remote resource. This includes the training script, and any additional files your training script depends on."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "import os\n",
        "\n",
        "project_folder = './tf-distr-ps'\n",
        "os.makedirs(project_folder, exist_ok=True)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605482254073
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "Copy the training script `tf_mnist_replica.py` into this project directory."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "import shutil\n",
        "\n",
        "shutil.copy('tf_mnist_replica.py', project_folder)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605482259084
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Create an experiment\n",
        "Create an [Experiment](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#experiment) to track all the runs in your workspace for this distributed TensorFlow tutorial. "
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "from azureml.core import Experiment\n",
        "\n",
        "experiment_name = 'tf-distr-ps-aks'\n",
        "experiment = Experiment(ws, name=experiment_name)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605482268586
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Create an environment\n",
        "\n",
        "In this tutorial, we will use one of Azure ML's curated TensorFlow environments for training. [Curated environments](https://docs.microsoft.com/azure/machine-learning/how-to-use-environments#use-a-curated-environment) are available in your workspace by default. Specifically, we will use the TensorFlow 1.13 GPU curated environment."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "from azureml.core import Environment\n",
        "\n",
        "tf_env = Environment.get(ws, name='AzureML-TensorFlow-1.13-GPU')"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605482271931
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Configure the training job\n",
        "\n",
        "Create a ScriptRunConfig object to specify the configuration details of your training job, including your training script, environment to use, and the compute target to run on.\n",
        "\n",
        "In order to execute a distributed TensorFlow run with the parameter server strategy, you must create a `TensorflowConfiguration` object and pass it to the `distributed_job_config` parameter of the ScriptRunConfig constructor. The below code configures a distributed TensorFlow run with `2` workers and `1` parameter server."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "from azureml.core import ScriptRunConfig\n",
        "from azureml.core.runconfig import TensorflowConfiguration\n",
        "\n",
        "src = ScriptRunConfig(source_directory=project_folder,\n",
        "                      script='tf_mnist_replica.py',\n",
        "                      arguments=['--num_gpus', 1, '--train_steps', 500],\n",
        "                      compute_target=compute_target,\n",
        "                      environment=tf_env,\n",
        "                      distributed_job_config=TensorflowConfiguration(worker_count=2, parameter_server_count=1))"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605482277450
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Submit job\n",
        "Run your experiment by submitting your ScriptRunConfig object. Note that this call is asynchronous."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "run = experiment.submit(src)\n",
        "print(run)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605482282054
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Monitor your run\n",
        "You can monitor the progress of the run with a Jupyter widget. Like the run submission, the widget is asynchronous and provides live updates every 10-15 seconds until the job completes."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "run"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {}
    },
    {
      "cell_type": "markdown",
      "source": [
        "Alternatively, you can block until the script has completed training before running more code."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "run.wait_for_completion(show_output=True) # this provides a verbose log"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {}
    }
  ],
  "metadata": {
    "index_order": 1,
    "exclude_from_index": false,
    "task": "Use the TensorFlow estimator to train a model using distributed training",
    "deployment": [
      "None"
    ],
    "authors": [
      {
        "name": "minxia"
      }
    ],
    "kernel_info": {
      "name": "python3-azureml"
    },
    "language_info": {
      "name": "python",
      "version": "3.6.13",
      "mimetype": "text/x-python",
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "pygments_lexer": "ipython3",
      "nbconvert_exporter": "python",
      "file_extension": ".py"
    },
    "compute": [
      "AML Compute"
    ],
    "kernelspec": {
      "name": "python3613jvsc74a57bd0f8e18c978b0aad5c358277e0d895e7dda4954c3f3c8dadc6287d53f0de7a9ea9",
      "display_name": "Python 3.6.13 64-bit ('amlarc': conda)"
    },
    "tags": [
      "None"
    ],
    "datasets": [
      "MNIST"
    ],
    "categories": [
      "how-to-use-azureml",
      "ml-frameworks",
      "tensorflow"
    ],
    "category": "training",
    "framework": [
      "TensorFlow"
    ],
    "friendly_name": "Distributed TensorFlow with parameter server",
    "nteract": {
      "version": "nteract-front-end@1.0.0"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 2
}
examples/training/additional-sdk-examples/002-SciKitLearn/img-classification-part1-training.ipynb METASEP
{
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "Copyright (c) Microsoft Corporation. All rights reserved.\n",
        "\n",
        "Licensed under the MIT License."
      ],
      "metadata": {}
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Tutorial #1: Train an image classification model with Azure Machine Learning\n",
        "\n",
        "In this tutorial, you train a machine learning model on remote compute resources. You'll use the training and deployment workflow for Azure Machine Learning service (preview) in a Python Jupyter notebook.  You can then use the notebook as a template to train your own machine learning model with your own data. This tutorial is **part one of a two-part tutorial series**.  \n",
        "\n",
        "This tutorial trains a simple logistic regression using the [MNIST](https://azure.microsoft.com/services/open-datasets/catalog/mnist/) dataset and [scikit-learn](http://scikit-learn.org) with Azure Machine Learning.  MNIST is a popular dataset consisting of 70,000 grayscale images. Each image is a handwritten digit of 28x28 pixels, representing a number from 0 to 9. The goal is to create a multi-class classifier to identify the digit a given image represents. \n",
        "\n",
        "Learn how to:\n",
        "\n",
        "> * Set up your development environment\n",
        "> * Access and examine the data\n",
        "> * Train a simple logistic regression model on a remote cluster\n",
        "> * Review training results, find and register the best model\n",
        "\n",
        "You'll learn how to select a model and deploy it in [part two of this tutorial](deploy-models.ipynb) later. \n",
        "\n",
        "## Prerequisites\n",
        "\n",
        "See prerequisites in the [Azure Machine Learning documentation](https://docs.microsoft.com/azure/machine-learning/service/tutorial-train-models-with-aml#prerequisites).\n",
        "\n",
        "On the computer running this notebook, conda install matplotlib, numpy, scikit-learn=0.22.1"
      ],
      "metadata": {}
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Set up your development environment\n",
        "\n",
        "All the setup for your development work can be accomplished in a Python notebook.  Setup includes:\n",
        "\n",
        "* Importing Python packages\n",
        "* Connecting to a workspace to enable communication between your local computer and remote resources\n",
        "* Creating an experiment to track all your runs\n",
        "* Creating a remote compute target to use for training\n",
        "\n",
        "### Import packages\n",
        "\n",
        "Import Python packages you need in this session. Also display the Azure Machine Learning SDK version."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "import azureml.core\n",
        "from azureml.core import Workspace\n",
        "\n",
        "# check core SDK version number\n",
        "print(\"Azure ML SDK Version: \", azureml.core.VERSION)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "tags": [
          "check version"
        ],
        "gather": {
          "logged": 1605470668795
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Connect to workspace\n",
        "\n",
        "Create a workspace object from the existing workspace. `Workspace.from_config()` reads the file **config.json** and loads the details into an object named `ws`."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "# load workspace configuration from the config.json file in the current folder.\n",
        "ws = Workspace.from_config()\n",
        "print(ws.name, ws.location, ws.resource_group, sep='\\t')"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "tags": [
          "load workspace"
        ],
        "gather": {
          "logged": 1605470674216
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Create experiment\n",
        "\n",
        "Create an experiment to track the runs in your workspace. A workspace can have muliple experiments. "
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "experiment_name = 'sklearn-mnist'\n",
        "\n",
        "from azureml.core import Experiment\n",
        "exp = Experiment(workspace=ws, name=experiment_name)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "tags": [
          "create experiment"
        ],
        "gather": {
          "logged": 1605470678724
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Set up to submit to existing Kubernetes resource\n",
        "By attaching to Kubernetes clusters/profiles set up by IT operators, data scientists can train machine learning models on Amlarc k8s clusters that can either be AKS or k8s clusters from on prem or other clouds through Arc Kubernetes. "
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "from azureml.core.compute import ComputeTarget, KubernetesCompute\n",
        "from azureml.core.compute_target import ComputeTargetException\n",
        "\n",
        "# choose a name for your Kubernetes compute\n",
        "compute_name = 'gpucluster-1x'\n",
        "compute_target = ComputeTarget(workspace=ws, name=compute_name)\n",
        "    \n",
        "# For a more detailed view of the Kubernetes compute target's status, use get_status()\n",
        "print(compute_target, compute_target.get_status())"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "tags": [
          "create mlc",
          "amlcompute"
        ],
        "gather": {
          "logged": 1605470720751
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "You now have the necessary packages and compute resources to train a model in the cloud. \n",
        "\n",
        "## Explore data\n",
        "\n",
        "Before you train a model, you need to understand the data that you are using to train it. In this section you learn how to:\n",
        "\n",
        "* Download the MNIST dataset\n",
        "* Display some sample images\n",
        "\n",
        "### Download the MNIST dataset\n",
        "\n",
        "Use Azure Open Datasets to get the raw MNIST data files. [Azure Open Datasets](https://docs.microsoft.com/azure/open-datasets/overview-what-are-open-datasets) are curated public datasets that you can use to add scenario-specific features to machine learning solutions for more accurate models. Each dataset has a corrseponding class, `MNIST` in this case, to retrieve the data in different ways.\n",
        "\n",
        "This code retrieves the data as a `FileDataset` object, which is a subclass of `Dataset`. A `FileDataset` references single or multiple files of any format in your datastores or public urls. The class provides you with the ability to download or mount the files to your compute by creating a reference to the data source location. Additionally, you register the Dataset to your workspace for easy retrieval during training.\n",
        "\n",
        "Follow the [how-to](https://aka.ms/azureml/howto/createdatasets) to learn more about Datasets and their usage in the SDK."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "from azureml.core import Dataset\n",
        "from azureml.opendatasets import MNIST\n",
        "\n",
        "data_folder = os.path.join(os.getcwd(), 'data')\n",
        "os.makedirs(data_folder, exist_ok=True)\n",
        "\n",
        "mnist_file_dataset = MNIST.get_file_dataset()\n",
        "mnist_file_dataset.download(data_folder, overwrite=True)\n",
        "\n",
        "mnist_file_dataset = mnist_file_dataset.register(workspace=ws,\n",
        "                                                 name='mnist_opendataset',\n",
        "                                                 description='training and test dataset',\n",
        "                                                 create_new_version=True)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605470742633
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Display some sample images\n",
        "\n",
        "Load the compressed files into `numpy` arrays. Then use `matplotlib` to plot 30 random images from the dataset with their labels above them. Note this step requires a `load_data` function that's included in an `utils.py` file. This file is included in the sample folder. Please make sure it is placed in the same folder as this notebook. The `load_data` function simply parses the compresse files into numpy arrays."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "# make sure utils.py is in the same directory as this code\n",
        "from utils import load_data\n",
        "import glob\n",
        "\n",
        "\n",
        "# note we also shrink the intensity values (X) from 0-255 to 0-1. This helps the model converge faster.\n",
        "X_train = load_data(glob.glob(os.path.join(data_folder,\"**/train-images-idx3-ubyte.gz\"), recursive=True)[0], False) / 255.0\n",
        "X_test = load_data(glob.glob(os.path.join(data_folder,\"**/t10k-images-idx3-ubyte.gz\"), recursive=True)[0], False) / 255.0\n",
        "y_train = load_data(glob.glob(os.path.join(data_folder,\"**/train-labels-idx1-ubyte.gz\"), recursive=True)[0], True).reshape(-1)\n",
        "y_test = load_data(glob.glob(os.path.join(data_folder,\"**/t10k-labels-idx1-ubyte.gz\"), recursive=True)[0], True).reshape(-1)\n",
        "\n",
        "\n",
        "# now let's show some randomly chosen images from the traininng set.\n",
        "count = 0\n",
        "sample_size = 30\n",
        "plt.figure(figsize = (16, 6))\n",
        "for i in np.random.permutation(X_train.shape[0])[:sample_size]:\n",
        "    count = count + 1\n",
        "    plt.subplot(1, sample_size, count)\n",
        "    plt.axhline('')\n",
        "    plt.axvline('')\n",
        "    plt.text(x=10, y=-10, s=y_train[i], fontsize=18)\n",
        "    plt.imshow(X_train[i].reshape(28, 28), cmap=plt.cm.Greys)\n",
        "plt.show()"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605470766751
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Train on a remote cluster\n",
        "\n",
        "For this task, you submit the job to run on the remote training cluster you set up earlier.  To submit a job you:\n",
        "* Create a directory\n",
        "* Create a training script\n",
        "* Create a script run configuration\n",
        "* Submit the job \n",
        "\n",
        "### Create a directory\n",
        "\n",
        "Create a directory to deliver the necessary code from your computer to the remote resource."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "import os\n",
        "script_folder = os.path.join(os.getcwd(), \"sklearn-mnist\")\n",
        "os.makedirs(script_folder, exist_ok=True)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605470775135
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Create a training script\n",
        "\n",
        "To submit the job to the cluster, first create a training script. Run the following code to create the training script called `train.py` in the directory you just created. "
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "%%writefile ./sklearn-mnist/train.py\n",
        "\n",
        "import argparse\n",
        "import os\n",
        "import numpy as np\n",
        "import glob\n",
        "\n",
        "from sklearn.linear_model import LogisticRegression\n",
        "import joblib\n",
        "\n",
        "from azureml.core import Run\n",
        "from utils import load_data\n",
        "\n",
        "# let user feed in 2 parameters, the dataset to mount or download, and the regularization rate of the logistic regression model\n",
        "parser = argparse.ArgumentParser()\n",
        "parser.add_argument('--data-folder', type=str, dest='data_folder', help='data folder mounting point')\n",
        "parser.add_argument('--regularization', type=float, dest='reg', default=0.01, help='regularization rate')\n",
        "args = parser.parse_args()\n",
        "\n",
        "data_folder = args.data_folder\n",
        "print('Data folder:', data_folder)\n",
        "\n",
        "# load train and test set into numpy arrays\n",
        "# note we scale the pixel intensity values to 0-1 (by dividing it with 255.0) so the model can converge faster.\n",
        "X_train = load_data(glob.glob(os.path.join(data_folder, '**/train-images-idx3-ubyte.gz'), recursive=True)[0], False) / 255.0\n",
        "X_test = load_data(glob.glob(os.path.join(data_folder, '**/t10k-images-idx3-ubyte.gz'), recursive=True)[0], False) / 255.0\n",
        "y_train = load_data(glob.glob(os.path.join(data_folder, '**/train-labels-idx1-ubyte.gz'), recursive=True)[0], True).reshape(-1)\n",
        "y_test = load_data(glob.glob(os.path.join(data_folder, '**/t10k-labels-idx1-ubyte.gz'), recursive=True)[0], True).reshape(-1)\n",
        "\n",
        "print(X_train.shape, y_train.shape, X_test.shape, y_test.shape, sep = '\\n')\n",
        "\n",
        "# get hold of the current run\n",
        "run = Run.get_context()\n",
        "\n",
        "print('Train a logistic regression model with regularization rate of', args.reg)\n",
        "clf = LogisticRegression(C=1.0/args.reg, solver=\"liblinear\", multi_class=\"auto\", random_state=42)\n",
        "clf.fit(X_train, y_train)\n",
        "\n",
        "print('Predict the test set')\n",
        "y_hat = clf.predict(X_test)\n",
        "\n",
        "# calculate accuracy on the prediction\n",
        "acc = np.average(y_hat == y_test)\n",
        "print('Accuracy is', acc)\n",
        "\n",
        "run.log('regularization rate', np.float(args.reg))\n",
        "run.log('accuracy', np.float(acc))\n",
        "\n",
        "os.makedirs('outputs', exist_ok=True)\n",
        "# note file saved in the outputs folder is automatically uploaded into experiment record\n",
        "joblib.dump(value=clf, filename='outputs/sklearn_mnist_model.pkl')"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {}
    },
    {
      "cell_type": "markdown",
      "source": [
        "Notice how the script gets data and saves models:\n",
        "\n",
        "+ The training script reads an argument to find the directory containing the data.  When you submit the job later, you point to the dataset for this argument:\n",
        "`parser.add_argument('--data-folder', type=str, dest='data_folder', help='data directory mounting point')`"
      ],
      "metadata": {}
    },
    {
      "cell_type": "markdown",
      "source": [
        "\n",
        "+ The training script saves your model into a directory named outputs. <br/>\n",
        "`joblib.dump(value=clf, filename='outputs/sklearn_mnist_model.pkl')`<br/>\n",
        "Anything written in this directory is automatically uploaded into your workspace. You'll access your model from this directory later in the tutorial."
      ],
      "metadata": {}
    },
    {
      "cell_type": "markdown",
      "source": [
        "The file `utils.py` is referenced from the training script to load the dataset correctly.  Copy this script into the script folder so that it can be accessed along with the training script on the remote resource."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "import shutil\n",
        "shutil.copy('utils.py', script_folder)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605470800011
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Configure the training job\n",
        "\n",
        "Create a ScriptRunConfig object to specify the configuration details of your training job, including your training script, environment to use, and the compute target to run on. Configure the ScriptRunConfig by specifying:\n",
        "\n",
        "* The directory that contains your scripts. All the files in this directory are uploaded into the cluster nodes for execution. \n",
        "* The compute target.  In this case you will use the Amlarc compute\n",
        "* The training script name, train.py\n",
        "* An environment that contains the libraries needed to run the script\n",
        "* Arguments required from the training script. \n",
        "\n",
        "All files in the script folder are uploaded into the cluster nodes for execution. The data_folder is set to use the dataset.\n",
        "\n",
        "First, create the environment that contains: the scikit-learn library, azureml-dataset-runtime required for accessing the dataset, and azureml-defaults which contains the dependencies for logging metrics. The azureml-defaults also contains the dependencies required for deploying the model as a web service later in the part 2 of the tutorial.\n",
        "\n",
        "Once the environment is defined, register it with the Workspace to re-use it in part 2 of the tutorial."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "from azureml.core.environment import Environment\n",
        "from azureml.core.conda_dependencies import CondaDependencies\n",
        "\n",
        "# to install required packages\n",
        "env = Environment('tutorial-env')\n",
        "cd = CondaDependencies.create(pip_packages=['azureml-dataset-runtime[pandas,fuse]', 'azureml-defaults'], conda_packages = ['scikit-learn==0.22.1'])\n",
        "\n",
        "env.python.conda_dependencies = cd\n",
        "\n",
        "# Register environment to re-use later\n",
        "env.register(workspace = ws)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605470804650
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "Then, create the ScriptRunConfig by specifying the training script, compute target and environment."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "from azureml.core import ScriptRunConfig\n",
        "\n",
        "args = ['--data-folder', mnist_file_dataset.as_mount(), '--regularization', 0.5]\n",
        "\n",
        "src = ScriptRunConfig(source_directory=script_folder,\n",
        "                      script='train.py', \n",
        "                      arguments=args,\n",
        "                      compute_target=compute_target,\n",
        "                      environment=env)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "tags": [
          "configure estimator"
        ],
        "gather": {
          "logged": 1605470819060
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Submit the job to the cluster\n",
        "\n",
        "Run the experiment by submitting the ScriptRunConfig object. And you can navigate to Azure portal to monitor the run."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "run = exp.submit(config=src)\n",
        "run"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "tags": [
          "remote run",
          "amlcompute",
          "scikit-learn"
        ],
        "gather": {
          "logged": 1605470823185
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "By the way, if you need to cancel a run, you can follow [these instructions](https://aka.ms/aml-docs-cancel-run)."
      ],
      "metadata": {}
    },
    {
      "cell_type": "markdown",
      "source": [
        "In the next tutorial you will explore this model in more detail.\n",
        "\n",
        "## Register model\n",
        "\n",
        "The last step in the training script wrote the file `outputs/sklearn_mnist_model.pkl` in a directory named `outputs` in the VM of the cluster where the job is executed. `outputs` is a special directory in that all content in this  directory is automatically uploaded to your workspace.  This content appears in the run record in the experiment under your workspace. Hence, the model file is now also available in your workspace.\n",
        "\n",
        "You can see files associated with that run."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "print(run.get_file_names())"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "tags": [
          "query history"
        ]
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "Register the model in the workspace so that you (or other collaborators) can later query, examine, and deploy this model."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "# register model \n",
        "model = run.register_model(model_name='sklearn_mnist', model_path='outputs/sklearn_mnist_model.pkl')\n",
        "print(model.name, model.id, model.version, sep='\\t')"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "tags": [
          "register model from history"
        ]
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "![Impressions](https://PixelServer20190423114238.azurewebsites.net/api/impressions/NotebookVM/tutorials/img-classification-part1-training.png)"
      ],
      "metadata": {}
    }
  ],
  "metadata": {
    "authors": [
      {
        "name": "maxluk"
      }
    ],
    "kernelspec": {
      "name": "python3613jvsc74a57bd0f8e18c978b0aad5c358277e0d895e7dda4954c3f3c8dadc6287d53f0de7a9ea9",
      "display_name": "Python 3.6.13 64-bit ('amlarc': conda)"
    },
    "language_info": {
      "name": "python",
      "version": "3.6.13",
      "mimetype": "text/x-python",
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "pygments_lexer": "ipython3",
      "nbconvert_exporter": "python",
      "file_extension": ".py"
    },
    "msauthor": "roastala",
    "network_required": false,
    "categories": [
      "tutorials",
      "image-classification-mnist-data"
    ],
    "kernel_info": {
      "name": "python3-azureml"
    },
    "nteract": {
      "version": "nteract-front-end@1.0.0"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 2
}
examples/training/additional-sdk-examples/001-Tensorflow/train-tensorflow-resume-training.ipynb METASEP
{
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "#  Tensorflow training \n",
        "In this tutorial, you will train a mnist model in TensorFlow."
      ],
      "metadata": {}
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Prerequisites\n",
        "* Understand the [architecture and terms](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture) introduced by Azure Machine Learning (AML)\n",
        "* Go through the [configuration notebook](../../../configuration.ipynb) to:\n",
        "    * install the AML SDK\n",
        "    * create a workspace and its configuration file (`config.json`)\n",
        "[//]: # * Review the [tutorial](../train-hyperparameter-tune-deploy-with-tensorflow/train-hyperparameter-tune-deploy-with-tensorflow.ipynb) on single-node TensorFlow training using the SDK"
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "# Check core SDK version number\n",
        "import azureml.core\n",
        "\n",
        "print(\"SDK version:\", azureml.core.VERSION)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605464300648
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Initialize workspace\n",
        "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "from azureml.core.workspace import Workspace\n",
        "\n",
        "ws = Workspace.from_config()\n",
        "print('Workspace name: ' + ws.name, \n",
        "      'Azure region: ' + ws.location, \n",
        "      'Subscription id: ' + ws.subscription_id, \n",
        "      'Resource group: ' + ws.resource_group, sep='\\n')"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605468991404
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Specify existing Kubernetes Compute"
      ],
      "metadata": {
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from azureml.core.compute import ComputeTarget, KubernetesCompute\n",
        "from azureml.core.compute_target import ComputeTargetException\n",
        "\n",
        "# choose a name for your Kubernetes compute\n",
        "compute_name = 'gpucluster-1x'\n",
        "compute_target = ComputeTarget(workspace=ws, name=compute_name)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605469001539
        }
      }
    },
    {
      "cell_type": "code",
      "source": [
        "compute_target"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605469003539
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Create a Dataset for Files\n",
        "A Dataset can reference single or multiple files in your datastores or public urls. The files can be of any format. Dataset provides you with the ability to download or mount the files to your compute. By creating a dataset, you create a reference to the data source location. If you applied any subsetting transformations to the dataset, they will be stored in the dataset as well. The data remains in its existing location, so no extra storage cost is incurred. [Learn More](https://aka.ms/azureml/howto/createdatasets)"
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "#initialize file dataset \n",
        "from azureml.core.dataset import Dataset\n",
        "web_paths = ['http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz',\n",
        "             'http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz',\n",
        "             'http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz',\n",
        "             'http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz'\n",
        "            ]\n",
        "dataset = Dataset.File.from_files(path = web_paths)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605464337719
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "you may want to register datasets using the register() method to your workspace so they can be shared with others, reused across various experiments, and referred to by name in your training script."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "#register dataset to workspace\n",
        "dataset = dataset.register(workspace = ws,\n",
        "                           name = 'mnist dataset for Arc',\n",
        "                           description='training and test dataset',\n",
        "                           create_new_version=True)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605464356224
        }
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# list the files referenced by dataset\n",
        "dataset"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605464366363
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Train model on the Kubernetes compute"
      ],
      "metadata": {
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Create a project directory\n",
        "Create a directory that will contain all the necessary code from your local machine that you will need access to on the remote resource. This includes the training script, and any additional files your training script depends on."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "import os\n",
        "script_folder = './tf-resume-training'\n",
        "os.makedirs(script_folder, exist_ok=True)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605464372057
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "Copy the training script `tf_mnist_with_checkpoint.py` into this project directory."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "import shutil\n",
        "\n",
        "# the training logic is in the tf_mnist_with_checkpoint.py file.\n",
        "shutil.copy('./tf_mnist_with_checkpoint.py', script_folder)\n",
        "\n",
        "shutil.copy('./utils.py', script_folder)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605465394555
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Create an experiment\n",
        "Create an [Experiment](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#experiment) to track all the runs in your workspace for this distributed TensorFlow tutorial. "
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "from azureml.core import Experiment\n",
        "\n",
        "experiment_name = 'akse-arc-tf-training1'\n",
        "experiment = Experiment(ws, name=experiment_name)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605469036186
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Create ScriptRun"
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "from azureml.core.environment import Environment\n",
        "from azureml.core.conda_dependencies import CondaDependencies\n",
        "\n",
        "env = Environment(\"env-tf\")\n",
        "cd = CondaDependencies.create(pip_packages=['azureml-dataset-runtime[pandas,fuse]', 'azureml-defaults','tensorflow==1.13.1','horovod==0.16.1'])\n",
        "env.docker.base_image='mcr.microsoft.com/azureml/openmpi4.1.0-cuda11.0.3-cudnn8-ubuntu18.04'\n",
        "env.python.conda_dependencies = cd\n",
        "\n",
        "# Register environment to re-use later\n",
        "env.register(workspace = ws)\n",
        "\n",
        "from azureml.core import ScriptRunConfig\n",
        "args=['--data-folder', dataset.as_named_input('mnist').as_mount()]\n",
        "src = ScriptRunConfig(source_directory=script_folder,\n",
        "                      script='tf_mnist_with_checkpoint.py',\n",
        "                      compute_target=compute_target,\n",
        "                      environment=env,\n",
        "                      arguments=args)                     "
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605469045449
        }
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "In the above code, we passed our training data reference `ds_data` to our script's `--data-folder` argument. This will 1) mount our datastore on the remote compute and 2) provide the path to the data zip file on our datastore."
      ],
      "metadata": {}
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Submit job\n",
        "### Run your experiment . Note that this call is asynchronous."
      ],
      "metadata": {}
    },
    {
      "cell_type": "code",
      "source": [
        "run = experiment.submit(src)\n",
        "print(run)"
      ],
      "outputs": [],
      "execution_count": null,
      "metadata": {
        "gather": {
          "logged": 1605469051600
        }
      }
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "run"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Monitor your run\n",
        "You can monitor the progress of the run with a Jupyter widget. Like the run submission, the widget is asynchronous and provides live updates every 10-15 seconds until the job completes."
      ],
      "metadata": {}
    }
  ],
  "metadata": {
    "index_order": 1,
    "exclude_from_index": false,
    "task": "Resume a model in TensorFlow from a previously submitted run",
    "deployment": [
      "None"
    ],
    "authors": [
      {
        "name": "hesuri"
      }
    ],
    "kernel_info": {
      "name": "python3-azureml"
    },
    "msauthor": "hesuri",
    "language_info": {
      "name": "python",
      "version": "3.6.13",
      "mimetype": "text/x-python",
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "pygments_lexer": "ipython3",
      "nbconvert_exporter": "python",
      "file_extension": ".py"
    },
    "compute": [
      "AML Compute"
    ],
    "kernelspec": {
      "name": "python3613jvsc74a57bd0f8e18c978b0aad5c358277e0d895e7dda4954c3f3c8dadc6287d53f0de7a9ea9",
      "display_name": "Python 3.6.13 64-bit ('amlarc': conda)"
    },
    "tags": [
      "None"
    ],
    "datasets": [
      "MNIST"
    ],
    "category": "training",
    "framework": [
      "TensorFlow"
    ],
    "friendly_name": "Resuming a model",
    "nteract": {
      "version": "nteract-front-end@1.0.0"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 4
}
examples/inference/simple-flow/model/sklearn_mnist_model.pkl METASEP

examples/inference/simple-flow/model/conda.yml METASEP

name: model-env

dependencies:
  - python=3.6.2

  - pip:
    - azureml-dataset-runtime[pandas,fuse]~=1.24.0.0
    - azureml-defaults~=1.24.0.0
    - scikit-learn==0.22.1

channels:
  - anaconda
  - conda-forge

examples/inference/gpu-inferencing/model/mnist-tf.model.meta METASEP

examples/inference/gpu-inferencing/model/mnist-tf.model.index METASEP

examples/inference/gpu-inferencing/model/mnist-tf.model.data-00000-of-00001 METASEP

examples/inference/gpu-inferencing/model/conda.yml METASEP
name: model-env
channels:
  - conda-forge
dependencies:
  - python=3.6.2

  - pip:
    - azureml-defaults
    - numpy
    - tensorflow-gpu==1.14

examples/inference/gpu-inferencing/model/checkpoint METASEP
model_checkpoint_path: "mnist-tf.model"
all_model_checkpoint_paths: "mnist-tf.model"

docs/AKS-HCI/notebooks/upload-download-model/config.json METASEP
{
    "subscription_id": "<sub_id>",
    "resource_group": "<resource_group_name>",
    "workspace_name": "<AML_workspace_name>"
}
docs/AKS-HCI/notebooks/upload-download-model/README.md METASEP
# Upload Downloaded AML Model Files To Azure Blobs

These samples demonstrate how to download AML model files and upload to Azure Blob

## Notebooks

* [Model Download and Upload](AML-model-download-upload.ipynb)

  This notebook demonstrates an example of downloading AML model files then upload to Azure Blob




   
docs/AKS-HCI/notebooks/upload-download-model/AML-model-download-upload.ipynb METASEP
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Upload Downloaded AML Model Files To Azure Blobs\n",
    "\n",
    "In this notebook, you will download a model from azure machine learning workspace to your local envrionment, then upload the model files as azure storage blobs.\n",
    "\n",
    "## Prerequisites\n",
    "*  Azure Machine Learning Workspace\n",
    "If you are using an Azure Machine Learning Notebook VM, you are all set. Otherwise, go through the [AZML-SDK-INSTALL](https://docs.microsoft.com/en-us/python/api/overview/azure/ml/install?view=azure-ml-py)  to install the Azure Machine Learning Python SDK and create an Azure ML `Workspace`.\n",
    "*  An registered AML machine learning model. For how to train and register model, please see [pytorch-cifar10-train](https://github.com/Azure/AML-Kubernetes/tree/master/docs/AKS-HCI/notebooks/distributed-cifar10/distributed-pytorch-cifar10.ipynb)\n",
    "*  Azure storage blob client library. For more details, please see [here](https://docs.microsoft.com/en-us/python/api/overview/azure/storage-blob-readme?view=azure-python). "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core import Workspace\n",
    "import os"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Initialize workspace\n",
    "\n",
    "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`. \n",
    "\n",
    "If you haven't done already please go to `config.json` file and fill in your workspace information."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "ws = Workspace.from_config()\n",
    "print('Workspace name: ' + ws.name, \n",
    "      'Azure region: ' + ws.location, \n",
    "      'Subscription id: ' + ws.subscription_id, \n",
    "      'Resource group: ' + ws.resource_group, sep='\\n')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Download model from AML Workspace"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_path = 'cifar10model'\n",
    "model_name = \"cifar10torch\"\n",
    "\n",
    "ws.models[model_name].download(target_dir=model_path, exist_ok=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Upload model files to Azure storage blobs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azure.storage.blob import BlobServiceClient, ContainerClient\n",
    "    \n",
    "connection_string = \"<storage account connection string>\"\n",
    "blob_service_client = BlobServiceClient.from_connection_string(connection_string)\n",
    "    \n",
    "container_name = \"pytorchmodel\"\n",
    "\n",
    "container_client = blob_service_client.get_container_client(container_name)\n",
    "\n",
    "try:\n",
    "    container_properties = container_client.get_container_properties()\n",
    "except Exception as e:\n",
    "    container_client.create_container()\n",
    "\n",
    "for root, dirs, files in os.walk(model_path):\n",
    "    for file in files:\n",
    "        source_file = os.path.join(root, file)\n",
    "        blob_name = source_file\n",
    "        blob_client = container_client.get_blob_client(blob_name)\n",
    "        if blob_client.exists():\n",
    "            blob_client.delete_blob()\n",
    "        with open(source_file, \"rb\") as data:\n",
    "            blob_client.upload_blob(data, blob_type=\"BlockBlob\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now you should see the files are uploaded to Blob Storage"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "fc402497f0168b24575e2ffafe64cd34c507b9a7fab971a93b09782ae565c5c6"
  },
  "kernelspec": {
   "display_name": "Python 3.8.3 64-bit",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}

docs/AKS-HCI/notebooks/pipeline/test_set.csv METASEP
,Unnamed: 0,Unnamed: 0.1,Unnamed: 0.1.1,Unnamed: 0.1.1.1,Unnamed: 0.1.1.1.1,cost,distance,dropoff_latitude,dropoff_longitude,passengers,pickup_latitude,pickup_longitude,store_forward,vendor,pickup_weekday,pickup_month,pickup_monthday,dropoff_weekday,dropoff_month,dropoff_monthday,pickup_hour,pickup_minute,pickup_second,dropoff_hour,dropoff_minute,dropoff_second
0,3823,3891,3891,3933,3933,10.5,1.49,40.67766953,-73.96222687,1,40.6884613,-73.98020935,N,2,1,1,26,1,1,26,15,55,16,16,12,33
1,2408,2444,2444,2467,2467,20,6.66,40.73447418,-73.99212646,1,40.79590988,-73.93545532,N,2,6,1,24,6,1,24,23,20,56,23,36,9
2,2722,2766,2766,2792,2792,7.5,1.42,40.70057297,-73.99156189,2,40.68553925,-73.99443054,N,2,5,1,9,5,1,9,17,0,20,17,8,52
3,600,609,609,613,613,6,0.89,40.80518341,-73.94141388,1,40.81178665,-73.95517731,N,2,1,1,5,1,1,5,8,24,18,8,30,25
4,2181,2216,2216,2235,2235,5.5,0.98,40.71474075,-73.9499054,1,40.71577454,-73.96444702,N,2,4,1,1,4,1,1,22,44,16,22,48,52
5,1542,1567,1567,1580,1580,5.5,1,40.66854095,-73.99355316,1,40.67189789,-73.98403168,N,2,6,1,10,6,1,10,18,20,31,18,24,45
6,1389,1413,1413,1425,1425,23.5,6.59,40.7955246,-73.97167206,6,40.7430687,-73.91899109,N,2,0,1,18,0,1,18,6,48,55,7,16,50
7,653,663,663,667,667,7,1.4,40.7974472,-73.97264862,1,40.79085159,-73.95359039,N,1,5,1,2,5,1,2,14,49,24,14,55,57
8,2406,2442,2442,2465,2465,4.5,0.66,40.80567551,-73.94690704,1,40.81209183,-73.94241333,N,2,4,1,15,4,1,15,11,6,19,11,9,34

docs/AKS-HCI/notebooks/pipeline/nyc-taxi-data-regression-model-building.ipynb METASEP
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Copyright (c) Microsoft Corporation. All rights reserved.  \n",
    "Licensed under the MIT License."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Linear Regression for NYC Taxi Datasets with AzureML Pipelines \n",
    "\n",
    "In this notebook, you learn how to prepare data for regression modeling. You run various transformations to filter and combine two different NYC taxi datasets\n",
    "using [Azure Machine Learning Pipelines](https://aka.ms/aml-pipelines). After data process steps, you add a final custom training step to train a regression model.  The trained model then registered to AzureML workspace."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prerequisites\n",
    "\n",
    "* [Setup Azure Arc-enabled Machine Learning Training and Inferencing on AKS on Azure Stack HCI](https://github.com/Azure/AML-Kubernetes/tree/master/docs/AKS-HCI/AML-ARC-Compute.md)\n",
    "\n",
    "* Last but not least, you need to be able to run a Notebook. (azureml-core, azureml-opendatasets, numpy, matplotlib, requests are required)\n",
    "\n",
    "   If you are using an Azure Machine Learning Notebook VM, you are all set. Otherwise, make sure you go through the configuration Notebook located at [here](https://github.com/Azure/MachineLearningNotebooks) first. This sets you up with a working config file that has information on your workspace, subscription id, etc."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Initialize AzureML workspace\n",
    "\n",
    "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`. \n",
    "\n",
    "If you haven't done already please go to `config.json` file and fill in your workspace information."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.workspace import Workspace,  ComputeTarget\n",
    "from azureml.exceptions import ComputeTargetException\n",
    "\n",
    "ws = Workspace.from_config()\n",
    "print('Workspace name: ' + ws.name, \n",
    "      'Azure region: ' + ws.location, \n",
    "      'Subscription id: ' + ws.subscription_id, \n",
    "      'Resource group: ' + ws.resource_group, sep='\\n')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Download data for regression modeling\n",
    "\n",
    "First, you will prepare data for regression modeling. you will leverage the convenience of Azure Open Datasets. Perform `pip install azureml-opendatasets` to get the open dataset package.  The Open Datasets package contains a class representing each data source (NycTlcGreen and NycTlcYellow) to easily filter date parameters before downloading.\n",
    "\n",
    "\n",
    "### Fetch data\n",
    "Begin by creating a dataframe to hold the taxi data. When working in a non-Spark environment, Open Datasets only allows downloading one month of data at a time with certain classes to avoid MemoryError with large datasets. To download a year of taxi data, iteratively fetch one month at a time, and before appending it to green_df_raw, randomly sample 500 records from each month to avoid bloating the dataframe. Then preview the data. To keep this process short, we are sampling data of only 1 month.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.opendatasets import NycTlcGreen, NycTlcYellow\n",
    "import pandas as pd\n",
    "from datetime import datetime\n",
    "from dateutil.relativedelta import relativedelta\n",
    "\n",
    "green_df_raw = pd.DataFrame([])\n",
    "start = datetime.strptime(\"1/1/2016\",\"%m/%d/%Y\")\n",
    "end = datetime.strptime(\"1/31/2016\",\"%m/%d/%Y\")\n",
    "\n",
    "number_of_months = 1\n",
    "sample_size = 5000\n",
    "\n",
    "for sample_month in range(number_of_months):\n",
    "    temp_df_green = NycTlcGreen(start + relativedelta(months=sample_month), end + relativedelta(months=sample_month)) \\\n",
    "        .to_pandas_dataframe()\n",
    "    green_df_raw = green_df_raw.append(temp_df_green.sample(sample_size))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "yellow_df_raw = pd.DataFrame([])\n",
    "start = datetime.strptime(\"1/1/2016\",\"%m/%d/%Y\")\n",
    "end = datetime.strptime(\"1/31/2016\",\"%m/%d/%Y\")\n",
    "\n",
    "sample_size = 500\n",
    "\n",
    "for sample_month in range(number_of_months):\n",
    "    temp_df_yellow = NycTlcYellow(start + relativedelta(months=sample_month), end + relativedelta(months=sample_month)) \\\n",
    "        .to_pandas_dataframe()\n",
    "    yellow_df_raw = yellow_df_raw.append(temp_df_yellow.sample(sample_size))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### See the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from IPython.display import display\n",
    "\n",
    "display(green_df_raw.head(5))\n",
    "display(yellow_df_raw.head(5))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Save data locally"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "dataDir = \"data\"\n",
    "\n",
    "if not os.path.exists(dataDir):\n",
    "    os.mkdir(dataDir)\n",
    "\n",
    "greenDir = dataDir + \"/green\"\n",
    "yellowDir = dataDir + \"/yellow\"\n",
    "\n",
    "if not os.path.exists(greenDir):\n",
    "    os.mkdir(greenDir)\n",
    "    \n",
    "if not os.path.exists(yellowDir):\n",
    "    os.mkdir(yellowDir)\n",
    "    \n",
    "greenTaxiData = greenDir + \"/unprepared.csv\"\n",
    "yellowTaxiData = yellowDir + \"/unprepared.csv\"\n",
    "\n",
    "green_df_raw.to_csv(greenTaxiData, index=False)\n",
    "yellow_df_raw.to_csv(yellowTaxiData, index=False)\n",
    "\n",
    "print(\"Data written to local folder.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prepare the dataset\n",
    "\n",
    "Your next step is to upload these files to default datastore of the workspace, and then registered as dataset in the workspace. \n",
    "\n",
    "Upload and dataset registration take less than 1 min."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core import Workspace, Datastore, Dataset\n",
    "\n",
    "def_data_store = ws.get_default_datastore()\n",
    "datastore_name = def_data_store.name\n",
    "datastore =  Datastore.get(ws, datastore_name)\n",
    "\n",
    "dataDir = \"data\"\n",
    "greenDir, yellowDir  = dataDir + \"/green\", dataDir + \"/yellow\"\n",
    "greenTaxiData, yellowTaxiData = greenDir + \"/unprepared.csv\", yellowDir + \"/unprepared.csv\"\n",
    "\n",
    "datastore.upload_files([greenTaxiData], \n",
    "                           target_path = 'green', \n",
    "                           overwrite = True, \n",
    "                           show_progress = True)\n",
    "\n",
    "datastore.upload_files([yellowTaxiData], \n",
    "                           target_path = 'yellow', \n",
    "                           overwrite = True, \n",
    "                           show_progress = True)\n",
    "\n",
    "print(\"Upload calls completed.\")\n",
    "\n",
    "# register datasets\n",
    "\n",
    "dataset_name,  target_path = 'green_taxi_data_o_file', 'green/unprepared.csv'\n",
    "datastore_paths = [(datastore, target_path)]\n",
    "green_taxi_data = Dataset.File.from_files(path=datastore_paths)\n",
    "green_taxi_data.register(ws, dataset_name)\n",
    "\n",
    "dataset_name,  target_path = 'yellow_taxi_data_o_file', 'yellow/unprepared.csv'\n",
    "datastore_paths = [(datastore, target_path)]\n",
    "yellow_taxi_data = Dataset.File.from_files(path=datastore_paths)\n",
    "yellow_taxi_data.register(ws, dataset_name)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Setup compute target\n",
    "\n",
    "Find the attach name for the Arc enabled AKS-HCI in your AzureML workspace.\n",
    "\n",
    "attach_name is the attached name for your AKS-HCI cluster you setup in [this step](https://github.com/Azure/AML-Kubernetes/blob/master/docs/AKS-HCI/AML-ARC-Compute.md#attach-your-azure-arc-enabled-cluster-to-your-azure-machine-learning-workspace-as-a-compute-target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.compute import KubernetesCompute\n",
    "\n",
    "attach_name = \"<NAME_OF_AML_ATTACHED_COMPUTE_OF_YOUR_AKS-HCI_CLUSTER>\"\n",
    "arcK_compute = KubernetesCompute(ws, attach_name)\n",
    "print(f\"compute target id in endpoint yaml: azureml:{arcK_compute.name}, instance type name in deployment yaml: {arcK_compute.default_instance_type}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define RunConfig for the compute target\n",
    "We will also use `pandas`, `scikit-learn`,  `pyarrow` for the pipeline steps. Defining the `runconfig` for that."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.runconfig import RunConfiguration\n",
    "from azureml.core.conda_dependencies import CondaDependencies\n",
    "\n",
    "# Create a new runconfig object\n",
    "aml_run_config = RunConfiguration()\n",
    "\n",
    "# Use the arcK_compute you created above. \n",
    "aml_run_config.target = arcK_compute\n",
    "\n",
    "# Enable Docker\n",
    "aml_run_config.environment.docker.enabled = True\n",
    "\n",
    "# Use conda_dependencies.yml to create a conda environment in the Docker image for execution\n",
    "aml_run_config.environment.python.user_managed_dependencies = False\n",
    "\n",
    "# Specify CondaDependencies obj, add necessary packages\n",
    "aml_run_config.environment.python.conda_dependencies = CondaDependencies.create(\n",
    "    conda_packages=['pandas','scikit-learn'], \n",
    "    pip_packages=['azureml-sdk', 'pyarrow'])\n",
    "\n",
    "print (\"Run configuration created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Processing data with pipeline steps\n",
    "\n",
    "The data process includes following pipeline steps implemented as PythonScriptStep:\n",
    "\n",
    "1. Cleanse Green Taxi Data\n",
    "2. Cleanse Yellow Taxi Data\n",
    "3. Merge cleansed Green and Yellow Taxi Data\n",
    "4. Filter Taxi Data\n",
    "5. Normalize Taxi Data\n",
    "6. Transform Taxi Data\n",
    "7. Train Test Data Split"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Cleanse Taxi Data\n",
    "\n",
    "Here a set of \"useful\" columns for both Green and Yellow taxi data are defined:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "useful_columns = str([\"cost\", \"distance\", \"dropoff_datetime\", \"dropoff_latitude\", \n",
    "                      \"dropoff_longitude\", \"passengers\", \"pickup_datetime\", \n",
    "                      \"pickup_latitude\", \"pickup_longitude\", \"store_forward\", \"vendor\"]).replace(\",\", \";\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Cleanse Green taxi data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.pipeline.core import PipelineData\n",
    "from azureml.data import OutputFileDatasetConfig\n",
    "from azureml.pipeline.steps import PythonScriptStep\n",
    "import os\n",
    "\n",
    "# python scripts folder\n",
    "prepare_data_folder = './scripts/prepdata'\n",
    "\n",
    "# rename columns as per Azure Machine Learning NYC Taxi tutorial\n",
    "\n",
    "green_columns = {\n",
    "        \"vendorID\": \"vendor\",\n",
    "        \"lpepPickupDatetime\": \"pickup_datetime\",\n",
    "        \"lpepDropoffDatetime\": \"dropoff_datetime\",\n",
    "        \"storeAndFwdFlag\": \"store_forward\",\n",
    "        \"pickupLongitude\": \"pickup_longitude\",\n",
    "        \"pickupLatitude\": \"pickup_latitude\",\n",
    "        \"dropoffLongitude\": \"dropoff_longitude\",\n",
    "        \"dropoffLatitude\": \"dropoff_latitude\",\n",
    "        \"passengerCount\": \"passengers\",\n",
    "        \"fareAmount\": \"cost\",\n",
    "        \"tripDistance\": \"distance\"\n",
    "    }\n",
    "\n",
    "green_columns_key = str(list(green_columns.keys())).replace(\",\", \";\")\n",
    "green_columns_value = str(list(green_columns.values())).replace(\",\", \";\")\n",
    "    \n",
    "# Define output after cleansing step\n",
    "dest = (datastore, None)\n",
    "cleansed_green_data = OutputFileDatasetConfig(name=\"cleansed_green_data\", destination=dest).as_upload(overwrite=False)\n",
    "\n",
    "print('Cleanse script is in {}.'.format(os.path.realpath(prepare_data_folder)))\n",
    "\n",
    "# cleansing step creation\n",
    "# See the cleanse.py for details\n",
    "cleansingStepGreen = PythonScriptStep(\n",
    "    name=\"Cleanse Green Taxi Data\",\n",
    "    script_name=\"cleanse.py\", \n",
    "    arguments=[\"--data-path\", green_taxi_data.as_named_input('raw_data').as_mount(),\n",
    "        \"--useful_columns\", useful_columns,\n",
    "               \"--columns_key\", green_columns_key,\n",
    "                \"--columns_value\", green_columns_value,\n",
    "               \"--output_cleanse\", cleansed_green_data],\n",
    "    outputs=[cleansed_green_data],\n",
    "    compute_target=arcK_compute,\n",
    "    runconfig=aml_run_config,\n",
    "    source_directory=prepare_data_folder,\n",
    "    allow_reuse=True\n",
    ")\n",
    "\n",
    "print(\"cleansingStepGreen created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Cleanse Yellow taxi data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "yellow_columns = {\n",
    "    \"vendorID\": \"vendor\",\n",
    "    \"tpepPickupDateTime\": \"pickup_datetime\",\n",
    "    \"tpepDropoffDateTime\": \"dropoff_datetime\",\n",
    "    \"storeAndFwdFlag\": \"store_forward\",\n",
    "    \"startLon\": \"pickup_longitude\",\n",
    "    \"startLat\": \"pickup_latitude\",\n",
    "    \"endLon\": \"dropoff_longitude\",\n",
    "    \"endLat\": \"dropoff_latitude\",\n",
    "    \"passengerCount\": \"passengers\",\n",
    "    \"fareAmount\": \"cost\",\n",
    "    \"tripDistance\": \"distance\"\n",
    "}\n",
    "\n",
    "yellow_columns_key = str(list(yellow_columns.keys())).replace(\",\", \";\")\n",
    "yellow_columns_value = str(list(yellow_columns.values())).replace(\",\", \";\")\n",
    "    \n",
    "# Define output after cleansing step\n",
    "dest = (datastore, None)\n",
    "cleansed_yellow_data = OutputFileDatasetConfig(name=\"cleansed_yellow_data\", destination=dest).as_upload(overwrite=False)\n",
    "\n",
    "# cleansing step creation\n",
    "# See the cleanse.py for details about input and output\n",
    "cleansingStepYellow = PythonScriptStep(\n",
    "    name=\"Cleanse Yellow Taxi Data\",\n",
    "    script_name=\"cleanse.py\", \n",
    "    arguments=[\"--data-path\", yellow_taxi_data.as_named_input('raw_data').as_mount(),\n",
    "        \"--useful_columns\", useful_columns,\n",
    "               \"--columns_key\", yellow_columns_key,\n",
    "                \"--columns_value\", yellow_columns_value,\n",
    "               \"--output_cleanse\", cleansed_yellow_data],\n",
    "    compute_target=arcK_compute,\n",
    "    runconfig=aml_run_config,\n",
    "    source_directory=prepare_data_folder,\n",
    "    allow_reuse=True\n",
    ")\n",
    "\n",
    "print(\"cleansingStepYellow created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Merge cleansed Green and Yellow datasets\n",
    "\n",
    "Create a single data source by merging the cleansed versions of Green and Yellow taxi data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define output after cleansing step\n",
    "merged_data = OutputFileDatasetConfig(name=\"merged_data\", destination=dest).as_upload(overwrite=False)\n",
    "\n",
    "\n",
    "print('Merge script is in {}.'.format(os.path.realpath(prepare_data_folder)))\n",
    "\n",
    "# merging step creation\n",
    "# See the merge.py for details about input and output\n",
    "mergingStep = PythonScriptStep(\n",
    "    name=\"Merge Taxi Data\",\n",
    "    script_name=\"merge.py\", \n",
    "    arguments=[\"--green_data_path\", cleansed_green_data.as_input(),\n",
    "               \"--yellow_data_path\", cleansed_yellow_data.as_input(),\n",
    "        \"--output_merge\", merged_data],\n",
    "    compute_target=arcK_compute,\n",
    "    runconfig=aml_run_config,\n",
    "    source_directory=prepare_data_folder,\n",
    "    allow_reuse=True\n",
    ")\n",
    "\n",
    "print(\"mergingStep created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Filter taxi data\n",
    "\n",
    "This step filters out coordinates for locations that are outside the city border. We use a TypeConverter object to change the latitude and longitude fields to decimal type. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define output after merging step\n",
    "filtered_data = OutputFileDatasetConfig(name=\"filtered_data\", destination=dest).as_upload(overwrite=False)\n",
    "\n",
    "print('Filter script is in {}.'.format(os.path.realpath(prepare_data_folder)))\n",
    "\n",
    "# filter step creation\n",
    "# See the filter.py for details about input and output\n",
    "filterStep = PythonScriptStep(\n",
    "    name=\"Filter Taxi Data\",\n",
    "    script_name=\"filter.py\", \n",
    "    arguments=[\"--data-path\", merged_data.as_input(),\n",
    "        \"--output_filter\", filtered_data],\n",
    "    compute_target=arcK_compute,\n",
    "    runconfig = aml_run_config,\n",
    "    source_directory=prepare_data_folder,\n",
    "    allow_reuse=True\n",
    ")\n",
    "\n",
    "print(\"FilterStep created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Normalize taxi data\n",
    "In this step, pickup and dropoff datetime values are splitted into the respective date and time columns.  Then rename the columns to meaningful names."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define output after normalize step\n",
    "normalized_data = OutputFileDatasetConfig(name=\"normalized_data\", destination=dest).as_upload(overwrite=False)\n",
    "\n",
    "print('Normalize script is in {}.'.format(os.path.realpath(prepare_data_folder)))\n",
    "\n",
    "# normalize step creation\n",
    "# See the normalize.py for details about input and output\n",
    "normalizeStep = PythonScriptStep(\n",
    "    name=\"Normalize Taxi Data\",\n",
    "    script_name=\"normalize.py\", \n",
    "    arguments=[\"--data-path\", filtered_data.as_input(),\n",
    "        \"--output_normalize\", normalized_data],\n",
    "    compute_target=arcK_compute,\n",
    "    runconfig = aml_run_config,\n",
    "    source_directory=prepare_data_folder,\n",
    "    allow_reuse=True\n",
    ")\n",
    "\n",
    "print(\"normalizeStep created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Transform taxi data\n",
    "Transform the normalized taxi data to final required format. This steps does the following:\n",
    "\n",
    "- Split the pickup and dropoff date further into the day of the week, day of the month, and month values. \n",
    "- To get the day of the week value, uses the derive_column_by_example() function. The function takes an array parameter of example objects that define the input data, and the preferred output. The function automatically determines the preferred transformation. For the pickup and dropoff time columns, split the time into the hour, minute, and second by using the split_column_by_example() function with no example parameter.\n",
    "- After new features are generated, use the drop_columns() function to delete the original fields as the newly generated features are preferred. \n",
    "- Rename the rest of the fields to use meaningful descriptions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define output after transform step\n",
    "transformed_data = OutputFileDatasetConfig(name=\"transformed_data\", destination=dest).as_upload(overwrite=False)\n",
    "\n",
    "print('Transform script is in {}.'.format(os.path.realpath(prepare_data_folder)))\n",
    "\n",
    "# transform step creation\n",
    "# See the transform.py for details about input and output\n",
    "transformStep = PythonScriptStep(\n",
    "    name=\"Transform Taxi Data\",\n",
    "    script_name=\"transform.py\", \n",
    "    arguments=[\"--data-path\", normalized_data.as_input(),\n",
    "        \"--output_transform\", transformed_data],\n",
    "    compute_target=arcK_compute,\n",
    "    runconfig = aml_run_config,\n",
    "    source_directory=prepare_data_folder,\n",
    "    allow_reuse=True\n",
    ")\n",
    "\n",
    "print(\"transformStep created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Split the data into train and test sets\n",
    "\n",
    "This function segregates the data into dataset for model training and dataset for testing."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_model_folder = './scripts/trainmodel'\n",
    "\n",
    "# train and test splits output\n",
    "output_split_train = OutputFileDatasetConfig(name=\"output_split_train\", destination=dest).as_upload(overwrite=False)\n",
    "output_split_test = OutputFileDatasetConfig(name=\"output_split_test\", destination=dest).as_upload(overwrite=False)\n",
    "\n",
    "output_split_test.register_on_complete(name='nyc_taxi_test_set', \n",
    "                                       description='test set  from Train Test Data Split')\n",
    "\n",
    "print('Data spilt script is in {}.'.format(os.path.realpath(train_model_folder)))\n",
    "\n",
    "# test train split step creation\n",
    "# See the train_test_split.py for details about input and output\n",
    "testTrainSplitStep = PythonScriptStep(\n",
    "    name=\"Train Test Data Split\",\n",
    "    script_name=\"train_test_split.py\", \n",
    "    arguments=[\"--data-path\", transformed_data.as_input(),\n",
    "        \"--output_split_train\", output_split_train,\n",
    "               \"--output_split_test\", output_split_test],\n",
    "    compute_target=arcK_compute,\n",
    "    runconfig = aml_run_config,\n",
    "    source_directory=train_model_folder,\n",
    "    allow_reuse=True\n",
    ")\n",
    "\n",
    "print(\"testTrainSplitStep created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define a custom training step"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_step = PythonScriptStep(\n",
    "        name=\"train_step\",\n",
    "        script_name=\"train_step.py\",\n",
    "        arguments=[\"--train_data_path\", output_split_train.as_input(),\n",
    "                   \"--test_data_path\", output_split_test.as_input(),\n",
    "        ],\n",
    "      \n",
    "        compute_target=arcK_compute,\n",
    "        runconfig=aml_run_config,\n",
    "        source_directory=train_model_folder,\n",
    "        allow_reuse=True\n",
    "    )\n",
    "\n",
    "print(\"train_step created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create an experiement"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core import Experiment\n",
    "\n",
    "experiment = Experiment(ws, 'NYCTaxi_Tutorial_Pipelines')\n",
    "\n",
    "print(\"Experiment created\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Build and run the pipeline\n",
    "\n",
    "Use data flow to determine the running flow.\n",
    "\n",
    "![fishy](images/pipeline-using-dataflow.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.pipeline.core import Pipeline\n",
    "\n",
    "pipeline_steps = [train_step]\n",
    "\n",
    "pipeline = Pipeline(workspace = ws, steps=pipeline_steps)\n",
    "print(\"Pipeline is built.\")\n",
    "\n",
    "pipeline_run = experiment.submit(pipeline, regenerate_outputs=False)\n",
    "\n",
    "print(\"Pipeline submitted for execution.\")\n",
    "\n",
    "pipeline_run.wait_for_completion()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Register the model\n",
    "\n",
    "Register the trained model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_step_run = pipeline_run.find_step_run(train_step.name)[0]\n",
    "\n",
    "registered_model_name='taxi_model'\n",
    "train_step_run.register_model(model_name=registered_model_name, model_path='outputs/taxi.pkl')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Get the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.model import Model\n",
    "\n",
    "model_name = registered_model_name\n",
    "model = Model(ws, model_name)\n",
    "model_id = f\"azureml:{model.name}:{model.version}\"\n",
    "print(f\"Get {model.name}, latest version {model.version}, id in deployment.yml: {model_id}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The machine learning model named \"taxi_model\" should be registered in your AML workspace."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Test Registered Model\n",
    "\n",
    "To test the trained model, you can use AKS-HCI cluster for serving the model using AML deployment. \n",
    "\n",
    "Replace `<tax-model endpoint name>` as your endpoint name."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Deploy the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "endpoint = '<tax-model endpoint name>'\n",
    "\n",
    "import os\n",
    "from pathlib import Path\n",
    "prefix = Path(os.getcwd())\n",
    "endpoint_file = str(prefix.joinpath(\"endpoint.yml\"))\n",
    "deployment_file = str(prefix.joinpath(\"deployment.yml\"))\n",
    "print(f\"Using Endpoint file: {endpoint_file}, Deployment file: {deployment_file} please replace <modelId> (e.g. azureml:taxi_model:1), <instanceTypeName> (e.g. defaultInstanceType) and <computeTargetName> (e.g. azureml:amlarc-compute) according above output\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Need to **replace the properties in deployment.yml**, including,\n",
    "* `<modelId>`: example value: azureml:taxi_model:1\n",
    "* `<instanceTypeName>`: example value: defaultInstanceType\n",
    "\n",
    "Need to **replace the properties in endpoint.yml**, including,\n",
    "* `<computeTargetName>`: example value: azureml:amlarc-compute"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import helpers\n",
    "from azureml.core.workspace import Workspace\n",
    "\n",
    "ws = Workspace.from_config()\n",
    "print('Workspace name: ' + ws.name, \n",
    "      'Azure region: ' + ws.location, \n",
    "      'Subscription id: ' + ws.subscription_id, \n",
    "      'Resource group: ' + ws.resource_group, sep='\\n')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-endpoint create -n {endpoint} -f {endpoint_file} -w {ws.name} -g {ws.resource_group}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-endpoint show -n {endpoint} -w {ws.name} -g {ws.resource_group}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-deployment create -n blue --endpoint {endpoint} -f {deployment_file} -w {ws.name} -g {ws.resource_group} --all-traffic\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Test with inputs\n",
    "\n",
    "A few intances of test data are stored in test_set.csv for convenience of testing."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# get score_url and access_token from AZ CLI\n",
    "import helpers\n",
    "from azureml.core.workspace import Workspace\n",
    "ws = Workspace.from_config()\n",
    "cmd = f\"az ml online-endpoint show -n {endpoint} -w {ws.name} -g {ws.resource_group}\"\n",
    "properties = helpers.run(cmd, return_output=True, no_output=True)\n",
    "\n",
    "cmd = f\"az ml online-endpoint get-credentials -n {endpoint} -w {ws.name} -g {ws.resource_group}\"\n",
    "credentials = helpers.run(cmd, return_output=True, no_output=True)\n",
    "\n",
    "print(f\"Got endpoint and credentials.\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "prop_response = json.loads(properties.replace(os.linesep,\"\"))\n",
    "score_uri = prop_response[\"scoring_uri\"]\n",
    "\n",
    "cred_response = json.loads(credentials.replace(os.linesep, \"\"))\n",
    "access_token = cred_response[\"accessToken\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "import pandas as pd\n",
    "\n",
    "df_raw = pd.read_csv(\"test_set.csv\")\n",
    "selected_columns = ['pickup_weekday', 'pickup_hour', 'distance', 'passengers', 'vendor']\n",
    "df = df_raw[selected_columns][:3]\n",
    "input_np = df.to_numpy()\n",
    "\n",
    "instances = json.dumps({\"data\": input_np.tolist()})\n",
    "\n",
    "import requests\n",
    "headers = {'Content-Type': 'application/json', 'Authorization': f\"Bearer {access_token}\"}\n",
    "r = requests.post(score_uri, data=instances, headers=headers)\n",
    "print(f\"predicted_costs: {r.json()}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Real costs\n",
    "\n",
    "df_raw[\"cost\"][:3].to_numpy().tolist()"
   ]
  }
 ],
 "metadata": {
  "authors": [
   {
    "name": "anshirga"
   }
  ],
  "interpreter": {
   "hash": "fc402497f0168b24575e2ffafe64cd34c507b9a7fab971a93b09782ae565c5c6"
  },
  "kernelspec": {
   "display_name": "Python 3.8.3 64-bit",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}

docs/AKS-HCI/notebooks/pipeline/nyc-taxi-data-regression-model-building-nfs.ipynb METASEP
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Copyright (c) Microsoft Corporation. All rights reserved.  \n",
    "Licensed under the MIT License."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Linear Regression for NYC Taxi Datasets with AzureML Pipelines \n",
    "\n",
    "In this notebook, you learn how to prepare data for regression modeling. You run various transformations to filter and combine two different NYC taxi datasets\n",
    "using [Azure Machine Learning Pipelines](https://aka.ms/aml-pipelines). After data process steps, you add a final custom training step to train a regression model.  The trained model then registered to AzureML workspace."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prerequisites\n",
    "\n",
    "* [Setup Azure Arc-enabled Machine Learning Training and Inferencing on AKS on Azure Stack HCI](https://github.com/Azure/AML-Kubernetes/tree/master/docs/AKS-HCI/AML-ARC-Compute.md)\n",
    "* [Setup NFS Server on Azure Stack HCI and Use your Data and run managed Machine Learning Experiments On-Premises](https://github.com/Azure/AML-Kubernetes/tree/master/docs/AKS-HCI/Train-AzureArc.md)\n",
    "* Last but not least, you need to be able to run a Notebook. (azureml-core, azureml-opendatasets, numpy, matplotlib, requests are required)\n",
    "\n",
    "   If you are using an Azure Machine Learning Notebook VM, you are all set. Otherwise, make sure you go through the configuration Notebook located at [here](https://github.com/Azure/MachineLearningNotebooks) first. This sets you up with a working config file that has information on your workspace, subscription id, etc."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Initialize AzureML workspace\n",
    "\n",
    "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`. \n",
    "\n",
    "If you haven't done already please go to `config.json` file and fill in your workspace information."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.workspace import Workspace,  ComputeTarget\n",
    "from azureml.exceptions import ComputeTargetException\n",
    "\n",
    "ws = Workspace.from_config()\n",
    "print('Workspace name: ' + ws.name, \n",
    "      'Azure region: ' + ws.location, \n",
    "      'Subscription id: ' + ws.subscription_id, \n",
    "      'Resource group: ' + ws.resource_group, sep='\\n')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Download data for regression modeling\n",
    "\n",
    "First, you will prepare data for regression modeling. you will leverage the convenience of Azure Open Datasets. Perform `pip install azureml-opendatasets` to get the open dataset package.  The Open Datasets package contains a class representing each data source (NycTlcGreen and NycTlcYellow) to easily filter date parameters before downloading.\n",
    "\n",
    "\n",
    "### Fetch data\n",
    "Begin by creating a dataframe to hold the taxi data. When working in a non-Spark environment, Open Datasets only allows downloading one month of data at a time with certain classes to avoid MemoryError with large datasets. To download a year of taxi data, iteratively fetch one month at a time, and before appending it to green_df_raw, randomly sample 500 records from each month to avoid bloating the dataframe. Then preview the data. To keep this process short, we are sampling data of only 1 month.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.opendatasets import NycTlcGreen, NycTlcYellow\n",
    "import pandas as pd\n",
    "from datetime import datetime\n",
    "from dateutil.relativedelta import relativedelta\n",
    "\n",
    "green_df_raw = pd.DataFrame([])\n",
    "start = datetime.strptime(\"1/1/2016\",\"%m/%d/%Y\")\n",
    "end = datetime.strptime(\"1/31/2016\",\"%m/%d/%Y\")\n",
    "\n",
    "number_of_months = 1\n",
    "sample_size = 5000\n",
    "\n",
    "for sample_month in range(number_of_months):\n",
    "    temp_df_green = NycTlcGreen(start + relativedelta(months=sample_month), end + relativedelta(months=sample_month)) \\\n",
    "        .to_pandas_dataframe()\n",
    "    green_df_raw = green_df_raw.append(temp_df_green.sample(sample_size))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "yellow_df_raw = pd.DataFrame([])\n",
    "start = datetime.strptime(\"1/1/2016\",\"%m/%d/%Y\")\n",
    "end = datetime.strptime(\"1/31/2016\",\"%m/%d/%Y\")\n",
    "\n",
    "sample_size = 500\n",
    "\n",
    "for sample_month in range(number_of_months):\n",
    "    temp_df_yellow = NycTlcYellow(start + relativedelta(months=sample_month), end + relativedelta(months=sample_month)) \\\n",
    "        .to_pandas_dataframe()\n",
    "    yellow_df_raw = yellow_df_raw.append(temp_df_yellow.sample(sample_size))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### See the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from IPython.display import display\n",
    "\n",
    "display(green_df_raw.head(5))\n",
    "display(yellow_df_raw.head(5))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Save data locally"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "dataDir = \"data\"\n",
    "\n",
    "if not os.path.exists(dataDir):\n",
    "    os.mkdir(dataDir)\n",
    "\n",
    "greenDir = dataDir + \"/green\"\n",
    "yellowDir = dataDir + \"/yellow\"\n",
    "\n",
    "if not os.path.exists(greenDir):\n",
    "    os.mkdir(greenDir)\n",
    "    \n",
    "if not os.path.exists(yellowDir):\n",
    "    os.mkdir(yellowDir)\n",
    "    \n",
    "greenTaxiData = greenDir + \"/unprepared.csv\"\n",
    "yellowTaxiData = yellowDir + \"/unprepared.csv\"\n",
    "\n",
    "green_df_raw.to_csv(greenTaxiData, index=False)\n",
    "yellow_df_raw.to_csv(yellowTaxiData, index=False)\n",
    "\n",
    "print(\"Data written to local folder.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prepare the dataset to NFS server"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "nfs_mount_path = \"<NFS mounting path on executing machine>\"\n",
    "\n",
    "dataDir = \"data\"\n",
    "greenDir, yellowDir  = dataDir + \"/green\", dataDir + \"/yellow\"\n",
    "greenTaxiData, yellowTaxiData = greenDir + \"/unprepared.csv\", yellowDir + \"/unprepared.csv\"\n",
    "greenDestDir, yellowDestDir = nfs_mount_path + \"/green\", nfs_mount_path + \"/yellow\"\n",
    "greenTaxiDataDest, yellowTaxiDataDest = greenDestDir + \"/unprepared.csv\", yellowDestDir + \"/unprepared.csv\"\n",
    "\n",
    "\n",
    "import os, shutil\n",
    "os.makedirs(greenDestDir, exist_ok=True)\n",
    "os.makedirs(yellowDestDir, exist_ok=True)\n",
    "shutil.copyfile(greenTaxiData, greenTaxiDataDest)\n",
    "shutil.copyfile(yellowTaxiData, yellowTaxiDataDest)\n",
    "\n",
    "print(\"Upload dataset completed.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Setup compute target\n",
    "\n",
    "Find the attach name for the Arc enabled AKS-HCI in your AzureML workspace.\n",
    "\n",
    "attach_name is the attached name for your AKS-HCI cluster you setup in [this step](https://github.com/Azure/AML-Kubernetes/blob/master/docs/AKS-HCI/AML-ARC-Compute.md#attach-your-azure-arc-enabled-cluster-to-your-azure-machine-learning-workspace-as-a-compute-target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.compute import KubernetesCompute\n",
    "\n",
    "attach_name = \"<NAME_OF_AML_ATTACHED_COMPUTE_OF_YOUR_AKS-HCI_CLUSTER>\"\n",
    "arcK_compute = KubernetesCompute(ws, attach_name)\n",
    "print(f\"compute target id in endpoint yaml: azureml:{arcK_compute.name}, instance type name in deployment yaml: {arcK_compute.default_instance_type}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define RunConfig for the compute target\n",
    "We will also use `pandas`, `scikit-learn`,  `pyarrow` for the pipeline steps. Defining the `runconfig` for that."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.runconfig import RunConfiguration\n",
    "from azureml.core.conda_dependencies import CondaDependencies\n",
    "\n",
    "# Create a new runconfig object\n",
    "aml_run_config = RunConfiguration()\n",
    "\n",
    "# Use the arcK_compute you created above. \n",
    "aml_run_config.target = arcK_compute\n",
    "\n",
    "# Enable Docker\n",
    "aml_run_config.environment.docker.enabled = True\n",
    "\n",
    "# Use conda_dependencies.yml to create a conda environment in the Docker image for execution\n",
    "aml_run_config.environment.python.user_managed_dependencies = False\n",
    "\n",
    "# Specify CondaDependencies obj, add necessary packages\n",
    "aml_run_config.environment.python.conda_dependencies = CondaDependencies.create(\n",
    "    conda_packages=['pandas','scikit-learn'], \n",
    "    pip_packages=['azureml-sdk', 'pyarrow'])\n",
    "\n",
    "print (\"Run configuration created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Define the intermediate folder name in which data within AML pipeline is located."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import helpers\n",
    "intermediate_folder = '<MountPathOnTrainingPod>' + \"/\" + helpers.randFolderName()\n",
    "print(f\"intermediate_folder: {intermediate_folder}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Processing data with pipeline steps\n",
    "\n",
    "The data process includes following pipeline steps implemented as PythonScriptStep:\n",
    "\n",
    "1. Cleanse Green Taxi Data\n",
    "2. Cleanse Yellow Taxi Data\n",
    "3. Merge cleansed Green and Yellow Taxi Data\n",
    "4. Filter Taxi Data\n",
    "5. Normalize Taxi Data\n",
    "6. Transform Taxi Data\n",
    "7. Train Test Data Split"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Cleanse Taxi Data\n",
    "\n",
    "Here a set of \"useful\" columns for both Green and Yellow taxi data are defined:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "useful_columns = str([\"cost\", \"distance\", \"dropoff_datetime\", \"dropoff_latitude\", \n",
    "                      \"dropoff_longitude\", \"passengers\", \"pickup_datetime\", \n",
    "                      \"pickup_latitude\", \"pickup_longitude\", \"store_forward\", \"vendor\"]).replace(\",\", \";\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Cleanse Green taxi data\n",
    "\n",
    "Replace `<MountPathOnTrainingPod>` as your setting."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.pipeline.core import PipelineData\n",
    "from azureml.data import OutputFileDatasetConfig\n",
    "from azureml.pipeline.steps import PythonScriptStep\n",
    "import os\n",
    "\n",
    "# python scripts folder\n",
    "prepare_data_folder = './scripts/prepdata'\n",
    "data_folder = '<MountPathOnTrainingPod>' + '/green' + '/unprepared.csv'\n",
    "\n",
    "# rename columns as per Azure Machine Learning NYC Taxi tutorial\n",
    "\n",
    "green_columns = {\n",
    "        \"vendorID\": \"vendor\",\n",
    "        \"lpepPickupDatetime\": \"pickup_datetime\",\n",
    "        \"lpepDropoffDatetime\": \"dropoff_datetime\",\n",
    "        \"storeAndFwdFlag\": \"store_forward\",\n",
    "        \"pickupLongitude\": \"pickup_longitude\",\n",
    "        \"pickupLatitude\": \"pickup_latitude\",\n",
    "        \"dropoffLongitude\": \"dropoff_longitude\",\n",
    "        \"dropoffLatitude\": \"dropoff_latitude\",\n",
    "        \"passengerCount\": \"passengers\",\n",
    "        \"fareAmount\": \"cost\",\n",
    "        \"tripDistance\": \"distance\"\n",
    "    }\n",
    "\n",
    "green_columns_key = str(list(green_columns.keys())).replace(\",\", \";\")\n",
    "green_columns_value = str(list(green_columns.values())).replace(\",\", \";\")\n",
    "    \n",
    "# Define output after cleansing step\n",
    "cleansed_green_data = intermediate_folder + \"/\" + \"cleansed_green_data\"\n",
    "\n",
    "print('Cleanse script is in {}.'.format(os.path.realpath(prepare_data_folder)))\n",
    "\n",
    "# cleansing step creation\n",
    "# See the cleanse.py for details\n",
    "cleansingStepGreen = PythonScriptStep(\n",
    "    name=\"Cleanse Green Taxi Data\",\n",
    "    script_name=\"cleanse.py\", \n",
    "    arguments=[\"--data-path\", data_folder,\n",
    "        \"--useful_columns\", useful_columns,\n",
    "               \"--columns_key\", green_columns_key,\n",
    "                \"--columns_value\", green_columns_value,\n",
    "               \"--output_cleanse\", cleansed_green_data],\n",
    "    compute_target=arcK_compute,\n",
    "    runconfig=aml_run_config,\n",
    "    source_directory=prepare_data_folder,\n",
    "    allow_reuse=True\n",
    ")\n",
    "\n",
    "print(\"cleansingStepGreen created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Cleanse Yellow taxi data\n",
    "\n",
    "Replace `<MountPathOnTrainingPod>` as your setting."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_folder = '<MountPathOnTrainingPod>' + '/yellow' + '/unprepared.csv'\n",
    "\n",
    "yellow_columns = {\n",
    "    \"vendorID\": \"vendor\",\n",
    "    \"tpepPickupDateTime\": \"pickup_datetime\",\n",
    "    \"tpepDropoffDateTime\": \"dropoff_datetime\",\n",
    "    \"storeAndFwdFlag\": \"store_forward\",\n",
    "    \"startLon\": \"pickup_longitude\",\n",
    "    \"startLat\": \"pickup_latitude\",\n",
    "    \"endLon\": \"dropoff_longitude\",\n",
    "    \"endLat\": \"dropoff_latitude\",\n",
    "    \"passengerCount\": \"passengers\",\n",
    "    \"fareAmount\": \"cost\",\n",
    "    \"tripDistance\": \"distance\"\n",
    "}\n",
    "\n",
    "yellow_columns_key = str(list(yellow_columns.keys())).replace(\",\", \";\")\n",
    "yellow_columns_value = str(list(yellow_columns.values())).replace(\",\", \";\")\n",
    "    \n",
    "# Define output after cleansing step\n",
    "cleansed_yellow_data = intermediate_folder + \"/\" + \"cleansed_yellow_data\"\n",
    "\n",
    "# cleansing step creation\n",
    "# See the cleanse.py for details about input and output\n",
    "cleansingStepYellow = PythonScriptStep(\n",
    "    name=\"Cleanse Yellow Taxi Data\",\n",
    "    script_name=\"cleanse.py\", \n",
    "    arguments=[\"--data-path\", data_folder,\n",
    "        \"--useful_columns\", useful_columns,\n",
    "               \"--columns_key\", yellow_columns_key,\n",
    "                \"--columns_value\", yellow_columns_value,\n",
    "               \"--output_cleanse\", cleansed_yellow_data],\n",
    "    compute_target=arcK_compute,\n",
    "    runconfig=aml_run_config,\n",
    "    source_directory=prepare_data_folder,\n",
    "    allow_reuse=True\n",
    ")\n",
    "\n",
    "print(\"cleansingStepYellow created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Merge cleansed Green and Yellow datasets\n",
    "\n",
    "Create a single data source by merging the cleansed versions of Green and Yellow taxi data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define output after cleansing step\n",
    "merged_data = intermediate_folder + \"/\" + \"merged_data\"\n",
    "\n",
    "print('Merge script is in {}.'.format(os.path.realpath(prepare_data_folder)))\n",
    "\n",
    "# merging step creation\n",
    "# See the merge.py for details about input and output\n",
    "mergingStep = PythonScriptStep(\n",
    "    name=\"Merge Taxi Data\",\n",
    "    script_name=\"merge.py\", \n",
    "    arguments=[\"--green_data_path\", cleansed_green_data,\n",
    "               \"--yellow_data_path\", cleansed_yellow_data,\n",
    "        \"--output_merge\", merged_data],\n",
    "    compute_target=arcK_compute,\n",
    "    runconfig=aml_run_config,\n",
    "    source_directory=prepare_data_folder,\n",
    "    allow_reuse=True\n",
    ")\n",
    "\n",
    "print(\"mergingStep created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Filter taxi data\n",
    "\n",
    "This step filters out coordinates for locations that are outside the city border. We use a TypeConverter object to change the latitude and longitude fields to decimal type. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define output after merging step\n",
    "filtered_data = intermediate_folder + \"/\" + \"filtered_data\"\n",
    "\n",
    "print('Filter script is in {}.'.format(os.path.realpath(prepare_data_folder)))\n",
    "\n",
    "# filter step creation\n",
    "# See the filter.py for details about input and output\n",
    "filterStep = PythonScriptStep(\n",
    "    name=\"Filter Taxi Data\",\n",
    "    script_name=\"filter.py\", \n",
    "    arguments=[\"--data-path\", merged_data,\n",
    "        \"--output_filter\", filtered_data],\n",
    "    compute_target=arcK_compute,\n",
    "    runconfig = aml_run_config,\n",
    "    source_directory=prepare_data_folder,\n",
    "    allow_reuse=True\n",
    ")\n",
    "\n",
    "print(\"FilterStep created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Normalize taxi data\n",
    "In this step, pickup and dropoff datetime values are splitted into the respective date and time columns.  Then rename the columns to meaningful names."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define output after normalize step\n",
    "normalized_data = intermediate_folder + \"/\" + \"normalized_data\"\n",
    "\n",
    "print('Normalize script is in {}.'.format(os.path.realpath(prepare_data_folder)))\n",
    "\n",
    "# normalize step creation\n",
    "# See the normalize.py for details about input and output\n",
    "normalizeStep = PythonScriptStep(\n",
    "    name=\"Normalize Taxi Data\",\n",
    "    script_name=\"normalize.py\", \n",
    "    arguments=[\"--data-path\", filtered_data,\n",
    "        \"--output_normalize\", normalized_data],\n",
    "    compute_target=arcK_compute,\n",
    "    runconfig = aml_run_config,\n",
    "    source_directory=prepare_data_folder,\n",
    "    allow_reuse=True\n",
    ")\n",
    "\n",
    "print(\"normalizeStep created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Transform taxi data\n",
    "Transform the normalized taxi data to final required format. This steps does the following:\n",
    "\n",
    "- Split the pickup and dropoff date further into the day of the week, day of the month, and month values. \n",
    "- To get the day of the week value, uses the derive_column_by_example() function. The function takes an array parameter of example objects that define the input data, and the preferred output. The function automatically determines the preferred transformation. For the pickup and dropoff time columns, split the time into the hour, minute, and second by using the split_column_by_example() function with no example parameter.\n",
    "- After new features are generated, use the drop_columns() function to delete the original fields as the newly generated features are preferred. \n",
    "- Rename the rest of the fields to use meaningful descriptions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define output after transform step\n",
    "transformed_data = intermediate_folder + \"/\" + \"transformed_data\"\n",
    "\n",
    "print('Transform script is in {}.'.format(os.path.realpath(prepare_data_folder)))\n",
    "\n",
    "# transform step creation\n",
    "# See the transform.py for details about input and output\n",
    "transformStep = PythonScriptStep(\n",
    "    name=\"Transform Taxi Data\",\n",
    "    script_name=\"transform.py\", \n",
    "    arguments=[\"--data-path\", normalized_data,\n",
    "        \"--output_transform\", transformed_data],\n",
    "    compute_target=arcK_compute,\n",
    "    runconfig = aml_run_config,\n",
    "    source_directory=prepare_data_folder,\n",
    "    allow_reuse=True\n",
    ")\n",
    "\n",
    "print(\"transformStep created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Split the data into train and test sets\n",
    "\n",
    "This function segregates the data into dataset for model training and dataset for testing."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_model_folder = './scripts/trainmodel'\n",
    "\n",
    "# train and test splits output\n",
    "output_split_train = intermediate_folder + \"/\" + \"output_split_train\"\n",
    "output_split_test = intermediate_folder + \"/\" + \"output_split_test\"\n",
    "\n",
    "print('Data spilt script is in {}.'.format(os.path.realpath(train_model_folder)))\n",
    "\n",
    "# test train split step creation\n",
    "# See the train_test_split.py for details about input and output\n",
    "testTrainSplitStep = PythonScriptStep(\n",
    "    name=\"Train Test Data Split\",\n",
    "    script_name=\"train_test_split.py\", \n",
    "    arguments=[\"--data-path\", transformed_data,\n",
    "        \"--output_split_train\", output_split_train,\n",
    "               \"--output_split_test\", output_split_test],\n",
    "    compute_target=arcK_compute,\n",
    "    runconfig = aml_run_config,\n",
    "    source_directory=train_model_folder,\n",
    "    allow_reuse=True\n",
    ")\n",
    "\n",
    "print(\"testTrainSplitStep created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define a custom training step"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_step = PythonScriptStep(\n",
    "        name=\"train_step\",\n",
    "        script_name=\"train_step.py\",\n",
    "        arguments=[\"--train_data_path\", output_split_train,\n",
    "                   \"--test_data_path\", output_split_test,\n",
    "        ],\n",
    "      \n",
    "        compute_target=arcK_compute,\n",
    "        runconfig=aml_run_config,\n",
    "        source_directory=train_model_folder,\n",
    "        allow_reuse=True\n",
    "    )\n",
    "\n",
    "print(\"train_step created.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create an experiement"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core import Experiment\n",
    "\n",
    "experiment = Experiment(ws, 'NYCTaxi_Tutorial_NFS_Pipelines')\n",
    "\n",
    "print(\"Experiment created\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Build and run the pipeline\n",
    "\n",
    "Use step sequence to determine the running flow.\n",
    "\n",
    "![fishy](images/pipeline-using-stepsequence.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.pipeline.core import Pipeline, StepSequence\n",
    "\n",
    "pipeline_steps = StepSequence(steps=[[cleansingStepGreen, cleansingStepYellow], mergingStep, filterStep, normalizeStep, transformStep, testTrainSplitStep, train_step])\n",
    "\n",
    "pipeline = Pipeline(workspace = ws, steps=pipeline_steps)\n",
    "print(\"Pipeline is built.\")\n",
    "\n",
    "pipeline_run = experiment.submit(pipeline, regenerate_outputs=False)\n",
    "\n",
    "print(\"Pipeline submitted for execution.\")\n",
    "\n",
    "pipeline_run.wait_for_completion()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Register the model\n",
    "\n",
    "Register the trained model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_step_run = pipeline_run.find_step_run(train_step.name)[0]\n",
    "\n",
    "registered_model_name='taxi_model'\n",
    "train_step_run.register_model(model_name=registered_model_name, model_path='outputs/taxi.pkl')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Get the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.model import Model\n",
    "\n",
    "model_name = registered_model_name\n",
    "model = Model(ws, model_name)\n",
    "model_id = f\"azureml:{model.name}:{model.version}\"\n",
    "print(f\"Get {model.name}, latest version {model.version}, id in deployment.yml: {model_id}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The machine learning model named \"taxi_model\" should be registered in your AML workspace."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Test Registered Model\n",
    "\n",
    "To test the trained model, you can use AKS-HCI cluster for serving the model using AML deployment."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Deploy the model\n",
    "\n",
    "Replace `<tax-model endpoint name`> as your endpoint name."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "endpoint = '<tax-model endpoint name>'\n",
    "\n",
    "import os\n",
    "from pathlib import Path\n",
    "prefix = Path(os.getcwd())\n",
    "endpoint_file = str(prefix.joinpath(\"endpoint.yml\"))\n",
    "deployment_file = str(prefix.joinpath(\"deployment.yml\"))\n",
    "print(f\"Using Endpoint file: {endpoint_file}, Deployment file: {deployment_file} please replace <modelId> (e.g. azureml:taxi_model:1), <instanceTypeName> (e.g. defaultInstanceType) and <computeTargetName> (e.g. azureml:amlarc-compute) according above output\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Need to **replace the properties in deployment.yml**, including,\n",
    "* `<modelId>`: example value: azureml:taxi_model:1\n",
    "* `<instanceTypeName>`: example value: defaultInstanceType\n",
    "\n",
    "Need to **replace the properties in endpoint.yml**, including,\n",
    "* `<computeTargetName>`: example value: azureml:amlarc-compute"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import helpers\n",
    "from azureml.core.workspace import Workspace\n",
    "\n",
    "ws = Workspace.from_config()\n",
    "print('Workspace name: ' + ws.name, \n",
    "      'Azure region: ' + ws.location, \n",
    "      'Subscription id: ' + ws.subscription_id, \n",
    "      'Resource group: ' + ws.resource_group, sep='\\n')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-endpoint create -n {endpoint} -f {endpoint_file} -w {ws.name} -g {ws.resource_group}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-endpoint show -n {endpoint} -w {ws.name} -g {ws.resource_group}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-deployment create -n blue --endpoint {endpoint} -f {deployment_file} -w {ws.name} -g {ws.resource_group} --all-traffic\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Test with inputs\n",
    "\n",
    "A few intances of test data are stored in test_set.csv for convenience of testing."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# get score_url and access_token from AZ CLI\n",
    "import helpers\n",
    "from azureml.core.workspace import Workspace\n",
    "ws = Workspace.from_config()\n",
    "cmd = f\"az ml online-endpoint show -n {endpoint} -w {ws.name} -g {ws.resource_group}\"\n",
    "properties = helpers.run(cmd, return_output=True, no_output=True)\n",
    "\n",
    "cmd = f\"az ml online-endpoint get-credentials -n {endpoint} -w {ws.name} -g {ws.resource_group}\"\n",
    "credentials = helpers.run(cmd, return_output=True, no_output=True)\n",
    "\n",
    "print(f\"Got endpoint and credentials.\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "prop_response = json.loads(properties.replace(os.linesep,\"\"))\n",
    "score_uri = prop_response[\"scoring_uri\"]\n",
    "\n",
    "cred_response = json.loads(credentials.replace(os.linesep, \"\"))\n",
    "access_token = cred_response[\"accessToken\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "import pandas as pd\n",
    "\n",
    "df_raw = pd.read_csv(\"test_set.csv\")\n",
    "selected_columns = ['pickup_weekday', 'pickup_hour', 'distance', 'passengers', 'vendor']\n",
    "df = df_raw[selected_columns][:3]\n",
    "input_np = df.to_numpy()\n",
    "\n",
    "instances = json.dumps({\"data\": input_np.tolist()})\n",
    "\n",
    "import requests\n",
    "headers = {'Content-Type': 'application/json', 'Authorization': f\"Bearer {access_token}\"}\n",
    "r = requests.post(score_uri, data=instances, headers=headers)\n",
    "print(f\"predicted_costs: {r.json()}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Real costs\n",
    "\n",
    "df_raw[\"cost\"][:3].to_numpy().tolist()"
   ]
  }
 ],
 "metadata": {
  "authors": [
   {
    "name": "anshirga"
   }
  ],
  "interpreter": {
   "hash": "fc402497f0168b24575e2ffafe64cd34c507b9a7fab971a93b09782ae565c5c6"
  },
  "kernelspec": {
   "display_name": "Python 3.8.3 64-bit",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}

docs/AKS-HCI/notebooks/pipeline/endpoint.yml METASEP
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
compute: <computeTargetName>
auth_mode: aml_token
docs/AKS-HCI/notebooks/pipeline/deployment.yml METASEP
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
type: kubernetes
app_insights_enabled: true
model: <modelId>
code_configuration:
  code: 
    local_path: ./
  scoring_script: score.py
instance_type: <instanceTypeName>
instance_count: 1
environment: 
  name: taxi-model-env
  version: 1
  conda_file: ./model/conda.yml
  image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1
docs/AKS-HCI/notebooks/pipeline/config.json METASEP
{
    "subscription_id": "<sub_id>",
    "resource_group": "<resource_group_name>",
    "workspace_name": "<AML_workspace_name>"
}
docs/AKS-HCI/notebooks/pipeline/README.md METASEP
# Pipeline Run with AKS-HCI cluster

These samples demonstrate how to run [Azure Machine Learning Pipelines](https://aka.ms/aml-pipelines) with Arc compute.

## Notebooks

* [AML Pipelines with NYC-TAXI-DATA](nyc-taxi-data-regression-model-building.ipynb) (Structured Text Data Prediction)

  This notebook demonstrates an example of Structured Text Data Prediction, preparing / preprocessing / training data in **default datastore associated with the ML workspace**. The whole flow includes,
  * Download and upload training data to default datastore
  * Use AML pipelines to preprocess and train
    * Cleanse data in parallel
    * Merge cleansed data
    * Normalize data
    * Transform data
    * Split data
    * Train model
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model 

* [AML Pipelines with NYC-TAXI-DATA with all data on NFS server](nyc-taxi-data-regression-model-building-nfs.ipynb) (Structured Text Data Prediction)

  This notebook demonstrates an example of Structured Text Data Prediction, preparing / preprocessing / training data on **on-prem NFS server**. The whole flow includes,
  * Download and upload training data to default datastore
  * Use AML pipelines to preprocess and train
    * Cleanse data in parallel
    * Merge cleansed data
    * Normalize data
    * Transform data
    * Split data
    * Train model
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model 





   
docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/object_segmentation-akshci.ipynb METASEP
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Object Segmenation with PyTorch Using Transfer Learning\n",
    "\n",
    "For this tutorial, we will fine tune a pre-trained [Mask R-CNN](https://arxiv.org/abs/1703.06870) model in the [Penn-Fudan Database for Pedestrian Detection and Segmentation](https://www.cis.upenn.edu/~jshi/ped_html/). It contains 170 images with 345 instances of pedestrians, and we will use it  to train an instance segmentation model on a custom dataset defined as PennFudanDataset in aml_src/obj_segment_step_training.py. You can learn more details at\n",
    "[here](https://pytorch.org/tutorials/intermediate/torchvision_tutorial.html)\n",
    "\n",
    "\n",
    "You will use [Azure Machine Learning Pipelines](https://aka.ms/aml-pipelines) to define two pipeline steps: a data process step which split data into training and testing, and training step which trains and evaluates the model.  The trained model then registered to your AML workspace.\n",
    "\n",
    "\n",
    "After the model is registered, you then deploy the model for testing using AKS-HCI.\n",
    "\n",
    "This notebook uses On-Premise NFS Server (training data), Azure storage (intermediate data) and AKS-HCI (ARC compute) for training, please make sure the following prerequisites are met."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prerequisites\n",
    "\n",
    "* [Setup Azure Arc-enabled Machine Learning Training and Inferencing on AKS on Azure Stack HCI](https://github.com/Azure/AML-Kubernetes/tree/master/docs/AKS-HCI/AML-ARC-Compute.md)\n",
    "\n",
    "* [Setup NFS Server on Azure Stack HCI and Use your Data and run managed Machine Learning Experiments On-Premises](https://github.com/Azure/AML-Kubernetes/tree/master/docs/AKS-HCI/Train-AzureArc.md)\n",
    "\n",
    "\n",
    "* Last but not least, you need to be able to run a Notebook. \n",
    "\n",
    "  If you are using an Azure Machine Learning Notebook VM, you are all set. Otherwise, make sure you go through the configuration Notebook located at [here](https://github.com/Azure/MachineLearningNotebooks) first. This sets you up with a working config file that has information on your workspace, subscription id, etc."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "from azureml.core import Workspace,Environment, Experiment, Datastore\n",
    "\n",
    "from azureml.pipeline.core import Pipeline\n",
    "from azureml.pipeline.steps import PythonScriptStep\n",
    "from azureml.core.runconfig import RunConfiguration"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create AzureML workspace\n",
    "\n",
    "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`. \n",
    "\n",
    "If you haven't done already please go to `config.json` file and fill in your workspace information."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "ws = Workspace.from_config()\n",
    "\n",
    "print('Workspace name: ' + ws.name, \n",
    "      'Azure region: ' + ws.location, \n",
    "      'Subscription id: ' + ws.subscription_id, \n",
    "      'Resource group: ' + ws.resource_group, sep='\\n')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Setup compute target\n",
    "\n",
    "Find the attach name for the Arc enabled AKS-HCI in your AzureML workspace.\n",
    "\n",
    "attach_name is the attached name for your AKS-HCI cluster you setup in [this step](https://github.com/Azure/AML-Kubernetes/blob/master/docs/AKS-HCI/AML-ARC-Compute.md#attach-your-azure-arc-enabled-cluster-to-your-azure-machine-learning-workspace-as-a-compute-target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.compute import KubernetesCompute\n",
    "\n",
    "attach_name = \"<NAME_OF_AML_ATTACHED_COMPUTE_OF_YOUR_ASH_CLUSTER>\"\n",
    "arcK_target = KubernetesCompute(ws, attach_name)\n",
    "print(f\"compute target id in endpoint yaml: azureml:{arcK_target.name}, instance type name in deployment yaml: {arcK_target.default_instance_type}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prepare the dataset to NFS server (Optional)\n",
    "\n",
    "After downloading and extracting the zip file from [Penn-Fudan Database for Pedestrian Detection and Segmentation](https://www.cis.upenn.edu/~jshi/ped_html/) to your local machine, make sure you will have the following folder structure:\n",
    "\n",
    "<pre>\n",
    "PennFudanPed/\n",
    "  PedMasks/\n",
    "    FudanPed00001_mask.png\n",
    "    FudanPed00002_mask.png\n",
    "    FudanPed00003_mask.png\n",
    "    FudanPed00004_mask.png\n",
    "    ...\n",
    "  PNGImages/\n",
    "    FudanPed00001.png\n",
    "    FudanPed00002.png\n",
    "    FudanPed00003.png\n",
    "    FudanPed00004.png\n",
    "</pre>\n",
    "\n",
    "Here PennFudanPed is a sub-folder directly under working folder of this notebook."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "nfs_mount_path = \"<NFS Mount Point on notebook execution machine>\"\n",
    "downloaded_folder = os.path.join(os.getcwd(), 'PennFudanPed')\n",
    "\n",
    "import os, shutil\n",
    "penn_dir = os.path.join(nfs_mount_path, 'PennFudanPed')\n",
    "shutil.rmtree(penn_dir, ignore_errors=True)\n",
    "\n",
    "def copyFiles(source_folder, dest_folder):\n",
    "    os.makedirs(dest_folder, exist_ok=True)\n",
    "    for filename in os.listdir(source_folder):\n",
    "        filepath = os.path.join(source_folder, filename)\n",
    "        destpath = os.path.join(dest_folder, filename)\n",
    "        if os.path.isdir(filepath):\n",
    "            copyFiles(filepath, destpath)\n",
    "        else:\n",
    "            print(f\"Copying files from {filepath} to {destpath}\")\n",
    "            shutil.copyfile(filepath, destpath)\n",
    "\n",
    "copyFiles(downloaded_folder, penn_dir)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Setup default data store as the pipeline intermediate results store"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Default datastore \n",
    "def_data_store = ws.get_default_datastore()\n",
    "\n",
    "# Get the blob storage associated with the workspace\n",
    "def_blob_store = Datastore(ws, \"workspaceblobstore\")\n",
    "\n",
    "# Get file storage associated with the workspace\n",
    "def_file_store = Datastore(ws, \"workspacefilestore\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create a training-test split data process step\n",
    "\n",
    "For this pipeline run, you will use two pipeline steps.  The first step is to split dataset into training and testing."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# create run_config first\n",
    "data_folder = \"<MountPathOnTrainingPod>\"+\"/PennFudanPed\"\n",
    "\n",
    "env = Environment.from_dockerfile(\n",
    "        name='pytorch-obj-seg',\n",
    "        dockerfile='./aml_src/Dockerfile.gpu',\n",
    "        conda_specification='./aml_src/conda-env.yaml')\n",
    "\n",
    "aml_run_config = RunConfiguration()\n",
    "aml_run_config.target = arcK_target\n",
    "aml_run_config.environment = env\n",
    "\n",
    "source_directory = './aml_src'\n",
    "\n",
    "# add a data process step\n",
    "\n",
    "from azureml.data import OutputFileDatasetConfig\n",
    "\n",
    "dest = (def_blob_store, None)\n",
    "\n",
    "train_split_data = OutputFileDatasetConfig(name=\"train_split_data\", destination=dest).as_upload(overwrite=False)\n",
    "test_split_data = OutputFileDatasetConfig(name=\"test_split_data\", destination=dest).as_upload(overwrite=False)\n",
    "\n",
    "\n",
    "split_step = PythonScriptStep(\n",
    "    name=\"Train Test Split\",\n",
    "    script_name=\"obj_segment_step_data_process.py\",\n",
    "    arguments=[\"--data-path\", data_folder,\n",
    "               \"--train-split\", train_split_data, \"--test-split\", test_split_data,\n",
    "               \"--test-size\", 50],\n",
    "    compute_target=arcK_target,\n",
    "    runconfig=aml_run_config,\n",
    "    source_directory=source_directory,\n",
    "    allow_reuse=False\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create training step"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_step = PythonScriptStep(\n",
    "        name=\"training_step\",\n",
    "        script_name=\"obj_segment_step_training.py\",\n",
    "        arguments=[\n",
    "            \"--train-split\", train_split_data.as_input(), \"--test-split\", test_split_data.as_input(),\n",
    "            '--epochs', 1,  # 80\n",
    "        ],\n",
    "\n",
    "        compute_target=arcK_target,\n",
    "        runconfig=aml_run_config,\n",
    "        source_directory=source_directory,\n",
    "        allow_reuse=True\n",
    "    )\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create experiment and submit pipeline run"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "experiment_name = 'obj_seg_step'\n",
    "experiment = Experiment(workspace=ws, name=experiment_name)\n",
    "\n",
    "pipeline_steps = [train_step]\n",
    "\n",
    "pipeline = Pipeline(workspace=ws, steps=pipeline_steps)\n",
    "print(\"Pipeline is built.\")\n",
    "\n",
    "pipeline_run = experiment.submit(pipeline, regenerate_outputs=False)\n",
    "pipeline_run.wait_for_completion()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Register the model\n",
    "\n",
    "Register the trained model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_step_run = pipeline_run.find_step_run(train_step.name)[0]\n",
    "\n",
    "model_name = 'obj_seg_model_aml' \n",
    "train_step_run.register_model(model_name=model_name, model_path='outputs/obj_segmentation.pkl')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Get the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.model import Model\n",
    "model = Model(ws, model_name)\n",
    "model_id = f\"azureml:{model.name}:{model.version}\"\n",
    "print(f\"Get {model.name}, latest version {model.version}, id in deployment.yml: {model_id}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The machine learning model named \"obj_seg_model_aml\" should be registered in your AzureML workspace."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Test the registered model\n",
    "\n",
    "To test the trained model, you can use AKS-HCI cluster for serving the model using AML deployment."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Deploy the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "endpoint = '<pytorch-obj-seg endpoint name>'\n",
    "\n",
    "import os\n",
    "from pathlib import Path\n",
    "prefix = Path(os.getcwd())\n",
    "endpoint_file = str(prefix.joinpath(\"endpoint.yml\"))\n",
    "deployment_file = str(prefix.joinpath(\"deployment.yml\"))\n",
    "print(f\"Using Endpoint file: {endpoint_file}, Deployment file: {deployment_file} please replace <modelId> (e.g. azureml:obj_seg_model_aml:1), <instanceTypeName> (e.g. defaultInstanceType) and <computeTargetName> (e.g. azureml:amlarc-compute) according above output\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Need to **replace the properties in deployment.yml**, including,\n",
    "* `<modelId>`: example value: azureml:obj_seg_model_aml:1\n",
    "* `<instanceTypeName>`: example value: defaultInstanceType\n",
    "\n",
    "Need to **replace the properties in endpoint.yml**, including,\n",
    "* `<computeTargetName>`: example value: azureml:amlarc-compute"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import helpers\n",
    "from azureml.core.workspace import Workspace\n",
    "\n",
    "ws = Workspace.from_config()\n",
    "print('Workspace name: ' + ws.name, \n",
    "      'Azure region: ' + ws.location, \n",
    "      'Subscription id: ' + ws.subscription_id, \n",
    "      'Resource group: ' + ws.resource_group, sep='\\n')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-endpoint create -n {endpoint} -f {endpoint_file} -w {ws.name} -g {ws.resource_group}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-endpoint show -n {endpoint} -w {ws.name} -g {ws.resource_group}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-deployment create -n blue --endpoint {endpoint} -f {deployment_file} -w {ws.name} -g {ws.resource_group} --all-traffic\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Test with inputs\n",
    "\n",
    "For testing purpose, you may take the first image FudanPed00001.png as example. This image looks like this ![fishy](FudanPed00001.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# get score_url and access_token from AZ CLI\n",
    "import helpers\n",
    "from azureml.core.workspace import Workspace\n",
    "ws = Workspace.from_config()\n",
    "cmd = f\"az ml online-endpoint show -n {endpoint} -w {ws.name} -g {ws.resource_group}\"\n",
    "properties = helpers.run(cmd, return_output=True, no_output=True)\n",
    "\n",
    "cmd = f\"az ml online-endpoint get-credentials -n {endpoint} -w {ws.name} -g {ws.resource_group}\"\n",
    "credentials = helpers.run(cmd, return_output=True, no_output=True)\n",
    "\n",
    "print(f\"Got endpoint and credentials.\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "prop_response = json.loads(properties.replace(os.linesep,\"\"))\n",
    "score_uri = prop_response[\"scoring_uri\"]\n",
    "\n",
    "cred_response = json.loads(credentials.replace(os.linesep, \"\"))\n",
    "access_token = cred_response[\"accessToken\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from PIL import Image\n",
    "from torchvision.transforms import functional as F\n",
    "\n",
    "image_paths = [\"FudanPed00001.png\"]\n",
    "image_np_list = []\n",
    "for image_path in image_paths:\n",
    "    img = Image.open(image_path)\n",
    "    img_rgb = img.convert(\"RGB\")\n",
    "    img_tensor = F.to_tensor(img_rgb)\n",
    "    img_np = img_tensor.numpy()\n",
    "    image_np_list.append(img_np.tolist())\n",
    "\n",
    "inputs = json.dumps({\"instances\": image_np_list})\n",
    "\n",
    "import requests\n",
    "headers = {'Content-Type': 'application/json', 'Authorization': f\"Bearer {access_token}\"}\n",
    "r = requests.post(score_uri, data=inputs, headers=headers)\n",
    "predicts = r.json()[\"predictions\"]\n",
    "\n",
    "import numpy as np\n",
    "for instance_pred in predicts:\n",
    "    print(\"labels\", instance_pred[\"labels\"])\n",
    "    print(\"boxes\", instance_pred[\"boxes\"])\n",
    "    print(\"scores\", instance_pred[\"scores\"])\n",
    "    \n",
    "    image_data = instance_pred[\"masks\"]\n",
    "    img_np = np.array(image_data)\n",
    "    output_mask = Image.fromarray(img_np)\n",
    "    output_mask.show() #show the image\n",
    "    output_mask.save(\"predict_mask.png\")"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "fc402497f0168b24575e2ffafe64cd34c507b9a7fab971a93b09782ae565c5c6"
  },
  "kernelspec": {
   "display_name": "Python 3.8.3 64-bit",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}

docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/object_segmentation-akshci-nfs.ipynb METASEP
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Object Segmenation with PyTorch Using Transfer Learning\n",
    "\n",
    "For this tutorial, we will fine tune a pre-trained [Mask R-CNN](https://arxiv.org/abs/1703.06870) model in the [Penn-Fudan Database for Pedestrian Detection and Segmentation](https://www.cis.upenn.edu/~jshi/ped_html/). It contains 170 images with 345 instances of pedestrians, and we will use it  to train an instance segmentation model on a custom dataset defined as PennFudanDataset in aml_src/obj_segment_step_training.py. You can learn more details at\n",
    "[here](https://pytorch.org/tutorials/intermediate/torchvision_tutorial.html)\n",
    "\n",
    "\n",
    "You will use [Azure Machine Learning Pipelines](https://aka.ms/aml-pipelines) to define two pipeline steps: a data process step which split data into training and testing, and training step which trains and evaluates the model.  The trained model then registered to your AML workspace.\n",
    "\n",
    "\n",
    "After the model is registered, you then deploy the model for testing using AKS-HCI.\n",
    "\n",
    "This notebook uses On-Premise NFS Server (training data & intermediate data) and AKS-HCI (ARC compute) for training, please make sure the following prerequisites are met."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prerequisites\n",
    "\n",
    "* [Setup Azure Arc-enabled Machine Learning Training and Inferencing on AKS on Azure Stack HCI](https://github.com/Azure/AML-Kubernetes/tree/master/docs/AKS-HCI/AML-ARC-Compute.md)\n",
    "\n",
    "* [Setup NFS Server on Azure Stack HCI and Use your Data and run managed Machine Learning Experiments On-Premises](https://github.com/Azure/AML-Kubernetes/tree/master/docs/AKS-HCI/Train-AzureArc.md)\n",
    "\n",
    "\n",
    "* Last but not least, you need to be able to run a Notebook. \n",
    "\n",
    "  If you are using an Azure Machine Learning Notebook VM, you are all set. Otherwise, make sure you go through the configuration Notebook located at [here](https://github.com/Azure/MachineLearningNotebooks) first. This sets you up with a working config file that has information on your workspace, subscription id, etc."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "from azureml.core import Workspace,Environment, Experiment, Datastore\n",
    "\n",
    "from azureml.pipeline.core import Pipeline, StepSequence\n",
    "from azureml.pipeline.steps import PythonScriptStep\n",
    "from azureml.core.runconfig import RunConfiguration"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create AzureML workspace\n",
    "\n",
    "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`. \n",
    "\n",
    "If you haven't done already please go to `config.json` file and fill in your workspace information."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "ws = Workspace.from_config()\n",
    "\n",
    "print('Workspace name: ' + ws.name, \n",
    "      'Azure region: ' + ws.location, \n",
    "      'Subscription id: ' + ws.subscription_id, \n",
    "      'Resource group: ' + ws.resource_group, sep='\\n')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Setup compute target\n",
    "\n",
    "Find the attach name for the Arc enabled AKS-HCI in your AzureML workspace.\n",
    "\n",
    "attach_name is the attached name for your AKS-HCI cluster you setup in [this step](https://github.com/Azure/AML-Kubernetes/blob/master/docs/AKS-HCI/AML-ARC-Compute.md#attach-your-azure-arc-enabled-cluster-to-your-azure-machine-learning-workspace-as-a-compute-target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.compute import KubernetesCompute\n",
    "\n",
    "attach_name = \"<NAME_OF_AML_ATTACHED_COMPUTE_OF_YOUR_ASH_CLUSTER>\"\n",
    "arcK_target = KubernetesCompute(ws, attach_name)\n",
    "print(f\"compute target id in endpoint yaml: azureml:{arcK_target.name}, instance type name in deployment yaml: {arcK_target.default_instance_type}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prepare the dataset to NFS server (Optional)\n",
    "\n",
    "After downloading and extracting the zip file from [Penn-Fudan Database for Pedestrian Detection and Segmentation](https://www.cis.upenn.edu/~jshi/ped_html/) to your local machine, make sure you will have the following folder structure:\n",
    "\n",
    "<pre>\n",
    "PennFudanPed/\n",
    "  PedMasks/\n",
    "    FudanPed00001_mask.png\n",
    "    FudanPed00002_mask.png\n",
    "    FudanPed00003_mask.png\n",
    "    FudanPed00004_mask.png\n",
    "    ...\n",
    "  PNGImages/\n",
    "    FudanPed00001.png\n",
    "    FudanPed00002.png\n",
    "    FudanPed00003.png\n",
    "    FudanPed00004.png\n",
    "</pre>\n",
    "\n",
    "Here PennFudanPed is a sub-folder directly under working folder of this notebook."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "nfs_mount_path = \"<NFS Mount Point on notebook execution machine>\"\n",
    "downloaded_folder = os.path.join(os.getcwd(), 'PennFudanPed')\n",
    "\n",
    "import os, shutil\n",
    "penn_dir = os.path.join(nfs_mount_path, 'PennFudanPed')\n",
    "shutil.rmtree(penn_dir, ignore_errors=True)\n",
    "\n",
    "def copyFiles(source_folder, dest_folder):\n",
    "    os.makedirs(dest_folder, exist_ok=True)\n",
    "    for filename in os.listdir(source_folder):\n",
    "        filepath = os.path.join(source_folder, filename)\n",
    "        destpath = os.path.join(dest_folder, filename)\n",
    "        if os.path.isdir(filepath):\n",
    "            copyFiles(filepath, destpath)\n",
    "        else:\n",
    "            print(f\"Copying files from {filepath} to {destpath}\")\n",
    "            shutil.copyfile(filepath, destpath)\n",
    "\n",
    "copyFiles(downloaded_folder, penn_dir)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create a training-test split data process step\n",
    "\n",
    "For this pipeline run, you will use two pipeline steps.  The first step is to split dataset into training and testing. Replace `<MountPathOnTrainingPod>` as your setting. The split data will be stored on NFS server in path:\n",
    "- {output_folder}/train_split_data\n",
    "- {output_folder}/test_split_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# create run_config first\n",
    "data_folder = \"<MountPathOnTrainingPod>\"+\"/PennFudanPed\"\n",
    "\n",
    "env = Environment.from_dockerfile(\n",
    "        name='pytorch-obj-seg',\n",
    "        dockerfile='./aml_src/Dockerfile.gpu',\n",
    "        conda_specification='./aml_src/conda-env.yaml')\n",
    "\n",
    "aml_run_config = RunConfiguration()\n",
    "aml_run_config.target = arcK_target\n",
    "aml_run_config.environment = env\n",
    "\n",
    "source_directory = './aml_src'\n",
    "\n",
    "# add a data process step\n",
    "import helpers\n",
    "\n",
    "output_folder = \"<MountPathOnTrainingPod>\" + \"/\" + helpers.randFolderName()\n",
    "print(f\"output_folder: {output_folder}\")\n",
    "\n",
    "train_split_data = output_folder + \"/\" + \"train_split_data\"\n",
    "test_split_data = output_folder + \"/\" + \"test_split_data\"\n",
    "\n",
    "split_step = PythonScriptStep(\n",
    "    name=\"Train Test Split\",\n",
    "    script_name=\"obj_segment_step_data_process.py\",\n",
    "    arguments=[\"--data-path\", data_folder,\n",
    "               \"--train-split\", train_split_data, \"--test-split\", test_split_data,\n",
    "               \"--test-size\", 50],\n",
    "    compute_target=arcK_target,\n",
    "    runconfig=aml_run_config,\n",
    "    source_directory=source_directory,\n",
    "    allow_reuse=False\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create training step"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_step = PythonScriptStep(\n",
    "        name=\"training_step\",\n",
    "        script_name=\"obj_segment_step_training.py\",\n",
    "        arguments=[\n",
    "            \"--train-split\", train_split_data, \"--test-split\", test_split_data,\n",
    "            '--epochs', 1,  # 80\n",
    "        ],\n",
    "\n",
    "        compute_target=arcK_target,\n",
    "        runconfig=aml_run_config,\n",
    "        source_directory=source_directory,\n",
    "        allow_reuse=True\n",
    "    )\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create experiment and submit pipeline run"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "experiment_name = 'obj_seg_seq_step'\n",
    "experiment = Experiment(workspace=ws, name=experiment_name)\n",
    "\n",
    "step_sequence = StepSequence(steps=[split_step, train_step])\n",
    "\n",
    "pipeline = Pipeline(workspace=ws, steps=step_sequence)\n",
    "print(\"Pipeline is built.\")\n",
    "\n",
    "pipeline_run = experiment.submit(pipeline, regenerate_outputs=False)\n",
    "pipeline_run.wait_for_completion()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Register the model\n",
    "\n",
    "Register the trained model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_step_run = pipeline_run.find_step_run(train_step.name)[0]\n",
    "\n",
    "model_name = 'obj_seg_model_aml' \n",
    "train_step_run.register_model(model_name=model_name, model_path='outputs/obj_segmentation.pkl')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Get the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.model import Model\n",
    "model = Model(ws, model_name)\n",
    "model_id = f\"azureml:{model.name}:{model.version}\"\n",
    "print(f\"Get {model.name}, latest version {model.version}, id in deployment.yml: {model_id}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The machine learning model named \"obj_seg_model_aml\" should be registered in your AzureML workspace."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Test the registered model\n",
    "\n",
    "To test the trained model, you can use AKS-HCI cluster for serving the model using AML deployment."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Deploy the model\n",
    "\n",
    "Replace `<pytorch-obj-seg endpoint name`> as your endpoint name."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "endpoint = '<pytorch-obj-seg endpoint name>'\n",
    "\n",
    "import os\n",
    "from pathlib import Path\n",
    "prefix = Path(os.getcwd())\n",
    "endpoint_file = str(prefix.joinpath(\"endpoint.yml\"))\n",
    "deployment_file = str(prefix.joinpath(\"deployment.yml\"))\n",
    "print(f\"Using Endpoint file: {endpoint_file}, Deployment file: {deployment_file} please replace <modelId> (e.g. azureml:obj_seg_model_aml:1), <instanceTypeName> (e.g. defaultInstanceType) and <computeTargetName> (e.g. azureml:amlarc-compute) according above output\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Need to **replace the properties in deployment.yml**, including,\n",
    "* `<modelId>`: example value: azureml:obj_seg_model_aml:1\n",
    "* `<instanceTypeName>`: example value: defaultInstanceType\n",
    "\n",
    "Need to **replace the properties in endpoint.yml**, including,\n",
    "* `<computeTargetName>`: example value: azureml:amlarc-compute"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import helpers\n",
    "from azureml.core.workspace import Workspace\n",
    "\n",
    "ws = Workspace.from_config()\n",
    "print('Workspace name: ' + ws.name, \n",
    "      'Azure region: ' + ws.location, \n",
    "      'Subscription id: ' + ws.subscription_id, \n",
    "      'Resource group: ' + ws.resource_group, sep='\\n')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-endpoint create -n {endpoint} -f {endpoint_file} -w {ws.name} -g {ws.resource_group}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-endpoint show -n {endpoint} -w {ws.name} -g {ws.resource_group}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-deployment create -n blue --endpoint {endpoint} -f {deployment_file} -w {ws.name} -g {ws.resource_group} --all-traffic\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Test with inputs\n",
    "\n",
    "For testing purpose, you may take the first image FudanPed00001.png as example. This image looks like this ![fishy](FudanPed00001.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# get score_url and access_token from AZ CLI\n",
    "import helpers\n",
    "from azureml.core.workspace import Workspace\n",
    "ws = Workspace.from_config()\n",
    "cmd = f\"az ml online-endpoint show -n {endpoint} -w {ws.name} -g {ws.resource_group}\"\n",
    "properties = helpers.run(cmd, return_output=True, no_output=True)\n",
    "\n",
    "cmd = f\"az ml online-endpoint get-credentials -n {endpoint} -w {ws.name} -g {ws.resource_group}\"\n",
    "credentials = helpers.run(cmd, return_output=True, no_output=True)\n",
    "\n",
    "print(f\"Got endpoint and credentials.\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "prop_response = json.loads(properties.replace(os.linesep,\"\"))\n",
    "score_uri = prop_response[\"scoring_uri\"]\n",
    "\n",
    "cred_response = json.loads(credentials.replace(os.linesep, \"\"))\n",
    "access_token = cred_response[\"accessToken\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from PIL import Image\n",
    "from torchvision.transforms import functional as F\n",
    "\n",
    "image_paths = [\"FudanPed00001.png\"]\n",
    "image_np_list = []\n",
    "for image_path in image_paths:\n",
    "    img = Image.open(image_path)\n",
    "    img_rgb = img.convert(\"RGB\")\n",
    "    img_tensor = F.to_tensor(img_rgb)\n",
    "    img_np = img_tensor.numpy()\n",
    "    image_np_list.append(img_np.tolist())\n",
    "\n",
    "inputs = json.dumps({\"instances\": image_np_list})\n",
    "\n",
    "import requests\n",
    "headers = {'Content-Type': 'application/json', 'Authorization': f\"Bearer {access_token}\"}\n",
    "r = requests.post(score_uri, data=inputs, headers=headers)\n",
    "predicts = r.json()[\"predictions\"]\n",
    "\n",
    "import numpy as np\n",
    "for instance_pred in predicts:\n",
    "    print(\"labels\", instance_pred[\"labels\"])\n",
    "    print(\"boxes\", instance_pred[\"boxes\"])\n",
    "    print(\"scores\", instance_pred[\"scores\"])\n",
    "    \n",
    "    image_data = instance_pred[\"masks\"]\n",
    "    img_np = np.array(image_data)\n",
    "    output_mask = Image.fromarray(img_np)\n",
    "    output_mask.show() #show the image\n",
    "    output_mask.save(\"predict_mask.png\")"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "fc402497f0168b24575e2ffafe64cd34c507b9a7fab971a93b09782ae565c5c6"
  },
  "kernelspec": {
   "display_name": "Python 3.8.3 64-bit",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}

docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/endpoint.yml METASEP
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
compute: <computeTargetName>
auth_mode: aml_token
docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/deployment.yml METASEP
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
type: kubernetes
app_insights_enabled: true
model: <modelId>
code_configuration:
  code: 
    local_path: ./
  scoring_script: score.py
instance_type: <instanceTypeName>
instance_count: 1
environment: azureml:AzureML-pytorch-1.7-ubuntu18.04-py37-cpu-inference:21
docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/config.json METASEP
{
    "subscription_id": "<sub_id>",
    "resource_group": "<resource_group_name>",
    "workspace_name": "<AML_workspace_name>"
}
docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/README.md METASEP
# Object Segmentation: Pipeline Training Run on AKS-HCI cluster and on-premise NFS server

Using Object Segmentation as an example, this sample notebook demonstrates how to run [Azure Machine Learning Pipelines](https://aka.ms/aml-pipelines) using AKS-HCI cluster and on-premise NFS server

## Notebooks

* [Object Segmentation with Transfer Learning](object_segmentation-akshci.ipynb) (Object Segmentation)
  
  Object segmentation using pre-trained Mask R-CNN model on PyTorch. AML pipeline steps are used for data preprocessing. **Training data are stored in on-premise NFS server, and the intermediate data are stored in default datastore associated with the ML workspace.** The whole flow includes,
  * Use AML pipelines to read training data from on-premise NFS server, do data preprocessing and generate intermediate data to default datastore
  * Use AML pipelines to trigger train step on AKS-HCI cluster
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model 


* [Object Segmentation with Transfer Learning with all data on NFS server](object_segmentation-akshci-nfs.ipynb) (Object Segmentation)

  Object segmentation using pre-trained Mask R-CNN model on PyTorch. AML pipeline steps are used for data preprocessing. **Both the training and intermediate data are stored in on-prem NFS server.** The whole flow includes,
  * Use AML pipelines to read training data from on-premise NFS server, do data preprocessing and generate intermediate data to NFS server.
  * Use AML pipelines to trigger train step on AKS-HCI cluster
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model 

   

docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/FudanPed00001.png METASEP

docs/AKS-HCI/notebooks/mnist/endpoint.yml METASEP
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
auth_mode: aml_token
compute: <computeTargetName>
docs/AKS-HCI/notebooks/mnist/digit_7.jpg METASEP

docs/AKS-HCI/notebooks/mnist/deployment.yml METASEP
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
type: kubernetes
app_insights_enabled: true
model: <modelId>
code_configuration:
  code: 
    local_path: ./
  scoring_script: score.py
instance_type: <instanceTypeName>
environment: 
  name: sklearn-mnist-env
  version: 1
  conda_file: ./model/conda.yml
  image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1
instance_count: 1
request_settings:
  request_timeout_ms: 1000
  max_concurrent_requests_per_instance: 1
  max_queue_wait_ms: 1000
resources:
  requests:
    cpu: "1"
    memory: "1Gi"
liveness_probe:
  initial_delay: 10
  period: 10
  timeout: 10
  success_threshold: 1
  failure_threshold: 1


docs/AKS-HCI/notebooks/mnist/confusion.png METASEP

docs/AKS-HCI/notebooks/mnist/config.json METASEP
{
    "subscription_id": "<sub_id>",
    "resource_group": "<resource_group_name>",
    "workspace_name": "<AML_workspace_name>"
}
docs/AKS-HCI/notebooks/mnist/README.md METASEP
# Image Classification Using Scikit-learn

Using MNIST as an example, this sample notebook demonstrates how to train a machine learning model using AKS-HCI Arc compute and an on-premise NFS Server. Training data is stored on on-premise NFS Server. The register the trained model and deploy that on the AKS-HCI Arc compute for inference.
 
## Notebooks

* [Image Classification Using Scikit-learn](MNIST_Training_with_AKS-HCI_Cluster_and_NFS.ipynb)







   

docs/AKS-HCI/notebooks/mnist/MNIST_Training_with_AKS-HCI_Cluster_and_NFS.ipynb METASEP
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Copyright (c) Microsoft Corporation. All rights reserved.\n",
    "\n",
    "Licensed under the MIT License."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Image Classification Using Scikit-learn"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prerequisites\n",
    "\n",
    "* [Setup Azure Arc-enabled Machine Learning Training and Inferencing on AKS on Azure Stack HCI](https://github.com/Azure/AML-Kubernetes/tree/master/docs/AKS-HCI/AML-ARC-Compute.md)\n",
    "\n",
    "* [Setup NFS Server on Azure Stack HCI and Use your Data and run managed Machine Learning Experiments On-Premises](https://github.com/Azure/AML-Kubernetes/tree/master/docs/AKS-HCI/Train-AzureArc.md)\n",
    "\n",
    "* Make sure the NFS Server is mounted on the notebook execution machine. In this notebook, it will upload the training data to NFS Server.\n",
    "\n",
    "*    Last but not least, you need to be able to run a Notebook. (azureml-core, azureml-opendatasets, numpy, matplotlib, requests are required)\n",
    "\n",
    "   If you are using an Azure Machine Learning Notebook VM, you are all set. Otherwise, make sure you go through the configuration Notebook located at [here](https://github.com/Azure/MachineLearningNotebooks) first. This sets you up with a working config file that has information on your workspace, subscription id, etc."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Initialize AzureML workspace\n",
    "\n",
    "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`. \n",
    "\n",
    "If you haven't done already please go to `config.json` file and fill in your workspace information."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.workspace import Workspace,  ComputeTarget\n",
    "from azureml.exceptions import ComputeTargetException\n",
    "\n",
    "ws = Workspace.from_config()\n",
    "print('Workspace name: ' + ws.name, \n",
    "      'Azure region: ' + ws.location, \n",
    "      'Subscription id: ' + ws.subscription_id, \n",
    "      'Resource group: ' + ws.resource_group, sep='\\n')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Download mnist data\n",
    "\n",
    "Perform pip install azureml-opendatasets to get the open dataset package, use this function to download mnist data later. This allows you to avoid download the data again when you run this notebook multiple times. The actual download time may take 2 minutes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core import Dataset\n",
    "from azureml.opendatasets import MNIST\n",
    "import os\n",
    "\n",
    "def download_mnist_data():\n",
    "    data_folder = os.path.join(os.getcwd(), 'mnist_data')\n",
    "    os.makedirs(data_folder, exist_ok=True)\n",
    "\n",
    "    mnist_file_dataset = MNIST.get_file_dataset()\n",
    "    path = mnist_file_dataset.download(data_folder, overwrite=True)\n",
    "    downloaded_folder = os.path.dirname(path[0])\n",
    "    print(\"downloaded to\", downloaded_folder)\n",
    "    \n",
    "    return downloaded_folder\n",
    "\n",
    "downloaded_folder = download_mnist_data()\n",
    "downloaded_folder\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prepare the mnist data to NFS server (Optional)\n",
    "\n",
    "The above download_mnist_data() function will download four files t10k-images-idx3-ubyte.gz, t10k-labels-idx1-ubyte.gz, train-images-idx3-ubyte.gz and train-labels-idx1-ubyte.gz to downloaded_folder.  Your next step is to copy these files to NFS server.\n",
    "Run run this step, you need to make sure the NFS path is mounted on the notebook execution machine. Replace `<NFS Mount Point on notebook execution machine>` with the correct path.\n",
    "\n",
    "This step is optional, you can use other ways, such as directly downloading training data on NFS server to prepare the mnist data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "nfs_mount_path = \"<NFS Mount Point on notebook execution machine>\"\n",
    "\n",
    "import os, shutil\n",
    "mnist_dir = os.path.join(nfs_mount_path, 'mnist')\n",
    "shutil.rmtree(mnist_dir, ignore_errors=True)\n",
    "os.makedirs(mnist_dir, exist_ok=True)\n",
    "\n",
    "for filename in os.listdir(downloaded_folder):\n",
    "    filepath = os.path.join(downloaded_folder, filename)\n",
    "    destpath = os.path.join(mnist_dir, filename)\n",
    "    print(f\"Copying files from {filepath} to {destpath}\")\n",
    "    shutil.copyfile(filepath, destpath)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Setup compute target\n",
    "\n",
    "Find the attach name for the Arc enabled AKS-HCI in your AzureML workspace.\n",
    "\n",
    "attach_name is the attached name for your AKS-HCI cluster you setup in [this step](https://github.com/Azure/AML-Kubernetes/blob/master/docs/AKS-HCI/AML-ARC-Compute.md#attach-your-azure-arc-enabled-cluster-to-your-azure-machine-learning-workspace-as-a-compute-target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.compute import KubernetesCompute\n",
    "\n",
    "attach_name = \"<NAME_OF_AML_ATTACHED_COMPUTE_OF_YOUR_ASH_CLUSTER>\"\n",
    "arcK_target = KubernetesCompute(ws, attach_name)\n",
    "\n",
    "print(f\"compute target id in endpoint yaml: azureml:{arcK_target.name}, instance type name in deployment yaml: {arcK_target.default_instance_type}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Configure the training job and submit"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create an experiement"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core import Experiment\n",
    "\n",
    "experiment_name = 'mnist-demo'\n",
    "\n",
    "exp = Experiment(workspace=ws, name=experiment_name)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create an environment"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# customized environment\n",
    "\n",
    "from azureml.core.environment import Environment\n",
    "from azureml.core.conda_dependencies import CondaDependencies\n",
    "# to install required packages\n",
    "env = Environment('tutorial-env')\n",
    "cd = CondaDependencies.create(pip_packages=['azureml-dataset-runtime[pandas,fuse]', 'azureml-defaults'], conda_packages = ['scikit-learn==0.22.1'])\n",
    "\n",
    "env.python.conda_dependencies = cd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Configure the training job\n",
    "\n",
    "`<MountPathOnTrainingPod>` is the same as the mountPath defined in mount-config.yaml."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core import ScriptRunConfig\n",
    "\n",
    "data_folder = \"<MountPathOnTrainingPod>\"+\"/mnist\" # training data are saved to <mountPoint>/mnist (have to use / as the path separator)\n",
    "\n",
    "args = ['--data-folder', data_folder, '--regularization', 0.5]\n",
    "script_folder =  \"mnist_script\"\n",
    "src = ScriptRunConfig(source_directory=script_folder,\n",
    "                      script='train.py', \n",
    "                      arguments=args,\n",
    "                      compute_target=arcK_target,\n",
    "                      environment=env)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Submit the job\n",
    "\n",
    "Run your experiment by submitting your ScriptRunConfig object. Note that this call is asynchronous."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "run = exp.submit(config=src)\n",
    "run.wait_for_completion(show_output=True)  # specify True for a verbose log"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Register the model\n",
    "\n",
    "Register the trained model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_name='sklearn_mnist'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# register model\n",
    "model = run.register_model(model_name=model_name,\n",
    "                           model_path='outputs/sklearn_mnist_model.pkl')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The machine learning model named \"sklearn_mnist\" should be registered in your AzureML workspace."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Get the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.model import Model\n",
    "model = Model(ws, model_name)\n",
    "model_id = f\"azureml:{model.name}:{model.version}\"\n",
    "print(f\"Get {model.name}, latest version {model.version}, id in deployment.yml: {model_id}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Deploy and score a machine learning model by using a managed online endpoint\n",
    "\n",
    "Currently, amlarc inference is only supported with Azure Machine Learning CI (v2). Please follow [doc](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-train-cli?view=azure-devops#prerequisites) to configure the prerequisites. This notebook will invoke Azure Machine Learning CI (v2) directly."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "endpoint = '<sklearn-mnist endpoint name>'\n",
    "\n",
    "import os\n",
    "from pathlib import Path\n",
    "prefix = Path(os.getcwd())\n",
    "endpoint_file = str(prefix.joinpath(\"endpoint.yml\"))\n",
    "deployment_file = str(prefix.joinpath(\"deployment.yml\"))\n",
    "print(f\"Using Endpoint file: {endpoint_file}, Deployment file: {deployment_file} please replace <modelId> (e.g. azureml:sklearn_mnist:1), <instanceTypeName> (e.g. defaultInstanceType) and <computeTargetName> (e.g. azureml:amlarc-compute) according above output\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Need to **replace the properties in deployment.yml**, including,\n",
    "* `<modelId>`: example value: azureml:sklearn_mnist:1\n",
    "* `<instanceTypeName>`: example value: defaultInstanceType\n",
    "\n",
    "Need to **replace the properties in endpoint.yml**, including,\n",
    "* `<computeTargetName>`: example value: azureml:amlarc-compute"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import helpers\n",
    "from azureml.core.workspace import Workspace\n",
    "\n",
    "ws = Workspace.from_config()\n",
    "print('Workspace name: ' + ws.name, \n",
    "      'Azure region: ' + ws.location, \n",
    "      'Subscription id: ' + ws.subscription_id, \n",
    "      'Resource group: ' + ws.resource_group, sep='\\n')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-endpoint create -n {endpoint} -f {endpoint_file} -w {ws.name} -g {ws.resource_group}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-endpoint show -n {endpoint} -w {ws.name} -g {ws.resource_group}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-deployment create -n blue --endpoint {endpoint} -f {deployment_file} -w {ws.name} -g {ws.resource_group} --all-traffic\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Test trained model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Test with inputs\n",
    "\n",
    "Here you may use the image from test asset. The first 30 images and its labels are shown below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from mnist_script.utils import load_data\n",
    "import os\n",
    "import glob\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "data_folder = os.path.join(os.getcwd(), 'mnist_data')\n",
    "\n",
    "X_test = load_data(glob.glob(os.path.join(data_folder,\"**/t10k-images-idx3-ubyte.gz\"), recursive=True)[0], False) / 255.0\n",
    "y_test = load_data(glob.glob(os.path.join(data_folder,\"**/t10k-labels-idx1-ubyte.gz\"), recursive=True)[0], True).reshape(-1)\n",
    "\n",
    "# show first 30 figures\n",
    "\n",
    "count = 0\n",
    "sample_size = 30\n",
    "plt.figure(figsize = (16, 6))\n",
    "# for i in np.random.permutation(X_test.shape[0])[:sample_size]:\n",
    "for i in range(30):\n",
    "    count = count + 1\n",
    "    plt.subplot(1, sample_size, count)\n",
    "    plt.axhline('')\n",
    "    plt.axvline('')\n",
    "    plt.text(x = 10, y = -10, s = y_test[i], fontsize = 18)\n",
    "    plt.imshow(X_test[i].reshape(28, 28), cmap = plt.cm.Greys)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Get score_uri and access_token from AZ CLI (Currently only Azure Machine Learning CLI (v2) supported)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# get score_url and access_token from AZ CLI\n",
    "import helpers\n",
    "from azureml.core.workspace import Workspace\n",
    "ws = Workspace.from_config()\n",
    "cmd = f\"az ml online-endpoint show -n {endpoint} -w {ws.name} -g {ws.resource_group}\"\n",
    "properties = helpers.run(cmd, return_output=True, no_output=True)\n",
    "\n",
    "cmd = f\"az ml online-endpoint get-credentials -n {endpoint} -w {ws.name} -g {ws.resource_group}\"\n",
    "credentials = helpers.run(cmd, return_output=True, no_output=True)\n",
    "\n",
    "print(f\"Got endpoint and credentials.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Test the second image: 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "prop_response = json.loads(properties.replace(os.linesep,\"\"))\n",
    "score_uri = prop_response[\"scoring_uri\"]\n",
    "\n",
    "cred_response = json.loads(credentials.replace(os.linesep, \"\"))\n",
    "access_token = cred_response[\"accessToken\"]\n",
    "\n",
    "import requests\n",
    "# second number should be 2\n",
    "test = json.dumps({\"data\": X_test.tolist()[1:2]})\n",
    "headers = {'Content-Type': 'application/json', 'Authorization': f\"Bearer {access_token}\"}\n",
    "r = requests.post(score_uri, data=test, headers=headers)\n",
    "print(f\"predictions: {r.json()}\")"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "fc402497f0168b24575e2ffafe64cd34c507b9a7fab971a93b09782ae565c5c6"
  },
  "kernelspec": {
   "display_name": "Python 3.8.3 64-bit",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}

docs/AKS-HCI/notebooks/distributed-cifar10/pt_endpoint.yml METASEP
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
compute: <computeTargetName>
auth_mode: aml_token
docs/AKS-HCI/notebooks/distributed-cifar10/pt_deployment.yml METASEP
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
type: kubernetes
app_insights_enabled: true
model: <modelId>
code_configuration:
  code: 
    local_path: ./
  scoring_script: score_pytorch.py
instance_type: <instanceTypeName>
environment: 
  name: pytorch-cifar
  version: 1
  conda_file: ./pytorch-script/conda_dependencies.yml
  image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1
instance_count: 1
request_settings:
  request_timeout_ms: 1000
  max_concurrent_requests_per_instance: 1
  max_queue_wait_ms: 1000
resources:
  requests:
    cpu: "1"
    memory: "1Gi"
liveness_probe:
  initial_delay: 10
  period: 10
  timeout: 10
  success_threshold: 1
  failure_threshold: 1
docs/AKS-HCI/notebooks/distributed-cifar10/distributed-pytorch-cifar10.ipynb METASEP
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Copyright (c) Microsoft Corporation. All rights reserved.\n",
    "\n",
    "Licensed under the MIT License."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Distributed Image Classification with PyTorch\n",
    "\n",
    "In this tutorial, you will train a PyTorch model on the [CIFAR10](http://www.cs.toronto.edu/~kriz/cifar.html) dataset using distributed training with PyTorch's `DistributedDataParallel` module across a AKS-HCI CPU cluster. The training dataset are stored on the on-premise NFS Server."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prerequisites\n",
    "\n",
    "* [Setup Azure Arc-enabled Machine Learning Training and Inferencing on AKS on Azure Stack HCI](https://github.com/Azure/AML-Kubernetes/tree/master/docs/AKS-HCI/AML-ARC-Compute.md)\n",
    "\n",
    "* [Setup NFS Server on Azure Stack HCI and Use your Data and run managed Machine Learning Experiments On-Premises](https://github.com/Azure/AML-Kubernetes/tree/master/docs/AKS-HCI/Train-AzureArc.md)\n",
    "\n",
    "* Make sure the NFS Server is mounted on the notebook execution machine. In this notebook, it will upload the training data to NFS Server.\n",
    "\n",
    "* Last but not least, you need to be able to run a Notebook. (azureml-core, azureml-opendatasets, numpy, matplotlib, requests are required)\n",
    "\n",
    "   If you are using an Azure Machine Learning Notebook VM, you are all set. Otherwise, make sure you go through the configuration Notebook located at [here](https://github.com/Azure/MachineLearningNotebooks) first. This sets you up with a working config file that has information on your workspace, subscription id, etc."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Check core SDK version number\n",
    "import azureml.core\n",
    "\n",
    "print(\"SDK version:\", azureml.core.VERSION)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Initialize AzureML workspace\n",
    "\n",
    "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`. \n",
    "\n",
    "If you haven't done already please go to `config.json` file and fill in your workspace information."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.workspace import Workspace,  ComputeTarget\n",
    "from azureml.exceptions import ComputeTargetException\n",
    "\n",
    "ws = Workspace.from_config()\n",
    "print('Workspace name: ' + ws.name, \n",
    "      'Azure region: ' + ws.location, \n",
    "      'Subscription id: ' + ws.subscription_id, \n",
    "      'Resource group: ' + ws.resource_group, sep='\\n')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Download cifar10 data\n",
    "\n",
    "Use this function to download cifar10 data later. This function allows you to avoid download the data again when you run this notebook multiple times. The actual download time may take 5 minutes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import requests\n",
    "import tempfile\n",
    "\n",
    "def download_cifar10_data():\n",
    "    \n",
    "    path = 'https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz'\n",
    "    downloaded_folder = os.path.join(os.getcwd(), 'cifar10-data')\n",
    "    os.makedirs(downloaded_folder, exist_ok=True) # download data to 'cifar10-data' folder\n",
    "\n",
    "    data = requests.get(path, allow_redirects=True).content\n",
    "    with open(os.path.join(downloaded_folder, path.split('/')[-1]), 'wb') as f:\n",
    "        f.write(data)\n",
    "        \n",
    "    return downloaded_folder\n",
    "\n",
    "downloaded_folder = download_cifar10_data()\n",
    "downloaded_folder"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prepare the cifar10 data to NFS server (Optional)\n",
    "\n",
    "The above download_cifar10_data() function will download cifar-10-python.tar.gz to downloaded_folder.  Your next step is to copy these files to NFS server.\n",
    "Run run this step, you need to make sure the NFS path is mounted on the notebook execution machine. Replace `<NFS Mount Point on notebook execution machine>` with the correct path.\n",
    "\n",
    "This step is optional, you can use other ways, such as directly downloading training data on NFS server to prepare the cifar10 data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "nfs_mount_path = \"<NFS Mount Point on notebook execution machine>\"\n",
    "\n",
    "import os, shutil\n",
    "cifar10_dir = os.path.join(nfs_mount_path, 'cifar10')\n",
    "shutil.rmtree(cifar10_dir, ignore_errors=True)\n",
    "os.makedirs(cifar10_dir, exist_ok=True)\n",
    "\n",
    "for filename in os.listdir(downloaded_folder):\n",
    "    filepath = os.path.join(downloaded_folder, filename)\n",
    "    destpath = os.path.join(cifar10_dir, filename)\n",
    "    print(f\"Copying files from {filepath} to {destpath}\")\n",
    "    shutil.copyfile(filepath, destpath)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Setup compute target\n",
    "\n",
    "Find the attach name for the Arc enabled AKS-HCI in your AzureML workspace.\n",
    "\n",
    "attach_name is the attached name for your AKS-HCI cluster you setup in [this step](https://github.com/Azure/AML-Kubernetes/blob/master/docs/AKS-HCI/AML-ARC-Compute.md#attach-your-azure-arc-enabled-cluster-to-your-azure-machine-learning-workspace-as-a-compute-target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.compute import KubernetesCompute\n",
    "\n",
    "attach_name = \"<NAME_OF_AML_ATTACHED_COMPUTE_OF_YOUR_AKS-HCI_CLUSTER>\"\n",
    "arcK_target = KubernetesCompute(ws, attach_name)\n",
    "print(\"using compute target: \", arcK_target.name)\n",
    "print(f\"compute target id in endpoint yaml: azureml:{arcK_target.name}, instance type name in deployment yaml: {arcK_target.default_instance_type}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Configure the training job and submit"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create an experiement"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core import Experiment\n",
    "\n",
    "experiment_name = 'pytorch-cifar-distr'\n",
    "experiment = Experiment(ws, name=experiment_name)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create an environment"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core import Environment\n",
    "from azureml.core.runconfig import DockerConfiguration\n",
    "\n",
    "pytorch_env = Environment.from_conda_specification(name = 'pytorch-1.6-cpu', file_path = 'pytorch-script/conda_dependencies.yml')\n",
    "\n",
    "# Specify a CPU base image\n",
    "pytorch_env.docker.base_image = 'mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04'\n",
    "docker_config = DockerConfiguration(use_docker=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Configure the training job: torch.distributed with GLOO backend\n",
    "\n",
    "Create a ScriptRunConfig object to specify the configuration details of your training job, including your training script, environment to use, and the compute target to run on.\n",
    "\n",
    "In order to run a distributed PyTorch job with **torch.distributed** using the GLOO backend, create a `PyTorchConfiguration` and pass it to the `distributed_job_config` parameter of the ScriptRunConfig constructor. Specify `communication_backend='Gloo'` in the PyTorchConfiguration. The below code will configure node_count = 2. These is the number of worker nodes. The number of  distributed jobs will be 3 if one master node is used.  GLOO backend which is recommended backend for communications between CPUs.\n",
    "\n",
    "Tthe script for distributed training of CIFAR10 is already provided for you at `pytorch-script/cifar_dist_main.py`. In practice, you should be able to take any custom PyTorch training script as is and run it with Azure ML without having to modify your code.\n",
    "\n",
    "To use the training data in on-premise NFS server, replace `<MountPathOnTrainingPod`> with your setting."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core import ScriptRunConfig\n",
    "from azureml.core.runconfig import PyTorchConfiguration\n",
    "from azureml.core import Dataset\n",
    "import os\n",
    "\n",
    "data_folder = \"<MountPathOnTrainingPod>\" + \"/cifar10\"\n",
    "args = [\n",
    "        '--data-folder', data_folder,\n",
    "        '--dist-backend', 'gloo',\n",
    "       '--epochs', 1 #20\n",
    "           ]\n",
    "\n",
    "distributed_job_config=PyTorchConfiguration(communication_backend='Gloo', node_count=2) #configuring AML pytorch config\n",
    "\n",
    "project_folder = \"pytorch-script\"\n",
    "run_script = \"cifar_dist_main.py\"\n",
    "src = ScriptRunConfig(\n",
    "                     source_directory=project_folder,\n",
    "                      script=run_script,\n",
    "                      arguments=args,\n",
    "                      compute_target=arcK_target,\n",
    "                      environment=pytorch_env,\n",
    "                      distributed_job_config=distributed_job_config,\n",
    "                      docker_runtime_config=docker_config)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Submit the job\n",
    "Run your experiment by submitting your ScriptRunConfig object. Note that this call is asynchronous."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "run = experiment.submit(src)\n",
    "run.wait_for_completion(show_output=True) # this provides a verbose log"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Register the model\n",
    "\n",
    "Register the trained model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "register_model_name = 'cifar10torch'\n",
    "model = run.register_model(model_name=register_model_name, model_path='outputs/cifar10torch.pt')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The machine learning model named \"cifar10torch\" should be registered in your AzureML workspace."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Get the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.model import Model\n",
    "model = Model(ws, register_model_name)\n",
    "model_id = f\"azureml:{model.name}:{model.version}\"\n",
    "print(f\"Get {model.name}, latest version {model.version}, id in deployment.yml: {model_id}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Deploy and score a machine learning model by using a managed online endpoint\n",
    "\n",
    "Currently, amlarc inference is only supported with Azure Machine Learning CI (v2). Please follow [doc](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-train-cli?view=azure-devops#prerequisites) to configure the prerequisites. This notebook will invoke Azure Machine Learning CI (v2) directly."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "endpoint = '<cifar10torch endpoint name>'\n",
    "\n",
    "import os\n",
    "from pathlib import Path\n",
    "prefix = Path(os.getcwd())\n",
    "endpoint_file = str(prefix.joinpath(\"pt_endpoint.yml\"))\n",
    "deployment_file = str(prefix.joinpath(\"pt_deployment.yml\"))\n",
    "print(f\"Using Endpoint file: {endpoint_file}, Deployment file: {deployment_file} please replace <modelId> (e.g. azureml:cifar10torch:1), <instanceTypeName> (e.g. defaultInstanceType) and <computeTargetName> (e.g. azureml:amlarc-compute) according above output\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Need to **replace the properties in pt_deployment.yml**, including,\n",
    "* `<modelId>`: example value: azureml:cifar10torch:1\n",
    "* `<instanceTypeName>`: example value: defaultInstanceType\n",
    "\n",
    "Need to **replace the properties in pt_endpoint.yml**, including,\n",
    "* `<computeTargetName>`: example value: azureml:amlarc-compute"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import helpers\n",
    "from azureml.core.workspace import Workspace\n",
    "\n",
    "ws = Workspace.from_config()\n",
    "print('Workspace name: ' + ws.name, \n",
    "      'Azure region: ' + ws.location, \n",
    "      'Subscription id: ' + ws.subscription_id, \n",
    "      'Resource group: ' + ws.resource_group, sep='\\n')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-endpoint create -n {endpoint} -f {endpoint_file} -w {ws.name} -g {ws.resource_group}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-endpoint show -n {endpoint} -w {ws.name} -g {ws.resource_group}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "helpers.run(f\"az ml online-deployment create -n blue --endpoint {endpoint} -f {deployment_file} -w {ws.name} -g {ws.resource_group} --all-traffic\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Get score_uri and access_token from AZ CLI (Currently only Azure Machine Learning CLI (v2) supported)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# get score_url and access_token from AZ CLI\n",
    "import helpers\n",
    "from azureml.core.workspace import Workspace\n",
    "ws = Workspace.from_config()\n",
    "cmd = f\"az ml online-endpoint show -n {endpoint} -w {ws.name} -g {ws.resource_group}\"\n",
    "properties = helpers.run(cmd, return_output=True, no_output=True)\n",
    "\n",
    "cmd = f\"az ml online-endpoint get-credentials -n {endpoint} -w {ws.name} -g {ws.resource_group}\"\n",
    "credentials = helpers.run(cmd, return_output=True, no_output=True)\n",
    "\n",
    "print(f\"Got endpoint and credentials.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Test with inputs\n",
    "\n",
    "For testing purpose, first 5 images (cat, ship, ship, plane, frog) is extracted (saved at test_imgs/test_image_*.jpg).\n",
    "\n",
    "After some data process, the images are converted to json as input for the trained model. The outputs are logits for each class per image. \n",
    "\n",
    "The pre-processed request json is saved to test_request_pytorch/cifar_test_input_img_*.json. \n",
    "\n",
    "test_request_pytorch/cifar_test_input_img_first_5_pytorch.json is the request json including first 5 images.\n",
    "\n",
    "Below cell visualizes the first 5 images using matplotlib, and also extracted the expected labels."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import glob\n",
    "import tarfile\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "data_folder = os.path.join(os.getcwd(), 'cifar10-data')\n",
    "extracted_folder = os.path.join(data_folder, \"extracted\")\n",
    "os.makedirs(extracted_folder, exist_ok=True)\n",
    "\n",
    "cifar_gz = glob.glob(os.path.join(data_folder,\"**/cifar-10-python.tar.gz\"), recursive=True)[0]\n",
    "\n",
    "def unpickle(file):\n",
    "    import pickle\n",
    "    with open(file, 'rb') as fo:\n",
    "        dict = pickle.load(fo, encoding='latin1')\n",
    "    return dict\n",
    "\n",
    "with tarfile.open(cifar_gz, \"r:gz\") as tar:\n",
    "    tar.extractall(path=extracted_folder)\n",
    "    tar.close()\n",
    "\n",
    "train_batches = glob.glob(os.path.join(extracted_folder, \"**/data_batch_*\"), recursive=True)\n",
    "test_batch = glob.glob(os.path.join(extracted_folder, \"**/test_batch*\"), recursive=True)[0]\n",
    "meta_file = glob.glob(os.path.join(extracted_folder, \"**/batches.meta\"), recursive=True)[0]\n",
    "\n",
    "# data_batch = unpickle(train_batches[0])\n",
    "data_batch = unpickle(test_batch)\n",
    "meta_data = unpickle(meta_file)\n",
    "\n",
    "# take the images data from batch data\n",
    "images = data_batch['data']\n",
    "# reshape and transpose the images\n",
    "images = images.reshape(len(images),3,32,32).transpose(0,2,3,1)\n",
    "# take labels of the images \n",
    "labels = data_batch['labels']\n",
    "# label names of the images\n",
    "label_names = meta_data['label_names']\n",
    "\n",
    "# dispaly random images\n",
    "# define row and column of figure\n",
    "rows, columns = 1, 5\n",
    "# take random image idex id\n",
    "# imageId = np.random.randint(0, len(images), rows * columns)\n",
    "imageId = np.arange(0, rows * columns)\n",
    "# take images for above random image ids\n",
    "images = images[imageId]\n",
    "# take labels for these images only\n",
    "labels = [labels[i] for i in imageId]\n",
    "\n",
    "# define figure\n",
    "fig=plt.figure(figsize=(10, 10))\n",
    "# visualize these random images\n",
    "for i in range(1, columns*rows +1):\n",
    "    fig.add_subplot(rows, columns, i)\n",
    "    plt.imshow(images[i-1])\n",
    "    plt.xticks([])\n",
    "    plt.yticks([])\n",
    "    plt.title(\"{}\"\n",
    "          .format(label_names[labels[i-1]]))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Use test_request_pytorch/cifar_test_input_img_first_5_pytorch.json to test first 5 images to the trained model. \n",
    "The response shows the prediction of each image. Accuracy is based on your training model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "prop_response = json.loads(properties.replace(os.linesep,\"\"))\n",
    "score_uri = prop_response[\"scoring_uri\"]\n",
    "\n",
    "cred_response = json.loads(credentials.replace(os.linesep, \"\"))\n",
    "access_token = cred_response[\"accessToken\"]\n",
    "\n",
    "def parse_predicts(predicts):\n",
    "    import numpy as np\n",
    "    classes = ('plane', 'car', 'bird', 'cat', 'deer',\n",
    "            'dog', 'frog', 'horse', 'ship', 'truck')\n",
    "    np_predicts = np.array(predicts)\n",
    "    pred_indexes = np.argmax(np_predicts, 1)\n",
    "\n",
    "    predict_labels = [classes[i] for i in pred_indexes]\n",
    "    return predict_labels\n",
    "\n",
    "import requests\n",
    "total = 5\n",
    "match = 0\n",
    "testClasses = [label_names[i] for i in labels]\n",
    "\n",
    "with open(os.path.join(\"test_request_pytorch\", f\"cifar_test_input_img_first_{total}_pytorch.json\"), \"r\") as fp:\n",
    "    inputs_json = json.load(fp)\n",
    "\n",
    "inputs = json.dumps(inputs_json)\n",
    "\n",
    "headers = {'Content-Type': 'application/json', 'Authorization': f\"Bearer {access_token}\"}\n",
    "r = requests.post(score_uri, data=inputs, headers=headers)\n",
    "\n",
    "predicts = r.json()[\"predicts\"]\n",
    "\n",
    "predict_labels = parse_predicts(predicts)\n",
    "\n",
    "for i in range(0, total):\n",
    "    test_label = testClasses[i]\n",
    "    predict_label = predict_labels[i]\n",
    "    if test_label == predict_label:\n",
    "        match = match + 1\n",
    "    print(f\"Image {i}, tag_label: {test_label}, predict_label: {predict_label}\")\n",
    "\n",
    "acc = match / total / 1.0\n",
    "print(f\"Tested {total} images, accuracy: {acc}\")"
   ]
  }
 ],
 "metadata": {
  "authors": [
   {
    "name": "ninhu"
   }
  ],
  "category": "training",
  "compute": [
   "AML Compute"
  ],
  "datasets": [
   "MNIST"
  ],
  "deployment": [
   "None"
  ],
  "exclude_from_index": false,
  "framework": [
   "PyTorch"
  ],
  "friendly_name": "Distributed training with PyTorch",
  "index_order": 1,
  "interpreter": {
   "hash": "fc402497f0168b24575e2ffafe64cd34c507b9a7fab971a93b09782ae565c5c6"
  },
  "kernelspec": {
   "display_name": "Python 3.8.3 64-bit",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  },
  "tags": [
   "None"
  ],
  "task": "Train a model using distributed training via Nccl/Gloo"
 },
 "nbformat": 4,
 "nbformat_minor": 2
}

docs/AKS-HCI/notebooks/distributed-cifar10/data.json METASEP
{
    "instances": [
        [
            [
                [
                    0.6337511539459229,
                    0.6531360745429993,
                    0.7694455981254578,
                    0.7888305187225342,
                    0.6725209951400757,
                    0.5949813723564148,
                    0.7112908363342285,
                    0.6531360745429993,
                    0.6337511539459229,
                    0.6531360745429993,
                    0.6919059157371521,
                    0.6725209951400757,
                    0.6919059157371521,
                    0.7888305187225342,
                    0.8469852805137634,
                    0.8663701415061951,
                    0.8082154393196106,
                    0.7112908363342285,
                    0.6725209951400757,
                    0.6725209951400757,
                    0.5949813723564148,
                    0.4592869281768799,
                    0.4786718487739563,
                    0.43990203738212585,
                    0.4592869281768799,
                    0.3429774343967438,
                    0.2848227024078369,
                    0.30420762300491333,
                    0.3429774343967438,
                    0.22666795551776886,
                    0.013433732092380524,
                    -0.18041542172431946
                ],
                [
                    0.5174416899681091,
                    0.4980567693710327,
                    0.6531360745429993,
                    0.7888305187225342,
                    0.7112908363342285,
                    0.6725209951400757,
                    0.7500606775283813,
                    0.7112908363342285,
                    0.7306757569313049,
                    0.5949813723564148,
                    0.5755964517593384,
                    0.6531360745429993,
                    0.7306757569313049,
                    0.8663701415061951,
                    0.8857550621032715,
                    0.8857550621032715,
                    0.8469852805137634,
                    0.6725209951400757,
                    0.556211531162262,
                    0.4980567693710327,
                    0.3817472755908966,
                    0.2654377818107605,
                    0.2848227024078369,
                    0.30420762300491333,
                    0.4592869281768799,
                    0.42051711678504944,
                    0.3817472755908966,
                    0.32359254360198975,
                    0.3429774343967438,
                    0.20728303492069244,
                    -0.005951183382421732,
                    -0.1222606748342514
                ],
                [
                    0.4980567693710327,
                    0.4980567693710327,
                    0.6337511539459229,
                    0.8082154393196106,
                    0.6725209951400757,
                    0.7306757569313049,
                    0.7694455981254578,
                    0.7694455981254578,
                    0.7306757569313049,
                    0.7112908363342285,
                    0.6337511539459229,
                    0.6143662929534912,
                    0.6919059157371521,
                    0.7888305187225342,
                    0.8082154393196106,
                    0.8469852805137634,
                    0.8663701415061951,
                    0.6531360745429993,
                    0.3817472755908966,
                    -0.08349084854125977,
                    -0.29672491550445557,
                    -0.5293439030647278,
                    -0.4711891710758209,
                    -0.2191852629184723,
                    -0.10287576168775558,
                    0.1685132086277008,
                    0.3429774343967438,
                    0.2848227024078369,
                    0.32359254360198975,
                    0.2654377818107605,
                    0.09097354114055634,
                    -0.10287576168775558
                ],
                [
                    0.5755964517593384,
                    0.5755964517593384,
                    0.6725209951400757,
                    0.9439098238945007,
                    0.8082154393196106,
                    0.8082154393196106,
                    0.8469852805137634,
                    0.8469852805137634,
                    0.7694455981254578,
                    0.7694455981254578,
                    0.8082154393196106,
                    1.2734533548355103,
                    1.00206458568573,
                    0.6143662929534912,
                    0.7112908363342285,
                    0.7500606775283813,
                    0.6337511539459229,
                    0.4592869281768799,
                    -0.4130344092845917,
                    -0.4324193298816681,
                    -0.5293439030647278,
                    -0.6456534266471863,
                    -0.8782724142074585,
                    -0.9945818781852722,
                    -0.761962890625,
                    -0.8201176524162292,
                    -0.2385701686143875,
                    0.12974336743354797,
                    0.2848227024078369,
                    0.2848227024078369,
                    0.20728303492069244,
                    0.03281864896416664
                ],
                [
                    0.5755964517593384,
                    0.5949813723564148,
                    0.6919059157371521,
                    0.8663701415061951,
                    0.8469852805137634,
                    0.7306757569313049,
                    0.8469852805137634,
                    0.7888305187225342,
                    0.7500606775283813,
                    0.7500606775283813,
                    0.9245249032974243,
                    2.3396236896514893,
                    1.350993037223816,
                    0.4980567693710327,
                    0.401132196187973,
                    0.32359254360198975,
                    -0.27733999490737915,
                    -0.9170421957969666,
                    -0.7813478112220764,
                    -0.2385701686143875,
                    -0.25795507431030273,
                    -0.37426456809043884,
                    -0.5487288236618042,
                    -0.6262685060501099,
                    -0.9945818781852722,
                    -0.8007327318191528,
                    -0.7813478112220764,
                    -0.39364948868751526,
                    0.0522037111222744,
                    0.24605286121368408,
                    0.1491282880306244,
                    0.07158862799406052
                ],
                [
                    0.43990203738212585,
                    0.1491282880306244,
                    0.09097354114055634,
                    0.42051711678504944,
                    0.6919059157371521,
                    0.7694455981254578,
                    0.8082154393196106,
                    0.8082154393196106,
                    0.7306757569313049,
                    0.7694455981254578,
                    0.7306757569313049,
                    1.0602192878723145,
                    0.6143662929534912,
                    0.0522037111222744,
                    -0.5487288236618042,
                    -1.1496611833572388,
                    -1.0915064811706543,
                    -1.1496611833572388,
                    -0.7038081288337708,
                    -0.14164559543132782,
                    -0.06410592794418335,
                    -0.1222606748342514,
                    -0.2191852629184723,
                    -0.6068835854530334,
                    -0.5099589824676514,
                    -0.6650383472442627,
                    -1.3047406673431396,
                    -1.1302763223648071,
                    -0.3354947566986084,
                    0.2848227024078369,
                    0.24605286121368408,
                    0.1685132086277008
                ],
                [
                    0.03281864896416664,
                    -0.316109836101532,
                    -1.5179747343063354,
                    -0.7231930494308472,
                    0.5368266105651855,
                    0.8663701415061951,
                    0.827600359916687,
                    0.8663701415061951,
                    0.8469852805137634,
                    0.7888305187225342,
                    0.7500606775283813,
                    0.42051711678504944,
                    0.07158862799406052,
                    0.03281864896416664,
                    -0.49057406187057495,
                    -1.110891342163086,
                    -0.9170421957969666,
                    -1.0333516597747803,
                    -0.8201176524162292,
                    0.12974336743354797,
                    0.401132196187973,
                    -0.025336099788546562,
                    -0.39364948868751526,
                    -0.3548796772956848,
                    -0.19980034232139587,
                    -0.7813478112220764,
                    -1.2078160047531128,
                    -1.5373597145080566,
                    -0.8976573348045349,
                    0.12974336743354797,
                    0.30420762300491333,
                    0.1685132086277008
                ],
                [
                    0.11035845428705215,
                    -0.5099589824676514,
                    -1.6148992776870728,
                    -1.072121500968933,
                    0.3429774343967438,
                    0.8082154393196106,
                    0.7694455981254578,
                    0.827600359916687,
                    0.8857550621032715,
                    0.6919059157371521,
                    0.2848227024078369,
                    -0.10287576168775558,
                    0.09097354114055634,
                    0.3623623549938202,
                    -0.18041542172431946,
                    -0.7231930494308472,
                    -0.6650383472442627,
                    -0.7813478112220764,
                    -0.936427116394043,
                    -0.025336099788546562,
                    0.7306757569313049,
                    0.20728303492069244,
                    -0.4518042504787445,
                    -0.37426456809043884,
                    -0.49057406187057495,
                    -0.7813478112220764,
                    -1.3822803497314453,
                    -1.4792048931121826,
                    -1.3241256475448608,
                    -0.3548796772956848,
                    0.24605286121368408,
                    0.20728303492069244
                ],
                [
                    0.8663701415061951,
                    -0.4324193298816681,
                    -1.3822803497314453,
                    -0.025336099788546562,
                    0.5368266105651855,
                    0.6919059157371521,
                    0.7306757569313049,
                    0.7888305187225342,
                    0.7694455981254578,
                    0.9439098238945007,
                    -0.2385701686143875,
                    -0.005951183382421732,
                    0.6143662929534912,
                    0.5949813723564148,
                    -0.08349084854125977,
                    -0.761962890625,
                    -0.8395025730133057,
                    -0.8007327318191528,
                    -0.8782724142074585,
                    -0.8588874936103821,
                    0.24605286121368408,
                    0.401132196187973,
                    -0.2385701686143875,
                    -0.7425779700279236,
                    -0.8201176524162292,
                    -0.761962890625,
                    -1.0527366399765015,
                    -1.3435105085372925,
                    -1.6536691188812256,
                    -0.9945818781852722,
                    0.1491282880306244,
                    0.22666795551776886
                ],
                [
                    1.0602192878723145,
                    0.1685132086277008,
                    -0.6068835854530334,
                    0.556211531162262,
                    0.9439098238945007,
                    0.6337511539459229,
                    0.5949813723564148,
                    0.5368266105651855,
                    1.583612084388733,
                    2.1651594638824463,
                    1.583612084388733,
                    0.5949813723564148,
                    0.9439098238945007,
                    0.43990203738212585,
                    -0.005951183382421732,
                    -0.6262685060501099,
                    -0.761962890625,
                    -0.9945818781852722,
                    -1.285355806350708,
                    -0.9558120369911194,
                    0.22666795551776886,
                    0.3429774343967438,
                    0.1491282880306244,
                    -0.37426456809043884,
                    -0.761962890625,
                    -0.7425779700279236,
                    -0.8007327318191528,
                    -0.9751969575881958,
                    -1.459820032119751,
                    -1.6536691188812256,
                    -0.587498664855957,
                    0.12974336743354797
                ],
                [
                    1.1183741092681885,
                    -0.3354947566986084,
                    0.32359254360198975,
                    0.7694455981254578,
                    1.00206458568573,
                    0.5755964517593384,
                    0.6531360745429993,
                    -0.06410592794418335,
                    1.6999214887619019,
                    2.1651594638824463,
                    1.8356159925460815,
                    0.7500606775283813,
                    1.1183741092681885,
                    0.5949813723564148,
                    -0.005951183382421732,
                    -0.10287576168775558,
                    -0.9170421957969666,
                    -0.8782724142074585,
                    -1.5567445755004883,
                    -0.6650383472442627,
                    0.9632947444915771,
                    0.6143662929534912,
                    0.5755964517593384,
                    -0.3548796772956848,
                    -0.7425779700279236,
                    -0.4324193298816681,
                    -0.7231930494308472,
                    -0.9170421957969666,
                    -1.285355806350708,
                    -1.634284257888794,
                    -1.285355806350708,
                    -0.4130344092845917
                ],
                [
                    1.2152986526489258,
                    -0.49057406187057495,
                    0.18789811432361603,
                    0.8663701415061951,
                    1.1959137916564941,
                    0.7888305187225342,
                    0.9245249032974243,
                    0.1685132086277008,
                    -0.16103051602840424,
                    1.3316081762313843,
                    1.4285327196121216,
                    0.8663701415061951,
                    1.1571439504623413,
                    1.2346835136413574,
                    0.1685132086277008,
                    -0.16103051602840424,
                    -0.4518042504787445,
                    -0.8007327318191528,
                    -1.6924389600753784,
                    -0.005951183382421732,
                    1.6417667865753174,
                    0.6725209951400757,
                    0.401132196187973,
                    -0.6262685060501099,
                    -0.8201176524162292,
                    -0.6068835854530334,
                    -0.4130344092845917,
                    -0.7813478112220764,
                    -1.0139667987823486,
                    -1.3628954887390137,
                    -1.227200984954834,
                    -0.9558120369911194
                ],
                [
                    1.2346835136413574,
                    -0.6844232082366943,
                    0.03281864896416664,
                    0.9632947444915771,
                    0.9439098238945007,
                    0.7888305187225342,
                    1.0214494466781616,
                    0.6531360745429993,
                    -0.5487288236618042,
                    0.827600359916687,
                    0.827600359916687,
                    0.22666795551776886,
                    1.176528811454773,
                    1.7580763101577759,
                    0.6725209951400757,
                    -0.04472101479768753,
                    -0.10287576168775558,
                    -0.19980034232139587,
                    -1.459820032119751,
                    0.4786718487739563,
                    1.3316081762313843,
                    0.5755964517593384,
                    -0.04472101479768753,
                    -0.6650383472442627,
                    -0.8007327318191528,
                    -0.8007327318191528,
                    -0.587498664855957,
                    -0.761962890625,
                    -0.8007327318191528,
                    -1.0139667987823486,
                    -0.8976573348045349,
                    -1.0139667987823486
                ],
                [
                    1.2346835136413574,
                    -0.6262685060501099,
                    0.5174416899681091,
                    1.1571439504623413,
                    -0.1222606748342514,
                    0.20728303492069244,
                    0.9245249032974243,
                    0.8082154393196106,
                    -0.4324193298816681,
                    0.42051711678504944,
                    0.3817472755908966,
                    0.8082154393196106,
                    1.2346835136413574,
                    1.9519253969192505,
                    1.0602192878723145,
                    0.30420762300491333,
                    0.013433732092380524,
                    -0.16103051602840424,
                    -1.0527366399765015,
                    0.556211531162262,
                    1.176528811454773,
                    0.4592869281768799,
                    -0.2191852629184723,
                    -0.7425779700279236,
                    -0.8782724142074585,
                    -1.0333516597747803,
                    -0.8782724142074585,
                    -0.5099589824676514,
                    -0.49057406187057495,
                    -0.6844232082366943,
                    -0.5487288236618042,
                    -0.6068835854530334
                ],
                [
                    1.3316081762313843,
                    -0.3354947566986084,
                    0.827600359916687,
                    1.176528811454773,
                    -0.39364948868751526,
                    -0.5099589824676514,
                    0.5949813723564148,
                    0.8082154393196106,
                    -0.49057406187057495,
                    -0.19980034232139587,
                    0.24605286121368408,
                    1.40914785861969,
                    1.2540684938430786,
                    0.9051399827003479,
                    0.3817472755908966,
                    0.556211531162262,
                    0.401132196187973,
                    -0.4324193298816681,
                    -1.0527366399765015,
                    0.5174416899681091,
                    1.0408344268798828,
                    0.22666795551776886,
                    0.09097354114055634,
                    -0.29672491550445557,
                    -0.7813478112220764,
                    -0.6650383472442627,
                    -0.587498664855957,
                    -0.316109836101532,
                    -0.19980034232139587,
                    -0.49057406187057495,
                    -0.5487288236618042,
                    -0.16103051602840424
                ],
                [
                    1.3897628784179688,
                    0.12974336743354797,
                    0.9051399827003479,
                    1.1377589702606201,
                    0.09097354114055634,
                    -0.9170421957969666,
                    0.2848227024078369,
                    0.5755964517593384,
                    -0.19980034232139587,
                    0.09097354114055634,
                    0.3429774343967438,
                    2.0294651985168457,
                    2.2620840072631836,
                    0.3817472755908966,
                    0.18789811432361603,
                    0.11035845428705215,
                    -0.08349084854125977,
                    -0.3354947566986084,
                    -0.587498664855957,
                    0.3623623549938202,
                    0.827600359916687,
                    0.5174416899681091,
                    -0.25795507431030273,
                    -0.7425779700279236,
                    -1.0527366399765015,
                    -0.7425779700279236,
                    -0.39364948868751526,
                    -0.25795507431030273,
                    -0.10287576168775558,
                    -0.4324193298816681,
                    -0.08349084854125977,
                    0.20728303492069244
                ],
                [
                    1.5060724020004272,
                    0.401132196187973,
                    0.827600359916687,
                    1.2734533548355103,
                    0.827600359916687,
                    -0.9170421957969666,
                    0.013433732092380524,
                    0.24605286121368408,
                    0.24605286121368408,
                    -0.5681137442588806,
                    0.556211531162262,
                    0.9245249032974243,
                    0.7112908363342285,
                    0.2848227024078369,
                    -0.2385701686143875,
                    -0.2385701686143875,
                    -0.4711891710758209,
                    -0.39364948868751526,
                    -0.25795507431030273,
                    0.8857550621032715,
                    0.5949813723564148,
                    0.43990203738212585,
                    0.18789811432361603,
                    -0.316109836101532,
                    -0.9170421957969666,
                    -0.8976573348045349,
                    -0.6068835854530334,
                    -0.4711891710758209,
                    -0.3548796772956848,
                    -0.005951183382421732,
                    0.4980567693710327,
                    0.3623623549938202
                ],
                [
                    1.719306468963623,
                    0.7306757569313049,
                    0.7500606775283813,
                    1.1183741092681885,
                    0.9826796650886536,
                    -0.6068835854530334,
                    -0.5681137442588806,
                    0.5949813723564148,
                    0.43990203738212585,
                    -0.37426456809043884,
                    0.07158862799406052,
                    -0.14164559543132782,
                    -0.2191852629184723,
                    -0.18041542172431946,
                    -0.4518042504787445,
                    -0.19980034232139587,
                    -0.761962890625,
                    -0.4711891710758209,
                    0.3623623549938202,
                    -0.14164559543132782,
                    -1.110891342163086,
                    0.0522037111222744,
                    0.1491282880306244,
                    -0.9751969575881958,
                    -1.2659708261489868,
                    -1.3047406673431396,
                    -1.0527366399765015,
                    -0.4518042504787445,
                    -0.18041542172431946,
                    0.3429774343967438,
                    0.4786718487739563,
                    0.2848227024078369
                ],
                [
                    1.6805366277694702,
                    1.0214494466781616,
                    0.8082154393196106,
                    0.9245249032974243,
                    0.9826796650886536,
                    -0.025336099788546562,
                    -0.761962890625,
                    0.30420762300491333,
                    0.5368266105651855,
                    0.18789811432361603,
                    -0.4130344092845917,
                    -0.936427116394043,
                    0.1685132086277008,
                    -0.025336099788546562,
                    0.07158862799406052,
                    0.42051711678504944,
                    -0.7813478112220764,
                    -0.6456534266471863,
                    0.4786718487739563,
                    0.12974336743354797,
                    -0.16103051602840424,
                    -0.3548796772956848,
                    -0.9751969575881958,
                    -1.1884310245513916,
                    -1.5761295557022095,
                    -1.16904616355896,
                    -0.761962890625,
                    0.1491282880306244,
                    0.5755964517593384,
                    0.6725209951400757,
                    0.556211531162262,
                    0.4980567693710327
                ],
                [
                    1.4285327196121216,
                    1.1959137916564941,
                    0.8857550621032715,
                    0.9439098238945007,
                    1.00206458568573,
                    0.3623623549938202,
                    -0.761962890625,
                    -0.1222606748342514,
                    -0.06410592794418335,
                    0.22666795551776886,
                    0.3623623549938202,
                    -1.072121500968933,
                    0.07158862799406052,
                    -0.3354947566986084,
                    0.3817472755908966,
                    1.1377589702606201,
                    -0.18041542172431946,
                    -1.0139667987823486,
                    0.11035845428705215,
                    0.22666795551776886,
                    0.1685132086277008,
                    -0.7038081288337708,
                    -1.4404350519180298,
                    -1.4210501909255981,
                    -1.5179747343063354,
                    -0.6844232082366943,
                    -0.08349084854125977,
                    0.7306757569313049,
                    0.8857550621032715,
                    0.7500606775283813,
                    0.6337511539459229,
                    0.4592869281768799
                ],
                [
                    0.7694455981254578,
                    1.350993037223816,
                    1.0408344268798828,
                    1.00206458568573,
                    1.0796042680740356,
                    0.5174416899681091,
                    -0.5099589824676514,
                    0.11035845428705215,
                    0.8857550621032715,
                    -0.4324193298816681,
                    -0.6262685060501099,
                    -0.8782724142074585,
                    -0.6262685060501099,
                    -0.06410592794418335,
                    1.0214494466781616,
                    1.2734533548355103,
                    0.4786718487739563,
                    -0.49057406187057495,
                    -0.7038081288337708,
                    -0.7425779700279236,
                    -1.2659708261489868,
                    -1.5373597145080566,
                    -1.6924389600753784,
                    -1.9638278484344482,
                    -1.5373597145080566,
                    -1.2659708261489868,
                    -0.3354947566986084,
                    0.3623623549938202,
                    0.3623623549938202,
                    0.0522037111222744,
                    0.03281864896416664,
                    -0.10287576168775558
                ],
                [
                    -0.16103051602840424,
                    1.350993037223816,
                    1.00206458568573,
                    1.0214494466781616,
                    1.0796042680740356,
                    0.24605286121368408,
                    -0.8201176524162292,
                    0.4786718487739563,
                    2.3202388286590576,
                    1.8162310123443604,
                    0.1491282880306244,
                    0.1685132086277008,
                    0.4592869281768799,
                    0.9826796650886536,
                    1.2540684938430786,
                    1.3316081762313843,
                    0.827600359916687,
                    -0.005951183382421732,
                    -0.29672491550445557,
                    -1.2465859651565552,
                    -1.7505937814712524,
                    -1.769978642463684,
                    -1.4792048931121826,
                    -1.3047406673431396,
                    -1.2465859651565552,
                    -1.3047406673431396,
                    -1.0915064811706543,
                    -1.0333516597747803,
                    -0.9170421957969666,
                    -1.0915064811706543,
                    -1.285355806350708,
                    -1.3628954887390137
                ],
                [
                    -0.8976573348045349,
                    0.9632947444915771,
                    0.9439098238945007,
                    0.9826796650886536,
                    1.00206458568573,
                    0.2848227024078369,
                    -0.316109836101532,
                    1.6611517667770386,
                    2.475318193435669,
                    2.4559333324432373,
                    1.6029969453811646,
                    -0.025336099788546562,
                    -0.2191852629184723,
                    -0.025336099788546562,
                    -0.18041542172431946,
                    -0.06410592794418335,
                    -0.4130344092845917,
                    -1.110891342163086,
                    -1.110891342163086,
                    -1.2659708261489868,
                    -1.4210501909255981,
                    -1.459820032119751,
                    -1.4404350519180298,
                    -1.3435105085372925,
                    -1.3435105085372925,
                    -1.4404350519180298,
                    -1.5955144166946411,
                    -1.4404350519180298,
                    -1.285355806350708,
                    -1.4985898733139038,
                    -1.5955144166946411,
                    -1.6148992776870728
                ],
                [
                    -1.634284257888794,
                    -0.5681137442588806,
                    0.3623623549938202,
                    0.827600359916687,
                    1.0214494466781616,
                    0.7694455981254578,
                    0.7694455981254578,
                    2.3396236896514893,
                    2.475318193435669,
                    1.9713103771209717,
                    -0.29672491550445557,
                    -1.2659708261489868,
                    -1.401665210723877,
                    -1.4792048931121826,
                    -1.4792048931121826,
                    -1.4985898733139038,
                    -1.5567445755004883,
                    -1.6148992776870728,
                    -1.5373597145080566,
                    -1.6148992776870728,
                    -1.6924389600753784,
                    -1.5373597145080566,
                    -1.5373597145080566,
                    -1.5955144166946411,
                    -1.6148992776870728,
                    -1.5373597145080566,
                    -1.5373597145080566,
                    -1.459820032119751,
                    -1.3628954887390137,
                    -1.401665210723877,
                    -1.4404350519180298,
                    -1.5567445755004883
                ],
                [
                    -1.8669031858444214,
                    -1.8669031858444214,
                    -1.285355806350708,
                    0.11035845428705215,
                    0.7888305187225342,
                    0.12974336743354797,
                    1.3316081762313843,
                    2.4947030544281006,
                    2.242699146270752,
                    0.30420762300491333,
                    -1.2465859651565552,
                    -1.459820032119751,
                    -1.459820032119751,
                    -1.4404350519180298,
                    -1.4792048931121826,
                    -1.459820032119751,
                    -1.5179747343063354,
                    -1.6148992776870728,
                    -1.6730540990829468,
                    -1.769978642463684,
                    -1.7505937814712524,
                    -1.6730540990829468,
                    -1.6924389600753784,
                    -1.6148992776870728,
                    -1.5567445755004883,
                    -1.3435105085372925,
                    -1.227200984954834,
                    -1.285355806350708,
                    -1.3435105085372925,
                    -1.459820032119751,
                    -1.5373597145080566,
                    -1.4404350519180298
                ],
                [
                    -1.4985898733139038,
                    -1.8475183248519897,
                    -1.769978642463684,
                    -1.0139667987823486,
                    0.0522037111222744,
                    0.0522037111222744,
                    1.7386913299560547,
                    2.5140879154205322,
                    1.1959137916564941,
                    -1.1496611833572388,
                    -1.3822803497314453,
                    -1.459820032119751,
                    -1.4210501909255981,
                    -1.4210501909255981,
                    -1.5373597145080566,
                    -1.5567445755004883,
                    -1.5955144166946411,
                    -1.634284257888794,
                    -1.7312088012695312,
                    -1.6730540990829468,
                    -1.6536691188812256,
                    -1.6536691188812256,
                    -1.5955144166946411,
                    -1.5373597145080566,
                    -1.285355806350708,
                    -1.227200984954834,
                    -1.1884310245513916,
                    -1.285355806350708,
                    -1.3822803497314453,
                    -1.459820032119751,
                    -1.072121500968933,
                    -0.8201176524162292
                ],
                [
                    -1.4210501909255981,
                    -1.7505937814712524,
                    -1.828133463859558,
                    -1.634284257888794,
                    -1.1496611833572388,
                    0.0522037111222744,
                    1.9131556749343872,
                    2.2233142852783203,
                    -0.025336099788546562,
                    -1.3047406673431396,
                    -1.4792048931121826,
                    -1.3435105085372925,
                    -1.3822803497314453,
                    -1.5761295557022095,
                    -1.5761295557022095,
                    -1.5179747343063354,
                    -1.5373597145080566,
                    -1.5955144166946411,
                    -1.5955144166946411,
                    -1.5761295557022095,
                    -1.5761295557022095,
                    -1.5567445755004883,
                    -1.3822803497314453,
                    -1.3047406673431396,
                    -1.3822803497314453,
                    -1.5373597145080566,
                    -1.5955144166946411,
                    -1.7312088012695312,
                    -1.4404350519180298,
                    -1.0139667987823486,
                    -0.7813478112220764,
                    -0.9558120369911194
                ],
                [
                    -1.459820032119751,
                    -1.7505937814712524,
                    -1.8669031858444214,
                    -1.7505937814712524,
                    -1.5761295557022095,
                    -0.9170421957969666,
                    1.486687421798706,
                    1.6611517667770386,
                    -0.5487288236618042,
                    -1.16904616355896,
                    -1.3822803497314453,
                    -1.4985898733139038,
                    -1.3047406673431396,
                    -1.4985898733139038,
                    -1.6536691188812256,
                    -1.5567445755004883,
                    -1.5179747343063354,
                    -1.4985898733139038,
                    -1.5179747343063354,
                    -1.5373597145080566,
                    -1.4404350519180298,
                    -1.6730540990829468,
                    -1.6730540990829468,
                    -1.4985898733139038,
                    -1.5179747343063354,
                    -1.6730540990829468,
                    -1.8862881660461426,
                    -1.6536691188812256,
                    -1.1302763223648071,
                    -1.1302763223648071,
                    -1.5373597145080566,
                    -1.4404350519180298
                ],
                [
                    -1.459820032119751,
                    -1.7505937814712524,
                    -1.808748483657837,
                    -1.7893636226654053,
                    -1.634284257888794,
                    -1.5373597145080566,
                    -0.4130344092845917,
                    0.8663701415061951,
                    -1.1884310245513916,
                    -1.3822803497314453,
                    -1.4210501909255981,
                    -1.401665210723877,
                    -1.2465859651565552,
                    -1.3047406673431396,
                    -1.3822803497314453,
                    -1.5567445755004883,
                    -1.6148992776870728,
                    -1.634284257888794,
                    -1.5373597145080566,
                    -1.4792048931121826,
                    -1.5373597145080566,
                    -1.6148992776870728,
                    -1.6536691188812256,
                    -1.6730540990829468,
                    -1.7118239402770996,
                    -1.6536691188812256,
                    -1.5761295557022095,
                    -1.2078160047531128,
                    -1.5179747343063354,
                    -1.828133463859558,
                    -2.138292074203491,
                    -1.4404350519180298
                ],
                [
                    -1.110891342163086,
                    -1.6148992776870728,
                    -1.828133463859558,
                    -1.6924389600753784,
                    -1.7118239402770996,
                    -1.5955144166946411,
                    -1.6148992776870728,
                    -1.0527366399765015,
                    -1.4792048931121826,
                    -1.828133463859558,
                    -1.9056730270385742,
                    -1.6924389600753784,
                    -1.4792048931121826,
                    -1.3435105085372925,
                    -1.3047406673431396,
                    -1.401665210723877,
                    -1.3435105085372925,
                    -1.2659708261489868,
                    -1.3241256475448608,
                    -1.401665210723877,
                    -1.459820032119751,
                    -1.5567445755004883,
                    -1.6730540990829468,
                    -1.7893636226654053,
                    -1.6148992776870728,
                    -1.227200984954834,
                    -0.8976573348045349,
                    -1.0139667987823486,
                    -1.3435105085372925,
                    -1.6924389600753784,
                    -2.1770617961883545,
                    -1.6536691188812256
                ],
                [
                    -1.2465859651565552,
                    -1.4792048931121826,
                    -1.7505937814712524,
                    -1.5955144166946411,
                    -1.6730540990829468,
                    -1.6148992776870728,
                    -1.5761295557022095,
                    -1.6536691188812256,
                    -1.6148992776870728,
                    -1.9056730270385742,
                    -1.9832127094268799,
                    -1.8475183248519897,
                    -1.9056730270385742,
                    -1.8669031858444214,
                    -1.7312088012695312,
                    -1.5179747343063354,
                    -1.3435105085372925,
                    -1.227200984954834,
                    -1.1496611833572388,
                    -0.9751969575881958,
                    -1.0915064811706543,
                    -1.4792048931121826,
                    -1.5955144166946411,
                    -1.5955144166946411,
                    -1.2659708261489868,
                    -0.7813478112220764,
                    -0.316109836101532,
                    -0.6262685060501099,
                    -1.2659708261489868,
                    -1.9250580072402954,
                    -1.8669031858444214,
                    -2.041367530822754
                ],
                [
                    -1.3822803497314453,
                    -1.3435105085372925,
                    -1.5567445755004883,
                    -1.5955144166946411,
                    -1.6536691188812256,
                    -1.6536691188812256,
                    -1.6536691188812256,
                    -1.6924389600753784,
                    -1.7312088012695312,
                    -1.9250580072402954,
                    -2.0025975704193115,
                    -1.8669031858444214,
                    -1.944442868232727,
                    -1.8669031858444214,
                    -2.0607523918151855,
                    -2.080137252807617,
                    -1.808748483657837,
                    -1.5179747343063354,
                    -1.2465859651565552,
                    -0.9945818781852722,
                    -1.1496611833572388,
                    -1.401665210723877,
                    -1.4210501909255981,
                    -1.5567445755004883,
                    -1.1302763223648071,
                    -0.7038081288337708,
                    -0.39364948868751526,
                    -0.7038081288337708,
                    -1.4985898733139038,
                    -1.9638278484344482,
                    -1.769978642463684,
                    -2.0219826698303223
                ]
            ],
            [
                [
                    -0.21556824445724487,
                    -0.2352350950241089,
                    -0.1369008719921112,
                    -0.09756718575954437,
                    -0.21556824445724487,
                    -0.2745687663555145,
                    -0.15656772255897522,
                    -0.19590140879154205,
                    -0.2352350950241089,
                    -0.19590140879154205,
                    -0.1369008719921112,
                    -0.2352350950241089,
                    -0.2352350950241089,
                    -0.11723402887582779,
                    -0.11723402887582779,
                    -0.07790034264326096,
                    -0.11723402887582779,
                    -0.19590140879154205,
                    -0.2352350950241089,
                    -0.21556824445724487,
                    -0.2745687663555145,
                    -0.31390246748924255,
                    -0.31390246748924255,
                    -0.33356931805610657,
                    -0.31390246748924255,
                    -0.43190351128578186,
                    -0.4909040629863739,
                    -0.5105708837509155,
                    -0.5105708837509155,
                    -0.5499045848846436,
                    -0.6285719275474548,
                    -0.7465730309486389
                ],
                [
                    -0.21556824445724487,
                    -0.2549019455909729,
                    -0.17623455822467804,
                    -0.1369008719921112,
                    -0.21556824445724487,
                    -0.19590140879154205,
                    -0.11723402887582779,
                    -0.17623455822467804,
                    -0.1369008719921112,
                    -0.2549019455909729,
                    -0.2352350950241089,
                    -0.2549019455909729,
                    -0.19590140879154205,
                    -0.07790034264326096,
                    -0.11723402887582779,
                    -0.15656772255897522,
                    -0.15656772255897522,
                    -0.2352350950241089,
                    -0.21556824445724487,
                    -0.15656772255897522,
                    -0.2549019455909729,
                    -0.3729029893875122,
                    -0.41223669052124023,
                    -0.4515703618526459,
                    -0.3532361388206482,
                    -0.41223669052124023,
                    -0.41223669052124023,
                    -0.5105708837509155,
                    -0.4909040629863739,
                    -0.5499045848846436,
                    -0.6285719275474548,
                    -0.6875724792480469
                ],
                [
                    -0.2549019455909729,
                    -0.2745687663555145,
                    -0.2352350950241089,
                    -0.2352350950241089,
                    -0.33356931805610657,
                    -0.15656772255897522,
                    -0.11723402887582779,
                    -0.11723402887582779,
                    -0.15656772255897522,
                    -0.15656772255897522,
                    -0.17623455822467804,
                    -0.2745687663555145,
                    -0.2352350950241089,
                    -0.15656772255897522,
                    -0.17623455822467804,
                    -0.19590140879154205,
                    -0.1369008719921112,
                    -0.17623455822467804,
                    -0.2352350950241089,
                    -0.5302377343177795,
                    -0.6482387781143188,
                    -0.8842409253120422,
                    -0.9039077758789062,
                    -0.7465730309486389,
                    -0.7269061803817749,
                    -0.5302377343177795,
                    -0.3925698399543762,
                    -0.4712372124195099,
                    -0.4712372124195099,
                    -0.4909040629863739,
                    -0.5499045848846436,
                    -0.6679056286811829
                ],
                [
                    -0.31390246748924255,
                    -0.2549019455909729,
                    -0.2745687663555145,
                    -0.21556824445724487,
                    -0.2549019455909729,
                    -0.11723402887582779,
                    -0.05823349952697754,
                    -0.07790034264326096,
                    -0.15656772255897522,
                    -0.11723402887582779,
                    0.0007670287159271538,
                    0.45310458540916443,
                    0.13843508064746857,
                    -0.2352350950241089,
                    -0.15656772255897522,
                    -0.17623455822467804,
                    -0.21556824445724487,
                    -0.2352350950241089,
                    -0.8449072241783142,
                    -0.7072393298149109,
                    -0.6482387781143188,
                    -0.6482387781143188,
                    -0.9432414174079895,
                    -1.1792436838150024,
                    -1.0415756702423096,
                    -1.1989104747772217,
                    -0.7465730309486389,
                    -0.4909040629863739,
                    -0.41223669052124023,
                    -0.43190351128578186,
                    -0.4712372124195099,
                    -0.5695714354515076
                ],
                [
                    -0.31390246748924255,
                    -0.17623455822467804,
                    -0.15656772255897522,
                    -0.17623455822467804,
                    -0.17623455822467804,
                    -0.19590140879154205,
                    -0.05823349952697754,
                    -0.1369008719921112,
                    -0.19590140879154205,
                    -0.1369008719921112,
                    0.09910139441490173,
                    1.790449857711792,
                    0.6497730016708374,
                    -0.17623455822467804,
                    -0.2352350950241089,
                    -0.29423561692237854,
                    -0.8449072241783142,
                    -1.3759119510650635,
                    -1.0612424612045288,
                    -0.3925698399543762,
                    -0.2549019455909729,
                    -0.17623455822467804,
                    -0.41223669052124023,
                    -0.5695714354515076,
                    -1.0022419691085815,
                    -0.8842409253120422,
                    -0.9825751185417175,
                    -0.7859066724777222,
                    -0.5302377343177795,
                    -0.43190351128578186,
                    -0.5695714354515076,
                    -0.5892382860183716
                ],
                [
                    -0.2745687663555145,
                    -0.3729029893875122,
                    -0.4515703618526459,
                    -0.21556824445724487,
                    -0.15656772255897522,
                    -0.19590140879154205,
                    -0.1369008719921112,
                    -0.15656772255897522,
                    -0.2352350950241089,
                    -0.1369008719921112,
                    -0.09756718575954437,
                    0.2957698404788971,
                    -0.018899815157055855,
                    -0.41223669052124023,
                    -0.9432414174079895,
                    -1.4349125623703003,
                    -1.2775777578353882,
                    -1.3169114589691162,
                    -0.7859066724777222,
                    -0.19590140879154205,
                    -0.03856665641069412,
                    -0.018899815157055855,
                    -0.1369008719921112,
                    -0.5302377343177795,
                    -0.4515703618526459,
                    -0.6285719275474548,
                    -1.2775777578353882,
                    -1.2775777578353882,
                    -0.7662398815155029,
                    -0.3532361388206482,
                    -0.4909040629863739,
                    -0.5499045848846436
                ],
                [
                    -0.4515703618526459,
                    -0.5499045848846436,
                    -1.6905814409255981,
                    -0.9629082679748535,
                    -0.11723402887582779,
                    -0.09756718575954437,
                    -0.15656772255897522,
                    -0.09756718575954437,
                    -0.11723402887582779,
                    -0.1369008719921112,
                    -0.05823349952697754,
                    -0.31390246748924255,
                    -0.4909040629863739,
                    -0.29423561692237854,
                    -0.7072393298149109,
                    -1.1005761623382568,
                    -0.7859066724777222,
                    -0.9432414174079895,
                    -0.7662398815155029,
                    0.13843508064746857,
                    0.37443721294403076,
                    -0.09756718575954437,
                    -0.4712372124195099,
                    -0.41223669052124023,
                    -0.2352350950241089,
                    -0.7859066724777222,
                    -1.0219087600708008,
                    -1.4939130544662476,
                    -1.218577265739441,
                    -0.4909040629863739,
                    -0.4712372124195099,
                    -0.5892382860183716
                ],
                [
                    -0.15656772255897522,
                    -0.5302377343177795,
                    -1.5725804567337036,
                    -1.1595767736434937,
                    -0.2352350950241089,
                    -0.11723402887582779,
                    -0.17623455822467804,
                    -0.1369008719921112,
                    -0.07790034264326096,
                    -0.19590140879154205,
                    -0.2745687663555145,
                    -0.5695714354515076,
                    -0.2549019455909729,
                    0.15810193121433258,
                    -0.33356931805610657,
                    -0.7072393298149109,
                    -0.5499045848846436,
                    -0.6875724792480469,
                    -0.9039077758789062,
                    -0.09756718575954437,
                    0.5907724499702454,
                    0.02043387107551098,
                    -0.5892382860183716,
                    -0.4909040629863739,
                    -0.5892382860183716,
                    -0.8252403736114502,
                    -1.2382441759109497,
                    -1.3759119510650635,
                    -1.4939130544662476,
                    -0.7859066724777222,
                    -0.3925698399543762,
                    -0.5105708837509155
                ],
                [
                    0.7481071949005127,
                    -0.3532361388206482,
                    -1.2775777578353882,
                    -0.03856665641069412,
                    0.02043387107551098,
                    -0.19590140879154205,
                    -0.11723402887582779,
                    -0.018899815157055855,
                    -0.03856665641069412,
                    0.23676930367946625,
                    -0.6679056286811829,
                    -0.3532361388206482,
                    0.35477036237716675,
                    0.3941040337085724,
                    -0.2352350950241089,
                    -0.8449072241783142,
                    -0.8252403736114502,
                    -0.7465730309486389,
                    -0.8842409253120422,
                    -1.0219087600708008,
                    0.040100716054439545,
                    0.23676930367946625,
                    -0.3925698399543762,
                    -0.8645740747451782,
                    -0.9039077758789062,
                    -0.8055735230445862,
                    -0.9825751185417175,
                    -1.297244668006897,
                    -1.7299151420593262,
                    -1.257910966873169,
                    -0.33356931805610657,
                    -0.3925698399543762
                ],
                [
                    1.0431098937988281,
                    0.3154366612434387,
                    -0.4515703618526459,
                    0.6104393005371094,
                    0.5121051073074341,
                    -0.1369008719921112,
                    -0.1369008719921112,
                    -0.09756718575954437,
                    1.1217772960662842,
                    1.790449857711792,
                    1.1217772960662842,
                    0.15810193121433258,
                    0.5907724499702454,
                    0.15810193121433258,
                    -0.2549019455909729,
                    -0.7465730309486389,
                    -0.7662398815155029,
                    -0.9629082679748535,
                    -1.297244668006897,
                    -1.0809093713760376,
                    0.040100716054439545,
                    0.19743561744689941,
                    0.02043387107551098,
                    -0.4909040629863739,
                    -0.8252403736114502,
                    -0.7465730309486389,
                    -0.7465730309486389,
                    -0.9235746264457703,
                    -1.4545793533325195,
                    -1.8282495737075806,
                    -0.9432414174079895,
                    -0.3925698399543762
                ],
                [
                    1.1807777881622314,
                    -0.1369008719921112,
                    0.5514388084411621,
                    0.90544193983078,
                    0.6497730016708374,
                    -0.21556824445724487,
                    -0.09756718575954437,
                    -0.6679056286811829,
                    1.456113576889038,
                    1.9871183633804321,
                    1.338112473487854,
                    0.23676930367946625,
                    0.7087735533714294,
                    0.2761029899120331,
                    -0.29423561692237854,
                    -0.2352350950241089,
                    -0.9235746264457703,
                    -0.8449072241783142,
                    -1.5529135465621948,
                    -0.7465730309486389,
                    0.8267745971679688,
                    0.47277140617370605,
                    0.47277140617370605,
                    -0.4515703618526459,
                    -0.7859066724777222,
                    -0.41223669052124023,
                    -0.6875724792480469,
                    -0.8645740747451782,
                    -1.257910966873169,
                    -1.710248351097107,
                    -1.5135798454284668,
                    -0.8252403736114502
                ],
                [
                    1.338112473487854,
                    -0.29423561692237854,
                    0.4137708842754364,
                    1.0234429836273193,
                    0.8661082983016968,
                    -0.05823349952697754,
                    0.0007670287159271538,
                    -0.5892382860183716,
                    -0.5499045848846436,
                    1.1611108779907227,
                    0.9447756409645081,
                    0.37443721294403076,
                    0.7481071949005127,
                    0.9447756409645081,
                    -0.07790034264326096,
                    -0.31390246748924255,
                    -0.4909040629863739,
                    -0.7662398815155029,
                    -1.670914649963379,
                    -0.03856665641069412,
                    1.5347809791564941,
                    0.5711056590080261,
                    0.3154366612434387,
                    -0.6679056286811829,
                    -0.8449072241783142,
                    -0.5892382860183716,
                    -0.3729029893875122,
                    -0.7072393298149109,
                    -0.9432414174079895,
                    -1.3759119510650635,
                    -1.3365782499313354,
                    -1.3169114589691162
                ],
                [
                    1.3971130847930908,
                    -0.5302377343177795,
                    0.21710245311260223,
                    1.1217772960662842,
                    0.6497730016708374,
                    0.0007670287159271538,
                    0.0007670287159271538,
                    -0.2745687663555145,
                    -1.0809093713760376,
                    0.6104393005371094,
                    0.4137708842754364,
                    -0.17623455822467804,
                    0.8464414477348328,
                    1.5544477701187134,
                    0.5121051073074341,
                    -0.19590140879154205,
                    -0.17623455822467804,
                    -0.17623455822467804,
                    -1.4349125623703003,
                    0.47277140617370605,
                    1.2594451904296875,
                    0.5121051073074341,
                    -0.09756718575954437,
                    -0.6875724792480469,
                    -0.7859066724777222,
                    -0.7662398815155029,
                    -0.5499045848846436,
                    -0.7072393298149109,
                    -0.7072393298149109,
                    -0.9825751185417175,
                    -0.9629082679748535,
                    -1.3365782499313354
                ],
                [
                    1.3577793836593628,
                    -0.5499045848846436,
                    0.6104393005371094,
                    1.2791119813919067,
                    -0.2549019455909729,
                    -0.33356931805610657,
                    0.02043387107551098,
                    -0.1369008719921112,
                    -1.0022419691085815,
                    0.1777687668800354,
                    0.040100716054439545,
                    0.5121051073074341,
                    1.0037761926651,
                    1.82978355884552,
                    0.9644424915313721,
                    0.15810193121433258,
                    -0.11723402887582779,
                    -0.17623455822467804,
                    -1.0219087600708008,
                    0.5711056590080261,
                    1.1414440870285034,
                    0.4137708842754364,
                    -0.2549019455909729,
                    -0.7465730309486389,
                    -0.8449072241783142,
                    -0.9825751185417175,
                    -0.8449072241783142,
                    -0.4515703618526459,
                    -0.43190351128578186,
                    -0.6875724792480469,
                    -0.6679056286811829,
                    -0.9825751185417175
                ],
                [
                    1.4364467859268188,
                    -0.31390246748924255,
                    0.8661082983016968,
                    1.2397782802581787,
                    -0.2745687663555145,
                    -0.6679056286811829,
                    -0.07790034264326096,
                    -0.018899815157055855,
                    -0.9629082679748535,
                    -0.33356931805610657,
                    0.0007670287159271538,
                    1.2201114892959595,
                    1.1217772960662842,
                    0.8267745971679688,
                    0.33510351181030273,
                    0.3941040337085724,
                    0.25643613934516907,
                    -0.4515703618526459,
                    -1.0219087600708008,
                    0.5711056590080261,
                    1.0234429836273193,
                    0.19743561744689941,
                    0.09910139441490173,
                    -0.2745687663555145,
                    -0.7269061803817749,
                    -0.5892382860183716,
                    -0.5302377343177795,
                    -0.2549019455909729,
                    -0.1369008719921112,
                    -0.5302377343177795,
                    -0.7465730309486389,
                    -0.5499045848846436
                ],
                [
                    1.456113576889038,
                    0.11876823753118515,
                    0.8661082983016968,
                    1.0824435949325562,
                    0.2761029899120331,
                    -0.7859066724777222,
                    -0.05823349952697754,
                    0.040100716054439545,
                    -0.5695714354515076,
                    -0.05823349952697754,
                    0.15810193121433258,
                    1.9281178712844849,
                    2.2231204509735107,
                    0.2957698404788971,
                    0.13843508064746857,
                    -0.03856665641069412,
                    -0.21556824445724487,
                    -0.3729029893875122,
                    -0.6875724792480469,
                    0.21710245311260223,
                    0.7087735533714294,
                    0.47277140617370605,
                    -0.29423561692237854,
                    -0.7465730309486389,
                    -1.0022419691085815,
                    -0.6875724792480469,
                    -0.3729029893875122,
                    -0.2745687663555145,
                    -0.2549019455909729,
                    -0.7269061803817749,
                    -0.5302377343177795,
                    -0.3729029893875122
                ],
                [
                    1.5741146802902222,
                    0.45310458540916443,
                    0.8071077466011047,
                    1.1611108779907227,
                    0.925108790397644,
                    -0.7269061803817749,
                    0.040100716054439545,
                    0.05976755917072296,
                    -0.03856665641069412,
                    -0.8449072241783142,
                    0.3941040337085724,
                    0.7874408960342407,
                    0.5711056590080261,
                    0.1777687668800354,
                    -0.33356931805610657,
                    -0.33356931805610657,
                    -0.43190351128578186,
                    -0.43190351128578186,
                    -0.6482387781143188,
                    0.3941040337085724,
                    0.2957698404788971,
                    0.35477036237716675,
                    0.13843508064746857,
                    -0.3532361388206482,
                    -0.9235746264457703,
                    -0.8645740747451782,
                    -0.5892382860183716,
                    -0.6285719275474548,
                    -0.7859066724777222,
                    -0.6875724792480469,
                    -0.29423561692237854,
                    -0.3729029893875122
                ],
                [
                    1.8101167678833008,
                    0.8464414477348328,
                    0.8661082983016968,
                    1.2004445791244507,
                    1.1611108779907227,
                    -0.41223669052124023,
                    -0.5302377343177795,
                    0.5121051073074341,
                    0.2761029899120331,
                    -0.5892382860183716,
                    -0.1369008719921112,
                    -0.3532361388206482,
                    -0.41223669052124023,
                    -0.3532361388206482,
                    -0.6285719275474548,
                    -0.2549019455909729,
                    -0.6285719275474548,
                    -0.3925698399543762,
                    0.09910139441490173,
                    -0.5302377343177795,
                    -1.3169114589691162,
                    -0.05823349952697754,
                    0.05976755917072296,
                    -1.0612424612045288,
                    -1.3169114589691162,
                    -1.3169114589691162,
                    -1.0415756702423096,
                    -0.5892382860183716,
                    -0.5695714354515076,
                    -0.21556824445724487,
                    -0.1369008719921112,
                    -0.2549019455909729
                ],
                [
                    1.7314493656158447,
                    1.2004445791244507,
                    1.0234429836273193,
                    1.1414440870285034,
                    1.2004445791244507,
                    0.15810193121433258,
                    -0.6875724792480469,
                    0.3154366612434387,
                    0.49243825674057007,
                    0.09910139441490173,
                    -0.6482387781143188,
                    -1.1595767736434937,
                    -0.03856665641069412,
                    -0.2352350950241089,
                    -0.11723402887582779,
                    0.3941040337085724,
                    -0.6089051365852356,
                    -0.5302377343177795,
                    0.3154366612434387,
                    -0.11723402887582779,
                    -0.2745687663555145,
                    -0.4712372124195099,
                    -1.0809093713760376,
                    -1.257910966873169,
                    -1.6119141578674316,
                    -1.1989104747772217,
                    -1.0612424612045288,
                    -0.3532361388206482,
                    -0.07790034264326096,
                    -0.05823349952697754,
                    -0.15656772255897522,
                    -0.2352350950241089
                ],
                [
                    1.3577793836593628,
                    1.298778772354126,
                    1.0431098937988281,
                    1.1021103858947754,
                    1.1611108779907227,
                    0.5121051073074341,
                    -0.6482387781143188,
                    -0.03856665641069412,
                    0.02043387107551098,
                    0.25643613934516907,
                    0.21710245311260223,
                    -1.257910966873169,
                    -0.09756718575954437,
                    -0.5105708837509155,
                    0.21710245311260223,
                    1.0431098937988281,
                    -0.09756718575954437,
                    -0.9432414174079895,
                    -0.07790034264326096,
                    0.02043387107551098,
                    0.11876823753118515,
                    -0.7269061803817749,
                    -1.4545793533325195,
                    -1.4152456521987915,
                    -1.4545793533325195,
                    -0.6482387781143188,
                    -0.6285719275474548,
                    -0.09756718575954437,
                    -0.03856665641069412,
                    -0.19590140879154205,
                    -0.2352350950241089,
                    -0.31390246748924255
                ],
                [
                    0.6497730016708374,
                    1.377446174621582,
                    1.0824435949325562,
                    0.9841093420982361,
                    1.1414440870285034,
                    0.6694398522377014,
                    -0.3925698399543762,
                    0.23676930367946625,
                    1.0234429836273193,
                    -0.3532361388206482,
                    -0.6482387781143188,
                    -0.9039077758789062,
                    -0.6482387781143188,
                    -0.09756718575954437,
                    0.9841093420982361,
                    1.1611108779907227,
                    0.49243825674057007,
                    -0.4515703618526459,
                    -0.8842409253120422,
                    -0.9039077758789062,
                    -1.218577265739441,
                    -1.3955788612365723,
                    -1.5135798454284668,
                    -1.7692488431930542,
                    -1.297244668006897,
                    -1.0219087600708008,
                    -0.4515703618526459,
                    0.040100716054439545,
                    0.0007670287159271538,
                    -0.2745687663555145,
                    -0.19590140879154205,
                    -0.3532361388206482
                ],
                [
                    -0.05823349952697754,
                    1.5151140689849854,
                    1.0824435949325562,
                    0.90544193983078,
                    1.1021103858947754,
                    0.4137708842754364,
                    -0.7072393298149109,
                    0.5907724499702454,
                    2.43945574760437,
                    1.947784662246704,
                    0.33510351181030273,
                    0.35477036237716675,
                    0.6497730016708374,
                    1.1611108779907227,
                    1.4364467859268188,
                    1.3577793836593628,
                    0.9644424915313721,
                    0.19743561744689941,
                    -0.2745687663555145,
                    -1.1989104747772217,
                    -1.4545793533325195,
                    -1.3562451601028442,
                    -1.0415756702423096,
                    -0.8252403736114502,
                    -0.7465730309486389,
                    -0.7662398815155029,
                    -0.4712372124195099,
                    -0.43190351128578186,
                    -0.3729029893875122,
                    -0.5302377343177795,
                    -0.6089051365852356,
                    -0.6482387781143188
                ],
                [
                    -0.3532361388206482,
                    1.456113576889038,
                    1.1807777881622314,
                    0.9644424915313721,
                    1.0627766847610474,
                    0.45310458540916443,
                    -0.21556824445724487,
                    1.7314493656158447,
                    2.537790060043335,
                    2.5574567317962646,
                    1.9871183633804321,
                    0.3941040337085724,
                    0.1777687668800354,
                    0.35477036237716675,
                    0.19743561744689941,
                    0.19743561744689941,
                    0.02043387107551098,
                    -0.5892382860183716,
                    -0.7072393298149109,
                    -0.8055735230445862,
                    -0.7662398815155029,
                    -0.7662398815155029,
                    -0.7465730309486389,
                    -0.5892382860183716,
                    -0.5695714354515076,
                    -0.6285719275474548,
                    -0.5302377343177795,
                    -0.3729029893875122,
                    -0.29423561692237854,
                    -0.5105708837509155,
                    -0.5105708837509155,
                    -0.5499045848846436
                ],
                [
                    -0.6679056286811829,
                    0.2761029899120331,
                    0.8857751488685608,
                    1.0037761926651,
                    1.1611108779907227,
                    0.925108790397644,
                    0.8464414477348328,
                    2.4001221656799316,
                    2.518122911453247,
                    2.124786138534546,
                    0.25643613934516907,
                    -0.6875724792480469,
                    -0.8449072241783142,
                    -0.9235746264457703,
                    -0.9432414174079895,
                    -1.0022419691085815,
                    -0.8645740747451782,
                    -0.8252403736114502,
                    -0.8252403736114502,
                    -0.8055735230445862,
                    -0.7269061803817749,
                    -0.6482387781143188,
                    -0.6679056286811829,
                    -0.7072393298149109,
                    -0.6679056286811829,
                    -0.5892382860183716,
                    -0.5695714354515076,
                    -0.5302377343177795,
                    -0.5302377343177795,
                    -0.5695714354515076,
                    -0.5499045848846436,
                    -0.6482387781143188
                ],
                [
                    -0.6285719275474548,
                    -0.7072393298149109,
                    -0.41223669052124023,
                    0.5907724499702454,
                    1.1021103858947754,
                    0.25643613934516907,
                    1.298778772354126,
                    2.4984562397003174,
                    2.4001221656799316,
                    0.7087735533714294,
                    -0.5695714354515076,
                    -0.7662398815155029,
                    -0.7662398815155029,
                    -0.7465730309486389,
                    -0.7859066724777222,
                    -0.7662398815155029,
                    -0.7269061803817749,
                    -0.7662398815155029,
                    -0.8055735230445862,
                    -0.8645740747451782,
                    -0.7859066724777222,
                    -0.7269061803817749,
                    -0.7465730309486389,
                    -0.6679056286811829,
                    -0.6089051365852356,
                    -0.3925698399543762,
                    -0.3925698399543762,
                    -0.43190351128578186,
                    -0.41223669052124023,
                    -0.4712372124195099,
                    -0.5695714354515076,
                    -0.3925698399543762
                ],
                [
                    -0.2352350950241089,
                    -0.5695714354515076,
                    -0.7465730309486389,
                    -0.33356931805610657,
                    0.49243825674057007,
                    0.25643613934516907,
                    1.7707830667495728,
                    2.5574567317962646,
                    1.4757803678512573,
                    -0.5892382860183716,
                    -0.6285719275474548,
                    -0.6875724792480469,
                    -0.6482387781143188,
                    -0.6482387781143188,
                    -0.7859066724777222,
                    -0.8055735230445862,
                    -0.8055735230445862,
                    -0.8252403736114502,
                    -0.8449072241783142,
                    -0.7859066724777222,
                    -0.7269061803817749,
                    -0.6679056286811829,
                    -0.6089051365852356,
                    -0.5499045848846436,
                    -0.29423561692237854,
                    -0.2549019455909729,
                    -0.2745687663555145,
                    -0.29423561692237854,
                    -0.29423561692237854,
                    -0.3532361388206482,
                    0.0007670287159271538,
                    0.2761029899120331
                ],
                [
                    -0.17623455822467804,
                    -0.4712372124195099,
                    -0.7269061803817749,
                    -0.7859066724777222,
                    -0.5499045848846436,
                    0.4334377348423004,
                    2.0854525566101074,
                    2.4001221656799316,
                    0.3941040337085724,
                    -0.6089051365852356,
                    -0.7072393298149109,
                    -0.5695714354515076,
                    -0.6089051365852356,
                    -0.8055735230445862,
                    -0.8055735230445862,
                    -0.7859066724777222,
                    -0.7662398815155029,
                    -0.7859066724777222,
                    -0.7269061803817749,
                    -0.6875724792480469,
                    -0.6482387781143188,
                    -0.5105708837509155,
                    -0.33356931805610657,
                    -0.2549019455909729,
                    -0.3532361388206482,
                    -0.5105708837509155,
                    -0.5499045848846436,
                    -0.6285719275474548,
                    -0.29423561692237854,
                    0.13843508064746857,
                    0.2957698404788971,
                    0.040100716054439545
                ],
                [
                    -0.2549019455909729,
                    -0.4909040629863739,
                    -0.6679056286811829,
                    -0.7269061803817749,
                    -0.7859066724777222,
                    -0.33356931805610657,
                    1.8887841701507568,
                    2.0657856464385986,
                    0.05976755917072296,
                    -0.3729029893875122,
                    -0.5695714354515076,
                    -0.7072393298149109,
                    -0.5105708837509155,
                    -0.7072393298149109,
                    -0.8449072241783142,
                    -0.8055735230445862,
                    -0.7662398815155029,
                    -0.7072393298149109,
                    -0.6679056286811829,
                    -0.6679056286811829,
                    -0.5105708837509155,
                    -0.6089051365852356,
                    -0.5892382860183716,
                    -0.41223669052124023,
                    -0.43190351128578186,
                    -0.5892382860183716,
                    -0.7465730309486389,
                    -0.43190351128578186,
                    0.11876823753118515,
                    0.05976755917072296,
                    -0.4909040629863739,
                    -0.5302377343177795
                ],
                [
                    -0.29423561692237854,
                    -0.5105708837509155,
                    -0.6089051365852356,
                    -0.6875724792480469,
                    -0.6875724792480469,
                    -0.7662398815155029,
                    0.19743561744689941,
                    1.456113576889038,
                    -0.4515703618526459,
                    -0.5105708837509155,
                    -0.5695714354515076,
                    -0.5499045848846436,
                    -0.3925698399543762,
                    -0.4515703618526459,
                    -0.5302377343177795,
                    -0.7859066724777222,
                    -0.8645740747451782,
                    -0.8449072241783142,
                    -0.6875724792480469,
                    -0.6089051365852356,
                    -0.6089051365852356,
                    -0.5499045848846436,
                    -0.5892382860183716,
                    -0.6089051365852356,
                    -0.6482387781143188,
                    -0.5892382860183716,
                    -0.41223669052124023,
                    0.040100716054439545,
                    -0.2549019455909729,
                    -0.6482387781143188,
                    -1.2382441759109497,
                    -0.5892382860183716
                ],
                [
                    0.02043387107551098,
                    -0.4515703618526459,
                    -0.6875724792480469,
                    -0.6285719275474548,
                    -0.7072393298149109,
                    -0.6679056286811829,
                    -0.8645740747451782,
                    -0.31390246748924255,
                    -0.6679056286811829,
                    -0.9039077758789062,
                    -1.0219087600708008,
                    -0.8055735230445862,
                    -0.5892382860183716,
                    -0.4515703618526459,
                    -0.41223669052124023,
                    -0.6089051365852356,
                    -0.5695714354515076,
                    -0.4712372124195099,
                    -0.4712372124195099,
                    -0.5105708837509155,
                    -0.5499045848846436,
                    -0.5695714354515076,
                    -0.6875724792480469,
                    -0.7859066724777222,
                    -0.6285719275474548,
                    -0.21556824445724487,
                    0.1777687668800354,
                    0.15810193121433258,
                    -0.1369008719921112,
                    -0.5105708837509155,
                    -1.1595767736434937,
                    -0.7465730309486389
                ],
                [
                    -0.1369008719921112,
                    -0.41223669052124023,
                    -0.7465730309486389,
                    -0.6285719275474548,
                    -0.6482387781143188,
                    -0.6089051365852356,
                    -0.6875724792480469,
                    -0.8252403736114502,
                    -0.7465730309486389,
                    -1.0022419691085815,
                    -1.1005761623382568,
                    -0.9629082679748535,
                    -1.0219087600708008,
                    -0.9825751185417175,
                    -0.8449072241783142,
                    -0.7269061803817749,
                    -0.5499045848846436,
                    -0.43190351128578186,
                    -0.2745687663555145,
                    -0.07790034264326096,
                    -0.19590140879154205,
                    -0.5499045848846436,
                    -0.6875724792480469,
                    -0.6875724792480469,
                    -0.3532361388206482,
                    0.13843508064746857,
                    0.6497730016708374,
                    0.4334377348423004,
                    -0.15656772255897522,
                    -0.8055735230445862,
                    -0.8055735230445862,
                    -1.1595767736434937
                ],
                [
                    -0.31390246748924255,
                    -0.3532361388206482,
                    -0.6679056286811829,
                    -0.7269061803817749,
                    -0.6679056286811829,
                    -0.6089051365852356,
                    -0.7072393298149109,
                    -0.8252403736114502,
                    -0.8645740747451782,
                    -1.0612424612045288,
                    -1.1202430725097656,
                    -0.9825751185417175,
                    -1.0612424612045288,
                    -0.9825751185417175,
                    -1.1792436838150024,
                    -1.2775777578353882,
                    -1.0415756702423096,
                    -0.7072393298149109,
                    -0.3729029893875122,
                    -0.07790034264326096,
                    -0.2352350950241089,
                    -0.5302377343177795,
                    -0.5499045848846436,
                    -0.7072393298149109,
                    -0.2745687663555145,
                    0.15810193121433258,
                    0.45310458540916443,
                    0.23676930367946625,
                    -0.4712372124195099,
                    -0.9039077758789062,
                    -0.7662398815155029,
                    -1.1005761623382568
                ]
            ],
            [
                [
                    -1.2653887271881104,
                    -1.304409384727478,
                    -1.2263681888580322,
                    -1.1873475313186646,
                    -1.323919653892517,
                    -1.421471118927002,
                    -1.304409384727478,
                    -1.3434299230575562,
                    -1.3629401922225952,
                    -1.421471118927002,
                    -1.421471118927002,
                    -1.2068578004837036,
                    -1.2653887271881104,
                    -1.421471118927002,
                    -1.3434299230575562,
                    -1.3629401922225952,
                    -1.440981388092041,
                    -1.4800019264221191,
                    -1.46049165725708,
                    -1.3824505805969238,
                    -1.3629401922225952,
                    -1.3434299230575562,
                    -1.3434299230575562,
                    -1.3824505805969238,
                    -1.3629401922225952,
                    -1.46049165725708,
                    -1.3824505805969238,
                    -1.421471118927002,
                    -1.4800019264221191,
                    -1.5190225839614868,
                    -1.5190225839614868,
                    -1.577553391456604
                ],
                [
                    -1.2263681888580322,
                    -1.440981388092041,
                    -1.3434299230575562,
                    -1.1288167238235474,
                    -1.2653887271881104,
                    -1.3824505805969238,
                    -1.304409384727478,
                    -1.3434299230575562,
                    -1.323919653892517,
                    -1.4800019264221191,
                    -1.421471118927002,
                    -1.1678372621536255,
                    -1.2068578004837036,
                    -1.421471118927002,
                    -1.440981388092041,
                    -1.577553391456604,
                    -1.6360843181610107,
                    -1.577553391456604,
                    -1.421471118927002,
                    -1.2458784580230713,
                    -1.1873475313186646,
                    -1.1483269929885864,
                    -1.2068578004837036,
                    -1.284899115562439,
                    -1.2458784580230713,
                    -1.323919653892517,
                    -1.3434299230575562,
                    -1.4800019264221191,
                    -1.558043122291565,
                    -1.6165740489959717,
                    -1.597063660621643,
                    -1.558043122291565
                ],
                [
                    -1.304409384727478,
                    -1.577553391456604,
                    -1.5190225839614868,
                    -1.284899115562439,
                    -1.401960849761963,
                    -1.3629401922225952,
                    -1.3434299230575562,
                    -1.3434299230575562,
                    -1.3824505805969238,
                    -1.3824505805969238,
                    -1.284899115562439,
                    -1.1093063354492188,
                    -1.2263681888580322,
                    -1.4800019264221191,
                    -1.4995123147964478,
                    -1.5385328531265259,
                    -1.46049165725708,
                    -1.304409384727478,
                    -1.1678372621536255,
                    -1.2653887271881104,
                    -1.2068578004837036,
                    -1.2458784580230713,
                    -1.304409384727478,
                    -1.2458784580230713,
                    -1.284899115562439,
                    -1.1483269929885864,
                    -1.2263681888580322,
                    -1.46049165725708,
                    -1.5385328531265259,
                    -1.558043122291565,
                    -1.558043122291565,
                    -1.577553391456604
                ],
                [
                    -1.440981388092041,
                    -1.597063660621643,
                    -1.6165740489959717,
                    -1.3629401922225952,
                    -1.3824505805969238,
                    -1.323919653892517,
                    -1.284899115562439,
                    -1.284899115562439,
                    -1.3629401922225952,
                    -1.3434299230575562,
                    -1.1093063354492188,
                    -0.3679153025150299,
                    -0.7581210732460022,
                    -1.421471118927002,
                    -1.304409384727478,
                    -1.1678372621536255,
                    -1.0897960662841797,
                    -0.914203405380249,
                    -1.304409384727478,
                    -0.9532240033149719,
                    -0.7386108040809631,
                    -0.5825284719467163,
                    -0.9337137341499329,
                    -1.2458784580230713,
                    -1.2068578004837036,
                    -1.46049165725708,
                    -1.3434299230575562,
                    -1.323919653892517,
                    -1.3824505805969238,
                    -1.46049165725708,
                    -1.46049165725708,
                    -1.5190225839614868
                ],
                [
                    -1.421471118927002,
                    -1.284899115562439,
                    -1.2653887271881104,
                    -1.304409384727478,
                    -1.3824505805969238,
                    -1.440981388092041,
                    -1.304409384727478,
                    -1.3629401922225952,
                    -1.421471118927002,
                    -1.401960849761963,
                    -1.0702857971191406,
                    0.978294849395752,
                    -0.13379181921482086,
                    -1.1288167238235474,
                    -1.0507755279541016,
                    -0.836162269115448,
                    -1.2458784580230713,
                    -1.6165740489959717,
                    -1.1288167238235474,
                    -0.30938443541526794,
                    -0.05575065314769745,
                    0.08082137256860733,
                    -0.17281238734722137,
                    -0.4069358706474304,
                    -0.914203405380249,
                    -0.8556725382804871,
                    -1.304409384727478,
                    -1.3434299230575562,
                    -1.284899115562439,
                    -1.323919653892517,
                    -1.5190225839614868,
                    -1.5190225839614868
                ],
                [
                    -1.1678372621536255,
                    -0.972734272480011,
                    -1.1093063354492188,
                    -1.1873475313186646,
                    -1.3629401922225952,
                    -1.46049165725708,
                    -1.421471118927002,
                    -1.421471118927002,
                    -1.4995123147964478,
                    -1.46049165725708,
                    -1.401960849761963,
                    -0.5630182027816772,
                    -0.6995902061462402,
                    -1.0897960662841797,
                    -1.3824505805969238,
                    -1.6165740489959717,
                    -1.3824505805969238,
                    -1.3434299230575562,
                    -0.7386108040809631,
                    -0.0752609446644783,
                    0.11984195560216904,
                    0.15886253118515015,
                    0.04180079698562622,
                    -0.34840500354766846,
                    -0.328894704580307,
                    -0.5435079336166382,
                    -1.304409384727478,
                    -1.4995123147964478,
                    -1.2653887271881104,
                    -1.0897960662841797,
                    -1.3629401922225952,
                    -1.440981388092041
                ],
                [
                    -1.1093063354492188,
                    -0.6605696678161621,
                    -1.8897180557250977,
                    -1.6751048564910889,
                    -1.284899115562439,
                    -1.3824505805969238,
                    -1.440981388092041,
                    -1.3824505805969238,
                    -1.401960849761963,
                    -1.4995123147964478,
                    -1.46049165725708,
                    -1.2068578004837036,
                    -1.0702857971191406,
                    -0.7581210732460022,
                    -0.8556725382804871,
                    -1.1093063354492188,
                    -0.8166519403457642,
                    -0.972734272480011,
                    -0.777631402015686,
                    0.1393522471189499,
                    0.3539655804634094,
                    -0.11428152769804001,
                    -0.4654667377471924,
                    -0.38742557168006897,
                    -0.21183297038078308,
                    -0.7191005349159241,
                    -0.8751828074455261,
                    -1.46049165725708,
                    -1.5190225839614868,
                    -1.0897960662841797,
                    -1.284899115562439,
                    -1.46049165725708
                ],
                [
                    -0.4654667377471924,
                    -0.42644616961479187,
                    -1.4800019264221191,
                    -1.421471118927002,
                    -1.1288167238235474,
                    -1.401960849761963,
                    -1.5190225839614868,
                    -1.46049165725708,
                    -1.2653887271881104,
                    -1.2263681888580322,
                    -1.2263681888580322,
                    -1.2653887271881104,
                    -0.7191005349159241,
                    -0.13379181921482086,
                    -0.4069358706474304,
                    -0.6800799369812012,
                    -0.5044873356819153,
                    -0.6215490698814392,
                    -0.8751828074455261,
                    -0.13379181921482086,
                    0.5100479125976562,
                    -0.036240365356206894,
                    -0.6410593390464783,
                    -0.5044873356819153,
                    -0.5825284719467163,
                    -0.777631402015686,
                    -1.0897960662841797,
                    -1.2653887271881104,
                    -1.597063660621643,
                    -1.2458784580230713,
                    -1.2263681888580322,
                    -1.46049165725708
                ],
                [
                    0.5880890488624573,
                    -0.17281238734722137,
                    -1.0702857971191406,
                    -0.01673007383942604,
                    -0.6215490698814392,
                    -1.3824505805969238,
                    -1.421471118927002,
                    -1.2458784580230713,
                    -0.9337137341499329,
                    -0.3679153025150299,
                    -1.0702857971191406,
                    -0.6995902061462402,
                    0.1393522471189499,
                    0.275924414396286,
                    -0.250853568315506,
                    -0.777631402015686,
                    -0.7191005349159241,
                    -0.6215490698814392,
                    -0.7971416711807251,
                    -1.0312652587890625,
                    -0.036240365356206894,
                    0.1783728301525116,
                    -0.4069358706474304,
                    -0.8556725382804871,
                    -0.8751828074455261,
                    -0.7386108040809631,
                    -0.914203405380249,
                    -1.1873475313186646,
                    -1.694615125656128,
                    -1.5385328531265259,
                    -1.0702857971191406,
                    -1.3434299230575562
                ],
                [
                    0.9587845802307129,
                    0.5685787796974182,
                    -0.17281238734722137,
                    0.6856405138969421,
                    -0.036240365356206894,
                    -1.2263681888580322,
                    -1.304409384727478,
                    -1.0507755279541016,
                    0.6271096467971802,
                    1.6416447162628174,
                    1.01731538772583,
                    0.10033166408538818,
                    0.6075993776321411,
                    0.2173934131860733,
                    -0.13379181921482086,
                    -0.6800799369812012,
                    -0.6800799369812012,
                    -0.836162269115448,
                    -1.1873475313186646,
                    -1.0897960662841797,
                    -0.036240365356206894,
                    0.15886253118515015,
                    0.0027802155818790197,
                    -0.48497703671455383,
                    -0.777631402015686,
                    -0.6995902061462402,
                    -0.6995902061462402,
                    -0.836162269115448,
                    -1.3824505805969238,
                    -1.9287385940551758,
                    -1.3629401922225952,
                    -1.1093063354492188
                ],
                [
                    1.1929080486297607,
                    0.15886253118515015,
                    0.861233115196228,
                    1.0563360452651978,
                    0.15886253118515015,
                    -1.2458784580230713,
                    -1.2263681888580322,
                    -1.304409384727478,
                    1.2709492444992065,
                    2.1879327297210693,
                    1.4465417861938477,
                    0.334455281496048,
                    0.8027022480964661,
                    0.3539655804634094,
                    -0.19232268631458282,
                    -0.19232268631458282,
                    -0.8751828074455261,
                    -0.7191005349159241,
                    -1.440981388092041,
                    -0.7191005349159241,
                    0.783191978931427,
                    0.4515170454978943,
                    0.47102731466293335,
                    -0.42644616961479187,
                    -0.7191005349159241,
                    -0.34840500354766846,
                    -0.6800799369812012,
                    -0.7971416711807251,
                    -1.0702857971191406,
                    -1.577553391456604,
                    -1.6165740489959717,
                    -1.323919653892517
                ],
                [
                    1.4660521745681763,
                    0.04180079698562622,
                    0.7636816501617432,
                    1.2514389753341675,
                    0.43200674653053284,
                    -1.0702857971191406,
                    -1.1483269929885864,
                    -1.3629401922225952,
                    -0.6605696678161621,
                    1.4465417861938477,
                    0.978294849395752,
                    0.3734758794307709,
                    0.724661111831665,
                    0.8807434439659119,
                    -0.15330210328102112,
                    -0.3679153025150299,
                    -0.48497703671455383,
                    -0.6800799369812012,
                    -1.558043122291565,
                    -0.01673007383942604,
                    1.5245829820632935,
                    0.5490685105323792,
                    0.3149450123310089,
                    -0.6215490698814392,
                    -0.7581210732460022,
                    -0.5044873356819153,
                    -0.38742557168006897,
                    -0.6410593390464783,
                    -0.6995902061462402,
                    -1.1483269929885864,
                    -1.284899115562439,
                    -1.7141255140304565
                ],
                [
                    1.5636035203933716,
                    -0.17281238734722137,
                    0.5880890488624573,
                    1.3880109786987305,
                    0.3734758794307709,
                    -0.89469313621521,
                    -1.1873475313186646,
                    -1.304409384727478,
                    -1.3629401922225952,
                    0.7441713809967041,
                    0.23690369725227356,
                    -0.38742557168006897,
                    0.6661302447319031,
                    1.3489903211593628,
                    0.29543471336364746,
                    -0.30938443541526794,
                    -0.17281238734722137,
                    -0.09477123618125916,
                    -1.304409384727478,
                    0.5100479125976562,
                    1.2514389753341675,
                    0.5100479125976562,
                    -0.05575065314769745,
                    -0.6020388007164001,
                    -0.6800799369812012,
                    -0.6605696678161621,
                    -0.5630182027816772,
                    -0.6410593390464783,
                    -0.48497703671455383,
                    -0.7971416711807251,
                    -0.972734272480011,
                    -1.7531460523605347
                ],
                [
                    1.5440932512283325,
                    -0.21183297038078308,
                    0.9587845802307129,
                    1.5245829820632935,
                    -0.30938443541526794,
                    -0.9337137341499329,
                    -1.0897960662841797,
                    -1.2458784580230713,
                    -1.46049165725708,
                    0.11984195560216904,
                    -0.21183297038078308,
                    0.256413996219635,
                    0.8027022480964661,
                    1.6806652545928955,
                    0.841722846031189,
                    0.061311084777116776,
                    -0.13379181921482086,
                    -0.09477123618125916,
                    -0.89469313621521,
                    0.6466199159622192,
                    1.1733977794647217,
                    0.43200674653053284,
                    -0.19232268631458282,
                    -0.6605696678161621,
                    -0.7386108040809631,
                    -0.8556725382804871,
                    -0.8166519403457642,
                    -0.38742557168006897,
                    -0.2898741364479065,
                    -0.6410593390464783,
                    -0.8751828074455261,
                    -1.558043122291565
                ],
                [
                    1.6026241779327393,
                    -0.036240365356206894,
                    1.1343772411346436,
                    1.4465417861938477,
                    -0.09477123618125916,
                    -0.914203405380249,
                    -1.0117549896240234,
                    -1.1483269929885864,
                    -1.558043122291565,
                    -0.5044873356819153,
                    -0.21183297038078308,
                    1.0758463144302368,
                    1.0758463144302368,
                    0.8807434439659119,
                    0.5100479125976562,
                    0.3929861783981323,
                    0.2173934131860733,
                    -0.3679153025150299,
                    -0.8556725382804871,
                    0.6856405138969421,
                    1.0953565835952759,
                    0.256413996219635,
                    0.15886253118515015,
                    -0.17281238734722137,
                    -0.6020388007164001,
                    -0.4459564685821533,
                    -0.4654667377471924,
                    -0.19232268631458282,
                    -0.05575065314769745,
                    -0.6605696678161621,
                    -1.1873475313186646,
                    -1.304409384727478
                ],
                [
                    1.6221344470977783,
                    0.43200674653053284,
                    1.1733977794647217,
                    1.3099697828292847,
                    0.5490685105323792,
                    -0.7191005349159241,
                    -0.5044873356819153,
                    -0.7191005349159241,
                    -1.2068578004837036,
                    -0.4069358706474304,
                    0.04180079698562622,
                    1.8952784538269043,
                    2.2659740447998047,
                    0.4515170454978943,
                    0.3149450123310089,
                    -0.036240365356206894,
                    -0.250853568315506,
                    -0.3679153025150299,
                    -0.7581210732460022,
                    0.08082137256860733,
                    0.6271096467971802,
                    0.47102731466293335,
                    -0.250853568315506,
                    -0.6605696678161621,
                    -0.89469313621521,
                    -0.5239976048469543,
                    -0.2898741364479065,
                    -0.2898741364479065,
                    -0.4069358706474304,
                    -1.1678372621536255,
                    -1.284899115562439,
                    -1.284899115562439
                ],
                [
                    1.7587064504623413,
                    0.9002537131309509,
                    1.2514389753341675,
                    1.4465417861938477,
                    1.1343772411346436,
                    -0.4654667377471924,
                    0.23690369725227356,
                    -0.01673007383942604,
                    -0.6215490698814392,
                    -1.4995123147964478,
                    0.3734758794307709,
                    0.8027022480964661,
                    0.5295581817626953,
                    0.061311084777116776,
                    -0.5044873356819153,
                    -0.4654667377471924,
                    -0.42644616961479187,
                    -0.5239976048469543,
                    -1.0897960662841797,
                    -0.19232268631458282,
                    -0.09477123618125916,
                    0.23690369725227356,
                    0.08082137256860733,
                    -0.328894704580307,
                    -0.8166519403457642,
                    -0.7191005349159241,
                    -0.38742557168006897,
                    -0.6215490698814392,
                    -1.1483269929885864,
                    -1.3434299230575562,
                    -1.1483269929885864,
                    -1.323919653892517
                ],
                [
                    1.97331964969635,
                    1.2904595136642456,
                    1.3685007095336914,
                    1.5636035203933716,
                    1.4075212478637695,
                    -0.17281238734722137,
                    -0.23134326934814453,
                    0.6075993776321411,
                    -0.05575065314769745,
                    -1.0312652587890625,
                    -0.17281238734722137,
                    -0.3679153025150299,
                    -0.48497703671455383,
                    -0.48497703671455383,
                    -0.7971416711807251,
                    -0.30938443541526794,
                    -0.5044873356819153,
                    -0.3679153025150299,
                    -0.23134326934814453,
                    -0.972734272480011,
                    -1.597063660621643,
                    -0.17281238734722137,
                    0.022290505468845367,
                    -1.0312652587890625,
                    -1.2263681888580322,
                    -1.1873475313186646,
                    -0.9532240033149719,
                    -0.6995902061462402,
                    -0.972734272480011,
                    -0.89469313621521,
                    -0.972734272480011,
                    -1.1678372621536255
                ],
                [
                    1.7782167196273804,
                    1.5245829820632935,
                    1.4660521745681763,
                    1.5440932512283325,
                    1.4465417861938477,
                    0.3734758794307709,
                    -0.34840500354766846,
                    0.5685787796974182,
                    0.5295581817626953,
                    -0.05575065314769745,
                    -0.6605696678161621,
                    -1.1483269929885864,
                    -0.11428152769804001,
                    -0.34840500354766846,
                    -0.27036383748054504,
                    0.3734758794307709,
                    -0.4069358706474304,
                    -0.4069358706474304,
                    0.11984195560216904,
                    -0.4069358706474304,
                    -0.42644616961479187,
                    -0.5435079336166382,
                    -1.0897960662841797,
                    -1.2068578004837036,
                    -1.46049165725708,
                    -1.0507755279541016,
                    -1.440981388092041,
                    -1.0702857971191406,
                    -1.0117549896240234,
                    -1.1678372621536255,
                    -1.3434299230575562,
                    -1.323919653892517
                ],
                [
                    1.2904595136642456,
                    1.4270315170288086,
                    1.3099697828292847,
                    1.3880109786987305,
                    1.3685007095336914,
                    0.7441713809967041,
                    -0.2898741364479065,
                    0.3539655804634094,
                    0.3149450123310089,
                    0.4124964475631714,
                    0.23690369725227356,
                    -1.2263681888580322,
                    -0.11428152769804001,
                    -0.5435079336166382,
                    0.1783728301525116,
                    1.0563360452651978,
                    0.08082137256860733,
                    -0.7971416711807251,
                    -0.21183297038078308,
                    -0.17281238734722137,
                    0.08082137256860733,
                    -0.6995902061462402,
                    -1.3629401922225952,
                    -1.2458784580230713,
                    -1.2068578004837036,
                    -0.4069358706474304,
                    -1.0507755279541016,
                    -0.89469313621521,
                    -0.972734272480011,
                    -1.2068578004837036,
                    -1.2458784580230713,
                    -1.323919653892517
                ],
                [
                    0.6271096467971802,
                    1.4270315170288086,
                    1.1929080486297607,
                    1.1343772411346436,
                    1.2904595136642456,
                    0.9002537131309509,
                    -0.05575065314769745,
                    0.6271096467971802,
                    1.3880109786987305,
                    -0.05575065314769745,
                    -0.5239976048469543,
                    -0.7971416711807251,
                    -0.5435079336166382,
                    0.04180079698562622,
                    1.1538875102996826,
                    1.2319285869598389,
                    0.6661302447319031,
                    -0.250853568315506,
                    -0.9337137341499329,
                    -0.9922446608543396,
                    -1.1093063354492188,
                    -1.1678372621536255,
                    -1.2263681888580322,
                    -1.421471118927002,
                    -0.8751828074455261,
                    -0.6020388007164001,
                    -0.7581210732460022,
                    -0.6215490698814392,
                    -0.7386108040809631,
                    -1.0312652587890625,
                    -0.8751828074455261,
                    -0.9922446608543396
                ],
                [
                    0.19788311421871185,
                    1.6806652545928955,
                    1.2124183177947998,
                    1.0563360452651978,
                    1.2709492444992065,
                    0.6466199159622192,
                    -0.4459564685821533,
                    0.8807434439659119,
                    2.656179904937744,
                    2.1684224605560303,
                    0.5880890488624573,
                    0.6466199159622192,
                    0.978294849395752,
                    1.5245829820632935,
                    1.836747646331787,
                    1.6221344470977783,
                    1.3099697828292847,
                    0.5685787796974182,
                    -0.09477123618125916,
                    -1.0117549896240234,
                    -1.0897960662841797,
                    -0.89469313621521,
                    -0.5239976048469543,
                    -0.23134326934814453,
                    -0.0752609446644783,
                    -0.05575065314769745,
                    0.15886253118515015,
                    0.10033166408538818,
                    0.11984195560216904,
                    -0.036240365356206894,
                    -0.036240365356206894,
                    0.022290505468845367
                ],
                [
                    0.3734758794307709,
                    1.934299111366272,
                    1.5245829820632935,
                    1.2319285869598389,
                    1.3294800519943237,
                    0.7051507830619812,
                    -0.01673007383942604,
                    1.8562579154968262,
                    2.597648859024048,
                    2.6952004432678223,
                    2.304994583129883,
                    0.841722846031189,
                    0.6856405138969421,
                    0.9392743110656738,
                    0.8222125172615051,
                    0.7441713809967041,
                    0.6661302447319031,
                    0.10033166408538818,
                    -0.19232268631458282,
                    -0.250853568315506,
                    -0.05575065314769745,
                    -0.0752609446644783,
                    0.022290505468845367,
                    0.2173934131860733,
                    0.334455281496048,
                    0.3149450123310089,
                    0.4124964475631714,
                    0.5295581817626953,
                    0.5490685105323792,
                    0.3539655804634094,
                    0.4515170454978943,
                    0.3539655804634094
                ],
                [
                    0.4124964475631714,
                    1.0563360452651978,
                    1.4465417861938477,
                    1.4465417861938477,
                    1.5245829820632935,
                    1.1733977794647217,
                    0.978294849395752,
                    2.402545928955078,
                    2.4805872440338135,
                    2.2269535064697266,
                    0.7636816501617432,
                    -0.05575065314769745,
                    -0.17281238734722137,
                    -0.17281238734722137,
                    -0.13379181921482086,
                    -0.250853568315506,
                    0.022290505468845367,
                    0.11984195560216904,
                    -0.01673007383942604,
                    0.04180079698562622,
                    0.2173934131860733,
                    0.2173934131860733,
                    0.23690369725227356,
                    0.275924414396286,
                    0.3539655804634094,
                    0.4905376136302948,
                    0.4515170454978943,
                    0.4515170454978943,
                    0.4124964475631714,
                    0.3929861783981323,
                    0.4905376136302948,
                    0.3734758794307709
                ],
                [
                    0.5295581817626953,
                    0.3149450123310089,
                    0.3929861783981323,
                    1.2124183177947998,
                    1.5050727128982544,
                    0.4515170454978943,
                    1.3099697828292847,
                    2.5000975131988525,
                    2.5586283206939697,
                    1.1929080486297607,
                    0.256413996219635,
                    0.08082137256860733,
                    0.10033166408538818,
                    0.1393522471189499,
                    0.11984195560216904,
                    0.04180079698562622,
                    0.061311084777116776,
                    0.061311084777116776,
                    0.022290505468845367,
                    -0.01673007383942604,
                    0.11984195560216904,
                    0.2173934131860733,
                    0.2173934131860733,
                    0.3149450123310089,
                    0.3929861783981323,
                    0.6075993776321411,
                    0.5490685105323792,
                    0.5490685105323792,
                    0.6271096467971802,
                    0.5880890488624573,
                    0.5100479125976562,
                    0.6856405138969421
                ],
                [
                    0.9392743110656738,
                    0.5100479125976562,
                    0.19788311421871185,
                    0.43200674653053284,
                    1.0368257761001587,
                    0.5685787796974182,
                    1.8562579154968262,
                    2.636669635772705,
                    1.7782167196273804,
                    0.08082137256860733,
                    0.275924414396286,
                    0.2173934131860733,
                    0.256413996219635,
                    0.256413996219635,
                    0.1393522471189499,
                    0.022290505468845367,
                    -0.01673007383942604,
                    -0.036240365356206894,
                    -0.01673007383942604,
                    0.061311084777116776,
                    0.1783728301525116,
                    0.334455281496048,
                    0.3929861783981323,
                    0.47102731466293335,
                    0.7051507830619812,
                    0.7441713809967041,
                    0.6466199159622192,
                    0.6856405138969421,
                    0.783191978931427,
                    0.7441713809967041,
                    1.0368257761001587,
                    1.3294800519943237
                ],
                [
                    0.9978051781654358,
                    0.6466199159622192,
                    0.3149450123310089,
                    0.15886253118515015,
                    0.23690369725227356,
                    0.978294849395752,
                    2.344015121459961,
                    2.597648859024048,
                    0.7636816501617432,
                    0.0027802155818790197,
                    0.1783728301525116,
                    0.334455281496048,
                    0.29543471336364746,
                    0.10033166408538818,
                    0.10033166408538818,
                    0.10033166408538818,
                    0.10033166408538818,
                    0.10033166408538818,
                    0.1783728301525116,
                    0.256413996219635,
                    0.334455281496048,
                    0.5295581817626953,
                    0.7051507830619812,
                    0.783191978931427,
                    0.7051507830619812,
                    0.5295581817626953,
                    0.5100479125976562,
                    0.47102731466293335,
                    0.861233115196228,
                    1.2514389753341675,
                    1.3294800519943237,
                    1.0758463144302368
                ],
                [
                    0.9392743110656738,
                    0.6856405138969421,
                    0.47102731466293335,
                    0.3734758794307709,
                    0.23690369725227356,
                    0.47102731466293335,
                    2.324504852294922,
                    2.344015121459961,
                    0.5100479125976562,
                    0.23690369725227356,
                    0.29543471336364746,
                    0.19788311421871185,
                    0.3734758794307709,
                    0.1783728301525116,
                    0.04180079698562622,
                    0.10033166408538818,
                    0.15886253118515015,
                    0.23690369725227356,
                    0.3149450123310089,
                    0.3539655804634094,
                    0.5100479125976562,
                    0.47102731466293335,
                    0.4905376136302948,
                    0.6661302447319031,
                    0.6466199159622192,
                    0.4905376136302948,
                    0.3734758794307709,
                    0.7636816501617432,
                    1.3294800519943237,
                    1.2124183177947998,
                    0.5490685105323792,
                    0.4905376136302948
                ],
                [
                    0.91976398229599,
                    0.6466199159622192,
                    0.5685787796974182,
                    0.5295581817626953,
                    0.47102731466293335,
                    0.2173934131860733,
                    0.8807434439659119,
                    1.8952784538269043,
                    0.10033166408538818,
                    0.1393522471189499,
                    0.275924414396286,
                    0.3149450123310089,
                    0.4905376136302948,
                    0.4124964475631714,
                    0.334455281496048,
                    0.11984195560216904,
                    0.08082137256860733,
                    0.11984195560216904,
                    0.3149450123310089,
                    0.4124964475631714,
                    0.43200674653053284,
                    0.4905376136302948,
                    0.47102731466293335,
                    0.43200674653053284,
                    0.4124964475631714,
                    0.47102731466293335,
                    0.724661111831665,
                    1.2514389753341675,
                    0.978294849395752,
                    0.5100479125976562,
                    -0.21183297038078308,
                    0.43200674653053284
                ],
                [
                    1.2319285869598389,
                    0.6661302447319031,
                    0.4515170454978943,
                    0.6271096467971802,
                    0.4905376136302948,
                    0.3539655804634094,
                    -0.01673007383942604,
                    0.3734758794307709,
                    0.0027802155818790197,
                    -0.17281238734722137,
                    -0.17281238734722137,
                    0.061311084777116776,
                    0.275924414396286,
                    0.4124964475631714,
                    0.4515170454978943,
                    0.275924414396286,
                    0.334455281496048,
                    0.4515170454978943,
                    0.4905376136302948,
                    0.47102731466293335,
                    0.4515170454978943,
                    0.43200674653053284,
                    0.334455281496048,
                    0.2173934131860733,
                    0.3734758794307709,
                    0.783191978931427,
                    1.2709492444992065,
                    1.3099697828292847,
                    1.0563360452651978,
                    0.6271096467971802,
                    -0.11428152769804001,
                    0.256413996219635
                ],
                [
                    1.0563360452651978,
                    0.6661302447319031,
                    0.3539655804634094,
                    0.5685787796974182,
                    0.4905376136302948,
                    0.3929861783981323,
                    0.2173934131860733,
                    -0.036240365356206894,
                    0.022290505468845367,
                    -0.19232268631458282,
                    -0.23134326934814453,
                    -0.09477123618125916,
                    -0.15330210328102112,
                    -0.11428152769804001,
                    0.022290505468845367,
                    0.11984195560216904,
                    0.275924414396286,
                    0.4124964475631714,
                    0.5880890488624573,
                    0.8222125172615051,
                    0.7441713809967041,
                    0.3929861783981323,
                    0.256413996219635,
                    0.256413996219635,
                    0.5880890488624573,
                    1.0953565835952759,
                    1.6221344470977783,
                    1.4855624437332153,
                    0.978294849395752,
                    0.3149450123310089,
                    0.23690369725227356,
                    -0.13379181921482086
                ],
                [
                    0.9002537131309509,
                    0.6856405138969421,
                    0.3539655804634094,
                    0.3929861783981323,
                    0.3929861783981323,
                    0.3539655804634094,
                    0.1783728301525116,
                    0.022290505468845367,
                    0.0027802155818790197,
                    -0.17281238734722137,
                    -0.250853568315506,
                    -0.11428152769804001,
                    -0.19232268631458282,
                    -0.11428152769804001,
                    -0.30938443541526794,
                    -0.48497703671455383,
                    -0.27036383748054504,
                    0.08082137256860733,
                    0.4515170454978943,
                    0.7441713809967041,
                    0.6075993776321411,
                    0.334455281496048,
                    0.3149450123310089,
                    0.1783728301525116,
                    0.6075993776321411,
                    1.0368257761001587,
                    1.3294800519943237,
                    1.1929080486297607,
                    0.6075993776321411,
                    0.19788311421871185,
                    0.29543471336364746,
                    -0.0752609446644783
                ]
            ]
        ]
    ]
}
docs/AKS-HCI/notebooks/distributed-cifar10/config.json METASEP
{
    "subscription_id": "<sub_id>",
    "resource_group": "<resource_group_name>",
    "workspace_name": "<AML_workspace_name>"
}
docs/AKS-HCI/notebooks/distributed-cifar10/README.md METASEP
# Distributed Training on AKS-HCI and on-premise NFS Server

These sample notebooks guide you through a distributed training workload that trains an ML model on [CIFAR10](https://www.cs.toronto.edu/~kriz/cifar.html) dataset hosted on on-premise NFS Server. We offer two notebooks taking advantage of the most popular deep learning frameworks PyTorch.

## Notebooks

* [Distributed PyTorch Training with DistributedDataParallel](distributed-pytorch-cifar10.ipynb) (Image Classification)

  This notebook demonstrates an example of Image classification with PyTorch, including,
  * Distributed training using PyTorch with 2 worker nodes on AKS-HCI cluster and the training data is stored in on-premise NFS Server
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model
docs/AKS-HCI/nfs/images/verify-nfs-vm.png METASEP

docs/AKS-HCI/nfs/images/verify-nfs-training.png METASEP

docs/AKS-HCI/nfs/images/ufw-ssh.png METASEP

docs/AKS-HCI/nfs/images/ufw-nfs.png METASEP

docs/AKS-HCI/nfs/images/ubuntu-vm-created.png METASEP

docs/AKS-HCI/nfs/images/ssh-status.png METASEP

docs/AKS-HCI/nfs/images/reset-network.png METASEP

docs/AKS-HCI/nfs/images/create-ubuntu-vm.png METASEP

docs/AKS-HCI/nfs/images/configure-public-ip.png METASEP

docs/AKS-HCI/cli/mnist/training.yml METASEP
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
code: 
  local_path: mnist_script
command: >-
  python train.py
  --data-folder <your nfs mounting point on training pods>/mnist
  --regularization 0.5
environment: 
  name: tutorial-env
  version: 1
  path: .
  conda_file: file:./train_env/conda.yml
  docker:
    image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210806.v1
compute:
  target: azureml:<your compute target name>
  instance_type: <your instance type>
experiment_name: mnist-demo
description: Image Classification Using Scikit-learn
docs/AKS-HCI/cli/mnist/sample-request.json METASEP
{"data": [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.11372549019607843, 0.6862745098039216, 0.996078431372549, 0.9921568627450981, 0.9921568627450981, 0.9921568627450981, 0.47843137254901963, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.03137254901960784, 0.7725490196078432, 0.9882352941176471, 0.9921568627450981, 0.9882352941176471, 0.9882352941176471, 0.9882352941176471, 0.9882352941176471, 0.6235294117647059, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.15294117647058825, 0.4980392156862745, 0.8862745098039215, 0.9882352941176471, 0.9882352941176471, 0.9803921568627451, 0.9333333333333333, 0.9882352941176471, 0.9882352941176471, 0.9882352941176471, 0.9098039215686274, 0.12549019607843137, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2784313725490196, 0.9921568627450981, 0.9882352941176471, 0.9882352941176471, 0.9254901960784314, 0.7411764705882353, 0.45098039215686275, 0.10980392156862745, 0.9372549019607843, 0.9882352941176471, 0.9882352941176471, 0.9921568627450981, 0.24705882352941178, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.10588235294117647, 0.8274509803921568, 0.9921568627450981, 0.9882352941176471, 0.6078431372549019, 0.43529411764705883, 0.0, 0.0, 0.4549019607843137, 0.9764705882352941, 0.9882352941176471, 0.6431372549019608, 0.8549019607843137, 0.043137254901960784, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.49411764705882355, 0.9921568627450981, 0.996078431372549, 0.592156862745098, 0.0, 0.0, 0.0, 0.03137254901960784, 0.788235294117647, 0.9921568627450981, 0.8470588235294118, 0.07058823529411765, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6627450980392157, 0.9882352941176471, 0.7294117647058823, 0.06274509803921569, 0.0, 0.0, 0.0, 0.3058823529411765, 0.9882352941176471, 0.8235294117647058, 0.3215686274509804, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6627450980392157, 0.9882352941176471, 0.6196078431372549, 0.0, 0.0, 0.0, 0.21176470588235294, 0.9607843137254902, 0.9882352941176471, 0.9137254901960784, 0.16470588235294117, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.38823529411764707, 0.9882352941176471, 0.9372549019607843, 0.5215686274509804, 0.023529411764705882, 0.0, 0.5176470588235295, 0.9921568627450981, 0.7686274509803922, 0.6745098039215687, 0.10980392156862745, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.043137254901960784, 0.6823529411764706, 0.9921568627450981, 0.9882352941176471, 0.596078431372549, 0.3843137254901961, 0.9647058823529412, 0.9921568627450981, 0.6588235294117647, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.48627450980392156, 0.9529411764705882, 0.9921568627450981, 0.9921568627450981, 0.9921568627450981, 0.9019607843137255, 0.10588235294117647, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.18823529411764706, 0.9294117647058824, 0.9882352941176471, 0.9882352941176471, 0.8274509803921568, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.03137254901960784, 0.9176470588235294, 0.9882352941176471, 0.9882352941176471, 0.9803921568627451, 0.7725490196078432, 0.5294117647058824, 0.6313725490196078, 0.2901960784313726, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4392156862745098, 0.9882352941176471, 0.9882352941176471, 0.7803921568627451, 0.7843137254901961, 0.9882352941176471, 0.9882352941176471, 0.7137254901960784, 0.44313725490196076, 0.10588235294117647, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1411764705882353, 0.9490196078431372, 0.9882352941176471, 0.4392156862745098, 0.027450980392156862, 0.027450980392156862, 0.33725490196078434, 0.5411764705882353, 0.8509803921568627, 0.9882352941176471, 0.5882352941176471, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.16862745098039217, 0.9921568627450981, 0.9803921568627451, 0.27450980392156865, 0.0, 0.0, 0.0, 0.0, 0.10588235294117647, 0.5882352941176471, 1.0, 0.49019607843137253, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.16862745098039217, 0.9882352941176471, 0.9058823529411765, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1411764705882353, 0.9921568627450981, 0.6588235294117647, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5450980392156862, 0.9882352941176471, 0.9137254901960784, 0.08627450980392157, 0.050980392156862744, 0.0, 0.06274509803921569, 0.12156862745098039, 0.6, 0.9450980392156862, 0.9803921568627451, 0.4666666666666667, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3058823529411765, 0.9882352941176471, 0.9882352941176471, 0.9882352941176471, 0.8509803921568627, 0.6627450980392157, 0.9098039215686274, 0.9882352941176471, 0.9882352941176471, 0.9882352941176471, 0.7254901960784313, 0.13725490196078433, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.09803921568627451, 0.7137254901960784, 0.7803921568627451, 0.7490196078431373, 0.5764705882352941, 0.7490196078431373, 0.8862745098039215, 0.7803921568627451, 0.5764705882352941, 0.403921568627451, 0.07058823529411765, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]]}
docs/AKS-HCI/cli/mnist/endpoint.yml METASEP
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
auth_mode: aml_token
compute: <your compute target name>
docs/AKS-HCI/cli/mnist/deployment.yml METASEP
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
type: kubernetes
app_insights_enabled: true
model: azureml:<your model name>:<your model version>
code_configuration:
  code: 
    local_path: ./
  scoring_script: score.py
instance_type: <your instance type>
environment: 
  name: sklearn-mnist-env
  version: 1
  conda_file: ./model/conda.yml
  image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1
instance_count: 1
request_settings:
  request_timeout_ms: 1000
  max_concurrent_requests_per_instance: 1
  max_queue_wait_ms: 1000
resources:
  requests:
    cpu: "1"
    memory: "1Gi"
liveness_probe:
  initial_delay: 10
  period: 10
  timeout: 10
  success_threshold: 1
  failure_threshold: 1


docs/AKS-HCI/cli/mnist/README.md METASEP
# Image Classification Using Scikit-learn

## Prerequisites 

Follow this [doc](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-train-cli?view=azure-devops#prerequisites) to setup the prerequisites of using Azure Machine CLI v2.  

1. Let's set some defaults for all subsequent "az ml" CLI commands
```
az account set --subscription <subcription id>
az configure --defaults workspace=<azureml workspace name> group=<resource group>
```

2. For the training job with AML 2.0 CLI, we have following project directory structure:
```
mnist
|-- mnist_script
|   |-- train.py
|   |-- utils.py
|-- train_env
|   |-- conda.yml
|-- training.yml
|--...
```

As you can see from above, the project contains a training job YAML file and some Python training scripts, and an environment YAML file. In general, it is a typical project setup for Azure Arc enabled Machine Learning. 

In training YAML file - [training.yml](training.yml),
```yaml
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
code: 
  local_path: mnist_script
command: >-
  python train.py
  --data-folder <your nfs mounting point on training pods>/mnist
  --regularization 0.5
environment: 
  name: tutorial-env
  version: 1
  path: .
  conda_file: file:./train_env/conda.yml
  docker:
    image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210806.v1
compute:
  target: azureml:<your compute target name>
  instance_type: <your instance type>
experiment_name: mnist-demo
description: Image Classification Using Scikit-learn
```

Note: Instance type is optional parameter. If it's not given, the compute default instance type will be used. For this example to run, you would have created following assets in AML Workspace: compute target named `<your compute name>`, and the training data are on NFS Server via `<your nfs mounting point on training pods>/mnist`. You can download and upload to NFS server in advance through [Azure Open Datasets](https://docs.microsoft.com/en-us/azure/open-datasets/dataset-mnist?tabs=azure-storage).

[conda.yml](model/conda.yml) defines all conda dependencies required for training job. Together with the base docker image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210806.v1, training environment will be built before training job starts.

3. Run the image classification training job
```
az ml job create -f training.yml --web
```
Creating this job uploads any specified local assets, like the source code directory, validates the YAML file, and submits the run. If needed, the environment is built, then the compute is scaled up and configured for running the job.

In output, you can retrieve the run id from id property.

```json
{
  "code": "azureml:<REDACTED>:1",
  "command": "python train.py --data-folder /nfs_share/mnist --regularization 0.5",
  "compute": {
    "instance_count": 1,
    "instance_type": "<REDACTED>",
    "target": "azureml:<REDACTED>"
  },
  "creation_context": {
    "created_at": "<REDACTED>",
    "created_by": "<REDACTED>",
    "created_by_type": "User"
  },
  "description": "Image Classification Using Scikit-learn",
  "environment": "azureml:<REDACTED>:1",
  "environment_variables": {},
  "experiment_name": "mnist-demo",
  "id": "azureml:/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>/jobs/<runId>",
  "inputs": {},
  ...
  ...
  "resourceGroup": "<resourceGroupName>",
  "status": "Starting",
  "tags": {},
  "type": "command_job"
}
```

4. Once the job is compute, you can download the outputs:
```
az ml job download -n $run_id --outputs --download-path <downloadPath>
```
You can download the output, the downloaded folder will be named with the run id, such as,
```
run_id
|-- azureml-logs
|   |-- ...
|-- logs
|   |-- ...
|-- outputs
    |-- sklearn_mnist_model.pkl
```
sklearn_mnist_model.pkl is the trained model file.

5. Register model
```
az ml model create --name sklearn_mnist --version <version> --local-path <modelPath>
```

6. Deploy model using real-time endpoint

Here is the default inference project structure.
```
mnist
|-- score.py
|-- model
|   |-- conda.yml
|-- endpoint.yml
|-- deployment.yml
|-- sample-request.json
|--...
```
As you can see from above, "model" directory contains Conda environment definition, "[score.py](score.py)" is the scoring script. At top level directory, we have endpoint YAML definition, deployment YAML definition and sample request JSON file. In general, this is very typical project setup for Azure Arc enabled ML model deployment.

Replace the compute name in endpoint.yml, then trigger real-time endpoint creation.
```
az ml online-endpoint create -n <endpoint_name> -f endpoint.yml
```

Check status of endpoint

```
az ml online-endpoint show -n <endpoint_name>
```
Check if endpoint creation was successful

Replace instance type name, model name / version in deployment.yml, then create blue deployment
```
az ml online-deployment create --name blue --endpoint <endpoint_name> -f deployment.yml --all-traffic
```
Check status of blue deployment
```
az ml online-deployment show --name blue --endpoint <endpoint_name>
```
Check if deployment was successful

7. Test endpoint by scoring request

```
az ml online-endpoint invoke -n <endpoint_name> -r sample-request.json
```
You can also send a scoring request using cURL or Invoke-WebRequest

Obtain a token/keys for the scoring endpoint
```
az ml online-endpoint get-credentials --name <endpoint_name>
```
Obtain the scoring_uri of the endpoint
```
az ml online-endpoint show --name <endpoint_name>
```
Score using the token/key obtained above

In Linux Shell,
```shell
curl -v -i -X POST -H "Content-Type:application/json" -H "Authorization: Bearer <key_or_token>" -d '<sample_data>' <scoring_uri>
```
In Windows PowerShell,
```powershell
$accessToken="<key_or_token>"
$scoreUri = "<scoring_uri>"
$value = Get-Content .\sample-request.json
$headers = @{
    "Authorization" = "Bearer $accessToken"
    "Content-Type" = "application/json"
}
Invoke-WebRequest -UseBasicParsing -Uri $scoreUri -Headers $headers -Body $value -Method Post
```
examples/training/simple-train-cli/src/utils.py METASEP
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

import gzip
import numpy as np
import struct


# load compressed MNIST gz files and return numpy arrays
def load_data(filename, label=False):
    with gzip.open(filename) as gz:
        struct.unpack('I', gz.read(4))
        n_items = struct.unpack('>I', gz.read(4))
        if not label:
            n_rows = struct.unpack('>I', gz.read(4))[0]
            n_cols = struct.unpack('>I', gz.read(4))[0]
            res = np.frombuffer(gz.read(n_items[0] * n_rows * n_cols), dtype=np.uint8)
            res = res.reshape(n_items[0], n_rows * n_cols)
        else:
            res = np.frombuffer(gz.read(n_items[0]), dtype=np.uint8)
            res = res.reshape(n_items[0], 1)
    return res


# one-hot encode a 1-D array
def one_hot_encode(array, num_of_classes):
    return np.eye(num_of_classes)[array.reshape(-1)]

examples/training/simple-train-cli/src/train.py METASEP

import argparse
import os
import numpy as np
import glob

from sklearn.linear_model import LogisticRegression
import joblib

from azureml.core import Run
from utils import load_data

# let user feed in 2 parameters, the dataset to mount or download, and the regularization rate of the logistic regression model
parser = argparse.ArgumentParser()
parser.add_argument('--data-folder', type=str, dest='data_folder', help='data folder mounting point')
parser.add_argument('--regularization', type=float, dest='reg', default=0.01, help='regularization rate')
args = parser.parse_args()

data_folder = args.data_folder
print('Data folder:', data_folder)

# load train and test set into numpy arrays
# note we scale the pixel intensity values to 0-1 (by dividing it with 255.0) so the model can converge faster.
X_train = load_data(glob.glob(os.path.join(data_folder, '**/train-images-idx3-ubyte.gz'), recursive=True)[0], False) / 255.0
X_test = load_data(glob.glob(os.path.join(data_folder, '**/t10k-images-idx3-ubyte.gz'), recursive=True)[0], False) / 255.0
y_train = load_data(glob.glob(os.path.join(data_folder, '**/train-labels-idx1-ubyte.gz'), recursive=True)[0], True).reshape(-1)
y_test = load_data(glob.glob(os.path.join(data_folder, '**/t10k-labels-idx1-ubyte.gz'), recursive=True)[0], True).reshape(-1)

print(X_train.shape, y_train.shape, X_test.shape, y_test.shape, sep = '\n')

# get hold of the current run
run = Run.get_context()

print('Train a logistic regression model with regularization rate of', args.reg)
clf = LogisticRegression(C=1.0/args.reg, solver="liblinear", multi_class="auto", random_state=42)
clf.fit(X_train, y_train)

print('Predict the test set')
y_hat = clf.predict(X_test)

# calculate accuracy on the prediction
acc = np.average(y_hat == y_test)
print('Accuracy is', acc)

run.log('regularization rate', np.float(args.reg))
run.log('accuracy', np.float(acc))

os.makedirs('outputs', exist_ok=True)
# note file saved in the outputs folder is automatically uploaded into experiment record
joblib.dump(value=clf, filename='outputs/sklearn_mnist_model.pkl')

examples/training/additional-sdk-examples/003-Distributed TensorFlow with parameter server/tf_mnist_replica.py METASEP
# Copyright 2016 The TensorFlow Authors. All Rights Reserved.
# Licensed under the Apache License, Version 2.0
# Script adapted from:
# https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/dist_test/python/mnist_replica.py
# ==============================================================================
"""Distributed MNIST training and validation, with model replicas.
A simple softmax model with one hidden layer is defined. The parameters
(weights and biases) are located on one parameter server (ps), while the ops
are executed on two worker nodes by default. The TF sessions also run on the
worker node.
Multiple invocations of this script can be done in parallel, with different
values for --task_index. There should be exactly one invocation with
--task_index, which will create a master session that carries out variable
initialization. The other, non-master, sessions will wait for the master
session to finish the initialization before proceeding to the training stage.
The coordination between the multiple worker invocations occurs due to
the definition of the parameters on the same ps devices. The parameter updates
from one worker is visible to all other workers. As such, the workers can
perform forward computation and gradient calculation in parallel, which
should lead to increased training speed for the simple model.
"""

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import os
import math
import sys
import tempfile
import time
import json

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
from azureml.core.run import Run

flags = tf.app.flags
flags.DEFINE_string("data_dir", "/tmp/mnist-data",
                    "Directory for storing mnist data")
flags.DEFINE_boolean("download_only", False,
                     "Only perform downloading of data; Do not proceed to "
                     "session preparation, model definition or training")
flags.DEFINE_integer("num_gpus", 0, "Total number of gpus for each machine."
                     "If you don't use GPU, please set it to '0'")
flags.DEFINE_integer("replicas_to_aggregate", None,
                     "Number of replicas to aggregate before parameter update "
                     "is applied (For sync_replicas mode only; default: "
                     "num_workers)")
flags.DEFINE_integer("hidden_units", 100,
                     "Number of units in the hidden layer of the NN")
flags.DEFINE_integer("train_steps", 200,
                     "Number of (global) training steps to perform")
flags.DEFINE_integer("batch_size", 100, "Training batch size")
flags.DEFINE_float("learning_rate", 0.01, "Learning rate")
flags.DEFINE_boolean(
    "sync_replicas", False,
    "Use the sync_replicas (synchronized replicas) mode, "
    "wherein the parameter updates from workers are aggregated "
    "before applied to avoid stale gradients")
flags.DEFINE_boolean(
    "existing_servers", False, "Whether servers already exists. If True, "
    "will use the worker hosts via their GRPC URLs (one client process "
    "per worker host). Otherwise, will create an in-process TensorFlow "
    "server.")

FLAGS = flags.FLAGS

IMAGE_PIXELS = 28


def main(unused_argv):
    data_root = os.path.join("outputs", "MNIST")
    mnist = None
    tf_config = os.environ.get("TF_CONFIG")
    if not tf_config or tf_config == "":
        raise ValueError("TF_CONFIG not found.")
    tf_config_json = json.loads(tf_config)
    cluster = tf_config_json.get('cluster')
    job_name = tf_config_json.get('task', {}).get('type')
    task_index = tf_config_json.get('task', {}).get('index')
    job_name = "worker" if job_name == "master" else job_name
    sentinel_path = os.path.join(data_root, "complete.txt")
    if job_name == "worker" and task_index == 0:
        mnist = input_data.read_data_sets(data_root, one_hot=True)
        with open(sentinel_path, 'w+') as f:
            f.write("download complete")
    else:
        while not os.path.exists(sentinel_path):
            time.sleep(0.01)
        mnist = input_data.read_data_sets(data_root, one_hot=True)

    if FLAGS.download_only:
        sys.exit(0)

    print("job name = %s" % job_name)
    print("task index = %d" % task_index)
    print("number of GPUs = %d" % FLAGS.num_gpus)

    # Construct the cluster and start the server
    cluster_spec = tf.train.ClusterSpec(cluster)

    # Get the number of workers.
    num_workers = len(cluster_spec.task_indices("worker"))

    if not FLAGS.existing_servers:
        # Not using existing servers. Create an in-process server.
        server = tf.train.Server(
            cluster_spec, job_name=job_name, task_index=task_index)
        if job_name == "ps":
            server.join()

    is_chief = (task_index == 0)
    if FLAGS.num_gpus > 0:
        # Avoid gpu allocation conflict: now allocate task_num -> #gpu
        # for each worker in the corresponding machine
        gpu = (task_index % FLAGS.num_gpus)
        worker_device = "/job:worker/task:%d/gpu:%d" % (task_index, gpu)
    elif FLAGS.num_gpus == 0:
        # Just allocate the CPU to worker server
        cpu = 0
        worker_device = "/job:worker/task:%d/cpu:%d" % (task_index, cpu)
    # The device setter will automatically place Variables ops on separate
    # parameter servers (ps). The non-Variable ops will be placed on the workers.
    # The ps use CPU and workers use corresponding GPU
    with tf.device(
        tf.train.replica_device_setter(
            worker_device=worker_device,
            ps_device="/job:ps/cpu:0",
            cluster=cluster)):
        global_step = tf.Variable(0, name="global_step", trainable=False)

        # Variables of the hidden layer
        hid_w = tf.Variable(
            tf.truncated_normal(
                [IMAGE_PIXELS * IMAGE_PIXELS, FLAGS.hidden_units],
                stddev=1.0 / IMAGE_PIXELS),
            name="hid_w")
        hid_b = tf.Variable(tf.zeros([FLAGS.hidden_units]), name="hid_b")

        # Variables of the softmax layer
        sm_w = tf.Variable(
            tf.truncated_normal(
                [FLAGS.hidden_units, 10],
                stddev=1.0 / math.sqrt(FLAGS.hidden_units)),
            name="sm_w")
        sm_b = tf.Variable(tf.zeros([10]), name="sm_b")

        # Ops: located on the worker specified with task_index
        x = tf.placeholder(tf.float32, [None, IMAGE_PIXELS * IMAGE_PIXELS])
        y_ = tf.placeholder(tf.float32, [None, 10])

        hid_lin = tf.nn.xw_plus_b(x, hid_w, hid_b)
        hid = tf.nn.relu(hid_lin)

        y = tf.nn.softmax(tf.nn.xw_plus_b(hid, sm_w, sm_b))
        cross_entropy = -tf.reduce_sum(y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))

        opt = tf.train.AdamOptimizer(FLAGS.learning_rate)

        if FLAGS.sync_replicas:
            if FLAGS.replicas_to_aggregate is None:
                replicas_to_aggregate = num_workers
            else:
                replicas_to_aggregate = FLAGS.replicas_to_aggregate

            opt = tf.train.SyncReplicasOptimizer(
                opt,
                replicas_to_aggregate=replicas_to_aggregate,
                total_num_replicas=num_workers,
                name="mnist_sync_replicas")

        train_step = opt.minimize(cross_entropy, global_step=global_step)

        if FLAGS.sync_replicas:
            local_init_op = opt.local_step_init_op
            if is_chief:
                local_init_op = opt.chief_init_op

            ready_for_local_init_op = opt.ready_for_local_init_op

            # Initial token and chief queue runners required by the sync_replicas mode
            chief_queue_runner = opt.get_chief_queue_runner()
            sync_init_op = opt.get_init_tokens_op()

        init_op = tf.global_variables_initializer()
        train_dir = tempfile.mkdtemp()

        if FLAGS.sync_replicas:
            sv = tf.train.Supervisor(
                is_chief=is_chief,
                logdir=train_dir,
                init_op=init_op,
                local_init_op=local_init_op,
                ready_for_local_init_op=ready_for_local_init_op,
                recovery_wait_secs=1,
                global_step=global_step)
        else:
            sv = tf.train.Supervisor(
                is_chief=is_chief,
                logdir=train_dir,
                init_op=init_op,
                recovery_wait_secs=1,
                global_step=global_step)

        sess_config = tf.ConfigProto(
            allow_soft_placement=True,
            log_device_placement=False,
            device_filters=["/job:ps",
                            "/job:worker/task:%d" % task_index])

        # The chief worker (task_index==0) session will prepare the session,
        # while the remaining workers will wait for the preparation to complete.
        if is_chief:
            print("Worker %d: Initializing session..." % task_index)
        else:
            print("Worker %d: Waiting for session to be initialized..." %
                  task_index)

        if FLAGS.existing_servers:
            server_grpc_url = "grpc://" + task_index
            print("Using existing server at: %s" % server_grpc_url)

            sess = sv.prepare_or_wait_for_session(server_grpc_url, config=sess_config)
        else:
            sess = sv.prepare_or_wait_for_session(server.target, config=sess_config)

        print("Worker %d: Session initialization complete." % task_index)

        if FLAGS.sync_replicas and is_chief:
            # Chief worker will start the chief queue runner and call the init op.
            sess.run(sync_init_op)
            sv.start_queue_runners(sess, [chief_queue_runner])

        # Perform training
        time_begin = time.time()
        print("Training begins @ %f" % time_begin)

        local_step = 0
        while True:
            # Training feed
            batch_xs, batch_ys = mnist.train.next_batch(FLAGS.batch_size)
            train_feed = {x: batch_xs, y_: batch_ys}

            _, step = sess.run([train_step, global_step], feed_dict=train_feed)
            local_step += 1

            now = time.time()
            print("%f: Worker %d: training step %d done (global step: %d)" %
                  (now, task_index, local_step, step))

            if step >= FLAGS.train_steps:
                break

        time_end = time.time()
        print("Training ends @ %f" % time_end)
        training_time = time_end - time_begin
        print("Training elapsed time: %f s" % training_time)

        # Validation feed
        val_feed = {x: mnist.validation.images, y_: mnist.validation.labels}
        val_xent = sess.run(cross_entropy, feed_dict=val_feed)
        print("After %d training step(s), validation cross entropy = %g" %
              (FLAGS.train_steps, val_xent))
        if job_name == "worker" and task_index == 0:
            run = Run.get_context()
            run.log("CrossEntropy", val_xent)


if __name__ == "__main__":
    tf.app.run()

examples/training/additional-sdk-examples/002-SciKitLearn/utils.py METASEP
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

import gzip
import numpy as np
import struct


# load compressed MNIST gz files and return numpy arrays
def load_data(filename, label=False):
    with gzip.open(filename) as gz:
        struct.unpack('I', gz.read(4))
        n_items = struct.unpack('>I', gz.read(4))
        if not label:
            n_rows = struct.unpack('>I', gz.read(4))[0]
            n_cols = struct.unpack('>I', gz.read(4))[0]
            res = np.frombuffer(gz.read(n_items[0] * n_rows * n_cols), dtype=np.uint8)
            res = res.reshape(n_items[0], n_rows * n_cols)
        else:
            res = np.frombuffer(gz.read(n_items[0]), dtype=np.uint8)
            res = res.reshape(n_items[0], 1)
    return res


# one-hot encode a 1-D array
def one_hot_encode(array, num_of_classes):
    return np.eye(num_of_classes)[array.reshape(-1)]

examples/training/additional-sdk-examples/001-Tensorflow/utils.py METASEP
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

import gzip
import numpy as np
import struct


# load compressed MNIST gz files and return numpy arrays
def load_data(filename, label=False):
    with gzip.open(filename) as gz:
        struct.unpack('I', gz.read(4))
        n_items = struct.unpack('>I', gz.read(4))
        if not label:
            n_rows = struct.unpack('>I', gz.read(4))[0]
            n_cols = struct.unpack('>I', gz.read(4))[0]
            res = np.frombuffer(gz.read(n_items[0] * n_rows * n_cols), dtype=np.uint8)
            res = res.reshape(n_items[0], n_rows * n_cols)
        else:
            res = np.frombuffer(gz.read(n_items[0]), dtype=np.uint8)
            res = res.reshape(n_items[0], 1)
    return res


# one-hot encode a 1-D array
def one_hot_encode(array, num_of_classes):
    return np.eye(num_of_classes)[array.reshape(-1)]

examples/training/additional-sdk-examples/001-Tensorflow/tf_mnist_with_checkpoint.py METASEP
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

import numpy as np
import argparse
import os
import re
import tensorflow as tf
import glob

from azureml.core import Run
from utils import load_data

print("TensorFlow version:", tf.__version__)

parser = argparse.ArgumentParser()
parser.add_argument('--data-folder', type=str, dest='data_folder', help='data folder mounting point')

parser.add_argument('--resume-from', type=str, default=None,
                    help='location of the model or checkpoint files from where to resume the training')
args = parser.parse_args()


previous_model_location = args.resume_from
# You can also use environment variable to get the model/checkpoint files location
# previous_model_location = os.path.expandvars(os.getenv("AZUREML_DATAREFERENCE_MODEL_LOCATION", None))

data_folder = args.data_folder
print('Data folder:', data_folder)

# load train and test set into numpy arrays
# note we scale the pixel intensity values to 0-1 (by dividing it with 255.0) so the model can converge faster.

X_train = load_data(glob.glob(os.path.join(data_folder, '**/train-images-idx3-ubyte.gz'),
                              recursive=True)[0], False) / 255.0
X_test = load_data(glob.glob(os.path.join(data_folder, '**/t10k-images-idx3-ubyte.gz'),
                             recursive=True)[0], False) / 255.0
y_train = load_data(glob.glob(os.path.join(data_folder, '**/train-labels-idx1-ubyte.gz'),
                              recursive=True)[0], True).reshape(-1)
y_test = load_data(glob.glob(os.path.join(data_folder, '**/t10k-labels-idx1-ubyte.gz'),
                             recursive=True)[0], True).reshape(-1)

print(X_train.shape, y_train.shape, X_test.shape, y_test.shape, sep='\n')

training_set_size = X_train.shape[0]

n_inputs = 28 * 28
n_h1 = 100
n_h2 = 100
n_outputs = 10
learning_rate = 0.01
n_epochs = 1000000000000000000000000000
batch_size = 50

with tf.name_scope('network'):
    # construct the DNN
    X = tf.placeholder(tf.float32, shape=(None, n_inputs), name='X')
    y = tf.placeholder(tf.int64, shape=(None), name='y')
    h1 = tf.layers.dense(X, n_h1, activation=tf.nn.relu, name='h1')
    h2 = tf.layers.dense(h1, n_h2, activation=tf.nn.relu, name='h2')
    output = tf.layers.dense(h2, n_outputs, name='output')

with tf.name_scope('train'):
    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=output)
    loss = tf.reduce_mean(cross_entropy, name='loss')
    optimizer = tf.train.GradientDescentOptimizer(learning_rate)
    train_op = optimizer.minimize(loss)

with tf.name_scope('eval'):
    correct = tf.nn.in_top_k(output, y, 1)
    acc_op = tf.reduce_mean(tf.cast(correct, tf.float32))

init = tf.global_variables_initializer()
saver = tf.train.Saver()

# start an Azure ML run
run = Run.get_context()

with tf.Session() as sess:
    start_epoch = 0
    if previous_model_location:
        checkpoint_file_path = tf.train.latest_checkpoint(previous_model_location)
        saver.restore(sess, checkpoint_file_path)
        checkpoint_filename = os.path.basename(checkpoint_file_path)
        num_found = re.search(r'\d+', checkpoint_filename)
        if num_found:
            start_epoch = int(num_found.group(0))
            print("Resuming from epoch {}".format(str(start_epoch)))
    else:
        init.run()

    for epoch in range(start_epoch, n_epochs):

        # randomly shuffle training set
        indices = np.random.permutation(training_set_size)
        X_train = X_train[indices]
        y_train = y_train[indices]

        # batch index
        b_start = 0
        b_end = b_start + batch_size
        for _ in range(training_set_size // batch_size):
            # get a batch
            X_batch, y_batch = X_train[b_start: b_end], y_train[b_start: b_end]

            # update batch index for the next batch
            b_start = b_start + batch_size
            b_end = min(b_start + batch_size, training_set_size)

            # train
            sess.run(train_op, feed_dict={X: X_batch, y: y_batch})
        # evaluate training set
        acc_train = acc_op.eval(feed_dict={X: X_batch, y: y_batch})
        # evaluate validation set
        acc_val = acc_op.eval(feed_dict={X: X_test, y: y_test})

        # log accuracies
        run.log('training_acc', np.float(acc_train))
        run.log('validation_acc', np.float(acc_val))
        print(epoch, '-- Training accuracy:', acc_train, '\b Validation accuracy:', acc_val)
        y_hat = np.argmax(output.eval(feed_dict={X: X_test}), axis=1)

        if epoch % 5 == 0:
            saver.save(sess, './outputs/', global_step=epoch)

        # saving only half of the model and resuming again from same epoch
        if not previous_model_location and epoch == 10:
            break

    run.log('final_acc', np.float(acc_val))

examples/inference/simple-flow/script/score.py METASEP
import json
import numpy as np
import os
import pickle
import joblib

def init():
    global model
    # AZUREML_MODEL_DIR is an environment variable created during deployment.
    # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
    # For multiple models, it points to the folder containing all deployed models (./azureml-models)
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'sklearn_mnist_model.pkl')
    model = joblib.load(model_path)

def run(raw_data):
    data = np.array(json.loads(raw_data)['data'])
    # make prediction
    y_hat = model.predict(data)
    # you can return any data type as long as it is JSON-serializable
    return y_hat.tolist()
examples/inference/gpu-inferencing/script/score.py METASEP

import json
import numpy as np
import os
import tensorflow as tf

from azureml.core.model import Model

def init():
    global X, output, sess
    tf.reset_default_graph()
    model_root = os.getenv('AZUREML_MODEL_DIR')
    # the name of the folder in which to look for tensorflow model files
    tf_model_folder = 'model'
    saver = tf.train.import_meta_graph(
        os.path.join(model_root, tf_model_folder, 'mnist-tf.model.meta'))
    X = tf.get_default_graph().get_tensor_by_name("network/X:0")
    output = tf.get_default_graph().get_tensor_by_name("network/output/MatMul:0")

    sess = tf.Session()
    saver.restore(sess, os.path.join(model_root, tf_model_folder, 'mnist-tf.model'))


def run(raw_data):
    data = np.array(json.loads(raw_data)['data'])
    # make prediction
    out = output.eval(session=sess, feed_dict={X: data})
    y_hat = np.argmax(out, axis=1)
    return y_hat.tolist()

docs/AKS-HCI/notebooks/pipeline/score.py METASEP
import json
import numpy as np
import os
import joblib

def init():
    global model
    # AZUREML_MODEL_DIR is an environment variable created during deployment.
    # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
    # For multiple models, it points to the folder containing all deployed models (./azureml-models)
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'taxi.pkl')
    model = joblib.load(model_path)

def run(raw_data):
    data = np.array(json.loads(raw_data)['data'])
    # make prediction
    scores = model.predict(data)
    # you can return any data type as long as it is JSON-serializable
    return scores.tolist()
docs/AKS-HCI/notebooks/pipeline/helpers.py METASEP
# Define helper functions

import sys
import os
import re
import json
import platform
import shlex
import shutil
import datetime
import time
import random
import string

from subprocess import Popen, PIPE
from IPython.display import Markdown

# # Define log_result function to log test results to the /results/results.json file
# def log_result(test_name, test_result, execution_time):
#     results_file = './results/results.json'
#     with open(results_file,'r') as json_file:
#         data = json.load(json_file)
#         results = data['results']
#         results.append({"test_name":test_name, "test_result":test_result, "execution_time":execution_time})
#     with open(results_file,'w') as json_file_write:
#         json.dump(data,json_file_write)

# Define log_result function to log test results to the /results.json file
def log_result(test_name, test_result, execution_time):
    root_array = []
    test_result = {"test_name":test_name, "test_result":test_result, "execution_time":execution_time}
    file_name= './results/results.json'

    if not os.path.isfile(file_name) or os.path.getsize(file_name) == 0:
        root_array.append(test_result)
        with open(file_name, mode='w') as f:
            f.write(json.dumps(root_array, indent=2))
    else:
        with open(file_name) as test_results_file:
            test_results = json.load(test_results_file)
            test_results.append(test_result)
        with open(file_name, mode='w') as test_results_file:
            test_results_file.write(json.dumps(test_results, indent=2))


# Define `run` function for transient fault handling, suggestions on error, and scrolling updates on Windows
def run(cmd, return_output=False, no_output=False, retry_count=0):
    """Run shell command, stream stdout, print stderr and optionally return output

    NOTES:

    1.  Commands that need this kind of ' quoting on Windows e.g.:

            kubectl get nodes -o jsonpath={.items[?(@.metadata.annotations.pv-candidate=='data-pool')].metadata.name}

        Need to actually pass in as '"':

            kubectl get nodes -o jsonpath={.items[?(@.metadata.annotations.pv-candidate=='"'data-pool'"')].metadata.name}

        The ' quote approach, although correct when pasting into Windows cmd, will hang at the line:
        
            `iter(p.stdout.readline, b'')`

        The shlex.split call does the right thing for each platform, just use the '"' pattern for a '
    """
    MAX_RETRIES = 5
    output = ""
    retry = False

    # When running `azdata sql query` on Windows, replace any \n in """ strings, with " ", otherwise we see:
    #
    #    ('HY090', '[HY090] [Microsoft][ODBC Driver Manager] Invalid string or buffer length (0) (SQLExecDirectW)')
    #
    if platform.system() == "Windows" and cmd.startswith("azdata sql query"):
        cmd = cmd.replace("\n", " ")

    # shlex.split is required on bash and for Windows paths with spaces
    # https://github.com/jrnl-org/jrnl/issues/348
    cmd_actual = shlex.split(cmd, posix="win" not in sys.platform)

    # Store this (i.e. kubectl, python etc.) to support binary context aware retries
    #
    user_provided_exe_name = cmd_actual[0].lower()

    # When running python, use the python in the ADS sandbox ({sys.executable})
    #
    if cmd.startswith("python "):
        cmd_actual[0] = cmd_actual[0].replace("python", sys.executable)

        # On Mac, when ADS is not launched from terminal, LC_ALL may not be set, which causes pip installs to fail
        # with:
        #
        #    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 4969: ordinal not in range(128)
        #
        # Setting it to a default value of "en_US.UTF-8" enables pip install to complete
        #
        if platform.system() == "Darwin" and "LC_ALL" not in os.environ:
            os.environ["LC_ALL"] = "en_US.UTF-8"

    # When running `kubectl`, if AZDATA_OPENSHIFT is set, use `oc`
    #
    if cmd.startswith("kubectl ") and "AZDATA_OPENSHIFT" in os.environ:
        cmd_actual[0] = cmd_actual[0].replace("kubectl", "oc")

    # To aid supportabilty, determine which binary file will actually be executed on the machine
    #
    which_binary = None

    # Special case for CURL on Windows.  The version of CURL in Windows System32 does not work to
    # get JWT tokens, it returns "(56) Failure when receiving data from the peer".  If another instance
    # of CURL exists on the machine use that one.  (Unfortunately the curl.exe in System32 is almost
    # always the first curl.exe in the path, and it can't be uninstalled from System32, so here we
    # look for the 2nd installation of CURL in the path)
    if platform.system() == "Windows" and cmd.startswith("curl "):
        path = os.getenv('PATH')
        for p in path.split(os.path.pathsep):
            p = os.path.join(p, "curl.exe")
            if os.path.exists(p) and os.access(p, os.X_OK):
                if p.lower().find("system32") == -1:
                    cmd_actual[0] = p
                    which_binary = p
                    break

    # Find the path based location (shutil.which) of the executable that will be run (and display it to aid supportability), this
    # seems to be required for .msi installs of azdata.cmd/az.cmd.  (otherwise Popen returns FileNotFound) 
    #
    # NOTE: Bash needs cmd to be the list of the space separated values hence shlex.split.
    #
    if which_binary == None:
        which_binary = shutil.which(cmd_actual[0])

    if which_binary == None:
        raise FileNotFoundError(f"Executable '{cmd_actual[0]}' not found in path (where/which)")
    else:   
        cmd_actual[0] = which_binary

    start_time = datetime.datetime.now().replace(microsecond=0)

    print(f"START: {cmd} @ {start_time} ({datetime.datetime.utcnow().replace(microsecond=0)} UTC)")
    print(f"       using: {which_binary} ({platform.system()} {platform.release()} on {platform.machine()})")
    print(f"       cwd: {os.getcwd()}")

    # Command-line tools such as CURL and AZDATA HDFS commands output
    # scrolling progress bars, which causes Jupyter to hang forever, to
    # workaround this, use no_output=True
    #

    # Work around a infinite hang when a notebook generates a non-zero return code, break out, and do not wait
    #
    wait = True 

    try:
        p = Popen(cmd_actual, stdout=PIPE, stderr=PIPE)
        with p.stdout:
            for line in iter(p.stdout.readline, b''):
                line = line.decode()
                if return_output:
                    output = output + line
                else:
                    if cmd.startswith("azdata notebook run"): # Hyperlink the .ipynb file
                        regex = re.compile('  "(.*)"\: "(.*)"') 
                        match = regex.match(line)
                        if match:
                            if match.group(1).find("HTML") != -1:
                                display(Markdown(f' - "{match.group(1)}": "{match.group(2)}"'))
                            else:
                                display(Markdown(f' - "{match.group(1)}": "[{match.group(2)}]({match.group(2)})"'))

                                wait = False
                                break # otherwise infinite hang, have not worked out why yet.
                    else:
                        pass
                
                if not no_output: 
                    print(line, end='')

        if wait:
            p.wait()
    except FileNotFoundError as e:
        raise FileNotFoundError(f"Executable '{cmd_actual[0]}' not found in path (where/which)") from e

    exit_code_workaround = 0 # WORKAROUND: azdata hangs on exception from notebook on p.wait()

    if not no_output:
        for line in iter(p.stderr.readline, b''):
            try:
                line_decoded = line.decode()
            except UnicodeDecodeError:
                # NOTE: Sometimes we get characters back that cannot be decoded(), e.g.
                #
                #   \xa0
                #
                # For example see this in the response from `az group create`:
                #
                # ERROR: Get Token request returned http error: 400 and server 
                # response: {"error":"invalid_grant",# "error_description":"AADSTS700082: 
                # The refresh token has expired due to inactivity.\xa0The token was 
                # issued on 2018-10-25T23:35:11.9832872Z
                #
                # which generates the exception:
                #
                # UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 179: invalid start byte
                #
                print("WARNING: Unable to decode stderr line, printing raw bytes:")
                print(line)
                line_decoded = ""
                pass
            else:

                # azdata emits a single empty line to stderr when doing an hdfs cp, don't
                # print this empty "ERR:" as it confuses.
                #
                if line_decoded == "":
                    continue
                
                print(f"STDERR: {line_decoded}", end='')

                if line_decoded.startswith("An exception has occurred") or line_decoded.startswith("ERROR: An error occurred while executing the following cell"):
                    exit_code_workaround = 1


    elapsed = datetime.datetime.now().replace(microsecond=0) - start_time

    # WORKAROUND: We avoid infinite hang above in the `azdata notebook run` failure case, by inferring success (from stdout output), so
    # don't wait here, if success known above
    #
    if wait: 
        if p.returncode != 0:
            raise SystemExit(f'Shell command:\n\n\t{cmd} ({elapsed}s elapsed)\n\nreturned non-zero exit code: {str(p.returncode)}.\n')
    else:
        if exit_code_workaround !=0 :
            raise SystemExit(f'Shell command:\n\n\t{cmd} ({elapsed}s elapsed)\n\nreturned non-zero exit code: {str(exit_code_workaround)}.\n')
    
    if return_output:
        return output

def randStr(chars = string.ascii_uppercase + string.digits, N=10):
	return ''.join(random.choice(chars) for _ in range(N))

def randFolderName():
    return randStr(chars=string.ascii_lowercase, N=5)+"_"+randStr(chars=string.ascii_letters+string.digits, N=8)

def currentTimeStr(format="%Y%m%d%H%M%S"):
    current = datetime.datetime.now()
    currentStr = current.strftime(format)
    return currentStr
docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/score.py METASEP
import os
import json
import time
import torch

# Called when the deployed service starts
def init():
    global model
    global device

    # Get the path where the deployed model can be found.
    model_filename = 'obj_segmentation.pkl'
    model_path = os.path.join(os.environ['AZUREML_MODEL_DIR'], model_filename)

    device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')
    model = torch.load(model_path, map_location=device)

# Handle requests to the service
def run(data):
    try:
        start_at = time.time()
        inputs = json.loads(data)
        img_data_list = inputs["instances"]
        img_tensor_list = [torch.tensor(item) for item in img_data_list]
        model.eval()
        with torch.no_grad():
            predictions = model([item.to(device) for item in img_tensor_list])

        pred_data_list = [{
            "masks": prediction['masks'][0, 0].mul(255).byte().cpu().numpy().tolist(),
            "boxes": prediction['boxes'].numpy().tolist(),
            "labels": prediction['labels'].numpy().tolist(),
            "scores": prediction['scores'].numpy().tolist(),

        } for prediction in predictions]

        return {"predictions": pred_data_list,
                "elapsed_time": time.time() - start_at}

    except Exception as e:
        error = str(e)
        return error

docs/AKS-HCI/notebooks/object-segmentation-on-azure-stack/helpers.py METASEP
# Define helper functions

import sys
import os
import re
import json
import platform
import shlex
import shutil
import datetime
import time
import random
import string

from subprocess import Popen, PIPE
from IPython.display import Markdown

# # Define log_result function to log test results to the /results/results.json file
# def log_result(test_name, test_result, execution_time):
#     results_file = './results/results.json'
#     with open(results_file,'r') as json_file:
#         data = json.load(json_file)
#         results = data['results']
#         results.append({"test_name":test_name, "test_result":test_result, "execution_time":execution_time})
#     with open(results_file,'w') as json_file_write:
#         json.dump(data,json_file_write)

# Define log_result function to log test results to the /results.json file
def log_result(test_name, test_result, execution_time):
    root_array = []
    test_result = {"test_name":test_name, "test_result":test_result, "execution_time":execution_time}
    file_name= './results/results.json'

    if not os.path.isfile(file_name) or os.path.getsize(file_name) == 0:
        root_array.append(test_result)
        with open(file_name, mode='w') as f:
            f.write(json.dumps(root_array, indent=2))
    else:
        with open(file_name) as test_results_file:
            test_results = json.load(test_results_file)
            test_results.append(test_result)
        with open(file_name, mode='w') as test_results_file:
            test_results_file.write(json.dumps(test_results, indent=2))


# Define `run` function for transient fault handling, suggestions on error, and scrolling updates on Windows
def run(cmd, return_output=False, no_output=False, retry_count=0):
    """Run shell command, stream stdout, print stderr and optionally return output

    NOTES:

    1.  Commands that need this kind of ' quoting on Windows e.g.:

            kubectl get nodes -o jsonpath={.items[?(@.metadata.annotations.pv-candidate=='data-pool')].metadata.name}

        Need to actually pass in as '"':

            kubectl get nodes -o jsonpath={.items[?(@.metadata.annotations.pv-candidate=='"'data-pool'"')].metadata.name}

        The ' quote approach, although correct when pasting into Windows cmd, will hang at the line:
        
            `iter(p.stdout.readline, b'')`

        The shlex.split call does the right thing for each platform, just use the '"' pattern for a '
    """
    MAX_RETRIES = 5
    output = ""
    retry = False

    # When running `azdata sql query` on Windows, replace any \n in """ strings, with " ", otherwise we see:
    #
    #    ('HY090', '[HY090] [Microsoft][ODBC Driver Manager] Invalid string or buffer length (0) (SQLExecDirectW)')
    #
    if platform.system() == "Windows" and cmd.startswith("azdata sql query"):
        cmd = cmd.replace("\n", " ")

    # shlex.split is required on bash and for Windows paths with spaces
    # https://github.com/jrnl-org/jrnl/issues/348
    cmd_actual = shlex.split(cmd, posix="win" not in sys.platform)

    # Store this (i.e. kubectl, python etc.) to support binary context aware retries
    #
    user_provided_exe_name = cmd_actual[0].lower()

    # When running python, use the python in the ADS sandbox ({sys.executable})
    #
    if cmd.startswith("python "):
        cmd_actual[0] = cmd_actual[0].replace("python", sys.executable)

        # On Mac, when ADS is not launched from terminal, LC_ALL may not be set, which causes pip installs to fail
        # with:
        #
        #    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 4969: ordinal not in range(128)
        #
        # Setting it to a default value of "en_US.UTF-8" enables pip install to complete
        #
        if platform.system() == "Darwin" and "LC_ALL" not in os.environ:
            os.environ["LC_ALL"] = "en_US.UTF-8"

    # When running `kubectl`, if AZDATA_OPENSHIFT is set, use `oc`
    #
    if cmd.startswith("kubectl ") and "AZDATA_OPENSHIFT" in os.environ:
        cmd_actual[0] = cmd_actual[0].replace("kubectl", "oc")

    # To aid supportabilty, determine which binary file will actually be executed on the machine
    #
    which_binary = None

    # Special case for CURL on Windows.  The version of CURL in Windows System32 does not work to
    # get JWT tokens, it returns "(56) Failure when receiving data from the peer".  If another instance
    # of CURL exists on the machine use that one.  (Unfortunately the curl.exe in System32 is almost
    # always the first curl.exe in the path, and it can't be uninstalled from System32, so here we
    # look for the 2nd installation of CURL in the path)
    if platform.system() == "Windows" and cmd.startswith("curl "):
        path = os.getenv('PATH')
        for p in path.split(os.path.pathsep):
            p = os.path.join(p, "curl.exe")
            if os.path.exists(p) and os.access(p, os.X_OK):
                if p.lower().find("system32") == -1:
                    cmd_actual[0] = p
                    which_binary = p
                    break

    # Find the path based location (shutil.which) of the executable that will be run (and display it to aid supportability), this
    # seems to be required for .msi installs of azdata.cmd/az.cmd.  (otherwise Popen returns FileNotFound) 
    #
    # NOTE: Bash needs cmd to be the list of the space separated values hence shlex.split.
    #
    if which_binary == None:
        which_binary = shutil.which(cmd_actual[0])

    if which_binary == None:
        raise FileNotFoundError(f"Executable '{cmd_actual[0]}' not found in path (where/which)")
    else:   
        cmd_actual[0] = which_binary

    start_time = datetime.datetime.now().replace(microsecond=0)

    print(f"START: {cmd} @ {start_time} ({datetime.datetime.utcnow().replace(microsecond=0)} UTC)")
    print(f"       using: {which_binary} ({platform.system()} {platform.release()} on {platform.machine()})")
    print(f"       cwd: {os.getcwd()}")

    # Command-line tools such as CURL and AZDATA HDFS commands output
    # scrolling progress bars, which causes Jupyter to hang forever, to
    # workaround this, use no_output=True
    #

    # Work around a infinite hang when a notebook generates a non-zero return code, break out, and do not wait
    #
    wait = True 

    try:
        p = Popen(cmd_actual, stdout=PIPE, stderr=PIPE)
        with p.stdout:
            for line in iter(p.stdout.readline, b''):
                line = line.decode()
                if return_output:
                    output = output + line
                else:
                    if cmd.startswith("azdata notebook run"): # Hyperlink the .ipynb file
                        regex = re.compile('  "(.*)"\: "(.*)"') 
                        match = regex.match(line)
                        if match:
                            if match.group(1).find("HTML") != -1:
                                display(Markdown(f' - "{match.group(1)}": "{match.group(2)}"'))
                            else:
                                display(Markdown(f' - "{match.group(1)}": "[{match.group(2)}]({match.group(2)})"'))

                                wait = False
                                break # otherwise infinite hang, have not worked out why yet.
                    else:
                        pass
                
                if not no_output: 
                    print(line, end='')

        if wait:
            p.wait()
    except FileNotFoundError as e:
        raise FileNotFoundError(f"Executable '{cmd_actual[0]}' not found in path (where/which)") from e

    exit_code_workaround = 0 # WORKAROUND: azdata hangs on exception from notebook on p.wait()

    if not no_output:
        for line in iter(p.stderr.readline, b''):
            try:
                line_decoded = line.decode()
            except UnicodeDecodeError:
                # NOTE: Sometimes we get characters back that cannot be decoded(), e.g.
                #
                #   \xa0
                #
                # For example see this in the response from `az group create`:
                #
                # ERROR: Get Token request returned http error: 400 and server 
                # response: {"error":"invalid_grant",# "error_description":"AADSTS700082: 
                # The refresh token has expired due to inactivity.\xa0The token was 
                # issued on 2018-10-25T23:35:11.9832872Z
                #
                # which generates the exception:
                #
                # UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 179: invalid start byte
                #
                print("WARNING: Unable to decode stderr line, printing raw bytes:")
                print(line)
                line_decoded = ""
                pass
            else:

                # azdata emits a single empty line to stderr when doing an hdfs cp, don't
                # print this empty "ERR:" as it confuses.
                #
                if line_decoded == "":
                    continue
                
                print(f"STDERR: {line_decoded}", end='')

                if line_decoded.startswith("An exception has occurred") or line_decoded.startswith("ERROR: An error occurred while executing the following cell"):
                    exit_code_workaround = 1


    elapsed = datetime.datetime.now().replace(microsecond=0) - start_time

    # WORKAROUND: We avoid infinite hang above in the `azdata notebook run` failure case, by inferring success (from stdout output), so
    # don't wait here, if success known above
    #
    if wait: 
        if p.returncode != 0:
            raise SystemExit(f'Shell command:\n\n\t{cmd} ({elapsed}s elapsed)\n\nreturned non-zero exit code: {str(p.returncode)}.\n')
    else:
        if exit_code_workaround !=0 :
            raise SystemExit(f'Shell command:\n\n\t{cmd} ({elapsed}s elapsed)\n\nreturned non-zero exit code: {str(exit_code_workaround)}.\n')
    
    if return_output:
        return output

def randStr(chars = string.ascii_uppercase + string.digits, N=10):
	return ''.join(random.choice(chars) for _ in range(N))

def randFolderName():
    return randStr(chars=string.ascii_lowercase, N=5)+"_"+randStr(chars=string.ascii_letters+string.digits, N=8)

def currentTimeStr(format="%Y%m%d%H%M%S"):
    current = datetime.datetime.now()
    currentStr = current.strftime(format)
    return currentStr
docs/AKS-HCI/notebooks/mnist/score.py METASEP
import json
import numpy as np
import os
import pickle
import joblib

def init():
    global model
    # AZUREML_MODEL_DIR is an environment variable created during deployment.
    # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
    # For multiple models, it points to the folder containing all deployed models (./azureml-models)
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'sklearn_mnist_model.pkl')
    model = joblib.load(model_path)

def run(raw_data):
    data = np.array(json.loads(raw_data)['data'])
    # make prediction
    y_hat = model.predict(data)
    # you can return any data type as long as it is JSON-serializable
    return y_hat.tolist()
docs/AKS-HCI/notebooks/mnist/helpers.py METASEP
# Define helper functions

import sys
import os
import re
import json
import platform
import shlex
import shutil
import datetime
import time

from subprocess import Popen, PIPE
from IPython.display import Markdown

# # Define log_result function to log test results to the /results/results.json file
# def log_result(test_name, test_result, execution_time):
#     results_file = './results/results.json'
#     with open(results_file,'r') as json_file:
#         data = json.load(json_file)
#         results = data['results']
#         results.append({"test_name":test_name, "test_result":test_result, "execution_time":execution_time})
#     with open(results_file,'w') as json_file_write:
#         json.dump(data,json_file_write)

# Define log_result function to log test results to the /results.json file
def log_result(test_name, test_result, execution_time):
    root_array = []
    test_result = {"test_name":test_name, "test_result":test_result, "execution_time":execution_time}
    file_name= './results/results.json'

    if not os.path.isfile(file_name) or os.path.getsize(file_name) == 0:
        root_array.append(test_result)
        with open(file_name, mode='w') as f:
            f.write(json.dumps(root_array, indent=2))
    else:
        with open(file_name) as test_results_file:
            test_results = json.load(test_results_file)
            test_results.append(test_result)
        with open(file_name, mode='w') as test_results_file:
            test_results_file.write(json.dumps(test_results, indent=2))


# Define `run` function for transient fault handling, suggestions on error, and scrolling updates on Windows
def run(cmd, return_output=False, no_output=False, retry_count=0):
    """Run shell command, stream stdout, print stderr and optionally return output

    NOTES:

    1.  Commands that need this kind of ' quoting on Windows e.g.:

            kubectl get nodes -o jsonpath={.items[?(@.metadata.annotations.pv-candidate=='data-pool')].metadata.name}

        Need to actually pass in as '"':

            kubectl get nodes -o jsonpath={.items[?(@.metadata.annotations.pv-candidate=='"'data-pool'"')].metadata.name}

        The ' quote approach, although correct when pasting into Windows cmd, will hang at the line:
        
            `iter(p.stdout.readline, b'')`

        The shlex.split call does the right thing for each platform, just use the '"' pattern for a '
    """
    MAX_RETRIES = 5
    output = ""
    retry = False

    # When running `azdata sql query` on Windows, replace any \n in """ strings, with " ", otherwise we see:
    #
    #    ('HY090', '[HY090] [Microsoft][ODBC Driver Manager] Invalid string or buffer length (0) (SQLExecDirectW)')
    #
    if platform.system() == "Windows" and cmd.startswith("azdata sql query"):
        cmd = cmd.replace("\n", " ")

    # shlex.split is required on bash and for Windows paths with spaces
    # https://github.com/jrnl-org/jrnl/issues/348
    cmd_actual = shlex.split(cmd, posix="win" not in sys.platform)

    # Store this (i.e. kubectl, python etc.) to support binary context aware retries
    #
    user_provided_exe_name = cmd_actual[0].lower()

    # When running python, use the python in the ADS sandbox ({sys.executable})
    #
    if cmd.startswith("python "):
        cmd_actual[0] = cmd_actual[0].replace("python", sys.executable)

        # On Mac, when ADS is not launched from terminal, LC_ALL may not be set, which causes pip installs to fail
        # with:
        #
        #    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 4969: ordinal not in range(128)
        #
        # Setting it to a default value of "en_US.UTF-8" enables pip install to complete
        #
        if platform.system() == "Darwin" and "LC_ALL" not in os.environ:
            os.environ["LC_ALL"] = "en_US.UTF-8"

    # When running `kubectl`, if AZDATA_OPENSHIFT is set, use `oc`
    #
    if cmd.startswith("kubectl ") and "AZDATA_OPENSHIFT" in os.environ:
        cmd_actual[0] = cmd_actual[0].replace("kubectl", "oc")

    # To aid supportabilty, determine which binary file will actually be executed on the machine
    #
    which_binary = None

    # Special case for CURL on Windows.  The version of CURL in Windows System32 does not work to
    # get JWT tokens, it returns "(56) Failure when receiving data from the peer".  If another instance
    # of CURL exists on the machine use that one.  (Unfortunately the curl.exe in System32 is almost
    # always the first curl.exe in the path, and it can't be uninstalled from System32, so here we
    # look for the 2nd installation of CURL in the path)
    if platform.system() == "Windows" and cmd.startswith("curl "):
        path = os.getenv('PATH')
        for p in path.split(os.path.pathsep):
            p = os.path.join(p, "curl.exe")
            if os.path.exists(p) and os.access(p, os.X_OK):
                if p.lower().find("system32") == -1:
                    cmd_actual[0] = p
                    which_binary = p
                    break

    # Find the path based location (shutil.which) of the executable that will be run (and display it to aid supportability), this
    # seems to be required for .msi installs of azdata.cmd/az.cmd.  (otherwise Popen returns FileNotFound) 
    #
    # NOTE: Bash needs cmd to be the list of the space separated values hence shlex.split.
    #
    if which_binary == None:
        which_binary = shutil.which(cmd_actual[0])

    if which_binary == None:
        raise FileNotFoundError(f"Executable '{cmd_actual[0]}' not found in path (where/which)")
    else:   
        cmd_actual[0] = which_binary

    start_time = datetime.datetime.now().replace(microsecond=0)

    print(f"START: {cmd} @ {start_time} ({datetime.datetime.utcnow().replace(microsecond=0)} UTC)")
    print(f"       using: {which_binary} ({platform.system()} {platform.release()} on {platform.machine()})")
    print(f"       cwd: {os.getcwd()}")

    # Command-line tools such as CURL and AZDATA HDFS commands output
    # scrolling progress bars, which causes Jupyter to hang forever, to
    # workaround this, use no_output=True
    #

    # Work around a infinite hang when a notebook generates a non-zero return code, break out, and do not wait
    #
    wait = True 

    try:
        p = Popen(cmd_actual, stdout=PIPE, stderr=PIPE)
        with p.stdout:
            for line in iter(p.stdout.readline, b''):
                line = line.decode()
                if return_output:
                    output = output + line
                else:
                    if cmd.startswith("azdata notebook run"): # Hyperlink the .ipynb file
                        regex = re.compile('  "(.*)"\: "(.*)"') 
                        match = regex.match(line)
                        if match:
                            if match.group(1).find("HTML") != -1:
                                display(Markdown(f' - "{match.group(1)}": "{match.group(2)}"'))
                            else:
                                display(Markdown(f' - "{match.group(1)}": "[{match.group(2)}]({match.group(2)})"'))

                                wait = False
                                break # otherwise infinite hang, have not worked out why yet.
                    else:
                        pass
                
                if not no_output: 
                    print(line, end='')

        if wait:
            p.wait()
    except FileNotFoundError as e:
        raise FileNotFoundError(f"Executable '{cmd_actual[0]}' not found in path (where/which)") from e

    exit_code_workaround = 0 # WORKAROUND: azdata hangs on exception from notebook on p.wait()

    if not no_output:
        for line in iter(p.stderr.readline, b''):
            try:
                line_decoded = line.decode()
            except UnicodeDecodeError:
                # NOTE: Sometimes we get characters back that cannot be decoded(), e.g.
                #
                #   \xa0
                #
                # For example see this in the response from `az group create`:
                #
                # ERROR: Get Token request returned http error: 400 and server 
                # response: {"error":"invalid_grant",# "error_description":"AADSTS700082: 
                # The refresh token has expired due to inactivity.\xa0The token was 
                # issued on 2018-10-25T23:35:11.9832872Z
                #
                # which generates the exception:
                #
                # UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 179: invalid start byte
                #
                print("WARNING: Unable to decode stderr line, printing raw bytes:")
                print(line)
                line_decoded = ""
                pass
            else:

                # azdata emits a single empty line to stderr when doing an hdfs cp, don't
                # print this empty "ERR:" as it confuses.
                #
                if line_decoded == "":
                    continue
                
                print(f"STDERR: {line_decoded}", end='')

                if line_decoded.startswith("An exception has occurred") or line_decoded.startswith("ERROR: An error occurred while executing the following cell"):
                    exit_code_workaround = 1


    elapsed = datetime.datetime.now().replace(microsecond=0) - start_time

    # WORKAROUND: We avoid infinite hang above in the `azdata notebook run` failure case, by inferring success (from stdout output), so
    # don't wait here, if success known above
    #
    if wait: 
        if p.returncode != 0:
            raise SystemExit(f'Shell command:\n\n\t{cmd} ({elapsed}s elapsed)\n\nreturned non-zero exit code: {str(p.returncode)}.\n')
    else:
        if exit_code_workaround !=0 :
            raise SystemExit(f'Shell command:\n\n\t{cmd} ({elapsed}s elapsed)\n\nreturned non-zero exit code: {str(exit_code_workaround)}.\n')
    
    if return_output:
        return output

docs/AKS-HCI/notebooks/distributed-cifar10/score_tf.py METASEP
import os
import time
import tensorflow as tf
import json

# Called when the deployed service starts
def init():
    global model

    # Get the path where the deployed model can be found.
    model_file_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), '001')
    # model_file_path = model_path + '/obj_segmentation.pkl'
    #model_file_path = "C:\\Users\\v-songshanli\projects\\ashexplore\BIG_FILES\\001"

    model = tf.saved_model.load(model_file_path)

# Handle requests to the service
def run(data):
    try:
        # Pick out the text property of the JSON request.
        # This expects a request in the form of {"text": "some text to score for sentiment"}

        start_at = time.time()
        inputs = json.loads(data)
        img_data_list = inputs["instances"]

        signature_name = inputs["signature_name"]
        infer = model.signatures[signature_name]

        inputs_tensor = tf.constant(img_data_list, dtype=tf.float32)

        res = infer(tf.constant(inputs_tensor))
        return {"predictions": res["dense_1"].numpy().tolist(),
                "elapsed_time": time.time() - start_at}
    except Exception as e:
        error = str(e)
        print(error)
        raise e

docs/AKS-HCI/notebooks/distributed-cifar10/score_pytorch.py METASEP
import json
import time
import torch
import torch.nn.functional as F
import os
import torch.nn as nn
from collections import OrderedDict

class BasicBlock(nn.Module):
    expansion = 1

    def __init__(self, in_planes, planes, stride=1):
        super(BasicBlock, self).__init__()
        self.conv1 = nn.Conv2d(
            in_planes, planes, kernel_size=3, stride=stride, padding=1, bias=False)
        self.bn1 = nn.BatchNorm2d(planes)
        self.conv2 = nn.Conv2d(planes, planes, kernel_size=3,
                               stride=1, padding=1, bias=False)
        self.bn2 = nn.BatchNorm2d(planes)

        self.shortcut = nn.Sequential()
        if stride != 1 or in_planes != self.expansion * planes:
            self.shortcut = nn.Sequential(
                nn.Conv2d(in_planes, self.expansion * planes,
                          kernel_size=1, stride=stride, bias=False),
                nn.BatchNorm2d(self.expansion * planes)
            )

    def forward(self, x):
        out = F.relu(self.bn1(self.conv1(x)))
        out = self.bn2(self.conv2(out))
        out += self.shortcut(x)
        out = F.relu(out)
        return out


class Root(nn.Module):
    def __init__(self, in_channels, out_channels, kernel_size=1):
        super(Root, self).__init__()
        self.conv = nn.Conv2d(
            in_channels, out_channels, kernel_size,
            stride=1, padding=(kernel_size - 1) // 2, bias=False)
        self.bn = nn.BatchNorm2d(out_channels)

    def forward(self, xs):
        x = torch.cat(xs, 1)
        out = F.relu(self.bn(self.conv(x)))
        return out


class Tree(nn.Module):
    def __init__(self, block, in_channels, out_channels, level=1, stride=1):
        super(Tree, self).__init__()
        self.root = Root(2 * out_channels, out_channels)
        if level == 1:
            self.left_tree = block(in_channels, out_channels, stride=stride)
            self.right_tree = block(out_channels, out_channels, stride=1)
        else:
            self.left_tree = Tree(block, in_channels,
                                  out_channels, level=level - 1, stride=stride)
            self.right_tree = Tree(block, out_channels,
                                   out_channels, level=level - 1, stride=1)

    def forward(self, x):
        out1 = self.left_tree(x)
        out2 = self.right_tree(out1)
        out = self.root([out1, out2])
        return out


class SimpleDLA(nn.Module):
    def __init__(self, block=BasicBlock, num_classes=10):
        super(SimpleDLA, self).__init__()
        self.base = nn.Sequential(
            nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1, bias=False),
            nn.BatchNorm2d(16),
            nn.ReLU(True)
        )

        self.layer1 = nn.Sequential(
            nn.Conv2d(16, 16, kernel_size=3, stride=1, padding=1, bias=False),
            nn.BatchNorm2d(16),
            nn.ReLU(True)
        )

        self.layer2 = nn.Sequential(
            nn.Conv2d(16, 32, kernel_size=3, stride=1, padding=1, bias=False),
            nn.BatchNorm2d(32),
            nn.ReLU(True)
        )

        self.layer3 = Tree(block, 32, 64, level=1, stride=1)
        self.layer4 = Tree(block, 64, 128, level=2, stride=2)
        self.layer5 = Tree(block, 128, 256, level=2, stride=2)
        self.layer6 = Tree(block, 256, 512, level=1, stride=2)
        self.linear = nn.Linear(512, num_classes)

    def forward(self, x):
        out = self.base(x)
        out = self.layer1(out)
        out = self.layer2(out)
        out = self.layer3(out)
        out = self.layer4(out)
        out = self.layer5(out)
        out = self.layer6(out)
        out = F.avg_pool2d(out, 4)
        out = out.view(out.size(0), -1)
        out = self.linear(out)
        return out


class Net(nn.Module):  # pylint:disable=too-few-public-methods
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

    def __call__(self, inputs):
        return super(Net, self).__call__(inputs)


# Called when the deployed service starts
def init():
    global model
    global device

    # Get the path where the deployed model can be found.
    model_filename = 'cifar10torch.pt'
    model_file_path = os.path.join(os.environ['AZUREML_MODEL_DIR'], model_filename)

    device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')

    model = SimpleDLA()
    model.to(device)
    saved_state_dict = torch.load(model_file_path, map_location=device)

    cleaned_dict = OrderedDict()
    for key, value in saved_state_dict.items():
        if key.startswith("module"):
            first_dot = key.find(".")
            key = key[first_dot + 1:]

        cleaned_dict[key] = value

    model.load_state_dict(cleaned_dict)
    model.eval()


# Handle requests to the service
def run(data):
    try:
        # Pick out the text property of the JSON request.
        # This expects a request in the form of {"text": "some text to score for sentiment"}

        start_at = time.time()
        inputs = json.loads(data)
        img_data_list = inputs["instances"]
        inputs = torch.tensor(img_data_list).to(device)

        with torch.no_grad():
            predictions = model(inputs)

        return {"predicts": predictions.numpy().tolist(),
                "elapsed_time": time.time() - start_at}

    except Exception as e:
        error = str(e)
        print(error)
        raise e

docs/AKS-HCI/notebooks/distributed-cifar10/helpers.py METASEP
# Define helper functions

import sys
import os
import re
import json
import platform
import shlex
import shutil
import datetime
import time

from subprocess import Popen, PIPE
from IPython.display import Markdown

# # Define log_result function to log test results to the /results/results.json file
# def log_result(test_name, test_result, execution_time):
#     results_file = './results/results.json'
#     with open(results_file,'r') as json_file:
#         data = json.load(json_file)
#         results = data['results']
#         results.append({"test_name":test_name, "test_result":test_result, "execution_time":execution_time})
#     with open(results_file,'w') as json_file_write:
#         json.dump(data,json_file_write)

# Define log_result function to log test results to the /results.json file
def log_result(test_name, test_result, execution_time):
    root_array = []
    test_result = {"test_name":test_name, "test_result":test_result, "execution_time":execution_time}
    file_name= './results/results.json'

    if not os.path.isfile(file_name) or os.path.getsize(file_name) == 0:
        root_array.append(test_result)
        with open(file_name, mode='w') as f:
            f.write(json.dumps(root_array, indent=2))
    else:
        with open(file_name) as test_results_file:
            test_results = json.load(test_results_file)
            test_results.append(test_result)
        with open(file_name, mode='w') as test_results_file:
            test_results_file.write(json.dumps(test_results, indent=2))


# Define `run` function for transient fault handling, suggestions on error, and scrolling updates on Windows
def run(cmd, return_output=False, no_output=False, retry_count=0):
    """Run shell command, stream stdout, print stderr and optionally return output

    NOTES:

    1.  Commands that need this kind of ' quoting on Windows e.g.:

            kubectl get nodes -o jsonpath={.items[?(@.metadata.annotations.pv-candidate=='data-pool')].metadata.name}

        Need to actually pass in as '"':

            kubectl get nodes -o jsonpath={.items[?(@.metadata.annotations.pv-candidate=='"'data-pool'"')].metadata.name}

        The ' quote approach, although correct when pasting into Windows cmd, will hang at the line:
        
            `iter(p.stdout.readline, b'')`

        The shlex.split call does the right thing for each platform, just use the '"' pattern for a '
    """
    MAX_RETRIES = 5
    output = ""
    retry = False

    # When running `azdata sql query` on Windows, replace any \n in """ strings, with " ", otherwise we see:
    #
    #    ('HY090', '[HY090] [Microsoft][ODBC Driver Manager] Invalid string or buffer length (0) (SQLExecDirectW)')
    #
    if platform.system() == "Windows" and cmd.startswith("azdata sql query"):
        cmd = cmd.replace("\n", " ")

    # shlex.split is required on bash and for Windows paths with spaces
    # https://github.com/jrnl-org/jrnl/issues/348
    cmd_actual = shlex.split(cmd, posix="win" not in sys.platform)

    # Store this (i.e. kubectl, python etc.) to support binary context aware retries
    #
    user_provided_exe_name = cmd_actual[0].lower()

    # When running python, use the python in the ADS sandbox ({sys.executable})
    #
    if cmd.startswith("python "):
        cmd_actual[0] = cmd_actual[0].replace("python", sys.executable)

        # On Mac, when ADS is not launched from terminal, LC_ALL may not be set, which causes pip installs to fail
        # with:
        #
        #    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 4969: ordinal not in range(128)
        #
        # Setting it to a default value of "en_US.UTF-8" enables pip install to complete
        #
        if platform.system() == "Darwin" and "LC_ALL" not in os.environ:
            os.environ["LC_ALL"] = "en_US.UTF-8"

    # When running `kubectl`, if AZDATA_OPENSHIFT is set, use `oc`
    #
    if cmd.startswith("kubectl ") and "AZDATA_OPENSHIFT" in os.environ:
        cmd_actual[0] = cmd_actual[0].replace("kubectl", "oc")

    # To aid supportabilty, determine which binary file will actually be executed on the machine
    #
    which_binary = None

    # Special case for CURL on Windows.  The version of CURL in Windows System32 does not work to
    # get JWT tokens, it returns "(56) Failure when receiving data from the peer".  If another instance
    # of CURL exists on the machine use that one.  (Unfortunately the curl.exe in System32 is almost
    # always the first curl.exe in the path, and it can't be uninstalled from System32, so here we
    # look for the 2nd installation of CURL in the path)
    if platform.system() == "Windows" and cmd.startswith("curl "):
        path = os.getenv('PATH')
        for p in path.split(os.path.pathsep):
            p = os.path.join(p, "curl.exe")
            if os.path.exists(p) and os.access(p, os.X_OK):
                if p.lower().find("system32") == -1:
                    cmd_actual[0] = p
                    which_binary = p
                    break

    # Find the path based location (shutil.which) of the executable that will be run (and display it to aid supportability), this
    # seems to be required for .msi installs of azdata.cmd/az.cmd.  (otherwise Popen returns FileNotFound) 
    #
    # NOTE: Bash needs cmd to be the list of the space separated values hence shlex.split.
    #
    if which_binary == None:
        which_binary = shutil.which(cmd_actual[0])

    if which_binary == None:
        raise FileNotFoundError(f"Executable '{cmd_actual[0]}' not found in path (where/which)")
    else:   
        cmd_actual[0] = which_binary

    start_time = datetime.datetime.now().replace(microsecond=0)

    print(f"START: {cmd} @ {start_time} ({datetime.datetime.utcnow().replace(microsecond=0)} UTC)")
    print(f"       using: {which_binary} ({platform.system()} {platform.release()} on {platform.machine()})")
    print(f"       cwd: {os.getcwd()}")

    # Command-line tools such as CURL and AZDATA HDFS commands output
    # scrolling progress bars, which causes Jupyter to hang forever, to
    # workaround this, use no_output=True
    #

    # Work around a infinite hang when a notebook generates a non-zero return code, break out, and do not wait
    #
    wait = True 

    try:
        p = Popen(cmd_actual, stdout=PIPE, stderr=PIPE)
        with p.stdout:
            for line in iter(p.stdout.readline, b''):
                line = line.decode()
                if return_output:
                    output = output + line
                else:
                    if cmd.startswith("azdata notebook run"): # Hyperlink the .ipynb file
                        regex = re.compile('  "(.*)"\: "(.*)"') 
                        match = regex.match(line)
                        if match:
                            if match.group(1).find("HTML") != -1:
                                display(Markdown(f' - "{match.group(1)}": "{match.group(2)}"'))
                            else:
                                display(Markdown(f' - "{match.group(1)}": "[{match.group(2)}]({match.group(2)})"'))

                                wait = False
                                break # otherwise infinite hang, have not worked out why yet.
                    else:
                        pass
                
                if not no_output: 
                    print(line, end='')

        if wait:
            p.wait()
    except FileNotFoundError as e:
        raise FileNotFoundError(f"Executable '{cmd_actual[0]}' not found in path (where/which)") from e

    exit_code_workaround = 0 # WORKAROUND: azdata hangs on exception from notebook on p.wait()

    if not no_output:
        for line in iter(p.stderr.readline, b''):
            try:
                line_decoded = line.decode()
            except UnicodeDecodeError:
                # NOTE: Sometimes we get characters back that cannot be decoded(), e.g.
                #
                #   \xa0
                #
                # For example see this in the response from `az group create`:
                #
                # ERROR: Get Token request returned http error: 400 and server 
                # response: {"error":"invalid_grant",# "error_description":"AADSTS700082: 
                # The refresh token has expired due to inactivity.\xa0The token was 
                # issued on 2018-10-25T23:35:11.9832872Z
                #
                # which generates the exception:
                #
                # UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 179: invalid start byte
                #
                print("WARNING: Unable to decode stderr line, printing raw bytes:")
                print(line)
                line_decoded = ""
                pass
            else:

                # azdata emits a single empty line to stderr when doing an hdfs cp, don't
                # print this empty "ERR:" as it confuses.
                #
                if line_decoded == "":
                    continue
                
                print(f"STDERR: {line_decoded}", end='')

                if line_decoded.startswith("An exception has occurred") or line_decoded.startswith("ERROR: An error occurred while executing the following cell"):
                    exit_code_workaround = 1


    elapsed = datetime.datetime.now().replace(microsecond=0) - start_time

    # WORKAROUND: We avoid infinite hang above in the `azdata notebook run` failure case, by inferring success (from stdout output), so
    # don't wait here, if success known above
    #
    if wait: 
        if p.returncode != 0:
            raise SystemExit(f'Shell command:\n\n\t{cmd} ({elapsed}s elapsed)\n\nreturned non-zero exit code: {str(p.returncode)}.\n')
    else:
        if exit_code_workaround !=0 :
            raise SystemExit(f'Shell command:\n\n\t{cmd} ({elapsed}s elapsed)\n\nreturned non-zero exit code: {str(exit_code_workaround)}.\n')
    
    if return_output:
        return output

docs/AKS-HCI/nfs/nfs_script/test.py METASEP
import argparse
import os
import glob

from pathlib import Path


# let user feed in 2 parameters, the dataset to mount or download, and the regularization rate of the logistic regression model
parser = argparse.ArgumentParser()
parser.add_argument('--nfs-folder', type=str, dest='nfs_folder', help='NFS Server mounting point')
args = parser.parse_args()

nfs_folder = args.nfs_folder
print('NFS folder:', nfs_folder)

if (Path(nfs_folder).exists() != True):
    raise Exception(f"{nfs_folder} doesn't exist")
if (Path(nfs_folder).is_dir() != True):
    raise Exception(f"{nfs_folder} is not a directory")

from itertools import islice

space =  '    '
branch = '│   '
tee =    '├── '
last =   '└── '

def tree(dir_path: Path, level: int=-1, limit_to_directories: bool=False,
         length_limit: int=1000):
    """Given a directory Path object print a visual tree structure"""
    dir_path = Path(dir_path) # accept string coerceable to Path
    files = 0
    directories = 0
    def inner(dir_path: Path, prefix: str='', level=-1):
        nonlocal files, directories
        if not level: 
            return # 0, stop iterating
        if limit_to_directories:
            contents = [d for d in dir_path.iterdir() if d.is_dir()]
        else: 
            contents = list(dir_path.iterdir())
        pointers = [tee] * (len(contents) - 1) + [last]
        for pointer, path in zip(pointers, contents):
            if path.is_dir():
                yield prefix + pointer + path.name
                directories += 1
                extension = branch if pointer == tee else space 
                yield from inner(path, prefix=prefix+extension, level=level-1)
            elif not limit_to_directories:
                yield prefix + pointer + path.name
                files += 1
    print(dir_path.name)
    iterator = inner(dir_path, level=level)
    for line in islice(iterator, length_limit):
        print(line)
    if next(iterator, None):
        print(f'... length_limit, {length_limit}, reached, counted:')
    print(f'\n{directories} directories' + (f', {files} files' if files else ''))

tree(nfs_folder)
docs/AKS-HCI/cli/mnist/score.py METASEP
import json
import numpy as np
import os
import pickle
import joblib

def init():
    global model
    # AZUREML_MODEL_DIR is an environment variable created during deployment.
    # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
    # For multiple models, it points to the folder containing all deployed models (./azureml-models)
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'sklearn_mnist_model.pkl')
    model = joblib.load(model_path)

def run(raw_data):
    data = np.array(json.loads(raw_data)['data'])
    # make prediction
    y_hat = model.predict(data)
    # you can return any data type as long as it is JSON-serializable
    return y_hat.tolist()
examples/training/simple-train-sdk/img-classification-training.yml METASEP
name: img-classification-training
dependencies:
- pip:
  - azureml-sdk
  - azureml-widgets
  - matplotlib
  - sklearn
  - pandas
  - azureml-opendatasets
  - azureml-widgets

examples/training/simple-train-sdk/img-classification-training.ipynb METASEP
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Copyright (c) Microsoft Corporation. All rights reserved.\n",
    "\n",
    "Licensed under the MIT License."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Tutorial #1: Train an image classification model with Azure Arc-enabled Machine Learning\n",
    "\n",
    "In this tutorial, you train a machine learning model on Azure Arc-enabled Kubernetes cluster. You'll use the training and deployment workflow for Azure Machine Learning service in a Python Jupyter notebook.  You can then use the notebook as a template to train your own machine learning model with your own data.  \n",
    "\n",
    "This tutorial trains a simple logistic regression using the [MNIST](https://azure.microsoft.com/services/open-datasets/catalog/mnist/) dataset and [scikit-learn](http://scikit-learn.org) with Azure Machine Learning.  MNIST is a popular dataset consisting of 70,000 grayscale images. Each image is a handwritten digit of 28x28 pixels, representing a number from 0 to 9. The goal is to create a multi-class classifier to identify the digit a given image represents. \n",
    "\n",
    "Learn how to:\n",
    "\n",
    "> * Set up your development environment\n",
    "> * Access and examine the data\n",
    "> * Train a simple logistic regression model on Azure Arc-enabled Kubernetes cluster\n",
    "> * Review training results, find and register the best model\n",
    "\n",
    "\n",
    "## Prerequisites\n",
    "\n",
    "See prerequisites in the [Azure Machine Learning documentation](https://docs.microsoft.com/azure/machine-learning/service/tutorial-train-models-with-aml#prerequisites).\n",
    "\n",
    "On the computer running this notebook, conda install matplotlib, numpy, scikit-learn=0.22.1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Set up your development environment\n",
    "\n",
    "All the setup for your development work can be accomplished in a Python notebook.  Setup includes:\n",
    "\n",
    "* Importing Python packages\n",
    "* Connecting to a workspace to enable communication between your local computer and remote resources\n",
    "* Creating an experiment to track all your runs\n",
    "* Creating a remote compute target to use for training\n",
    "\n",
    "### Import packages\n",
    "\n",
    "Import Python packages you need in this session. Also display the Azure Machine Learning SDK version."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "check version"
    ]
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import azureml.core\n",
    "from azureml.core import Workspace\n",
    "\n",
    "# check core SDK version number, note AML Python SDK 1.30 or above is required for this sample notebook\n",
    "print(\"Azure ML SDK Version: \", azureml.core.VERSION)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Connect to workspace\n",
    "\n",
    "Create a workspace object from the existing workspace. `Workspace.from_config()` reads the file **config.json** and loads the details into an object named `ws`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "load workspace"
    ]
   },
   "outputs": [],
   "source": [
    "# load workspace configuration from the config.json file in the current folder.\n",
    "ws = Workspace.from_config()\n",
    "print(ws.name, ws.location, ws.resource_group, sep='\\t')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create experiment\n",
    "\n",
    "Create an experiment to track the runs in your workspace. A workspace can have muliple experiments. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "create experiment"
    ]
   },
   "outputs": [],
   "source": [
    "experiment_name = 'Tutorial-sklearn-mnist'\n",
    "\n",
    "from azureml.core import Experiment\n",
    "exp = Experiment(workspace=ws, name=experiment_name)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create compute target - attach Azure Arc-enabled Kubernetes cluster to AML workspace\n",
    "\n",
    "> Note that you would need Azure Arc-enabled Kuberenetes cluster resource ID to create a Kubernetes compute target. Talk to your workspace or IT admin if you don't have an Azure Arc-enabled Kubernetes cluster, see [Azure Arc-enable Machine Learning instruction](link to documentation).\n",
    "\n",
    "By using Azure Arc-enabled KubernetesCompute, a customer-managed service, data scientists can train machine learning models on Kubernetes cluster anywhere, in cloud or on-premise (no Kubernetes expertise needed). \n",
    "\n",
    "The code below attaches the Azure Arc-enabled Kubernetes cluster for you if they don't already exist in your workspace.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "create mlc",
     "amlcompute"
    ]
   },
   "outputs": [],
   "source": [
    "from azureml.core.compute import KubernetesCompute\n",
    "from azureml.core.compute import ComputeTarget\n",
    "import os\n",
    "\n",
    "# choose a name for your Azure Arc-enabled Kubernetes compute\n",
    "amlarc_compute_name = os.environ.get(\"AML_COMPUTE_CLUSTER_NAME\", \"amlarc-ml\")\n",
    "\n",
    "# resource ID for your Azure Arc-enabled Kubernetes cluster\n",
    "resource_id = \"/subscriptions/123/resourceGroups/rg/providers/Microsoft.Kubernetes/connectedClusters/amlarc-cluster\"\n",
    "\n",
    "if amlarc_compute_name in ws.compute_targets:\n",
    "    amlarc_compute = ws.compute_targets[amlarc_compute_name]\n",
    "    if amlarc_compute and type(amlarc_compute) is KubernetesCompute:\n",
    "        print(\"found compute target: \" + amlarc_compute_name)\n",
    "else:\n",
    "    print(\"creating new compute target...\")\n",
    "    amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id) \n",
    "    amlarc_compute = ComputeTarget.attach(ws, amlarc_compute_name, amlarc_attach_configuration)\n",
    "\n",
    " \n",
    "    amlarc_compute.wait_for_completion(show_output=True)\n",
    "    \n",
    "     # For a more detailed view of current KubernetesCompute status, use get_status()\n",
    "    print(amlarc_compute.get_status().serialize())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You now have the necessary packages and compute resources to train a model in the cloud. \n",
    "\n",
    "## Explore data\n",
    "\n",
    "Before you train a model, you need to understand the data that you are using to train it. In this section you learn how to:\n",
    "\n",
    "* Download the MNIST dataset\n",
    "* Display some sample images\n",
    "\n",
    "### Download the MNIST dataset\n",
    "\n",
    "Use Azure Open Datasets to get the raw MNIST data files. [Azure Open Datasets](https://docs.microsoft.com/azure/open-datasets/overview-what-are-open-datasets) are curated public datasets that you can use to add scenario-specific features to machine learning solutions for more accurate models. Each dataset has a corrseponding class, `MNIST` in this case, to retrieve the data in different ways.\n",
    "\n",
    "This code retrieves the data as a `FileDataset` object, which is a subclass of `Dataset`. A `FileDataset` references single or multiple files of any format in your datastores or public urls. The class provides you with the ability to download or mount the files to your compute by creating a reference to the data source location. Additionally, you register the Dataset to your workspace for easy retrieval during training.\n",
    "\n",
    "Follow the [how-to](https://aka.ms/azureml/howto/createdatasets) to learn more about Datasets and their usage in the SDK."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core import Dataset\n",
    "from azureml.opendatasets import MNIST\n",
    "\n",
    "data_folder = os.path.join(os.getcwd(), 'data')\n",
    "os.makedirs(data_folder, exist_ok=True)\n",
    "\n",
    "mnist_file_dataset = MNIST.get_file_dataset()\n",
    "mnist_file_dataset.download(data_folder, overwrite=True)\n",
    "\n",
    "mnist_file_dataset = mnist_file_dataset.register(workspace=ws,\n",
    "                                                 name='mnist_opendataset',\n",
    "                                                 description='training and test dataset',\n",
    "                                                 create_new_version=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Display some sample images\n",
    "\n",
    "Load the compressed files into `numpy` arrays. Then use `matplotlib` to plot 30 random images from the dataset with their labels above them. Note this step requires a `load_data` function that's included in an `utils.py` file. This file is included in the sample folder. Please make sure it is placed in the same folder as this notebook. The `load_data` function simply parses the compresse files into numpy arrays."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# make sure utils.py is in the same directory as this code\n",
    "from utils import load_data\n",
    "import glob\n",
    "\n",
    "\n",
    "# note we also shrink the intensity values (X) from 0-255 to 0-1. This helps the model converge faster.\n",
    "X_train = load_data(glob.glob(os.path.join(data_folder,\"**/train-images-idx3-ubyte.gz\"), recursive=True)[0], False) / 255.0\n",
    "X_test = load_data(glob.glob(os.path.join(data_folder,\"**/t10k-images-idx3-ubyte.gz\"), recursive=True)[0], False) / 255.0\n",
    "y_train = load_data(glob.glob(os.path.join(data_folder,\"**/train-labels-idx1-ubyte.gz\"), recursive=True)[0], True).reshape(-1)\n",
    "y_test = load_data(glob.glob(os.path.join(data_folder,\"**/t10k-labels-idx1-ubyte.gz\"), recursive=True)[0], True).reshape(-1)\n",
    "\n",
    "\n",
    "# now let's show some randomly chosen images from the traininng set.\n",
    "count = 0\n",
    "sample_size = 30\n",
    "plt.figure(figsize = (16, 6))\n",
    "for i in np.random.permutation(X_train.shape[0])[:sample_size]:\n",
    "    count = count + 1\n",
    "    plt.subplot(1, sample_size, count)\n",
    "    plt.axhline('')\n",
    "    plt.axvline('')\n",
    "    plt.text(x=10, y=-10, s=y_train[i], fontsize=18)\n",
    "    plt.imshow(X_train[i].reshape(28, 28), cmap=plt.cm.Greys)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train on Azure Arc-enabled Kubernetes cluster\n",
    "\n",
    "For this task, you submit the job to run on the Azure Arc-enabled Kuberenetes cluster you set up earlier.  To submit a job you:\n",
    "* Create a directory\n",
    "* Create a training script\n",
    "* Create a script run configuration\n",
    "* Submit the job \n",
    "\n",
    "### Create a directory\n",
    "\n",
    "Create a directory to deliver the necessary code from your computer to the remote resource."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "script_folder = os.path.join(os.getcwd(), \"sklearn-mnist\")\n",
    "os.makedirs(script_folder, exist_ok=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create a training script\n",
    "\n",
    "To submit the job to the cluster, first create a training script. Run the following code to create the training script called `train.py` in the directory you just created. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%writefile $script_folder/train.py\n",
    "\n",
    "import argparse\n",
    "import os\n",
    "import numpy as np\n",
    "import glob\n",
    "\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "import joblib\n",
    "\n",
    "from azureml.core import Run\n",
    "from utils import load_data\n",
    "\n",
    "# let user feed in 2 parameters, the dataset to mount or download, and the regularization rate of the logistic regression model\n",
    "parser = argparse.ArgumentParser()\n",
    "parser.add_argument('--data-folder', type=str, dest='data_folder', help='data folder mounting point')\n",
    "parser.add_argument('--regularization', type=float, dest='reg', default=0.01, help='regularization rate')\n",
    "args = parser.parse_args()\n",
    "\n",
    "data_folder = args.data_folder\n",
    "print('Data folder:', data_folder)\n",
    "\n",
    "# load train and test set into numpy arrays\n",
    "# note we scale the pixel intensity values to 0-1 (by dividing it with 255.0) so the model can converge faster.\n",
    "X_train = load_data(glob.glob(os.path.join(data_folder, '**/train-images-idx3-ubyte.gz'), recursive=True)[0], False) / 255.0\n",
    "X_test = load_data(glob.glob(os.path.join(data_folder, '**/t10k-images-idx3-ubyte.gz'), recursive=True)[0], False) / 255.0\n",
    "y_train = load_data(glob.glob(os.path.join(data_folder, '**/train-labels-idx1-ubyte.gz'), recursive=True)[0], True).reshape(-1)\n",
    "y_test = load_data(glob.glob(os.path.join(data_folder, '**/t10k-labels-idx1-ubyte.gz'), recursive=True)[0], True).reshape(-1)\n",
    "\n",
    "print(X_train.shape, y_train.shape, X_test.shape, y_test.shape, sep = '\\n')\n",
    "\n",
    "# get hold of the current run\n",
    "run = Run.get_context()\n",
    "\n",
    "print('Train a logistic regression model with regularization rate of', args.reg)\n",
    "clf = LogisticRegression(C=1.0/args.reg, solver=\"liblinear\", multi_class=\"auto\", random_state=42)\n",
    "clf.fit(X_train, y_train)\n",
    "\n",
    "print('Predict the test set')\n",
    "y_hat = clf.predict(X_test)\n",
    "\n",
    "# calculate accuracy on the prediction\n",
    "acc = np.average(y_hat == y_test)\n",
    "print('Accuracy is', acc)\n",
    "\n",
    "run.log('regularization rate', np.float(args.reg))\n",
    "run.log('accuracy', np.float(acc))\n",
    "\n",
    "os.makedirs('outputs', exist_ok=True)\n",
    "# note file saved in the outputs folder is automatically uploaded into experiment record\n",
    "joblib.dump(value=clf, filename='outputs/sklearn_mnist_model.pkl')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notice how the script gets data and saves models:\n",
    "\n",
    "+ The training script reads an argument to find the directory containing the data.  When you submit the job later, you point to the dataset for this argument:\n",
    "`parser.add_argument('--data-folder', type=str, dest='data_folder', help='data directory mounting point')`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "+ The training script saves your model into a directory named outputs. <br/>\n",
    "`joblib.dump(value=clf, filename='outputs/sklearn_mnist_model.pkl')`<br/>\n",
    "Anything written in this directory is automatically uploaded into your workspace. You'll access your model from this directory later in the tutorial."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The file `utils.py` is referenced from the training script to load the dataset correctly.  Copy this script into the script folder so that it can be accessed along with the training script on the remote resource."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import shutil\n",
    "shutil.copy('utils.py', script_folder)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Configure the training job\n",
    "\n",
    "Create a ScriptRunConfig object to specify the configuration details of your training job, including your training script, environment to use, and the compute target to run on. Configure the ScriptRunConfig by specifying:\n",
    "\n",
    "* The directory that contains your scripts. All the files in this directory are uploaded into the cluster nodes for execution. \n",
    "* The compute target.  In this case you will use the AmlCompute you created\n",
    "* The training script name, train.py\n",
    "* An environment that contains the libraries needed to run the script\n",
    "* Arguments required from the training script. \n",
    "\n",
    "In this tutorial, the target is KubernetesCompute. All files in the script folder are uploaded into the cluster nodes for execution. The data_folder is set to use the dataset.\n",
    "\n",
    "First, create the environment that contains: the scikit-learn library, azureml-dataset-runtime required for accessing the dataset, and azureml-defaults which contains the dependencies for logging metrics.\n",
    "\n",
    "Once the environment is defined, register it with the Workspace to re-use later."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.environment import Environment\n",
    "from azureml.core.conda_dependencies import CondaDependencies\n",
    "\n",
    "# to install required packages\n",
    "env = Environment('tutorial-env')\n",
    "cd = CondaDependencies.create(pip_packages=['azureml-dataset-runtime[pandas,fuse]', 'azureml-defaults'], conda_packages = ['scikit-learn==0.22.1'])\n",
    "\n",
    "env.python.conda_dependencies = cd\n",
    "\n",
    "# Register environment to re-use later\n",
    "env.register(workspace = ws)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Then, create the ScriptRunConfig by specifying the training script, compute target and environment."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "configure estimator"
    ]
   },
   "outputs": [],
   "source": [
    "from azureml.core import ScriptRunConfig\n",
    "\n",
    "args = ['--data-folder', mnist_file_dataset.as_mount(), '--regularization', 0.5]\n",
    "\n",
    "src = ScriptRunConfig(source_directory=script_folder,\n",
    "                      script='train.py', \n",
    "                      arguments=args,\n",
    "                      compute_target=amlarc_compute,\n",
    "                      environment=env)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Submit the job to the Azure Arc-enabled Kubernetes cluster\n",
    "\n",
    "Run the experiment by submitting the ScriptRunConfig object. And you can navigate to Azure portal to monitor the run."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "remote run",
     "amlcompute",
     "scikit-learn"
    ]
   },
   "outputs": [],
   "source": [
    "run = exp.submit(config=src)\n",
    "run"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since the call is asynchronous, it returns a **Preparing** or **Running** state as soon as the job is started.\n",
    "\n",
    "## Monitor a remote run\n",
    "\n",
    "In total, the first run takes **approximately 10 minutes**. But for subsequent runs, as long as the dependencies in the Azure ML environment don't change, the same image is reused and hence the container start up time is much faster.\n",
    "\n",
    "Here is what's happening while you wait:\n",
    "\n",
    "- **Image creation**: A Docker image is created matching the Python environment specified by the Azure ML environment. The image is built and stored in the ACR (Azure Container Registry) associated with your workspace. Image creation and uploading takes **about 5 minutes**. \n",
    "\n",
    "  This stage happens once for each Python environment since the container is cached for subsequent runs.  During image creation, logs are streamed to the run history. You can monitor the image creation progress using these logs.\n",
    "\n",
    "- **Scaling**: If the remote cluster requires more nodes to execute the run than currently available, additional nodes are added automatically. Scaling typically takes **about 5 minutes.**\n",
    "\n",
    "- **Running**: In this stage, the necessary scripts and files are sent to the compute target, then data stores are mounted/copied, then the entry_script is run. While the job is running, stdout and the files in the ./logs directory are streamed to the run history. You can monitor the run's progress using these logs.\n",
    "\n",
    "- **Post-Processing**: The ./outputs directory of the run is copied over to the run history in your workspace so you can access these results.\n",
    "\n",
    "\n",
    "You can check the progress of a running job in multiple ways. This tutorial uses a Jupyter widget as well as a `wait_for_completion` method. \n",
    "\n",
    "### Jupyter widget\n",
    "\n",
    "Watch the progress of the run with a Jupyter widget.  Like the run submission, the widget is asynchronous and provides live updates every 10-15 seconds until the job completes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "use notebook widget"
    ]
   },
   "outputs": [],
   "source": [
    "from azureml.widgets import RunDetails\n",
    "RunDetails(run).show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "By the way, if you need to cancel a run, you can follow [these instructions](https://aka.ms/aml-docs-cancel-run)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Get log results upon completion\n",
    "\n",
    "Model training happens in the background. You can use `wait_for_completion` to block and wait until the model has completed training before running more code. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "remote run",
     "amlcompute",
     "scikit-learn"
    ]
   },
   "outputs": [],
   "source": [
    "# specify show_output to True for a verbose log\n",
    "run.wait_for_completion(show_output=True) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Display run results\n",
    "\n",
    "You now have a model trained on a remote cluster.  Retrieve all the metrics logged during the run, including the accuracy of the model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "get metrics"
    ]
   },
   "outputs": [],
   "source": [
    "print(run.get_metrics())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the next tutorial you will explore this model in more detail.\n",
    "\n",
    "## Register model\n",
    "\n",
    "The last step in the training script wrote the file `outputs/sklearn_mnist_model.pkl` in a directory named `outputs` in the VM of the cluster where the job is executed. `outputs` is a special directory in that all content in this  directory is automatically uploaded to your workspace.  This content appears in the run record in the experiment under your workspace. Hence, the model file is now also available in your workspace.\n",
    "\n",
    "You can see files associated with that run."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "query history"
    ]
   },
   "outputs": [],
   "source": [
    "print(run.get_file_names())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Register the model in the workspace so that you (or other collaborators) can later query, examine, and deploy this model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "register model from history"
    ]
   },
   "outputs": [],
   "source": [
    "# register model \n",
    "model = run.register_model(model_name='sklearn_mnist', model_path='outputs/sklearn_mnist_model.pkl')\n",
    "print(model.name, model.id, model.version, sep='\\t')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Summary\n",
    "\n",
    "In this Azure Machine Learning tutorial, you used Python to:\n",
    "\n",
    "> * Set up your development environment\n",
    "> * Access and examine the data\n",
    "> * Train multiple models on Azure Arc-enabled Kubernetes cluster using the popular scikit-learn machine learning library\n",
    "> * Review training details and register the best model\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![Impressions](https://PixelServer20190423114238.azurewebsites.net/api/impressions/NotebookVM/tutorials/img-classification-part1-training.png)"
   ]
  }
 ],
 "metadata": {
  "authors": [
   {
    "name": "maxluk"
   }
  ],
  "categories": [
   "tutorials",
   "image-classification-mnist-data"
  ],
  "kernelspec": {
   "display_name": "Python (amlarc)",
   "language": "python",
   "name": "amlarc"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  },
  "msauthor": "roastala",
  "network_required": false
 },
 "nbformat": 4,
 "nbformat_minor": 2
}

examples/training/simple-train-cli/job.yml METASEP
experiment_name: Tutorial-sklearn-mnist
code:
  local_path: ./src
command: python train.py --data-folder ./mnist-data --regularization 0.5
environment: azureml:AzureML-sklearn-0.24-ubuntu18.04-py37-cpu:7
compute: azureml:<your compute target name>
resources:
  instance_type: <your instance type>
    
examples/inference/simple-flow/sklearn-model.yml METASEP
$schema: https://azuremlschemas.azureedge.net/latest/model.schema.json
name: sklearn-model
version: 1
datastore: azureml:workspaceartifactstore
path: "ExperimentRun/dcid.9c143e8b-a6ed-4c6f-a907-34b8ec21127c/outputs/sklearn_mnist_model.pkl"
description: Model asset from run output folder.
examples/inference/simple-flow/sample-request.json METASEP
{"data": [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.11372549019607843, 0.6862745098039216, 0.996078431372549, 0.9921568627450981, 0.9921568627450981, 0.9921568627450981, 0.47843137254901963, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.03137254901960784, 0.7725490196078432, 0.9882352941176471, 0.9921568627450981, 0.9882352941176471, 0.9882352941176471, 0.9882352941176471, 0.9882352941176471, 0.6235294117647059, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.15294117647058825, 0.4980392156862745, 0.8862745098039215, 0.9882352941176471, 0.9882352941176471, 0.9803921568627451, 0.9333333333333333, 0.9882352941176471, 0.9882352941176471, 0.9882352941176471, 0.9098039215686274, 0.12549019607843137, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2784313725490196, 0.9921568627450981, 0.9882352941176471, 0.9882352941176471, 0.9254901960784314, 0.7411764705882353, 0.45098039215686275, 0.10980392156862745, 0.9372549019607843, 0.9882352941176471, 0.9882352941176471, 0.9921568627450981, 0.24705882352941178, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.10588235294117647, 0.8274509803921568, 0.9921568627450981, 0.9882352941176471, 0.6078431372549019, 0.43529411764705883, 0.0, 0.0, 0.4549019607843137, 0.9764705882352941, 0.9882352941176471, 0.6431372549019608, 0.8549019607843137, 0.043137254901960784, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.49411764705882355, 0.9921568627450981, 0.996078431372549, 0.592156862745098, 0.0, 0.0, 0.0, 0.03137254901960784, 0.788235294117647, 0.9921568627450981, 0.8470588235294118, 0.07058823529411765, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6627450980392157, 0.9882352941176471, 0.7294117647058823, 0.06274509803921569, 0.0, 0.0, 0.0, 0.3058823529411765, 0.9882352941176471, 0.8235294117647058, 0.3215686274509804, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6627450980392157, 0.9882352941176471, 0.6196078431372549, 0.0, 0.0, 0.0, 0.21176470588235294, 0.9607843137254902, 0.9882352941176471, 0.9137254901960784, 0.16470588235294117, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.38823529411764707, 0.9882352941176471, 0.9372549019607843, 0.5215686274509804, 0.023529411764705882, 0.0, 0.5176470588235295, 0.9921568627450981, 0.7686274509803922, 0.6745098039215687, 0.10980392156862745, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.043137254901960784, 0.6823529411764706, 0.9921568627450981, 0.9882352941176471, 0.596078431372549, 0.3843137254901961, 0.9647058823529412, 0.9921568627450981, 0.6588235294117647, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.48627450980392156, 0.9529411764705882, 0.9921568627450981, 0.9921568627450981, 0.9921568627450981, 0.9019607843137255, 0.10588235294117647, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.18823529411764706, 0.9294117647058824, 0.9882352941176471, 0.9882352941176471, 0.8274509803921568, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.03137254901960784, 0.9176470588235294, 0.9882352941176471, 0.9882352941176471, 0.9803921568627451, 0.7725490196078432, 0.5294117647058824, 0.6313725490196078, 0.2901960784313726, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4392156862745098, 0.9882352941176471, 0.9882352941176471, 0.7803921568627451, 0.7843137254901961, 0.9882352941176471, 0.9882352941176471, 0.7137254901960784, 0.44313725490196076, 0.10588235294117647, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1411764705882353, 0.9490196078431372, 0.9882352941176471, 0.4392156862745098, 0.027450980392156862, 0.027450980392156862, 0.33725490196078434, 0.5411764705882353, 0.8509803921568627, 0.9882352941176471, 0.5882352941176471, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.16862745098039217, 0.9921568627450981, 0.9803921568627451, 0.27450980392156865, 0.0, 0.0, 0.0, 0.0, 0.10588235294117647, 0.5882352941176471, 1.0, 0.49019607843137253, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.16862745098039217, 0.9882352941176471, 0.9058823529411765, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1411764705882353, 0.9921568627450981, 0.6588235294117647, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5450980392156862, 0.9882352941176471, 0.9137254901960784, 0.08627450980392157, 0.050980392156862744, 0.0, 0.06274509803921569, 0.12156862745098039, 0.6, 0.9450980392156862, 0.9803921568627451, 0.4666666666666667, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3058823529411765, 0.9882352941176471, 0.9882352941176471, 0.9882352941176471, 0.8509803921568627, 0.6627450980392157, 0.9098039215686274, 0.9882352941176471, 0.9882352941176471, 0.9882352941176471, 0.7254901960784313, 0.13725490196078433, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.09803921568627451, 0.7137254901960784, 0.7803921568627451, 0.7490196078431373, 0.5764705882352941, 0.7490196078431373, 0.8862745098039215, 0.7803921568627451, 0.5764705882352941, 0.403921568627451, 0.07058823529411765, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]]}
examples/inference/simple-flow/endpoint.yml METASEP
name: sklearn-mnist
compute: azureml:tailwind-k8s
auth_mode: key

examples/inference/simple-flow/blue-deployment.yml METASEP
name: blue
type: kubernetes
endpoint_name: sklearn-mnist
app_insights_enabled: true
model: 
  name: sklearn_mnist_model
  version: 1
  local_path: ./model/sklearn_mnist_model.pkl
code_configuration:
  code:
    name: "score"
    version: 1
    local_path: ./script/
  scoring_script: score.py
instance_type: defaultinstancetype
environment:
  name: sklearn-mnist-env
  version: 1
  image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1
  conda_file: ./model/conda.yml
request_settings:
  request_timeout_ms: 3000
  max_concurrent_requests_per_instance: 1
  max_queue_wait_ms: 3000
resources:
  requests:
    cpu: "0.1"
    memory: "0.1Gi"
  limits:
    cpu: "0.2"
    memory: "0.2Gi"
liveness_probe:
  initial_delay: 10
  period: 10
  timeout: 10
  success_threshold: 1
  failure_threshold: 1
readiness_probe:
  initial_delay: 10
  period: 10
  timeout: 10
  success_threshold: 1
  failure_threshold: 1

examples/inference/gpu-inferencing/sample-request.json METASEP
{"data": [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.07450980392156863, 0.4588235294117647, 0.9450980392156862, 0.7529411764705882, 0.5529411764705883, 0.17254901960784313, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2, 0.6666666666666666, 0.8823529411764706, 0.9137254901960784, 0.7686274509803922, 0.7725490196078432, 0.9176470588235294, 0.8784313725490196, 0.4666666666666667, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.40784313725490196, 0.9647058823529412, 0.9568627450980393, 0.5568627450980392, 0.1450980392156863, 0.0, 0.0, 0.4666666666666667, 0.9882352941176471, 0.9882352941176471, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.396078431372549, 0.9647058823529412, 0.9882352941176471, 0.09803921568627451, 0.0, 0.0, 0.0, 0.10196078431372549, 0.9529411764705882, 0.9882352941176471, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.11372549019607843, 0.8470588235294118, 0.807843137254902, 0.24705882352941178, 0.0, 0.0, 0.0, 0.0, 0.1607843137254902, 0.9921568627450981, 0.6588235294117647, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8470588235294118, 0.9882352941176471, 0.36470588235294116, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8470588235294118, 0.9882352941176471, 0.5568627450980392, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9921568627450981, 0.9882352941176471, 0.2196078431372549, 0.0, 0.0, 0.0, 0.0, 0.2, 0.9921568627450981, 0.9137254901960784, 0.1450980392156863, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9921568627450981, 0.9882352941176471, 0.9058823529411765, 0.49019607843137253, 0.6901960784313725, 0.8823529411764706, 0.19607843137254902, 0.2, 0.9921568627450981, 0.5686274509803921, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.050980392156862744, 0.7372549019607844, 0.8823529411764706, 0.8823529411764706, 0.4470588235294118, 0.14901960784313725, 0.0392156862745098, 0.8980392156862745, 1.0, 0.32941176470588235, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3333333333333333, 0.9882352941176471, 0.9176470588235294, 0.10980392156862745, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4823529411764706, 0.9882352941176471, 0.5372549019607843, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.10196078431372549, 0.8705882352941177, 0.9882352941176471, 0.050980392156862744, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.47058823529411764, 0.9921568627450981, 0.9921568627450981, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.027450980392156862, 0.7333333333333333, 0.9882352941176471, 0.592156862745098, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.25882352941176473, 0.9882352941176471, 0.8784313725490196, 0.07450980392156863, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5529411764705883, 0.9882352941176471, 0.803921568627451, 0.050980392156862744, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5529411764705883, 0.9921568627450981, 0.807843137254902, 0.050980392156862744, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6509803921568628, 0.9882352941176471, 0.5568627450980392, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9921568627450981, 0.9137254901960784, 0.1450980392156863, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.796078431372549, 0.7686274509803922, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]]}
examples/inference/gpu-inferencing/endpoint.yml METASEP
name: tf-mnist
compute: azureml:<your GPU compute target name>
auth_mode: key

examples/inference/gpu-inferencing/blue-deployment.yml METASEP
name: blue
type: kubernetes
endpoint_name: tf-mnist
app_insights_enabled: true
model:
  name: tf-mnist
  version: 1
  local_path: ./model/
code_configuration:
  code:
    name: "score"
    version: 1
    local_path: ./script/
  scoring_script: score.py
instance_type: myinstancetypename
environment: 
  name: tf-mnist-model
  version: 1
  image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1
  conda_file: ./model/conda.yml
request_settings:
  request_timeout_ms: 3000
  max_concurrent_requests_per_instance: 1
  max_queue_wait_ms: 3000
resources:
  requests:
    cpu: "0.1"
    memory: "0.1Gi"
  limits:
    cpu: "0.2"
    memory: "0.2Gi"
    nvidia.com/gpu: "1"
liveness_probe:
  initial_delay: 10
  period: 10
  timeout: 10
  success_threshold: 1
  failure_threshold: 1
readiness_probe:
  initial_delay: 10
  period: 10
  timeout: 10
  success_threshold: 1
  failure_threshold: 1

docs/AKS-HCI/video/kfserving_tf_blob_structure.mp4 METASEP

docs/AKS-HCI/test-data/flower_sample_test_input.json METASEP
{
  "instances": [
    {
      "image_bytes": {
        "b64": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAErASsDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwC9A42ir9vA0nOOKxYJhkDqe1bNvO0ZAYdaIsC8LLjOwH60yWDAwY1/75qzDcDAz0qfhl55BqxGE1pCzZwVPt0qJ7MgZQbh7da1Z7bncBVQgoaVhlGFvKlBIwOhqxPFxkdKmdY5xiQYP94daaqtGPKkO5P4X/pU2AoKMMQatWv+tAPXpTJ4ipyBTVYqwYHBFTezA1ivHNRsuRU1tOlymOBIOo9aVoyGNaCIEHanEEEMKXbg07BAx2NICXO5KrvwcVPEcDFRyD5qTYDYhuPuKnA4waitxmQj1FWGX9Ka2ArODzUXU5qxIM81AODzUtjGzHMfvVRcl6mmOMio4V3PSAtwjBUd60l+6DVCMAzH2q6D8v0qo7CIJ3xmsqQ8kmtC5YAVmyctntSbGRkDOT0qWMFyABUWNzD0q5EuxM9zQgJQAqgCkJxS9vemMasA3c8CpFPHNRBgBkinBvSpuBMGxRnPWo1561IOlMBQMEU2R8DFKW2rk1XdsmgCN+TmqskuHIqeUhVNZMkoZyckZqQILTi5UntzWtHMOVbpWQh2zCr6jIBpRGzUjl2jBPHY1chuSODyKx4pOzdKnVyh68VYjbDBlyvSq88G4bhVeG4Kkc8HrV3eGUEVQjLkUr+FRmQgYzV+aMODxzWdIpU0mMerh1wahdCpPvTN21gQamB3jB+qn1rOQDI5GjcMvBFbdvMt1FkfeHWsJhzU1pcG3nDZ4PWlGVgNd4+MigL8uKscMgdeVNRsAORVsRGFwc1G45qfKg/MM/U0jLG3RQPxNS2BCh2OG9DVxwM57GqxRQc8j9asp80I5zjiiIyu64zVdhxVtwMVVak2BUlOTUlumATTXXmpPux0r6AS2vLv7GrLNtFVbM/K596knbgGqT0AqXLZeqbgsRU8x96hJzgCk2A+JPmA61PA4mUSL9wk7fcetULtmEMdvGSJrltgI6hQMsfwH6kVqRIsUaqgAVQAAOwFUgEJ7UwDOc1Ky55/OmtgcCi4EZ6UqqSc0Hk4p46igB44pQaaM5NI7hVx3qkA2V8nHaoAdzE9hTZHOMd6ZczfZoQq/fNDArahcgAxLyf4iKzs0OxJ5696ZUDQP97NaVsdyg+1IPszHlFzU8SRg4jGB6VSQh3linp02mpQm5enNJs9aoBoynfirMFwVOD0qADjDUn3W9qANIsGGQeKqXCK3PekjlIOCeKfJyN1AGXIMZFNik6xscc5U+hqxMgbPrVFwVas2BezvXOMOPvCo2GD7UyOXOG/iHX3p8hGzdn6Vm0M0rG8ZLYxtzz8pp0lyx/iNZUMpzzVkturURKZGP8AEfzpRMw6Nmq5HvTMspz1pAaUVzzhjiptxjPmRnjuKyBNzzxU8NwUbDcqaXoBreYJU3L+VVn5zTEcRvkHKNUjcE4qZdwITyabK3yGpG4GaqzN+7qG9ALNicwn/eNE75UgU2zb/RQfc0krY4rS+gFZgcc0iKM+9Kc81FcI727QxnDyjbu9AepoWrAZpv8Apt7NqB5jA8mAeig/MfxOPyFa4HFQ20KW8KQxrhEUKB7VYXFWAvlkhSDx1PvUchwSAKlD7Uyep6CoS3UnrU9QGHg0DJ5xSb8mjdjvVAOZ9oqs75JOaJX3Hg1GBmmAKRuLt0Xms24lMshbt2qxezgDyEPuxqkxpNjImo4pGOOarmbk0gJvMINWIbp42BB6VBLC0Z9qjVsGjYDqrWVJ4w6n6j0qcxbh71ztndtbyBlPHcetdLayx3Me+Ns+o7irTuJkDRDvwaYVIODWg0IYc9agkgBGDTEUyCv0pwc4wac8ZTg9KjYFRSAil6ZxVOYZFXGPBBqpKKljIFJB61KzFlqJhTkbPBrO+oxysR0qwrkjk1Wxg1IoPBJ4PpSc7BYkOfU0zzHXvke9WNuFBHQ1A/BrKVRoaQm/dweDShyOOtRZB+tAPHNSq6HYv203/LNuh6VeVvkweq1ioxB+lacUm5Nw7jBrVTUoktEsp+SqNw2F4q1I3yCqM5yQKwchpF62Yi0/GkcHgmkh4gAoOSK1UxEfVuKdbKZH8zseF+nrTGO0qo6scVciXgYrWG1xDxwcUm/GQKc3FVS3J5qmwHmUkknoKYXJGaZuBzTd1JMB4PBzxUUkhPApWcnpTFUk1SAdGrOcVW1S/TTbbIwZW4Rff1rQXbEmSefSqC6bHPdNd3Q86U/dDfdQegFUBkWYurnlI2YseWPetSPSZW5llC+yjJrUVABjt6CnHihJICkulWqcsGf/AHjUwt4QMCGMD/cFSM4HWm+YKq4HO/aAww3NRuqtypxTNpFIMisrjFDFDg1ctbySCQSRsQf5/Wqm4MOaT6GlewHY2OrQXWFciOT0J4NaDRq68/nXBLIRwa0bTVLi2wBIWX0bmqU+4rHSSQcFW5HY1TkiKZBGRUtrq8NyNr8N6VaYJIvysCPar0YjGdMDOeKrSL6ng1pXFuUJxyDVCSMgH0qGMqMvao84NTOp61XYkHmspDRYXBxnpSFjG2DyKbEdwK96eR5ilT95elZSKRYglBHlseD0NJKpU4NUlk2nB6VcjlEq7HPzDofWsJTvox2KzcZojbccGnSrgkVCpIkFcdaorblJFg8VctHzlapBs1Ztf9bTw+K01CUS07dvaqMh3TqKulSSTjPHWqCgGdnzkKOtYLGxbDkZoxnEYqR4j5e4HPqKrwncAO2M1X1jVRp+lXFxn7inHu3QCu6E3JKzIaC1lF3qk+05jtgIh/vnlj+AwPzrXUYArnvB0LLoUMshJknZpXJ7kmuhLAZxXcpIgimYjPNVd3HWpJnLHFQgcYp81xjht7U4AGkGFpDPt4QZNaIQ9YiRnoPemng4Tk+tIFdzmRjj0p5dEHFWmAqRfxOeakyAOwquZ93Sk5PJouBM0uKjMrHpUeRn5qQydhRcB3Pc0vHrUYJanbT6UwMX6ikKelafA/gX8qRljPWJfwzScAMsxjNJtx9K0Ht42HykqffkVA8DpzjI9RzUOLQ7lXbijDdRU2zIppX3qRipJ0z1rQttQkj4Ylh655FZjLzQMryDRewHUwXyTphiDnof8aZcQYO5eRXPw3BQ5U4Na1tf5Xa3I9KtSuTYgkjK5x0qpIpwM9K2HRJlLIefSqEsRGR+lRJAUVcxuCO1WpDlROn4iqknTp0p1tPtYo3KNXJOdtGWlcllUMBIvRuv1oGVOD1FOWIiRIz91zgH0qS6VoNwaMgKeJQMgfWvExGK960TeMRpPmqMnD4796JIQsf7s5lGAQT61YeSOS8SFwFkH3WHRuKq6fFJdajMZ3aMRtgqByT269q4nUnJXb2KskMjUiIS7sl32hfTtWhaArIQ42kdaaY/7PvzG6+dFMSWfHC91+nvS2e+Sab7QORNsUZwG7jn0xmpc3a6FYnDpC4lDEl/4G6DtVa5UqRDEADKTj2Hqas3Nkz6hGZGxCFJLL/FzwKluIykkQgQtC53N3Kn0+maxUrNMvRoiEZWPapAJ71keItPkvdPYiNnjg+cQjOZT/8AW61uOY1cGUcryFzUgkZ0JVsDtXfDGWmm9kZuGhX0qJLXT4IACuyMfKe1WZJQFOKiKlSCWycfnUUjjua9ali41PhZk42EbLHNISFFM83nA5pVXPLV3Ql2IaDBf2FOykQycUySUIMDrVZi0h5NbJiJnuGc4WkVWP3qYo29OtSKrt34q0wHhgo4GaCx/CnLCw561OkJP8NWIrBd/apVtj3qysI74FSZjTimBElsO1S+QKQzf3cCk3v60AUiqEcVG0R7DNPIZT92kLY5yRWgFd0I7UwMyGrLHPYGoXQHkVLAYYUlGUwj/oarMhRyrqQam3FDU6yRzoEl7dG7ioaTAzyuR0phQ+tXJreSLn7yHow6GoNhas2h3K5UA5zSrIUI5qQx5qIoBwRUMZehvMEZbB7GrS3Mdy/lMQk3YH+L6HvWJnHHpSs0c0ZinBKeoOCp9Qe1Tz2CxcvY2jY8VXgYMrhhhf73pTY728geO3ukW9tXztuPusvfDe9aECQmMqE3I/OD1FeVmFaKVlua049yNLooVjLD5MMcjORmrZN3LfmHzVjg2bn3LkMvp9TVeS6htbNXSNTk5RiPSrdhdx3ds0lztIcHJHHHt714cr/FY2JTbwGzDJ80kBym48/5xTZHzLFLLEygryw43+lFvJa/YZF52AZEh5IIpkN6k2yCcOcHdtIxzUaktl10gup02zMqlcFRyM0omRElhk25QYGBzu9qqLav9rl+ySII+q7mzz6UxHiXzYbkL9oHzGQHnd2x7VLj0Fc0Fml+y5kjbY2OT/CakaRSEMY/eE7do71krqBkgWNllCzMOdp/P0q35aQPEYHd9wKlSMnjvUuFtykyeW1ju51WQsjIm38e1V5LWRSiGcDy+Hx/ETzmpxK0kgl2ERYwzHru+lJe2pn8trc4kzyC3BHrSTa0ZRG7IkQIbcvTJ65qsUeZ2H3VXqT6065kkSfyIrZiQMFmHHHU06TKWyq7ZbGSfU16GB91uUnotTOYxIVU/eyaSRivFAxgHOaGw3yn8K9+hVhWjeBi01uQFWY05YSe9L5wXjbUiTqeq4+ldcSWSRwkdRmp1RVGW4qITf3TxSg7jljWqJJRJGvTrSGZj0OBTfK3Hini3brV2Ab5jNxTgCetSCE9+DR5ZxinYBAqjmjzVpPKOOtHlU7AVRLwOhoyHFZyuw6VMsz9aq4FghajYYHBpPNzzRvDD0pMCB8HtioiQOhqV1Peq0kZBz2qWBbgu2i44ZT1U9DVwWttdjdAxjfvH/hWGWZDx0qWO4dCGBII7ip5h2L82nlTgvtP+0KrPZSjkbH+jVft9VhnTyrtQQeN4qO7025C+bp06TL/AM8pDj8mH9RSaT2AyJo2X7yEH3FVJJFUdeadN4hlsJvK1Kxnt+cbiNy/nTzf6XerkBTnupK1yVdFcpDdME8935SofKP3s9vetcmCxTZcDcm4/Oh5APrVWK4kuA0dtHjbznODTzAbiaGV0EinO5Dkfn+NfN4ibqTvLRHTHRE8losVspkKT23VY+4z3z9Ka8FvayRyQiT7G/OGHCmp44omsnW5LbsHdGrcLjgfXtQdQVdOkhYeblNqoozx9K57vYTIbmWAT2zoGUOSGUDCk9jS3Fwl7fpsuFjZUAdgM5PSobm/hmsIbZnVmaQEJjgge/arN1FHdxWoh8qBgx3N/s/TuelVta5DZWN79gmliMgaVMkcEBqnhube4s5FmTMjjcGbruPpisvVIn0u5jE9wkz3PAcLjaKkb7Pp8kEkL7lkByHP3SMcj3q+RWTW7Iua0OpLJYzQyZ+VMFAMMD2xn3plnfva3Dw3aeXMg4UntjrVC9vXk8m+ijXbG20kA7m96fNqCSz29y6EmL5Hcp0zjGah0tNtylI14dTVpZHPIz90jk1Na5aLzvNBc/MExwB6fWq7zW63cExVBI8fGO/PFSXksUcgMZbMv+s2jhPeudxWyNUyO7vfOuo0BYKAGc+vtUVwr3upCFNywxrukfH8q02mha0kAjUqqZB6Z46VAl15kGyFQCVOBn+tVSqcmtgavoQtDDgorlSOnOahkzCu6QjaOd3bFPQmGVEeAmM43yZ6+uKknaPa8IAdG4OfSvewlanJ6JL0MZJmb9ttWOVcyeyKT/TFC3Fy5/0fTZCv964kWIfhjcf0qyMRjCKFHsMU1mYmvWi0ZsehuMfvPIiOekbGT9SF/lUhl2+hqDDkU3Yx5NbJiLH2kjocU8XLf3jVUITRsNXcRdE7H+Ol85/7xqmEYdDThuHencC557g/epftL+oqllqTLU7gQKvNPCkHBNOVkIG5amVI2Aw2KYEITqKTYQfSrnkHqMGlMB/u8UgKTKfc00oSORV4REdRQbfnikwMxoh0IqJodp+WtY24I55NNNvj+GpaAx2hYcg0+C5ntmzHIw9uoNXmtjk4FQSQbe1ZO62KRZTVbe7Qw30KAHuRlTUN5YlSj2RhEWeU8sFT9DVCZAB2qvDcSQMfLkIH90nINcmJqtQa6lRjqaUTNNI1rtWJ8E7umfUVIoffHapcA7Ry5GCB/WoLC4juhKZGjSUHaoc4/HPTFVPImsbo3VyywhMjy2OSwPpivm3FuTT3OnoXLuAxTC3FzuWYFtxGDwelN06eHTmfjYe4cckVMyiOSO4nlWSXd8qfwjIqS6uYZb+1V9nmxhjz9OKm+ljNmJetBJqdw8mYlAHl4UqPekt5tQnuVeOESW6ggEN6VY8Tajb6nHBYxnE5bJbHQVDpMdxbXCWECmYjJGDwfqa6Uv3d2tfP8yGJBqcWpTvHdw7Y0G1S33vfH5VB/ZN5GrtegPDJ8lsQ3IPbP1qxc6PEbGW4Fw0FxHlnjK8euKqy67P/AGfBEkb/ALyQYJGFBHaqjr/D2/IhmlYvcaVcpHeRqpC5A/hI+vrVy1vree/vgPnWQj91jqMAdPrVKG6XVZYoZ2ZPJ+YHg7varl8sVlqdvNZkuZ1KMMZIA57VzySbs9xok0/ZCstvdQsuCRtk6qvbBrQWxKwFldjC7fOCfnVewqnA1trLkytiZMojdCh9SO/NT28k8pksN+LhfldsHGPUf0rCd73+81iaBitksnOPlRSWUnhlxVKxaJnCR2hjTqrO2SfpT2tJlb7MzLJCQCW3YJGf8aa8aWDhZWdl6RcYI+prJbWuakrNiCZdwfa3y4+g/wDr1EkYI5/OkjCG1OxtoLDrT9siDBU49ua9fApaNGM77DvIHrxSiFD1wKZ5rZ9KUEsc170DFj/JGeBSi3p6c8ZqYLnoea3RJWNsMcUwwe1XQhPUU7y+MVYGeYcUhirQ8oDjrSGIdSKYGb5dJ5RrQMIPQU3yPaqAykjPpU6R1l29zOhAT5h/d61s28jSLl49n1NNO4CqpHQ08zGPgcmplVT3psiLTsIbHdIxw6496tCNSuQAR6g1mSpg8Ypsd3JC3ysfpSGanlD0pjBV6kVB9viuE2Sh4mP/AC0jP9Kgk02WXm3vkm/2WO1v8Kl+QE8kkXr+VVnngHVAfqaqTaZqEWS8Dkf7Jz/KqLiQZDRupHqprCU5LoNIvy3cfRUT8qpl43kG9FC9ziqbS7eM0eflSvXNefi5TlHQ1glcnu1DeXFbhDvPDHt70+5toZWG26jeeDBUyc+Zj2HP6UkMUJieGEM08gyAR04/SqcNtDYXsVzPdr52SPKAzgnjqK8OPrt+JsTBvPuRDdRPEoG5se/Sori2jsZZFeYusg3K5649KtXLPeX0QikChMh3xnI9qy9ctZY9RiWdzJbsu5SOBmrpq7tsZyNEHTbfRZF8tRJtIEnVmPaq1ldtpzjdJkS4IYDkN6fSqul6XaXBkMrtuJIQZ4X3qndLKLuWISGUQpuDIMFe3Pr2rRQjJuN7kGhrerx3LyNEMoRtlYfxN7Cqtiw1eeGzm/dQRfOXHXPQAVGLL9y7yFEeNcqAfvZ9ahluvs9ukcKmK5XBwBwRnk1pGKS5Ybg0dJZG0jtpIZo8BWPzg859aS2ubi2vY5bmMIJlzC56FQeh9D7VmWIE9rJO75kzkN0GRWhLNeajosyx2jTBfmIf5SPcVzyjrZiHyXTx628kUQ8iYgGQdA2Oa2pIUWKO5tpHNxwjlv4/rWNp0M2raaFtisYUhgX7MK0tPiluoj9omEc8ZZQo6bgec1hVVvloaRZZmWW1jFzNIhiYbWIJ+Q1E01rqN0oeSR1UcBBhc/jz+lWbWKa8jIZAsQOJFc8v7AVS02IxFHkCozE+WhOSR3rFWs31Rqi7A0LRSLblWBGACw+U++Kqi4uI5WRAzhTjIU4NTzzWUEx/erHu6j3Hf9azl1GVh8x4J4NdeCS573aImaS3Of8AWwMPcCp0MMnKPj2NZi3b/wB6p470j70aNX0tKatqc7RpCNlORyPapApzmq0N1bN/ejPvyKuo6EcSK1dSVyRytinja3UUmFz1FL8o6EVdgHgKKXYDzTMgdx+dAkIosA4xDsKPJpPN9qPNHrTA5tBs4Xge1So5HrTTG5HCmmiKQ1QF2OUHgnFSk8etU44znk4NW1QbeTzTEV5Bmqrrz3rSdFxxUDL3xUtDKBB7UbmXoSKtNGOuKYYx6VLAE1C5i+5Mw9qe2r3OPnWN/qtRGIdqY0Xqal3AWXUYHH72yjPuKoSzacTuEBQg9hT5oevFZ8sLHPFcde7VmXEn/eeYtzbdeQDnFPu7KVZo5UkhLxsCD94OfbHWqUbSxgx5zGex7VYa2l/s6NxM0pY/u1QZI+mK+dqRcJnQndGhePGbQO2yMR/MvOM//rrOtymqTML5CsbMNik42iq0cTx2ciXAledJVJjbkIvX86YJUmuw5Lquwgdt/wBPWkoct7feTIfYQ20cs+/zwsbsTsU4I7HNJLo9zY28+oROHSVsuO6qff1ratLiA6O0cpHkiPGdwB4//VVW0uWmsxazo/lzZBcnoMfzo9pK7ZNjKvbeC3KusjzRsnC9dvp+FVHhj+zRsvF2W2kdSR3/AAxW42nyaXL9ktla5gnXO6Q8r+fasW3MqXbwsoM7AgZ4xj6/Wt4Surp3GQ6fFK8skUrEKW+6p4BroLLUpo7l7JciUJkuT8uK5mO21CPUGO8tKnLFDnIqzHdOmpSOJCAVG5mHJp1aanfroTY6K0uDpz/ZCWIGXDp3z6+9WLF7i9vLohkiBfKt6ZHSsHQonvdRmubySRguAFJxx9PSukhsltdRk+yN8kxBCHsTXHWSi2upcS3LMdJkiSWT5X4STt+NUY1k/tF4CVBtiWjdTxIjc8ep57U3Uzf7lR7fdCGyCg3dK0LuaKysYVcDzCwWM7eVz3rFaLu2aIpzWUcTPHdReZFIN6S9Gz3z71Sm0+SNRJC5mg6hh1H1FS3LzvcrNNcJKpGFIOFGDyMdj0qJFubWZpbdv3bHJj6r9R6V6OC3tIzkuw1M8c1MrleCaso0F4uWType4Hr/AFpklnJGN33k/vCvbhDsYtiLLz1qZZcdDVbbkcCnAHtW8SS6s7DoxqZZz6ms0PjrUqyVqmwNETE9zThKezGqKy89alDe9UmIti5cd81ILs+gqiGpd4qrgSC4hI+9SfaYecGssI1OCMO2adwNDz4ienNPE47CqSIT2q1FCfwpgTGTd3xTTz3qVIgKlEQ7UxFXy/SnCLParax47VMsakdKVgKItQad9i9av4A6CgjNS4gZUlkDxjNUbizCg5wAOSa1r6+t7NP3jZbsg5JrltR1Ca+yp/dxdkHf61hU5UtSkmV5prWRinmYj5yw74qKUyCNYbW4KKRwu7H41UWFmc47dfap7aJ5bwY+Zdp3c8189iYWnzNnTF6WHWt3BZwtbvJvn5J2Atkn1Nal49tdaKN6JuhT5Gz0z1Hsax4IBaXztIuUYbd392kupLaK4SRJVZUO5152nH9a5nFSkmhstyWMFxpyQwnDMR5f/wBeoL++utPgt4ZIkw7ArKG+X3xVgSpNJBLYoZTgsQPlO08d6ytZvTq9qbeFNkdq4355PPAIPpnj64rSlFylaW35EMty31ydUTYyOHUDviMU24kuBDJbG0mdo23m5Vcqozyc9/oKct5ZyaD5EETmXAwEUhg44zmtXSdSh/stLedlLbPLkXqzk55x1NKT5FdR2AyIMLcuYZwUCgs55JaibRp49MM7zI4yGYAc8ntV2Hw1DFpzm2u9kj/vA7DgL6GmWp1P+yWHA2pmNxxkgcAj86PaXd4PqFjVleCLT2n2YaNRtK8MQKp6XqM020mPczyEluwH8+P6UzTFuDp9159s8t42XiMg4ZSMEfzqTSrhNTsrqyMUdtK6HDdAD/jWDgkmnrqWhZXv4tUMrMwRslGU5GPatO5gklaK4wJjt+cDnI6jHrWZps88McNnKMCJXRyeQw7Y/WpVvbqynIIV4WO5UIxtB7D6UKnzTUU7D5rIsX1vFqESmJlSc/dbOAf9k+lYkTy20xjdWRgcMp4wa12tbbUpfPspzbXf8SP91/qP6ipJrZpcRX0RhnAwsvUH8e4r2sNhfZxtuYylcpiXOD1PrV63vcEBzj3qhJDLaNslXGfusOhpEkB4rtjeJD1NkxRycj5Se46GoXt2U5x+VVIrhounK+ladtcLKOPxU9RXRFpk2KZiI5IyKaU9K1WgBGV6GoXg9sVaQijgqc1IrVIY8cVGVwaYDw2aN3tUfIOMUZx1FMColwelTLcetY8EzMil12MRyKtI/vVJjNVJ6sJcZ4BrIV8fxVMk2OlO4jYS4Gcc5qdJWx/jWRHcE9MCrUcjN1ancDSDnuRUitVISKg3OwAHcnFQTauqjbANx/vEcUm0hWNZ5khj3yMFHqayLzV5HBW2XaP75/pVCSaS5cF2Lv2H/wBanraTN94rEPVzj9Kzcm9h2KMgLOWclmPJJ5NMispbs/IpCeta6WllEMyFrh/TotLPMzx7eEjHRF4FZOn3Hcx5beCBcMd2OiL0/E96zri6k6Q/JngBa0bqMYJNUU3JcBYY98jDCrjrXFXg+iNIsqbbrbHGznjgA9s9/rVu6sopIo7bcFt4z8zL1Y+/tV2a0EUCNcYeQDkZ4qqLh50MBUfLli/oo7f0ryqlKpFq+5opJk8NjLqdvLcRwxRAjYrg4woHU+grHmt1tdFuJIiRbtIPNbPMuD8oX2J5/Crbx3Oo6WzjfHHI5IROFYD19aFtfK0R/MkEqRfejJ/iPQD/AD61nB8ujfXYe5HGFn8PGHTS0JmfLGQ8r0OM1c02EmTUXhnie7eMJFt5wcYYj86ppNqEcuLe2BtLlVBQj7uM9PSrSSHS7iK8MLbZplXy2Od2Rg49MD9cU5t2aXXX/hwSGH7Tp2gW0UluxYytG28cBc5x+PrWxFdb7dmtoZjE6kR5GSB0/Qg1nWLtNrV2ZhvhY/JC/IxngAU2Rv7S+aKV7ezAbyVX+IBiCD7ZH61lOKk7P1v6jSJbfUdUknaARIG4UkKScDv+NXLCG2mvJpEjLZdmDdmGc7x7+vvVH+0jZazCiZaBIkDKRyD3x+OKtIrmUgYJD70QDgxtnHPfP9KicdNrXGMuruKe/jmRCPLYDPTI71PehhJluR2rLinxNIjLlCxwO4rbhxc2a5O5lG0n+tehhsLrcznIz1GDuGQ3Wtez1QhPJuR5kXTJ61mvGUbHSmjj8K9SneBk9TpPscFzbkQuHjP8BPT8e1Yl5pz2bFgCY/UjkfWi3uXhbKMVP1rUi1NpF2yBXHQ5711WjJE6owgeeePrT1ZlYEZBHStZ7fT5udjQk/3Dx+VQPpqE/u7kH03Cj2bWwXLNleiQhJCFY/ka0Gi4rDNjMvRkb6HFalhcvgW9wCrjhWPetI32YmDwioHgz0rTePNQMuKuwjKeEjmm+Wa0mjB7VEYOaLAciBTwxA60pX0oCVBYqyN3qQSEdqjwT7U4KR0paiJ0uGHQVMLyY8LxVUDHWpFzjHXPQDvRdgSmRmO6Qlj6ntVy2s2lAd/kQ9B3NPtLEIFknAz2X0q8TnhapR6sVyEQiJSEG0d/ekEZ/CpxGep6UpPbFOwiuI6jljwOetWSCBmq0uM5zxUtDKM0TSuscalmY4AFaVvYRWEJPDSsPmf/AD2qzY2/lp50g+dhx7CmXj449qhxS1C5g6g5lc/3RU2n6YptHkuB8snUHuOwqWO0Nzcqh+71b6VpXK7k2Lwo4Fc6pJtzY79DnL28nEj+S+yMcAYqsqg2gnmJkVW3yKeuR0rQvbUD5QKqTxFNKmI/vL/hXmYjDato1jIhsZDc2s0wfypSSsag446ULp8MtzBh2PkoN3s3p/WmwxsbSJVGGLFVA75rXMH2BYY4xnAO73NcyoVHzOJfMjOa+hkQpLGY9pZS6KeG7HNPsw9ksdtKo+yWzM5P94MD/ImoJ4AZSSOSckGtJIftGnvGRmRUIX8ulNYZuNkg5tSOaWOe6ilt412ttQkjtmogkmnak7x/xZHPpUGmyAEQsTw4Zfz6V02pWAY7wPxrqw2D91qREp6nLSoRLkjk81oadP5MoVj8j8GmXMJB5FQbSGx2rtjHkehO5vXNvuGQOaznQqeRWjpt2J0+zSn94B8p/vCn3FqRniuvlT1RBkinq5HtTniKE8UzGDQlYLlpZg3B4NSiXFUgTUqscVohFoSZ6GpEmI4PI9KqA5pwY1SYG/DOJUAPWnOtZNvcGNhnpWj52UDKMjvVCGOtR/jUxkVqaVGaAOU8s96UR+lTDHfmjAzUjItgHWkK1IRTcjtSGN2/hWpY2ohAlkHznoD2qCxtwzea3IXpn1rRxk04oQ8ksetSLGKRIwe9TFcAAVYhp4HFAJHbmpQnA9ajkzyAaTArvhs+lMihEtwoxlRyaGHBPartpEIodzfebk1G4EsjhEz7cVkykuxY9e1Xbh9zEdhTLWIPJvP3V6fWolq7DC2hMMOMfvG+8fT2qb7P/e5qdU4J6AcCpjHhQcU7CMO9h3MTj2rLvYtunMv96RR/M/0robtADjHasfUF/dwJ/tFz/L/GuepHdlIj0Wx82VXYfLDkj6mtOa2Lv0qzodvt0/eRy7E/0q48YBAxzVwpJQSBvU5O8tSr9Kdakoy1sX1sOpFZJTyx+NT7NJhczr60MF84TgN86H612cDC+0+Gbj50BP17/rXP3sXnWaTj70R2t/unp+tX/DlySklqT935l+h61UI2k13B7Fe+ttkmMcVjSxlJOK7O8tw65xmudurYhjjtVSgCZQjchgQcMDkH3ro7O5W+t/mx5q/eHr71ze3axJFWLad7aVZU7dR6iiGjBmvPb5BwOaz5IipzitsMlxCJU6NVaaAOpwMGtrEmTjnpSqKlkRgQccios880rDJR0oBpEp7DPIpgOU81agnaM8niqPSnq5HemgNcbW+YdDUm32rNhmKnrxVoS8fepgYGQBTS5zxUXmUbsnrSAk6n1qSOMuwUVEpArRtY9ibm+81CVwJ0QKqqowBxVhIwelMQAnHep1wBgVQiRUxxT9nPJpiMfTJpxbPTigBXGBwaquCRkmpJGO04NVmY49qhgPiTzZVU9Op+lXZZAM1UtPlV3IxuOB9KJZAX46Ck9EBHIST3rQt4wkap36tVS2jMjbyOAePetSKPb1/GiMeoMcibm56CpXXI9qcigCkm4iNNrQDKusFyfwrJvQDPjsigVryYZxnp1rJ5mlyesj5/WsZrSw0dLYw+XYQr6IKc6j0qaMbVC+gpjjn8a3toIpTx74mB61h3URDV00iA8isq8h+UsB14qXEDNs2RmaCU/u5QUb2z3/CqVpI+n34Zlw0TlJB7dDVhl8t8Gm36b9lwOS/yv7kDr+VZtdSkdaCs0QKkFSMg1kXdttdsUnh673I1q55TlPpWpcxZG/HNarVXJOTnt9ueOtVNpXiuimgDBhisua1OCR2qXEdxdNvTbS7HP7p+vsfWtiYY5HQ965sqy9a1dNvRIn2aU8j7pP8AKqi+giSRBIMj7wqm6ZJBGDVyVdrHtULFXODwabGVFJXqKnVtw5pjrtYhuaFyOnSkBIycVHjHFSqcikZc9KYDQeafvPrUJ4NLvNFwME3IHemG9iTlpAPxrg/7QnbrNIf+BGpraR5ZQoyWY4FZ8wHoWnTx3cp2HKJyT2rdjOTWJpUC2tskI6jlj6mtpGAFaoCynB4HNSphScjJqBHwcipN/HuaYibzMdOtG4EYqEMCPencAHFIBJXAXHaoDlwOwpxy30pBjIHYVLGSb9sfHbpUagyuFHUmo5JMtgdBVqyjyTIe/A+lK12BegQAAAcAcVaUHNMRMKKnXGMitCSUDAqG5bjFTZGCap3DDGaljKFw2I5Gz2x+dUrRN17AuONwqzcnMeP7xqPThnUY/QAn/P51k1eSGjpM4HvUTHrTlPHNROeSexrckc/K8duaguIg8RHerIGUP0pjr8ucdKAOcuYjux3zUGzzIJIT1IyPqK1b2Hdll6is4fLKDjvUNDRSs7g2t3FMP4WGfp3rtjiSMHqCK4adNk7pjjJxXV6Ncefp6AnLINppQ7DYyaHDHaao+ScsOtbE6dGFUnXkkVpYkyprXcM4rPeF4XyMjB4I7V0YUEGopLVXBBHWpcRmfDdi4jCScSAfnUchwxp8thhuOMVE0Mu3ruxQMBJng80dDkdKrsxQ8jFOWQ9c0XAtA57Yp3eoVcHvUm71oAR1zUW2pjg0m2lYDxFQc1saGmdQiz25rPEfNa+iri9U+xrGO4Hd2bYArSjO41j2rHArSSTA4rdMC8JNowKcCTjmqqNuFTqcDmmBMCQODQWLcA8UzOeO1Ix7CgALYXimF9qZNVp5xvWFD8xPzH0FEkmSBUtgSpmSRVHVjW7bxhVAHQcVj6aheZpP7vArbT5acUJkwFTj2qBOmTUobkYqhDyflNUJznirjHGRVC4btSYylcHlR7Zo00/6cfZD/MUydssx7dKTTmH21vdD/MVmviGdErfJULHAIzxmlDfKKimPHHrWxJaTlCO9SDBGCO1QxN8n4VMBwPWgDPuo8ZI6VkSRgOCOhreuANprGuEKscdM8UhmZqCbLkH+8oNaHh6fbO8RPDDIqnqfIhbvgjNRafN5F9C3bdistpDOycZ47VQkADlfyrQPIyOtVLlAQHHUVsSVhgZp+3IBFRZwwJ6Gp044HQ0DIZo8jP51QkXYT7VrlQciqVxH19aGBlzqMhu3Q1WeLbyvFXJB1WoFPGKzkNFfJU09Zh3pzpmoHSlcZZ81fWk89fWqmD2pMUcwWPMQvNXrBjHcRkddwFUhVqDggjrWC3A7W2YgYrRjY4rMtTmNT32itJOgreIFtGx0qdSe/Sq0fT8amXk1YibJPPaqVzfAApFye7Ut8zARqCQrZyB3rO6jmonK2g0iS3bMpYntUzP3qCH+OpO4qUNnQadH5dqmep5NaAJ4qvB9xfpU461siCdTlQTUhOce1Rp92pOxoAbI2Kz5z8w/OtB+1Ztx95vpSYFKU5TNRWLldQUeqGpJfun6VBZf8hNf90/yrNbjOkV8pmoJXOCD1Bp0X+pqK4+6a2EXbdsoAatRnjPeqNt91aux0IRDMODWTcja49DWvN1rJuvvGgZl34zAmezGs8NtYEdjWhf/AOpH1/xrPHU1jLcpHbW0omtY3B4YCkccFT0NVNGJOmLn3q3J0rZbEmbJmOQoenUVLBJztqO+6p9aZGTvBpAaQ+YfSoJUzk1Knf6UjfcNUBiXSFTVHcUc+hrTvvu/hWY4+UVEhkoIYUx0psR+apm6VBRUZcUYFSuKZgUAf//Z"
      },
      "key": "   1"
    }
  ]
}
docs/AKS-HCI/test-data/cifar10_test_input.json METASEP
{
  "signature_name": "serving_default",
  "instances": [
    [
      [
        [
          158,
          112,
          49
        ],
        [
          159,
          111,
          47
        ],
        [
          165,
          116,
          51
        ],
        [
          166,
          118,
          53
        ],
        [
          160,
          112,
          46
        ],
        [
          156,
          109,
          41
        ],
        [
          162,
          115,
          47
        ],
        [
          159,
          113,
          45
        ],
        [
          158,
          111,
          44
        ],
        [
          159,
          113,
          41
        ],
        [
          161,
          116,
          41
        ],
        [
          160,
          111,
          52
        ],
        [
          161,
          111,
          49
        ],
        [
          166,
          117,
          41
        ],
        [
          169,
          117,
          45
        ],
        [
          170,
          119,
          44
        ],
        [
          167,
          117,
          40
        ],
        [
          162,
          113,
          38
        ],
        [
          160,
          111,
          39
        ],
        [
          160,
          112,
          43
        ],
        [
          156,
          109,
          44
        ],
        [
          149,
          107,
          45
        ],
        [
          150,
          107,
          45
        ],
        [
          148,
          106,
          43
        ],
        [
          149,
          107,
          44
        ],
        [
          143,
          101,
          39
        ],
        [
          140,
          98,
          43
        ],
        [
          141,
          97,
          41
        ],
        [
          143,
          97,
          38
        ],
        [
          137,
          95,
          36
        ],
        [
          126,
          91,
          36
        ],
        [
          116,
          85,
          33
        ]
      ],
      [
        [
          152,
          112,
          51
        ],
        [
          151,
          110,
          40
        ],
        [
          159,
          114,
          45
        ],
        [
          166,
          116,
          56
        ],
        [
          162,
          112,
          49
        ],
        [
          160,
          113,
          43
        ],
        [
          164,
          117,
          47
        ],
        [
          162,
          114,
          45
        ],
        [
          163,
          116,
          46
        ],
        [
          156,
          110,
          38
        ],
        [
          155,
          111,
          41
        ],
        [
          159,
          110,
          54
        ],
        [
          163,
          113,
          52
        ],
        [
          170,
          119,
          41
        ],
        [
          171,
          117,
          40
        ],
        [
          171,
          115,
          33
        ],
        [
          169,
          115,
          30
        ],
        [
          160,
          111,
          33
        ],
        [
          154,
          112,
          41
        ],
        [
          151,
          115,
          50
        ],
        [
          145,
          110,
          53
        ],
        [
          139,
          104,
          55
        ],
        [
          140,
          102,
          52
        ],
        [
          141,
          100,
          48
        ],
        [
          149,
          105,
          50
        ],
        [
          147,
          102,
          46
        ],
        [
          145,
          102,
          45
        ],
        [
          142,
          97,
          38
        ],
        [
          143,
          98,
          34
        ],
        [
          136,
          95,
          31
        ],
        [
          125,
          91,
          32
        ],
        [
          119,
          88,
          34
        ]
      ],
      [
        [
          151,
          110,
          47
        ],
        [
          151,
          109,
          33
        ],
        [
          158,
          111,
          36
        ],
        [
          167,
          111,
          48
        ],
        [
          160,
          106,
          42
        ],
        [
          163,
          115,
          44
        ],
        [
          165,
          117,
          45
        ],
        [
          165,
          117,
          45
        ],
        [
          163,
          115,
          43
        ],
        [
          162,
          115,
          43
        ],
        [
          158,
          114,
          48
        ],
        [
          157,
          109,
          57
        ],
        [
          161,
          111,
          51
        ],
        [
          166,
          115,
          38
        ],
        [
          167,
          114,
          37
        ],
        [
          169,
          113,
          35
        ],
        [
          170,
          116,
          39
        ],
        [
          159,
          114,
          47
        ],
        [
          145,
          111,
          54
        ],
        [
          121,
          96,
          49
        ],
        [
          110,
          90,
          52
        ],
        [
          98,
          78,
          50
        ],
        [
          101,
          77,
          47
        ],
        [
          114,
          85,
          50
        ],
        [
          120,
          86,
          48
        ],
        [
          134,
          96,
          55
        ],
        [
          143,
          103,
          51
        ],
        [
          140,
          99,
          39
        ],
        [
          142,
          99,
          35
        ],
        [
          139,
          98,
          34
        ],
        [
          130,
          95,
          34
        ],
        [
          120,
          89,
          33
        ]
      ],
      [
        [
          155,
          107,
          40
        ],
        [
          155,
          110,
          32
        ],
        [
          160,
          109,
          31
        ],
        [
          174,
          112,
          44
        ],
        [
          167,
          110,
          43
        ],
        [
          167,
          117,
          46
        ],
        [
          169,
          120,
          48
        ],
        [
          169,
          119,
          48
        ],
        [
          165,
          115,
          44
        ],
        [
          165,
          117,
          45
        ],
        [
          167,
          123,
          57
        ],
        [
          191,
          146,
          95
        ],
        [
          177,
          130,
          75
        ],
        [
          157,
          111,
          41
        ],
        [
          162,
          115,
          47
        ],
        [
          164,
          114,
          54
        ],
        [
          158,
          112,
          58
        ],
        [
          149,
          111,
          67
        ],
        [
          104,
          80,
          47
        ],
        [
          103,
          87,
          65
        ],
        [
          98,
          90,
          76
        ],
        [
          92,
          90,
          84
        ],
        [
          80,
          75,
          66
        ],
        [
          74,
          63,
          50
        ],
        [
          86,
          70,
          52
        ],
        [
          83,
          62,
          39
        ],
        [
          113,
          85,
          45
        ],
        [
          132,
          98,
          46
        ],
        [
          140,
          102,
          43
        ],
        [
          140,
          101,
          39
        ],
        [
          136,
          99,
          39
        ],
        [
          127,
          94,
          36
        ]
      ],
      [
        [
          155,
          107,
          41
        ],
        [
          156,
          114,
          48
        ],
        [
          161,
          115,
          49
        ],
        [
          170,
          114,
          47
        ],
        [
          169,
          114,
          43
        ],
        [
          163,
          113,
          40
        ],
        [
          169,
          120,
          47
        ],
        [
          166,
          116,
          44
        ],
        [
          164,
          113,
          41
        ],
        [
          164,
          116,
          42
        ],
        [
          173,
          128,
          59
        ],
        [
          246,
          214,
          164
        ],
        [
          195,
          156,
          107
        ],
        [
          151,
          114,
          56
        ],
        [
          146,
          111,
          60
        ],
        [
          142,
          108,
          71
        ],
        [
          111,
          80,
          50
        ],
        [
          78,
          53,
          31
        ],
        [
          85,
          69,
          56
        ],
        [
          113,
          103,
          98
        ],
        [
          112,
          110,
          111
        ],
        [
          106,
          114,
          118
        ],
        [
          97,
          102,
          105
        ],
        [
          93,
          94,
          93
        ],
        [
          74,
          72,
          67
        ],
        [
          84,
          78,
          70
        ],
        [
          85,
          73,
          47
        ],
        [
          105,
          83,
          45
        ],
        [
          128,
          96,
          48
        ],
        [
          138,
          101,
          46
        ],
        [
          133,
          94,
          36
        ],
        [
          129,
          93,
          36
        ]
      ],
      [
        [
          148,
          109,
          54
        ],
        [
          133,
          104,
          64
        ],
        [
          130,
          100,
          57
        ],
        [
          147,
          112,
          53
        ],
        [
          161,
          115,
          44
        ],
        [
          165,
          113,
          39
        ],
        [
          167,
          116,
          41
        ],
        [
          167,
          115,
          41
        ],
        [
          163,
          111,
          37
        ],
        [
          165,
          116,
          39
        ],
        [
          163,
          118,
          42
        ],
        [
          180,
          138,
          85
        ],
        [
          157,
          122,
          78
        ],
        [
          128,
          102,
          58
        ],
        [
          97,
          75,
          43
        ],
        [
          66,
          50,
          31
        ],
        [
          69,
          58,
          43
        ],
        [
          66,
          56,
          45
        ],
        [
          89,
          83,
          76
        ],
        [
          118,
          113,
          110
        ],
        [
          122,
          121,
          120
        ],
        [
          119,
          122,
          122
        ],
        [
          114,
          116,
          116
        ],
        [
          94,
          96,
          96
        ],
        [
          99,
          100,
          97
        ],
        [
          91,
          91,
          86
        ],
        [
          58,
          58,
          47
        ],
        [
          67,
          58,
          37
        ],
        [
          108,
          84,
          49
        ],
        [
          140,
          105,
          58
        ],
        [
          138,
          98,
          44
        ],
        [
          134,
          95,
          40
        ]
      ],
      [
        [
          127,
          100,
          57
        ],
        [
          109,
          95,
          80
        ],
        [
          47,
          37,
          17
        ],
        [
          88,
          74,
          28
        ],
        [
          153,
          117,
          48
        ],
        [
          170,
          118,
          43
        ],
        [
          168,
          115,
          40
        ],
        [
          170,
          118,
          43
        ],
        [
          169,
          117,
          42
        ],
        [
          166,
          116,
          37
        ],
        [
          164,
          120,
          39
        ],
        [
          147,
          107,
          52
        ],
        [
          129,
          98,
          59
        ],
        [
          127,
          108,
          75
        ],
        [
          100,
          87,
          70
        ],
        [
          68,
          67,
          57
        ],
        [
          78,
          83,
          72
        ],
        [
          72,
          75,
          64
        ],
        [
          83,
          84,
          74
        ],
        [
          132,
          130,
          121
        ],
        [
          146,
          142,
          132
        ],
        [
          124,
          118,
          108
        ],
        [
          105,
          99,
          90
        ],
        [
          107,
          102,
          94
        ],
        [
          115,
          111,
          103
        ],
        [
          85,
          83,
          77
        ],
        [
          63,
          71,
          69
        ],
        [
          46,
          47,
          39
        ],
        [
          79,
          61,
          36
        ],
        [
          132,
          98,
          58
        ],
        [
          141,
          99,
          48
        ],
        [
          134,
          93,
          39
        ]
      ],
      [
        [
          131,
          115,
          90
        ],
        [
          99,
          96,
          92
        ],
        [
          42,
          43,
          38
        ],
        [
          70,
          64,
          41
        ],
        [
          143,
          111,
          56
        ],
        [
          167,
          117,
          42
        ],
        [
          165,
          114,
          36
        ],
        [
          168,
          116,
          39
        ],
        [
          171,
          119,
          49
        ],
        [
          161,
          113,
          51
        ],
        [
          140,
          109,
          51
        ],
        [
          120,
          94,
          49
        ],
        [
          130,
          110,
          77
        ],
        [
          144,
          131,
          107
        ],
        [
          116,
          106,
          93
        ],
        [
          88,
          87,
          79
        ],
        [
          91,
          95,
          88
        ],
        [
          85,
          88,
          82
        ],
        [
          77,
          77,
          69
        ],
        [
          124,
          118,
          107
        ],
        [
          163,
          153,
          140
        ],
        [
          136,
          124,
          112
        ],
        [
          102,
          93,
          81
        ],
        [
          106,
          98,
          88
        ],
        [
          100,
          93,
          84
        ],
        [
          85,
          81,
          74
        ],
        [
          54,
          60,
          58
        ],
        [
          49,
          53,
          49
        ],
        [
          57,
          47,
          32
        ],
        [
          107,
          83,
          50
        ],
        [
          138,
          103,
          51
        ],
        [
          136,
          97,
          39
        ]
      ],
      [
        [
          170,
          161,
          144
        ],
        [
          103,
          105,
          105
        ],
        [
          54,
          58,
          59
        ],
        [
          124,
          121,
          113
        ],
        [
          153,
          124,
          82
        ],
        [
          161,
          113,
          43
        ],
        [
          163,
          117,
          41
        ],
        [
          166,
          122,
          50
        ],
        [
          165,
          121,
          66
        ],
        [
          174,
          135,
          95
        ],
        [
          113,
          89,
          59
        ],
        [
          125,
          105,
          78
        ],
        [
          157,
          141,
          121
        ],
        [
          156,
          143,
          128
        ],
        [
          121,
          111,
          101
        ],
        [
          86,
          80,
          74
        ],
        [
          82,
          81,
          77
        ],
        [
          84,
          85,
          82
        ],
        [
          80,
          78,
          73
        ],
        [
          81,
          71,
          61
        ],
        [
          138,
          125,
          112
        ],
        [
          146,
          135,
          123
        ],
        [
          113,
          103,
          93
        ],
        [
          87,
          79,
          70
        ],
        [
          83,
          77,
          69
        ],
        [
          86,
          82,
          76
        ],
        [
          71,
          73,
          67
        ],
        [
          56,
          57,
          53
        ],
        [
          40,
          35,
          27
        ],
        [
          74,
          59,
          35
        ],
        [
          133,
          106,
          59
        ],
        [
          137,
          103,
          45
        ]
      ],
      [
        [
          180,
          176,
          163
        ],
        [
          134,
          139,
          143
        ],
        [
          94,
          100,
          105
        ],
        [
          154,
          154,
          149
        ],
        [
          174,
          149,
          112
        ],
        [
          158,
          116,
          51
        ],
        [
          156,
          116,
          47
        ],
        [
          153,
          118,
          60
        ],
        [
          207,
          180,
          146
        ],
        [
          237,
          214,
          198
        ],
        [
          207,
          180,
          166
        ],
        [
          156,
          131,
          119
        ],
        [
          174,
          153,
          145
        ],
        [
          148,
          131,
          125
        ],
        [
          125,
          110,
          107
        ],
        [
          93,
          85,
          79
        ],
        [
          86,
          84,
          79
        ],
        [
          74,
          74,
          71
        ],
        [
          59,
          57,
          53
        ],
        [
          76,
          68,
          58
        ],
        [
          137,
          125,
          112
        ],
        [
          143,
          133,
          122
        ],
        [
          133,
          124,
          114
        ],
        [
          106,
          98,
          89
        ],
        [
          86,
          81,
          74
        ],
        [
          87,
          85,
          78
        ],
        [
          84,
          85,
          78
        ],
        [
          75,
          76,
          71
        ],
        [
          50,
          49,
          43
        ],
        [
          40,
          30,
          15
        ],
        [
          95,
          75,
          44
        ],
        [
          132,
          103,
          57
        ]
      ],
      [
        [
          183,
          183,
          175
        ],
        [
          108,
          116,
          122
        ],
        [
          142,
          151,
          158
        ],
        [
          165,
          169,
          168
        ],
        [
          177,
          156,
          122
        ],
        [
          155,
          112,
          50
        ],
        [
          159,
          118,
          51
        ],
        [
          122,
          89,
          47
        ],
        [
          213,
          197,
          179
        ],
        [
          237,
          224,
          226
        ],
        [
          220,
          191,
          188
        ],
        [
          164,
          135,
          131
        ],
        [
          183,
          159,
          155
        ],
        [
          156,
          137,
          132
        ],
        [
          125,
          108,
          104
        ],
        [
          120,
          111,
          104
        ],
        [
          78,
          76,
          69
        ],
        [
          80,
          80,
          77
        ],
        [
          45,
          44,
          40
        ],
        [
          91,
          85,
          77
        ],
        [
          175,
          165,
          154
        ],
        [
          157,
          147,
          137
        ],
        [
          155,
          147,
          138
        ],
        [
          107,
          100,
          92
        ],
        [
          87,
          83,
          77
        ],
        [
          103,
          102,
          96
        ],
        [
          88,
          88,
          79
        ],
        [
          78,
          79,
          73
        ],
        [
          59,
          59,
          59
        ],
        [
          41,
          36,
          33
        ],
        [
          59,
          46,
          31
        ],
        [
          104,
          81,
          46
        ]
      ],
      [
        [
          188,
          191,
          189
        ],
        [
          100,
          108,
          116
        ],
        [
          135,
          144,
          153
        ],
        [
          170,
          175,
          178
        ],
        [
          187,
          167,
          136
        ],
        [
          166,
          120,
          59
        ],
        [
          173,
          123,
          55
        ],
        [
          134,
          93,
          44
        ],
        [
          117,
          95,
          80
        ],
        [
          194,
          182,
          188
        ],
        [
          199,
          171,
          164
        ],
        [
          170,
          142,
          133
        ],
        [
          185,
          161,
          151
        ],
        [
          189,
          171,
          159
        ],
        [
          134,
          119,
          106
        ],
        [
          117,
          107,
          95
        ],
        [
          102,
          98,
          89
        ],
        [
          84,
          84,
          79
        ],
        [
          38,
          38,
          34
        ],
        [
          125,
          121,
          113
        ],
        [
          210,
          201,
          192
        ],
        [
          160,
          152,
          142
        ],
        [
          146,
          139,
          130
        ],
        [
          93,
          89,
          82
        ],
        [
          83,
          80,
          75
        ],
        [
          94,
          93,
          88
        ],
        [
          104,
          104,
          94
        ],
        [
          85,
          87,
          81
        ],
        [
          73,
          75,
          78
        ],
        [
          55,
          53,
          55
        ],
        [
          62,
          55,
          48
        ],
        [
          76,
          56,
          26
        ]
      ],
      [
        [
          189,
          194,
          194
        ],
        [
          90,
          96,
          105
        ],
        [
          127,
          134,
          144
        ],
        [
          175,
          180,
          185
        ],
        [
          174,
          156,
          133
        ],
        [
          166,
          123,
          68
        ],
        [
          178,
          123,
          53
        ],
        [
          159,
          109,
          47
        ],
        [
          97,
          68,
          44
        ],
        [
          168,
          154,
          152
        ],
        [
          168,
          144,
          126
        ],
        [
          137,
          114,
          94
        ],
        [
          186,
          166,
          148
        ],
        [
          216,
          202,
          183
        ],
        [
          160,
          149,
          129
        ],
        [
          123,
          113,
          98
        ],
        [
          120,
          114,
          105
        ],
        [
          115,
          114,
          109
        ],
        [
          50,
          50,
          47
        ],
        [
          150,
          147,
          140
        ],
        [
          194,
          187,
          178
        ],
        [
          155,
          149,
          140
        ],
        [
          123,
          118,
          111
        ],
        [
          91,
          88,
          83
        ],
        [
          84,
          83,
          79
        ],
        [
          84,
          84,
          80
        ],
        [
          95,
          95,
          85
        ],
        [
          86,
          87,
          81
        ],
        [
          84,
          87,
          89
        ],
        [
          73,
          73,
          73
        ],
        [
          79,
          74,
          64
        ],
        [
          73,
          55,
          24
        ]
      ],
      [
        [
          189,
          192,
          193
        ],
        [
          93,
          95,
          103
        ],
        [
          152,
          154,
          163
        ],
        [
          185,
          188,
          192
        ],
        [
          119,
          110,
          98
        ],
        [
          136,
          106,
          66
        ],
        [
          173,
          124,
          58
        ],
        [
          167,
          116,
          50
        ],
        [
          103,
          72,
          39
        ],
        [
          147,
          132,
          120
        ],
        [
          145,
          125,
          103
        ],
        [
          167,
          149,
          127
        ],
        [
          189,
          174,
          155
        ],
        [
          226,
          216,
          200
        ],
        [
          180,
          172,
          157
        ],
        [
          141,
          131,
          117
        ],
        [
          126,
          117,
          107
        ],
        [
          117,
          114,
          109
        ],
        [
          71,
          71,
          68
        ],
        [
          154,
          152,
          147
        ],
        [
          186,
          181,
          174
        ],
        [
          149,
          144,
          136
        ],
        [
          114,
          110,
          104
        ],
        [
          87,
          85,
          80
        ],
        [
          80,
          80,
          76
        ],
        [
          72,
          73,
          70
        ],
        [
          80,
          80,
          72
        ],
        [
          99,
          100,
          94
        ],
        [
          100,
          101,
          99
        ],
        [
          90,
          88,
          81
        ],
        [
          97,
          89,
          69
        ],
        [
          94,
          73,
          34
        ]
      ],
      [
        [
          194,
          196,
          196
        ],
        [
          108,
          107,
          112
        ],
        [
          168,
          167,
          172
        ],
        [
          186,
          186,
          188
        ],
        [
          105,
          109,
          109
        ],
        [
          99,
          89,
          67
        ],
        [
          156,
          119,
          62
        ],
        [
          167,
          122,
          55
        ],
        [
          100,
          74,
          34
        ],
        [
          115,
          106,
          88
        ],
        [
          138,
          123,
          103
        ],
        [
          198,
          185,
          169
        ],
        [
          190,
          180,
          169
        ],
        [
          172,
          165,
          159
        ],
        [
          145,
          140,
          140
        ],
        [
          154,
          143,
          134
        ],
        [
          146,
          136,
          125
        ],
        [
          103,
          100,
          95
        ],
        [
          71,
          71,
          70
        ],
        [
          152,
          152,
          149
        ],
        [
          179,
          175,
          170
        ],
        [
          137,
          133,
          127
        ],
        [
          130,
          128,
          122
        ],
        [
          110,
          109,
          105
        ],
        [
          85,
          86,
          83
        ],
        [
          91,
          93,
          91
        ],
        [
          95,
          96,
          90
        ],
        [
          109,
          110,
          104
        ],
        [
          115,
          116,
          111
        ],
        [
          100,
          96,
          80
        ],
        [
          97,
          85,
          53
        ],
        [
          117,
          95,
          47
        ]
      ],
      [
        [
          197,
          197,
          197
        ],
        [
          132,
          129,
          136
        ],
        [
          172,
          167,
          174
        ],
        [
          184,
          178,
          181
        ],
        [
          130,
          137,
          142
        ],
        [
          78,
          83,
          77
        ],
        [
          140,
          120,
          88
        ],
        [
          155,
          125,
          77
        ],
        [
          115,
          94,
          52
        ],
        [
          130,
          120,
          93
        ],
        [
          143,
          131,
          116
        ],
        [
          230,
          221,
          211
        ],
        [
          242,
          236,
          230
        ],
        [
          145,
          138,
          137
        ],
        [
          135,
          130,
          130
        ],
        [
          131,
          121,
          112
        ],
        [
          121,
          112,
          101
        ],
        [
          108,
          104,
          95
        ],
        [
          95,
          88,
          75
        ],
        [
          144,
          134,
          118
        ],
        [
          168,
          159,
          146
        ],
        [
          152,
          147,
          138
        ],
        [
          112,
          108,
          101
        ],
        [
          87,
          85,
          80
        ],
        [
          71,
          72,
          68
        ],
        [
          87,
          88,
          87
        ],
        [
          105,
          104,
          99
        ],
        [
          112,
          109,
          99
        ],
        [
          120,
          110,
          93
        ],
        [
          103,
          86,
          54
        ],
        [
          121,
          96,
          48
        ],
        [
          136,
          104,
          48
        ]
      ],
      [
        [
          203,
          203,
          204
        ],
        [
          146,
          146,
          160
        ],
        [
          168,
          164,
          178
        ],
        [
          191,
          182,
          188
        ],
        [
          168,
          170,
          172
        ],
        [
          78,
          86,
          90
        ],
        [
          126,
          125,
          126
        ],
        [
          138,
          126,
          113
        ],
        [
          138,
          121,
          82
        ],
        [
          96,
          80,
          37
        ],
        [
          154,
          143,
          133
        ],
        [
          173,
          163,
          155
        ],
        [
          162,
          152,
          141
        ],
        [
          140,
          132,
          117
        ],
        [
          113,
          106,
          88
        ],
        [
          113,
          106,
          90
        ],
        [
          101,
          101,
          92
        ],
        [
          105,
          101,
          87
        ],
        [
          112,
          90,
          58
        ],
        [
          171,
          143,
          104
        ],
        [
          156,
          138,
          109
        ],
        [
          148,
          141,
          126
        ],
        [
          135,
          130,
          118
        ],
        [
          109,
          105,
          97
        ],
        [
          78,
          76,
          72
        ],
        [
          79,
          79,
          77
        ],
        [
          94,
          93,
          94
        ],
        [
          101,
          91,
          82
        ],
        [
          107,
          83,
          55
        ],
        [
          125,
          88,
          45
        ],
        [
          151,
          108,
          55
        ],
        [
          144,
          104,
          46
        ]
      ],
      [
        [
          214,
          215,
          215
        ],
        [
          163,
          166,
          180
        ],
        [
          164,
          167,
          184
        ],
        [
          183,
          184,
          194
        ],
        [
          176,
          182,
          186
        ],
        [
          94,
          102,
          105
        ],
        [
          96,
          96,
          102
        ],
        [
          156,
          149,
          145
        ],
        [
          148,
          137,
          111
        ],
        [
          106,
          93,
          61
        ],
        [
          129,
          116,
          105
        ],
        [
          118,
          105,
          95
        ],
        [
          114,
          102,
          89
        ],
        [
          116,
          105,
          89
        ],
        [
          102,
          91,
          73
        ],
        [
          115,
          110,
          98
        ],
        [
          86,
          91,
          88
        ],
        [
          101,
          103,
          95
        ],
        [
          144,
          128,
          102
        ],
        [
          118,
          96,
          64
        ],
        [
          68,
          56,
          32
        ],
        [
          128,
          120,
          105
        ],
        [
          133,
          126,
          115
        ],
        [
          75,
          69,
          61
        ],
        [
          60,
          56,
          51
        ],
        [
          58,
          56,
          53
        ],
        [
          71,
          70,
          65
        ],
        [
          102,
          93,
          78
        ],
        [
          116,
          94,
          64
        ],
        [
          143,
          112,
          68
        ],
        [
          150,
          116,
          64
        ],
        [
          140,
          110,
          54
        ]
      ],
      [
        [
          212,
          211,
          205
        ],
        [
          178,
          184,
          192
        ],
        [
          167,
          175,
          189
        ],
        [
          173,
          181,
          193
        ],
        [
          176,
          184,
          188
        ],
        [
          124,
          131,
          133
        ],
        [
          86,
          88,
          96
        ],
        [
          141,
          139,
          143
        ],
        [
          153,
          148,
          141
        ],
        [
          135,
          128,
          111
        ],
        [
          104,
          90,
          80
        ],
        [
          77,
          64,
          55
        ],
        [
          134,
          121,
          108
        ],
        [
          124,
          111,
          96
        ],
        [
          129,
          117,
          100
        ],
        [
          147,
          143,
          133
        ],
        [
          85,
          92,
          93
        ],
        [
          92,
          96,
          93
        ],
        [
          150,
          139,
          120
        ],
        [
          132,
          117,
          93
        ],
        [
          117,
          109,
          92
        ],
        [
          107,
          99,
          86
        ],
        [
          75,
          68,
          58
        ],
        [
          64,
          59,
          52
        ],
        [
          44,
          41,
          39
        ],
        [
          65,
          62,
          60
        ],
        [
          86,
          69,
          40
        ],
        [
          133,
          105,
          59
        ],
        [
          155,
          119,
          62
        ],
        [
          160,
          120,
          54
        ],
        [
          154,
          115,
          45
        ],
        [
          151,
          111,
          46
        ]
      ],
      [
        [
          199,
          192,
          180
        ],
        [
          187,
          189,
          187
        ],
        [
          171,
          176,
          181
        ],
        [
          174,
          179,
          185
        ],
        [
          177,
          182,
          184
        ],
        [
          144,
          149,
          152
        ],
        [
          86,
          90,
          99
        ],
        [
          119,
          121,
          132
        ],
        [
          122,
          124,
          130
        ],
        [
          137,
          136,
          135
        ],
        [
          144,
          134,
          126
        ],
        [
          70,
          59,
          51
        ],
        [
          129,
          118,
          108
        ],
        [
          108,
          97,
          86
        ],
        [
          145,
          134,
          123
        ],
        [
          184,
          176,
          168
        ],
        [
          116,
          118,
          118
        ],
        [
          73,
          75,
          73
        ],
        [
          131,
          119,
          103
        ],
        [
          137,
          124,
          105
        ],
        [
          134,
          129,
          118
        ],
        [
          89,
          86,
          78
        ],
        [
          51,
          49,
          44
        ],
        [
          52,
          51,
          50
        ],
        [
          47,
          49,
          52
        ],
        [
          90,
          90,
          93
        ],
        [
          121,
          91,
          60
        ],
        [
          163,
          118,
          68
        ],
        [
          171,
          121,
          64
        ],
        [
          164,
          113,
          52
        ],
        [
          158,
          111,
          50
        ],
        [
          149,
          107,
          46
        ]
      ],
      [
        [
          165,
          156,
          146
        ],
        [
          195,
          193,
          187
        ],
        [
          179,
          178,
          175
        ],
        [
          177,
          173,
          172
        ],
        [
          181,
          181,
          180
        ],
        [
          152,
          157,
          160
        ],
        [
          99,
          103,
          111
        ],
        [
          131,
          135,
          146
        ],
        [
          171,
          175,
          185
        ],
        [
          103,
          105,
          111
        ],
        [
          93,
          90,
          87
        ],
        [
          80,
          77,
          73
        ],
        [
          93,
          90,
          86
        ],
        [
          122,
          118,
          116
        ],
        [
          178,
          173,
          173
        ],
        [
          191,
          182,
          177
        ],
        [
          150,
          148,
          148
        ],
        [
          100,
          100,
          101
        ],
        [
          89,
          78,
          66
        ],
        [
          87,
          77,
          63
        ],
        [
          60,
          61,
          57
        ],
        [
          46,
          52,
          54
        ],
        [
          38,
          46,
          51
        ],
        [
          24,
          33,
          41
        ],
        [
          46,
          57,
          69
        ],
        [
          60,
          71,
          83
        ],
        [
          108,
          100,
          75
        ],
        [
          144,
          125,
          82
        ],
        [
          144,
          123,
          76
        ],
        [
          128,
          109,
          61
        ],
        [
          127,
          113,
          69
        ],
        [
          120,
          105,
          63
        ]
      ],
      [
        [
          117,
          120,
          124
        ],
        [
          195,
          200,
          200
        ],
        [
          177,
          178,
          176
        ],
        [
          178,
          169,
          168
        ],
        [
          181,
          179,
          179
        ],
        [
          138,
          144,
          147
        ],
        [
          83,
          87,
          91
        ],
        [
          150,
          153,
          159
        ],
        [
          245,
          247,
          250
        ],
        [
          219,
          222,
          225
        ],
        [
          133,
          140,
          144
        ],
        [
          134,
          141,
          147
        ],
        [
          149,
          156,
          164
        ],
        [
          176,
          182,
          192
        ],
        [
          190,
          196,
          208
        ],
        [
          194,
          192,
          197
        ],
        [
          168,
          172,
          181
        ],
        [
          125,
          133,
          143
        ],
        [
          110,
          109,
          109
        ],
        [
          61,
          62,
          62
        ],
        [
          35,
          49,
          58
        ],
        [
          34,
          54,
          68
        ],
        [
          49,
          70,
          87
        ],
        [
          58,
          81,
          102
        ],
        [
          61,
          85,
          110
        ],
        [
          58,
          84,
          111
        ],
        [
          69,
          99,
          122
        ],
        [
          72,
          101,
          119
        ],
        [
          78,
          104,
          120
        ],
        [
          69,
          96,
          112
        ],
        [
          59,
          92,
          112
        ],
        [
          55,
          90,
          115
        ]
      ],
      [
        [
          79,
          105,
          133
        ],
        [
          175,
          197,
          213
        ],
        [
          174,
          183,
          192
        ],
        [
          176,
          172,
          177
        ],
        [
          177,
          177,
          182
        ],
        [
          140,
          146,
          150
        ],
        [
          109,
          112,
          113
        ],
        [
          211,
          211,
          209
        ],
        [
          253,
          252,
          247
        ],
        [
          252,
          253,
          252
        ],
        [
          208,
          224,
          232
        ],
        [
          124,
          143,
          157
        ],
        [
          114,
          132,
          149
        ],
        [
          124,
          141,
          162
        ],
        [
          116,
          133,
          156
        ],
        [
          122,
          133,
          152
        ],
        [
          104,
          124,
          148
        ],
        [
          68,
          93,
          119
        ],
        [
          68,
          87,
          104
        ],
        [
          60,
          82,
          101
        ],
        [
          52,
          84,
          111
        ],
        [
          50,
          84,
          110
        ],
        [
          51,
          85,
          115
        ],
        [
          56,
          93,
          125
        ],
        [
          56,
          94,
          131
        ],
        [
          51,
          91,
          130
        ],
        [
          43,
          96,
          135
        ],
        [
          51,
          104,
          141
        ],
        [
          59,
          108,
          142
        ],
        [
          48,
          97,
          132
        ],
        [
          43,
          97,
          137
        ],
        [
          42,
          95,
          132
        ]
      ],
      [
        [
          41,
          89,
          135
        ],
        [
          96,
          137,
          168
        ],
        [
          144,
          168,
          188
        ],
        [
          168,
          174,
          188
        ],
        [
          178,
          182,
          192
        ],
        [
          165,
          170,
          174
        ],
        [
          165,
          166,
          164
        ],
        [
          246,
          245,
          237
        ],
        [
          253,
          251,
          241
        ],
        [
          227,
          231,
          228
        ],
        [
          110,
          136,
          153
        ],
        [
          60,
          88,
          111
        ],
        [
          53,
          80,
          105
        ],
        [
          49,
          76,
          105
        ],
        [
          49,
          75,
          107
        ],
        [
          48,
          72,
          101
        ],
        [
          45,
          79,
          115
        ],
        [
          42,
          81,
          120
        ],
        [
          46,
          81,
          113
        ],
        [
          42,
          82,
          116
        ],
        [
          38,
          86,
          125
        ],
        [
          46,
          90,
          125
        ],
        [
          46,
          89,
          126
        ],
        [
          43,
          87,
          128
        ],
        [
          42,
          89,
          132
        ],
        [
          46,
          93,
          139
        ],
        [
          46,
          94,
          137
        ],
        [
          50,
          96,
          137
        ],
        [
          55,
          96,
          135
        ],
        [
          53,
          94,
          134
        ],
        [
          51,
          95,
          139
        ],
        [
          45,
          90,
          133
        ]
      ],
      [
        [
          29,
          91,
          141
        ],
        [
          29,
          87,
          130
        ],
        [
          59,
          102,
          134
        ],
        [
          131,
          153,
          176
        ],
        [
          166,
          179,
          191
        ],
        [
          132,
          136,
          137
        ],
        [
          194,
          189,
          181
        ],
        [
          254,
          250,
          242
        ],
        [
          241,
          245,
          245
        ],
        [
          141,
          159,
          175
        ],
        [
          61,
          94,
          127
        ],
        [
          50,
          84,
          118
        ],
        [
          50,
          84,
          119
        ],
        [
          51,
          85,
          121
        ],
        [
          49,
          83,
          120
        ],
        [
          50,
          84,
          116
        ],
        [
          47,
          86,
          117
        ],
        [
          42,
          84,
          117
        ],
        [
          39,
          82,
          115
        ],
        [
          34,
          79,
          113
        ],
        [
          35,
          83,
          120
        ],
        [
          39,
          86,
          125
        ],
        [
          38,
          85,
          125
        ],
        [
          42,
          89,
          130
        ],
        [
          45,
          92,
          134
        ],
        [
          56,
          103,
          145
        ],
        [
          62,
          103,
          142
        ],
        [
          59,
          101,
          142
        ],
        [
          56,
          102,
          146
        ],
        [
          50,
          99,
          144
        ],
        [
          46,
          94,
          140
        ],
        [
          51,
          103,
          149
        ]
      ],
      [
        [
          48,
          111,
          162
        ],
        [
          30,
          94,
          140
        ],
        [
          34,
          85,
          124
        ],
        [
          73,
          106,
          136
        ],
        [
          128,
          148,
          167
        ],
        [
          128,
          136,
          143
        ],
        [
          215,
          213,
          209
        ],
        [
          255,
          253,
          249
        ],
        [
          187,
          198,
          205
        ],
        [
          66,
          93,
          118
        ],
        [
          54,
          91,
          128
        ],
        [
          50,
          88,
          125
        ],
        [
          52,
          90,
          127
        ],
        [
          52,
          90,
          127
        ],
        [
          46,
          83,
          121
        ],
        [
          45,
          82,
          115
        ],
        [
          43,
          82,
          113
        ],
        [
          41,
          81,
          112
        ],
        [
          36,
          80,
          113
        ],
        [
          39,
          83,
          117
        ],
        [
          40,
          86,
          123
        ],
        [
          40,
          89,
          131
        ],
        [
          43,
          92,
          134
        ],
        [
          46,
          95,
          138
        ],
        [
          59,
          108,
          150
        ],
        [
          62,
          110,
          152
        ],
        [
          64,
          109,
          147
        ],
        [
          59,
          108,
          149
        ],
        [
          54,
          108,
          154
        ],
        [
          50,
          105,
          152
        ],
        [
          70,
          123,
          167
        ],
        [
          83,
          137,
          182
        ]
      ],
      [
        [
          52,
          114,
          165
        ],
        [
          35,
          99,
          147
        ],
        [
          31,
          86,
          130
        ],
        [
          41,
          83,
          122
        ],
        [
          66,
          95,
          126
        ],
        [
          128,
          145,
          164
        ],
        [
          224,
          229,
          234
        ],
        [
          240,
          245,
          247
        ],
        [
          124,
          143,
          153
        ],
        [
          58,
          92,
          114
        ],
        [
          49,
          87,
          123
        ],
        [
          56,
          94,
          131
        ],
        [
          54,
          92,
          129
        ],
        [
          44,
          82,
          119
        ],
        [
          44,
          82,
          119
        ],
        [
          47,
          83,
          119
        ],
        [
          46,
          84,
          119
        ],
        [
          43,
          83,
          119
        ],
        [
          43,
          86,
          123
        ],
        [
          44,
          88,
          127
        ],
        [
          44,
          90,
          131
        ],
        [
          45,
          97,
          141
        ],
        [
          54,
          106,
          150
        ],
        [
          58,
          110,
          154
        ],
        [
          54,
          105,
          150
        ],
        [
          46,
          97,
          141
        ],
        [
          43,
          95,
          140
        ],
        [
          36,
          91,
          138
        ],
        [
          51,
          108,
          158
        ],
        [
          73,
          130,
          178
        ],
        [
          85,
          138,
          182
        ],
        [
          76,
          125,
          169
        ]
      ],
      [
        [
          50,
          110,
          162
        ],
        [
          35,
          98,
          149
        ],
        [
          29,
          89,
          138
        ],
        [
          35,
          86,
          133
        ],
        [
          44,
          83,
          126
        ],
        [
          78,
          106,
          138
        ],
        [
          202,
          219,
          233
        ],
        [
          211,
          228,
          234
        ],
        [
          97,
          126,
          140
        ],
        [
          65,
          104,
          126
        ],
        [
          54,
          94,
          129
        ],
        [
          48,
          87,
          124
        ],
        [
          58,
          97,
          133
        ],
        [
          48,
          87,
          123
        ],
        [
          40,
          80,
          116
        ],
        [
          45,
          82,
          119
        ],
        [
          47,
          84,
          122
        ],
        [
          48,
          87,
          126
        ],
        [
          47,
          89,
          130
        ],
        [
          46,
          89,
          132
        ],
        [
          51,
          97,
          140
        ],
        [
          39,
          92,
          138
        ],
        [
          39,
          93,
          139
        ],
        [
          48,
          102,
          148
        ],
        [
          47,
          101,
          147
        ],
        [
          39,
          93,
          139
        ],
        [
          28,
          85,
          133
        ],
        [
          40,
          101,
          153
        ],
        [
          67,
          129,
          182
        ],
        [
          67,
          126,
          176
        ],
        [
          46,
          98,
          142
        ],
        [
          51,
          96,
          139
        ]
      ],
      [
        [
          50,
          108,
          161
        ],
        [
          35,
          97,
          147
        ],
        [
          32,
          92,
          143
        ],
        [
          33,
          88,
          141
        ],
        [
          41,
          88,
          138
        ],
        [
          46,
          84,
          125
        ],
        [
          104,
          133,
          159
        ],
        [
          170,
          197,
          211
        ],
        [
          64,
          100,
          119
        ],
        [
          54,
          97,
          121
        ],
        [
          52,
          94,
          128
        ],
        [
          53,
          95,
          130
        ],
        [
          61,
          103,
          139
        ],
        [
          58,
          100,
          135
        ],
        [
          54,
          96,
          131
        ],
        [
          45,
          83,
          120
        ],
        [
          42,
          79,
          118
        ],
        [
          41,
          80,
          120
        ],
        [
          46,
          88,
          130
        ],
        [
          49,
          92,
          135
        ],
        [
          46,
          92,
          136
        ],
        [
          42,
          95,
          139
        ],
        [
          40,
          93,
          138
        ],
        [
          39,
          92,
          136
        ],
        [
          37,
          90,
          135
        ],
        [
          40,
          93,
          138
        ],
        [
          44,
          102,
          151
        ],
        [
          63,
          125,
          178
        ],
        [
          47,
          110,
          164
        ],
        [
          31,
          90,
          140
        ],
        [
          15,
          60,
          103
        ],
        [
          51,
          93,
          136
        ]
      ],
      [
        [
          68,
          124,
          177
        ],
        [
          42,
          100,
          148
        ],
        [
          31,
          88,
          137
        ],
        [
          38,
          91,
          146
        ],
        [
          37,
          87,
          139
        ],
        [
          43,
          89,
          132
        ],
        [
          42,
          79,
          113
        ],
        [
          71,
          107,
          133
        ],
        [
          49,
          89,
          114
        ],
        [
          31,
          77,
          105
        ],
        [
          27,
          71,
          105
        ],
        [
          38,
          82,
          117
        ],
        [
          49,
          93,
          128
        ],
        [
          56,
          100,
          135
        ],
        [
          58,
          102,
          137
        ],
        [
          53,
          92,
          128
        ],
        [
          56,
          94,
          131
        ],
        [
          60,
          99,
          137
        ],
        [
          57,
          99,
          139
        ],
        [
          53,
          97,
          138
        ],
        [
          50,
          95,
          137
        ],
        [
          45,
          94,
          136
        ],
        [
          39,
          88,
          131
        ],
        [
          33,
          83,
          125
        ],
        [
          42,
          91,
          133
        ],
        [
          62,
          112,
          154
        ],
        [
          79,
          132,
          179
        ],
        [
          73,
          131,
          181
        ],
        [
          56,
          116,
          168
        ],
        [
          38,
          97,
          146
        ],
        [
          13,
          64,
          108
        ],
        [
          40,
          85,
          127
        ]
      ],
      [
        [
          61,
          116,
          168
        ],
        [
          49,
          102,
          148
        ],
        [
          35,
          85,
          132
        ],
        [
          43,
          91,
          143
        ],
        [
          39,
          90,
          139
        ],
        [
          42,
          92,
          134
        ],
        [
          44,
          88,
          125
        ],
        [
          40,
          81,
          112
        ],
        [
          42,
          85,
          115
        ],
        [
          27,
          72,
          104
        ],
        [
          23,
          67,
          102
        ],
        [
          30,
          74,
          109
        ],
        [
          27,
          71,
          106
        ],
        [
          29,
          73,
          108
        ],
        [
          36,
          80,
          115
        ],
        [
          47,
          86,
          120
        ],
        [
          56,
          95,
          128
        ],
        [
          62,
          101,
          135
        ],
        [
          66,
          109,
          144
        ],
        [
          75,
          119,
          156
        ],
        [
          69,
          113,
          152
        ],
        [
          49,
          95,
          134
        ],
        [
          43,
          88,
          127
        ],
        [
          43,
          88,
          127
        ],
        [
          60,
          105,
          144
        ],
        [
          85,
          130,
          170
        ],
        [
          109,
          156,
          197
        ],
        [
          93,
          145,
          190
        ],
        [
          60,
          115,
          164
        ],
        [
          26,
          82,
          130
        ],
        [
          29,
          82,
          126
        ],
        [
          20,
          64,
          107
        ]
      ],
      [
        [
          54,
          107,
          160
        ],
        [
          56,
          105,
          149
        ],
        [
          45,
          89,
          132
        ],
        [
          43,
          86,
          134
        ],
        [
          40,
          89,
          134
        ],
        [
          40,
          92,
          132
        ],
        [
          40,
          87,
          123
        ],
        [
          38,
          81,
          115
        ],
        [
          36,
          79,
          114
        ],
        [
          26,
          69,
          105
        ],
        [
          22,
          66,
          101
        ],
        [
          29,
          73,
          108
        ],
        [
          25,
          69,
          104
        ],
        [
          29,
          73,
          108
        ],
        [
          19,
          63,
          98
        ],
        [
          18,
          58,
          89
        ],
        [
          32,
          70,
          100
        ],
        [
          47,
          87,
          118
        ],
        [
          61,
          104,
          137
        ],
        [
          74,
          119,
          152
        ],
        [
          66,
          111,
          145
        ],
        [
          53,
          96,
          131
        ],
        [
          52,
          95,
          130
        ],
        [
          45,
          87,
          123
        ],
        [
          67,
          109,
          145
        ],
        [
          89,
          131,
          167
        ],
        [
          105,
          146,
          182
        ],
        [
          89,
          135,
          175
        ],
        [
          48,
          99,
          145
        ],
        [
          24,
          77,
          124
        ],
        [
          34,
          84,
          129
        ],
        [
          21,
          67,
          110
        ]
      ]
    ]
  ]
}

docs/AKS-HCI/notebooks/README.md METASEP
# Sample Notebooks

After following the setup documents, you can go through the sample notebooks linked below to get a better understanding of how the process works and the possibilities it can unlock:

* [Image Classification Using Scikit-learn](mnist/MNIST_Training_with_AKS-HCI_Cluster_and_NFS.ipynb) (Image Classification)

  This notebook serves as "hello world" of using for training and inference with AKS-HCI Cluster, on-premise NFS Server, and Azure Machine Learning, including
  * Training with AKS-HCI cluster and on-premise NFS Server
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model

* [Distributed PyTorch Training with DistributedDataParallel](distributed-cifar10/distributed-pytorch-cifar10.ipynb) (Image Classification)

  This notebook demonstrates an example of Image classification with PyTorch, including,
  * Distributed training using PyTorch with 2 worker nodes on AKS-HCI cluster and the training data is stored in on-premise NFS Server
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model

* [Object Segmentation with Transfer Learning](object-segmentation-on-azure-stack/object_segmentation-akshci.ipynb) (Object Segmentation)
  
  Object segmentation using pre-trained Mask R-CNN model on PyTorch. AML pipeline steps are used for data preprocessing. **Training data are stored in on-premise NFS server, and the intermediate data are stored in default datastore associated with the ML workspace.** The whole flow includes,
  * Use AML pipelines to read training data from on-premise NFS server, do data preprocessing and generate intermediate data to default datastore
  * Use AML pipelines to trigger train step on AKS-HCI cluster
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model 

* [Object Segmentation with Transfer Learning with all data on NFS server](object-segmentation-on-azure-stack/object_segmentation-akshci-nfs.ipynb) (Object Segmentation)

  Object segmentation using pre-trained Mask R-CNN model on PyTorch. AML pipeline steps are used for data preprocessing. **Both the training and intermediate data are stored in on-prem NFS server.** The whole flow includes,
  * Use AML pipelines to read training data from on-premise NFS server, do data preprocessing and generate intermediate data to NFS server.
  * Use AML pipelines to trigger train step on AKS-HCI cluster
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model 

* [AML Pipelines with NYC-TAXI-DATA](pipeline/nyc-taxi-data-regression-model-building.ipynb) (Structured Text Data Prediction)

  This notebook demonstrates an example of Structured Text Data Prediction, preparing / preprocessing / training data in **default datastore associated with the ML workspace**. The whole flow includes,
  * Download and upload training data to default datastore
  * Use AML pipelines to preprocess and train
    * Cleanse data in parallel
    * Merge cleansed data
    * Normalize data
    * Transform data
    * Split data
    * Train model
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model 

* [AML Pipelines with NYC-TAXI-DATA with all data on NFS server](pipeline/nyc-taxi-data-regression-model-building-nfs.ipynb) (Structured Text Data Prediction)

  This notebook demonstrates an example of Structured Text Data Prediction, preparing / preprocessing / training data on **on-prem NFS server**. The whole flow includes,
  * Download and upload training data to default datastore
  * Use AML pipelines to preprocess and train
    * Cleanse data in parallel
    * Merge cleansed data
    * Normalize data
    * Transform data
    * Split data
    * Train model
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model 

* [Model Download and Upload](upload-download-model/AML-model-download-upload.ipynb)
docs/AKS-HCI/nfs/nfs-server-setup.sh METASEP
#!/bin/bash

# This script should be executed on Linux Ubuntu Virtual Machine

DATA_DIRECTORY=${1:-/data}
AKS_SUBNET=${2:-*}

EXPORT_DIRECTORY="/export/$(basename "$DATA_DIRECTORY")"

echo "Updating packages"
apt-get -y update

echo "Installing NFS kernel server"

apt-get -y install nfs-kernel-server

echo "Making data directory ${DATA_DIRECTORY}"
mkdir -p ${DATA_DIRECTORY}

echo "Making new directory to be exported and linked to data directory: ${EXPORT_DIRECTORY}"
mkdir -p ${EXPORT_DIRECTORY}

echo "Mount binding ${DATA_DIRECTORY} to ${EXPORT_DIRECTORY}"
mount --bind ${DATA_DIRECTORY} ${EXPORT_DIRECTORY}

echo "Giving 777 permissions to ${EXPORT_DIRECTORY} directory"
chmod 777 ${EXPORT_DIRECTORY}

parentdir="$(dirname "$EXPORT_DIRECTORY")"
echo "Giving 777 permissions to parent: ${parentdir} directory"
chmod 777 $parentdir

echo "Appending bound directories into fstab"
echo "${DATA_DIRECTORY}    ${EXPORT_DIRECTORY}   none    bind  0  0" >> /etc/fstab

echo "Appending localhost and Kubernetes subnet address ${AKS_SUBNET} to exports configuration file"
echo "/export        ${AKS_SUBNET}(rw,async,insecure,fsid=0,crossmnt,no_subtree_check)" >> /etc/exports
echo "/export        localhost(rw,async,insecure,fsid=0,crossmnt,no_subtree_check)" >> /etc/exports

nohup service nfs-kernel-server restart
docs/AKS-HCI/nfs/mount-config.yaml METASEP
apiVersion: v1
data:
  mounts.yaml: |
    mountPoints:
    - mountPath: <Mounting path on training pod>
      mountType: nfs
      name: <NFS_NAME>
      path: <NFS_EXPORT_FILE_PATH>
      server: <NFS_IP>
kind: ConfigMap
metadata:
  name: mount-config
  namespace: azureml
docs/AKS-HCI/nfs/config.json METASEP
{
    "subscription_id": "<sub_id>",
    "resource_group": "<resource_group_name>",
    "workspace_name": "<AML_workspace_name>"
}
docs/AKS-HCI/nfs/Verify_NFS_Setup_in_AMLArc.ipynb METASEP
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Copyright (c) Microsoft Corporation. All rights reserved.\n",
    "\n",
    "Licensed under the MIT License."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Verify the NFS Setup in AMLArc"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prerequisites\n",
    "\n",
    "* [Setup Azure Arc-enabled Machine Learning Training and Inferencing on AKS on Azure Stack HCI](https://github.com/Azure/AML-Kubernetes/tree/master/docs/AKS-HCI/AML-ARC-Compute.md)\n",
    "\n",
    "* [Setup NFS Server on Azure Stack HCI and Use your Data and run managed Machine Learning Experiments On-Premises](https://github.com/Azure/AML-Kubernetes/tree/master/docs/AKS-HCI/Train-AzureArc.md)\n",
    "\n",
    "* (Optional) Upload some training data to NFS Server for verification"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Initialize AzureML workspace\n",
    "\n",
    "Initialize a [Workspace](https://docs.microsoft.com/azure/machine-learning/service/concept-azure-machine-learning-architecture#workspace) object from the existing workspace you created in the Prerequisites step. `Workspace.from_config()` creates a workspace object from the details stored in `config.json`. \n",
    "\n",
    "If you haven't done already please go to `config.json` file and fill in your workspace information."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.workspace import Workspace,  ComputeTarget\n",
    "from azureml.exceptions import ComputeTargetException\n",
    "\n",
    "ws = Workspace.from_config()\n",
    "print('Workspace name: ' + ws.name, \n",
    "      'Azure region: ' + ws.location, \n",
    "      'Subscription id: ' + ws.subscription_id, \n",
    "      'Resource group: ' + ws.resource_group, sep='\\n')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Setup compute target\n",
    "\n",
    "Find the attach name for the Arc enabled AKS-HCI in your AzureML workspace.\n",
    "\n",
    "attach_name is the attached name for your AKS-HCI cluster you setup in [this step](https://github.com/Azure/AML-Kubernetes/blob/master/docs/AKS-HCI/AML-ARC-Compute.md#attach-your-azure-arc-enabled-cluster-to-your-azure-machine-learning-workspace-as-a-compute-target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core.compute import KubernetesCompute\n",
    "\n",
    "attach_name = \"<NAME_OF_AML_ATTACHED_COMPUTE_OF_YOUR_AKS-HCI_CLUSTER>\"\n",
    "arcK_target = KubernetesCompute(ws, attach_name)\n",
    "\n",
    "print(f\"compute target id in endpoint yaml: azureml:{arcK_target.name}, instance type name in deployment yaml: {arcK_target.default_instance_type}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Configure the training job and submit\n",
    "\n",
    "This experiment will list the contents of the NFS mounting point on training pods."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create an experiement"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core import Experiment\n",
    "\n",
    "experiment_name = 'nfs-demo'\n",
    "\n",
    "exp = Experiment(workspace=ws, name=experiment_name)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create an environment"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# customized environment\n",
    "\n",
    "from azureml.core.environment import Environment\n",
    "from azureml.core.conda_dependencies import CondaDependencies\n",
    "# to install required packages\n",
    "env = Environment('tutorial-env')\n",
    "cd = CondaDependencies.create(pip_packages=['azureml-dataset-runtime[pandas,fuse]', 'azureml-defaults'], conda_packages = ['scikit-learn==0.22.1'])\n",
    "\n",
    "env.python.conda_dependencies = cd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Configure the training job\n",
    "\n",
    "`<MountPathOnTrainingPod>` is the same as the mountPath defined in mount-config.yaml."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from azureml.core import ScriptRunConfig\n",
    "\n",
    "nfs_folder = \"<MountPathOnTrainingPod>\" # training data are saved to <mountPoint> (have to use / as the path separator)\n",
    "\n",
    "args = ['--nfs-folder', nfs_folder]\n",
    "script_folder =  \"nfs_script\"\n",
    "src = ScriptRunConfig(source_directory=script_folder,\n",
    "                      script='test.py', \n",
    "                      arguments=args,\n",
    "                      compute_target=arcK_target,\n",
    "                      environment=env)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Submit the job\n",
    "\n",
    "Run your experiment by submitting your ScriptRunConfig object. Note that this call is asynchronous."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "run = exp.submit(config=src)\n",
    "run.wait_for_completion(show_output=True)  # specify True for a verbose log"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Verify the job\n",
    "\n",
    "Go to the Azure Machine Learning Online Studio to verify the job status. \n",
    "\n",
    "* If it succeeded, in driver log, you will see the contents listed under the NFS mounting path in training pods (max number: 1000)\n",
    "* If it failed, you can judge the error message in experiment page, below shows an example if you give a **wrong** NFS mounting path. Please confirm the NFS mounting path based on your config map using [mount-config.yaml](https://github.com/Azure/AML-Kubernetes/blob/master/examples/train-using-nfs/amlarc-nfs-setup/mount-config.yaml). When you saw the error message, you can choose to cancel the NFS verify experiment to avoid more retries.\n",
    "\n",
    "![fishy](images/verify-nfs-training.png)"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "fc402497f0168b24575e2ffafe64cd34c507b9a7fab971a93b09782ae565c5c6"
  },
  "kernelspec": {
   "display_name": "Python 3.8.3 64-bit",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}

docs/AKS-HCI/nfs/README.md METASEP
# Verify the NFS Setup in AMLArc

After configuring the NFS Setup in AMLArc, using this notebook to list the contents of the NFS Server on training pods. This could help you to verify,
* The network access between AKS-HCI cluster to the NFS Server
* The config map of NFS Setup used in AMLArc
* Learn how to access the NFS data in training pods 
 
## Notebooks

* [Verify the NFS Setup in AMLArc](Verify_NFS_Setup_in_AMLArc.ipynb)







   

docs/AKS-HCI/imgs/vid-img.png METASEP

docs/AKS-HCI/imgs/url.png METASEP

docs/AKS-HCI/imgs/studio.png METASEP

docs/AKS-HCI/imgs/studio-s.png METASEP

docs/AKS-HCI/imgs/studio-arc.png METASEP

docs/AKS-HCI/imgs/structure.png METASEP

docs/AKS-HCI/imgs/sas.png METASEP

docs/AKS-HCI/imgs/sas-token.png METASEP

docs/AKS-HCI/imgs/network.png METASEP

docs/AKS-HCI/imgs/kubernetes_arc.png METASEP

docs/AKS-HCI/imgs/datastore.png METASEP

docs/AKS-HCI/imgs/datastore-set.png METASEP

docs/AKS-HCI/imgs/cors.png METASEP

docs/AKS-HCI/imgs/container.png METASEP

docs/AKS-HCI/imgs/azureml_log.png METASEP

docs/AKS-HCI/imgs/Inner-workspace.png METASEP

docs/AKS-HCI/imgs/Inner-compute.png METASEP

docs/AKS-HCI/imgs/Cstorage.png METASEP

docs/AKS-HCI/cli/README.md METASEP
# Sample Azure Machine Learning CLI v2 examples

After following the setup documents, you can go through the CLI examples linked below to get a better understanding of how the process works and the possibilities it can unlock:

## CLI v2 Examples

### Prerequisites 

Follow this [doc](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-train-cli?view=azure-devops#prerequisites) to setup the prerequisites of using Azure Machine CLI v2.  

### Examples

* [Image Classification Using Scikit-learn](mnist/README.md) (Image Classification)

  This example serves as "hello world" of using for training and inference with AKS-HCI Cluster, on-premise NFS Server and Azure Machine Learning workspaces, including
  * Training with AKS-HCI cluster and on-premise NFS Server
  * Register model
  * Inference with registered model on AKS-HCI cluster
  * Test model


docs/AKS-HCI/Yaml/serving-default-domain-knative-1-4-0.yaml METASEP
# Copyright 2019 The Knative Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: batch/v1
kind: Job
metadata:
  name: default-domain
  namespace: knative-serving
  labels:
    app: "default-domain"
    serving.knative.dev/release: "v0.14.0"
spec:
  template:
    metadata:
      labels:
        app: "default-domain"
        serving.knative.dev/release: "v0.14.0"
    spec:
      serviceAccountName: controller
      containers:
      - name: default-domain
        # This is the Go import path for the binary that is containerized
        # and substituted here.
        image: gcr.io/knative-releases/knative.dev/serving/cmd/default-domain@sha256:3f9f0baebbb2ace4aaa6f38537f2a76aa9f02669d43b1a9d8386bf6497559257
        args: ["-magic-dns=xip.io"]
        ports:
        - name: http
          containerPort: 8080
        readinessProbe: &probe
          httpGet:
            port: 8080
        livenessProbe: *probe
        env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: SYSTEM_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
      restartPolicy: OnFailure
  backoffLimit: 10
---
apiVersion: v1
kind: Service
metadata:
  name: default-domain-service
  namespace: knative-serving
  labels:
    app: default-domain
    serving.knative.dev/release: "v0.14.0"
spec:
  selector:
    app: default-domain
  ports:
  - name: http
    port: 80
    targetPort: 8080
  type: ClusterIP

---

docs/AKS-HCI/Yaml/kfserving_v1_4_1.yaml METASEP
apiVersion: v1
kind: Namespace
metadata:
  labels:
    control-plane: kfserving-controller-manager
    controller-tools.k8s.io: "1.0"
    istio-injection: disabled
  name: kfserving-system
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.3.1-0.20200528125929-5c0c6ae3b64b
  creationTimestamp: null
  name: inferenceservices.serving.kubeflow.org
spec:
  additionalPrinterColumns:
  - JSONPath: .status.url
    name: URL
    type: string
  - JSONPath: .status.conditions[?(@.type=='Ready')].status
    name: Ready
    type: string
  - JSONPath: .status.traffic
    name: Default Traffic
    type: integer
  - JSONPath: .status.canaryTraffic
    name: Canary Traffic
    type: integer
  - JSONPath: .metadata.creationTimestamp
    name: Age
    type: date
  group: serving.kubeflow.org
  names:
    kind: InferenceService
    listKind: InferenceServiceList
    plural: inferenceservices
    shortNames:
    - inferenceservice
    singular: inferenceservice
  scope: Namespaced
  subresources:
    status: {}
  validation:
    openAPIV3Schema:
      properties:
        apiVersion:
          type: string
        kind:
          type: string
        metadata:
          type: object
        spec:
          properties:
            canary:
              properties:
                explainer:
                  properties:
                    alibi:
                      properties:
                        config:
                          additionalProperties:
                            type: string
                          type: object
                        resources:
                          properties:
                            limits:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                            requests:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                          type: object
                        runtimeVersion:
                          type: string
                        storageUri:
                          type: string
                        type:
                          type: string
                      required:
                      - type
                      type: object
                    batcher:
                      properties:
                        maxBatchSize:
                          type: integer
                        maxLatency:
                          type: integer
                        timeout:
                          type: integer
                      type: object
                    custom:
                      properties:
                        container:
                          properties:
                            args:
                              items:
                                type: string
                              type: array
                            command:
                              items:
                                type: string
                              type: array
                            env:
                              items:
                                properties:
                                  name:
                                    type: string
                                  value:
                                    type: string
                                  valueFrom:
                                    properties:
                                      configMapKeyRef:
                                        properties:
                                          key:
                                            type: string
                                          name:
                                            type: string
                                          optional:
                                            type: boolean
                                        required:
                                        - key
                                        type: object
                                      fieldRef:
                                        properties:
                                          apiVersion:
                                            type: string
                                          fieldPath:
                                            type: string
                                        required:
                                        - fieldPath
                                        type: object
                                      resourceFieldRef:
                                        properties:
                                          containerName:
                                            type: string
                                          divisor:
                                            anyOf:
                                            - type: integer
                                            - type: string
                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                            x-kubernetes-int-or-string: true
                                          resource:
                                            type: string
                                        required:
                                        - resource
                                        type: object
                                      secretKeyRef:
                                        properties:
                                          key:
                                            type: string
                                          name:
                                            type: string
                                          optional:
                                            type: boolean
                                        required:
                                        - key
                                        type: object
                                    type: object
                                required:
                                - name
                                type: object
                              type: array
                            envFrom:
                              items:
                                properties:
                                  configMapRef:
                                    properties:
                                      name:
                                        type: string
                                      optional:
                                        type: boolean
                                    type: object
                                  prefix:
                                    type: string
                                  secretRef:
                                    properties:
                                      name:
                                        type: string
                                      optional:
                                        type: boolean
                                    type: object
                                type: object
                              type: array
                            image:
                              type: string
                            imagePullPolicy:
                              type: string
                            lifecycle:
                              properties:
                                postStart:
                                  properties:
                                    exec:
                                      properties:
                                        command:
                                          items:
                                            type: string
                                          type: array
                                      type: object
                                    httpGet:
                                      properties:
                                        host:
                                          type: string
                                        httpHeaders:
                                          items:
                                            properties:
                                              name:
                                                type: string
                                              value:
                                                type: string
                                            required:
                                            - name
                                            - value
                                            type: object
                                          type: array
                                        path:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                        scheme:
                                          type: string
                                      required:
                                      - port
                                      type: object
                                    tcpSocket:
                                      properties:
                                        host:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                      required:
                                      - port
                                      type: object
                                  type: object
                                preStop:
                                  properties:
                                    exec:
                                      properties:
                                        command:
                                          items:
                                            type: string
                                          type: array
                                      type: object
                                    httpGet:
                                      properties:
                                        host:
                                          type: string
                                        httpHeaders:
                                          items:
                                            properties:
                                              name:
                                                type: string
                                              value:
                                                type: string
                                            required:
                                            - name
                                            - value
                                            type: object
                                          type: array
                                        path:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                        scheme:
                                          type: string
                                      required:
                                      - port
                                      type: object
                                    tcpSocket:
                                      properties:
                                        host:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                      required:
                                      - port
                                      type: object
                                  type: object
                              type: object
                            livenessProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            name:
                              type: string
                            ports:
                              items:
                                properties:
                                  containerPort:
                                    format: int32
                                    type: integer
                                  hostIP:
                                    type: string
                                  hostPort:
                                    format: int32
                                    type: integer
                                  name:
                                    type: string
                                  protocol:
                                    type: string
                                required:
                                - containerPort
                                - protocol
                                type: object
                              type: array
                              x-kubernetes-list-map-keys:
                              - containerPort
                              - protocol
                              x-kubernetes-list-type: map
                            readinessProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            resources:
                              properties:
                                limits:
                                  additionalProperties:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                    x-kubernetes-int-or-string: true
                                  type: object
                                requests:
                                  additionalProperties:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                    x-kubernetes-int-or-string: true
                                  type: object
                              type: object
                            securityContext:
                              properties:
                                allowPrivilegeEscalation:
                                  type: boolean
                                capabilities:
                                  properties:
                                    add:
                                      items:
                                        type: string
                                      type: array
                                    drop:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                privileged:
                                  type: boolean
                                procMount:
                                  type: string
                                readOnlyRootFilesystem:
                                  type: boolean
                                runAsGroup:
                                  format: int64
                                  type: integer
                                runAsNonRoot:
                                  type: boolean
                                runAsUser:
                                  format: int64
                                  type: integer
                                seLinuxOptions:
                                  properties:
                                    level:
                                      type: string
                                    role:
                                      type: string
                                    type:
                                      type: string
                                    user:
                                      type: string
                                  type: object
                                windowsOptions:
                                  properties:
                                    gmsaCredentialSpec:
                                      type: string
                                    gmsaCredentialSpecName:
                                      type: string
                                    runAsUserName:
                                      type: string
                                  type: object
                              type: object
                            startupProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            stdin:
                              type: boolean
                            stdinOnce:
                              type: boolean
                            terminationMessagePath:
                              type: string
                            terminationMessagePolicy:
                              type: string
                            tty:
                              type: boolean
                            volumeDevices:
                              items:
                                properties:
                                  devicePath:
                                    type: string
                                  name:
                                    type: string
                                required:
                                - devicePath
                                - name
                                type: object
                              type: array
                            volumeMounts:
                              items:
                                properties:
                                  mountPath:
                                    type: string
                                  mountPropagation:
                                    type: string
                                  name:
                                    type: string
                                  readOnly:
                                    type: boolean
                                  subPath:
                                    type: string
                                  subPathExpr:
                                    type: string
                                required:
                                - mountPath
                                - name
                                type: object
                              type: array
                            workingDir:
                              type: string
                          required:
                          - name
                          type: object
                      required:
                      - container
                      type: object
                    logger:
                      properties:
                        mode:
                          type: string
                        url:
                          type: string
                      type: object
                    maxReplicas:
                      type: integer
                    minReplicas:
                      type: integer
                    parallelism:
                      type: integer
                    serviceAccountName:
                      type: string
                  type: object
                predictor:
                  properties:
                    batcher:
                      properties:
                        maxBatchSize:
                          type: integer
                        maxLatency:
                          type: integer
                        timeout:
                          type: integer
                      type: object
                    custom:
                      properties:
                        container:
                          properties:
                            args:
                              items:
                                type: string
                              type: array
                            command:
                              items:
                                type: string
                              type: array
                            env:
                              items:
                                properties:
                                  name:
                                    type: string
                                  value:
                                    type: string
                                  valueFrom:
                                    properties:
                                      configMapKeyRef:
                                        properties:
                                          key:
                                            type: string
                                          name:
                                            type: string
                                          optional:
                                            type: boolean
                                        required:
                                        - key
                                        type: object
                                      fieldRef:
                                        properties:
                                          apiVersion:
                                            type: string
                                          fieldPath:
                                            type: string
                                        required:
                                        - fieldPath
                                        type: object
                                      resourceFieldRef:
                                        properties:
                                          containerName:
                                            type: string
                                          divisor:
                                            anyOf:
                                            - type: integer
                                            - type: string
                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                            x-kubernetes-int-or-string: true
                                          resource:
                                            type: string
                                        required:
                                        - resource
                                        type: object
                                      secretKeyRef:
                                        properties:
                                          key:
                                            type: string
                                          name:
                                            type: string
                                          optional:
                                            type: boolean
                                        required:
                                        - key
                                        type: object
                                    type: object
                                required:
                                - name
                                type: object
                              type: array
                            envFrom:
                              items:
                                properties:
                                  configMapRef:
                                    properties:
                                      name:
                                        type: string
                                      optional:
                                        type: boolean
                                    type: object
                                  prefix:
                                    type: string
                                  secretRef:
                                    properties:
                                      name:
                                        type: string
                                      optional:
                                        type: boolean
                                    type: object
                                type: object
                              type: array
                            image:
                              type: string
                            imagePullPolicy:
                              type: string
                            lifecycle:
                              properties:
                                postStart:
                                  properties:
                                    exec:
                                      properties:
                                        command:
                                          items:
                                            type: string
                                          type: array
                                      type: object
                                    httpGet:
                                      properties:
                                        host:
                                          type: string
                                        httpHeaders:
                                          items:
                                            properties:
                                              name:
                                                type: string
                                              value:
                                                type: string
                                            required:
                                            - name
                                            - value
                                            type: object
                                          type: array
                                        path:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                        scheme:
                                          type: string
                                      required:
                                      - port
                                      type: object
                                    tcpSocket:
                                      properties:
                                        host:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                      required:
                                      - port
                                      type: object
                                  type: object
                                preStop:
                                  properties:
                                    exec:
                                      properties:
                                        command:
                                          items:
                                            type: string
                                          type: array
                                      type: object
                                    httpGet:
                                      properties:
                                        host:
                                          type: string
                                        httpHeaders:
                                          items:
                                            properties:
                                              name:
                                                type: string
                                              value:
                                                type: string
                                            required:
                                            - name
                                            - value
                                            type: object
                                          type: array
                                        path:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                        scheme:
                                          type: string
                                      required:
                                      - port
                                      type: object
                                    tcpSocket:
                                      properties:
                                        host:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                      required:
                                      - port
                                      type: object
                                  type: object
                              type: object
                            livenessProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            name:
                              type: string
                            ports:
                              items:
                                properties:
                                  containerPort:
                                    format: int32
                                    type: integer
                                  hostIP:
                                    type: string
                                  hostPort:
                                    format: int32
                                    type: integer
                                  name:
                                    type: string
                                  protocol:
                                    type: string
                                required:
                                - containerPort
                                - protocol
                                type: object
                              type: array
                              x-kubernetes-list-map-keys:
                              - containerPort
                              - protocol
                              x-kubernetes-list-type: map
                            readinessProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            resources:
                              properties:
                                limits:
                                  additionalProperties:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                    x-kubernetes-int-or-string: true
                                  type: object
                                requests:
                                  additionalProperties:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                    x-kubernetes-int-or-string: true
                                  type: object
                              type: object
                            securityContext:
                              properties:
                                allowPrivilegeEscalation:
                                  type: boolean
                                capabilities:
                                  properties:
                                    add:
                                      items:
                                        type: string
                                      type: array
                                    drop:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                privileged:
                                  type: boolean
                                procMount:
                                  type: string
                                readOnlyRootFilesystem:
                                  type: boolean
                                runAsGroup:
                                  format: int64
                                  type: integer
                                runAsNonRoot:
                                  type: boolean
                                runAsUser:
                                  format: int64
                                  type: integer
                                seLinuxOptions:
                                  properties:
                                    level:
                                      type: string
                                    role:
                                      type: string
                                    type:
                                      type: string
                                    user:
                                      type: string
                                  type: object
                                windowsOptions:
                                  properties:
                                    gmsaCredentialSpec:
                                      type: string
                                    gmsaCredentialSpecName:
                                      type: string
                                    runAsUserName:
                                      type: string
                                  type: object
                              type: object
                            startupProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            stdin:
                              type: boolean
                            stdinOnce:
                              type: boolean
                            terminationMessagePath:
                              type: string
                            terminationMessagePolicy:
                              type: string
                            tty:
                              type: boolean
                            volumeDevices:
                              items:
                                properties:
                                  devicePath:
                                    type: string
                                  name:
                                    type: string
                                required:
                                - devicePath
                                - name
                                type: object
                              type: array
                            volumeMounts:
                              items:
                                properties:
                                  mountPath:
                                    type: string
                                  mountPropagation:
                                    type: string
                                  name:
                                    type: string
                                  readOnly:
                                    type: boolean
                                  subPath:
                                    type: string
                                  subPathExpr:
                                    type: string
                                required:
                                - mountPath
                                - name
                                type: object
                              type: array
                            workingDir:
                              type: string
                          required:
                          - name
                          type: object
                      required:
                      - container
                      type: object
                    logger:
                      properties:
                        mode:
                          type: string
                        url:
                          type: string
                      type: object
                    maxReplicas:
                      type: integer
                    minReplicas:
                      type: integer
                    onnx:
                      properties:
                        resources:
                          properties:
                            limits:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                            requests:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                          type: object
                        runtimeVersion:
                          type: string
                        storageUri:
                          type: string
                      required:
                      - storageUri
                      type: object
                    parallelism:
                      type: integer
                    pytorch:
                      properties:
                        modelClassName:
                          type: string
                        resources:
                          properties:
                            limits:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                            requests:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                          type: object
                        runtimeVersion:
                          type: string
                        storageUri:
                          type: string
                      required:
                      - storageUri
                      type: object
                    serviceAccountName:
                      type: string
                    sklearn:
                      properties:
                        resources:
                          properties:
                            limits:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                            requests:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                          type: object
                        runtimeVersion:
                          type: string
                        storageUri:
                          type: string
                      required:
                      - storageUri
                      type: object
                    tensorflow:
                      properties:
                        resources:
                          properties:
                            limits:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                            requests:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                          type: object
                        runtimeVersion:
                          type: string
                        storageUri:
                          type: string
                      required:
                      - storageUri
                      type: object
                    triton:
                      properties:
                        resources:
                          properties:
                            limits:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                            requests:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                          type: object
                        runtimeVersion:
                          type: string
                        storageUri:
                          type: string
                      required:
                      - storageUri
                      type: object
                    xgboost:
                      properties:
                        nthread:
                          type: integer
                        resources:
                          properties:
                            limits:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                            requests:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                          type: object
                        runtimeVersion:
                          type: string
                        storageUri:
                          type: string
                      required:
                      - storageUri
                      type: object
                  type: object
                transformer:
                  properties:
                    batcher:
                      properties:
                        maxBatchSize:
                          type: integer
                        maxLatency:
                          type: integer
                        timeout:
                          type: integer
                      type: object
                    custom:
                      properties:
                        container:
                          properties:
                            args:
                              items:
                                type: string
                              type: array
                            command:
                              items:
                                type: string
                              type: array
                            env:
                              items:
                                properties:
                                  name:
                                    type: string
                                  value:
                                    type: string
                                  valueFrom:
                                    properties:
                                      configMapKeyRef:
                                        properties:
                                          key:
                                            type: string
                                          name:
                                            type: string
                                          optional:
                                            type: boolean
                                        required:
                                        - key
                                        type: object
                                      fieldRef:
                                        properties:
                                          apiVersion:
                                            type: string
                                          fieldPath:
                                            type: string
                                        required:
                                        - fieldPath
                                        type: object
                                      resourceFieldRef:
                                        properties:
                                          containerName:
                                            type: string
                                          divisor:
                                            anyOf:
                                            - type: integer
                                            - type: string
                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                            x-kubernetes-int-or-string: true
                                          resource:
                                            type: string
                                        required:
                                        - resource
                                        type: object
                                      secretKeyRef:
                                        properties:
                                          key:
                                            type: string
                                          name:
                                            type: string
                                          optional:
                                            type: boolean
                                        required:
                                        - key
                                        type: object
                                    type: object
                                required:
                                - name
                                type: object
                              type: array
                            envFrom:
                              items:
                                properties:
                                  configMapRef:
                                    properties:
                                      name:
                                        type: string
                                      optional:
                                        type: boolean
                                    type: object
                                  prefix:
                                    type: string
                                  secretRef:
                                    properties:
                                      name:
                                        type: string
                                      optional:
                                        type: boolean
                                    type: object
                                type: object
                              type: array
                            image:
                              type: string
                            imagePullPolicy:
                              type: string
                            lifecycle:
                              properties:
                                postStart:
                                  properties:
                                    exec:
                                      properties:
                                        command:
                                          items:
                                            type: string
                                          type: array
                                      type: object
                                    httpGet:
                                      properties:
                                        host:
                                          type: string
                                        httpHeaders:
                                          items:
                                            properties:
                                              name:
                                                type: string
                                              value:
                                                type: string
                                            required:
                                            - name
                                            - value
                                            type: object
                                          type: array
                                        path:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                        scheme:
                                          type: string
                                      required:
                                      - port
                                      type: object
                                    tcpSocket:
                                      properties:
                                        host:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                      required:
                                      - port
                                      type: object
                                  type: object
                                preStop:
                                  properties:
                                    exec:
                                      properties:
                                        command:
                                          items:
                                            type: string
                                          type: array
                                      type: object
                                    httpGet:
                                      properties:
                                        host:
                                          type: string
                                        httpHeaders:
                                          items:
                                            properties:
                                              name:
                                                type: string
                                              value:
                                                type: string
                                            required:
                                            - name
                                            - value
                                            type: object
                                          type: array
                                        path:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                        scheme:
                                          type: string
                                      required:
                                      - port
                                      type: object
                                    tcpSocket:
                                      properties:
                                        host:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                      required:
                                      - port
                                      type: object
                                  type: object
                              type: object
                            livenessProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            name:
                              type: string
                            ports:
                              items:
                                properties:
                                  containerPort:
                                    format: int32
                                    type: integer
                                  hostIP:
                                    type: string
                                  hostPort:
                                    format: int32
                                    type: integer
                                  name:
                                    type: string
                                  protocol:
                                    type: string
                                required:
                                - containerPort
                                - protocol
                                type: object
                              type: array
                              x-kubernetes-list-map-keys:
                              - containerPort
                              - protocol
                              x-kubernetes-list-type: map
                            readinessProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            resources:
                              properties:
                                limits:
                                  additionalProperties:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                    x-kubernetes-int-or-string: true
                                  type: object
                                requests:
                                  additionalProperties:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                    x-kubernetes-int-or-string: true
                                  type: object
                              type: object
                            securityContext:
                              properties:
                                allowPrivilegeEscalation:
                                  type: boolean
                                capabilities:
                                  properties:
                                    add:
                                      items:
                                        type: string
                                      type: array
                                    drop:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                privileged:
                                  type: boolean
                                procMount:
                                  type: string
                                readOnlyRootFilesystem:
                                  type: boolean
                                runAsGroup:
                                  format: int64
                                  type: integer
                                runAsNonRoot:
                                  type: boolean
                                runAsUser:
                                  format: int64
                                  type: integer
                                seLinuxOptions:
                                  properties:
                                    level:
                                      type: string
                                    role:
                                      type: string
                                    type:
                                      type: string
                                    user:
                                      type: string
                                  type: object
                                windowsOptions:
                                  properties:
                                    gmsaCredentialSpec:
                                      type: string
                                    gmsaCredentialSpecName:
                                      type: string
                                    runAsUserName:
                                      type: string
                                  type: object
                              type: object
                            startupProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            stdin:
                              type: boolean
                            stdinOnce:
                              type: boolean
                            terminationMessagePath:
                              type: string
                            terminationMessagePolicy:
                              type: string
                            tty:
                              type: boolean
                            volumeDevices:
                              items:
                                properties:
                                  devicePath:
                                    type: string
                                  name:
                                    type: string
                                required:
                                - devicePath
                                - name
                                type: object
                              type: array
                            volumeMounts:
                              items:
                                properties:
                                  mountPath:
                                    type: string
                                  mountPropagation:
                                    type: string
                                  name:
                                    type: string
                                  readOnly:
                                    type: boolean
                                  subPath:
                                    type: string
                                  subPathExpr:
                                    type: string
                                required:
                                - mountPath
                                - name
                                type: object
                              type: array
                            workingDir:
                              type: string
                          required:
                          - name
                          type: object
                      required:
                      - container
                      type: object
                    logger:
                      properties:
                        mode:
                          type: string
                        url:
                          type: string
                      type: object
                    maxReplicas:
                      type: integer
                    minReplicas:
                      type: integer
                    parallelism:
                      type: integer
                    serviceAccountName:
                      type: string
                  type: object
              required:
              - predictor
              type: object
            canaryTrafficPercent:
              type: integer
            default:
              properties:
                explainer:
                  properties:
                    alibi:
                      properties:
                        config:
                          additionalProperties:
                            type: string
                          type: object
                        resources:
                          properties:
                            limits:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                            requests:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                          type: object
                        runtimeVersion:
                          type: string
                        storageUri:
                          type: string
                        type:
                          type: string
                      required:
                      - type
                      type: object
                    batcher:
                      properties:
                        maxBatchSize:
                          type: integer
                        maxLatency:
                          type: integer
                        timeout:
                          type: integer
                      type: object
                    custom:
                      properties:
                        container:
                          properties:
                            args:
                              items:
                                type: string
                              type: array
                            command:
                              items:
                                type: string
                              type: array
                            env:
                              items:
                                properties:
                                  name:
                                    type: string
                                  value:
                                    type: string
                                  valueFrom:
                                    properties:
                                      configMapKeyRef:
                                        properties:
                                          key:
                                            type: string
                                          name:
                                            type: string
                                          optional:
                                            type: boolean
                                        required:
                                        - key
                                        type: object
                                      fieldRef:
                                        properties:
                                          apiVersion:
                                            type: string
                                          fieldPath:
                                            type: string
                                        required:
                                        - fieldPath
                                        type: object
                                      resourceFieldRef:
                                        properties:
                                          containerName:
                                            type: string
                                          divisor:
                                            anyOf:
                                            - type: integer
                                            - type: string
                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                            x-kubernetes-int-or-string: true
                                          resource:
                                            type: string
                                        required:
                                        - resource
                                        type: object
                                      secretKeyRef:
                                        properties:
                                          key:
                                            type: string
                                          name:
                                            type: string
                                          optional:
                                            type: boolean
                                        required:
                                        - key
                                        type: object
                                    type: object
                                required:
                                - name
                                type: object
                              type: array
                            envFrom:
                              items:
                                properties:
                                  configMapRef:
                                    properties:
                                      name:
                                        type: string
                                      optional:
                                        type: boolean
                                    type: object
                                  prefix:
                                    type: string
                                  secretRef:
                                    properties:
                                      name:
                                        type: string
                                      optional:
                                        type: boolean
                                    type: object
                                type: object
                              type: array
                            image:
                              type: string
                            imagePullPolicy:
                              type: string
                            lifecycle:
                              properties:
                                postStart:
                                  properties:
                                    exec:
                                      properties:
                                        command:
                                          items:
                                            type: string
                                          type: array
                                      type: object
                                    httpGet:
                                      properties:
                                        host:
                                          type: string
                                        httpHeaders:
                                          items:
                                            properties:
                                              name:
                                                type: string
                                              value:
                                                type: string
                                            required:
                                            - name
                                            - value
                                            type: object
                                          type: array
                                        path:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                        scheme:
                                          type: string
                                      required:
                                      - port
                                      type: object
                                    tcpSocket:
                                      properties:
                                        host:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                      required:
                                      - port
                                      type: object
                                  type: object
                                preStop:
                                  properties:
                                    exec:
                                      properties:
                                        command:
                                          items:
                                            type: string
                                          type: array
                                      type: object
                                    httpGet:
                                      properties:
                                        host:
                                          type: string
                                        httpHeaders:
                                          items:
                                            properties:
                                              name:
                                                type: string
                                              value:
                                                type: string
                                            required:
                                            - name
                                            - value
                                            type: object
                                          type: array
                                        path:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                        scheme:
                                          type: string
                                      required:
                                      - port
                                      type: object
                                    tcpSocket:
                                      properties:
                                        host:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                      required:
                                      - port
                                      type: object
                                  type: object
                              type: object
                            livenessProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            name:
                              type: string
                            ports:
                              items:
                                properties:
                                  containerPort:
                                    format: int32
                                    type: integer
                                  hostIP:
                                    type: string
                                  hostPort:
                                    format: int32
                                    type: integer
                                  name:
                                    type: string
                                  protocol:
                                    type: string
                                required:
                                - containerPort
                                - protocol
                                type: object
                              type: array
                              x-kubernetes-list-map-keys:
                              - containerPort
                              - protocol
                              x-kubernetes-list-type: map
                            readinessProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            resources:
                              properties:
                                limits:
                                  additionalProperties:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                    x-kubernetes-int-or-string: true
                                  type: object
                                requests:
                                  additionalProperties:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                    x-kubernetes-int-or-string: true
                                  type: object
                              type: object
                            securityContext:
                              properties:
                                allowPrivilegeEscalation:
                                  type: boolean
                                capabilities:
                                  properties:
                                    add:
                                      items:
                                        type: string
                                      type: array
                                    drop:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                privileged:
                                  type: boolean
                                procMount:
                                  type: string
                                readOnlyRootFilesystem:
                                  type: boolean
                                runAsGroup:
                                  format: int64
                                  type: integer
                                runAsNonRoot:
                                  type: boolean
                                runAsUser:
                                  format: int64
                                  type: integer
                                seLinuxOptions:
                                  properties:
                                    level:
                                      type: string
                                    role:
                                      type: string
                                    type:
                                      type: string
                                    user:
                                      type: string
                                  type: object
                                windowsOptions:
                                  properties:
                                    gmsaCredentialSpec:
                                      type: string
                                    gmsaCredentialSpecName:
                                      type: string
                                    runAsUserName:
                                      type: string
                                  type: object
                              type: object
                            startupProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            stdin:
                              type: boolean
                            stdinOnce:
                              type: boolean
                            terminationMessagePath:
                              type: string
                            terminationMessagePolicy:
                              type: string
                            tty:
                              type: boolean
                            volumeDevices:
                              items:
                                properties:
                                  devicePath:
                                    type: string
                                  name:
                                    type: string
                                required:
                                - devicePath
                                - name
                                type: object
                              type: array
                            volumeMounts:
                              items:
                                properties:
                                  mountPath:
                                    type: string
                                  mountPropagation:
                                    type: string
                                  name:
                                    type: string
                                  readOnly:
                                    type: boolean
                                  subPath:
                                    type: string
                                  subPathExpr:
                                    type: string
                                required:
                                - mountPath
                                - name
                                type: object
                              type: array
                            workingDir:
                              type: string
                          required:
                          - name
                          type: object
                      required:
                      - container
                      type: object
                    logger:
                      properties:
                        mode:
                          type: string
                        url:
                          type: string
                      type: object
                    maxReplicas:
                      type: integer
                    minReplicas:
                      type: integer
                    parallelism:
                      type: integer
                    serviceAccountName:
                      type: string
                  type: object
                predictor:
                  properties:
                    batcher:
                      properties:
                        maxBatchSize:
                          type: integer
                        maxLatency:
                          type: integer
                        timeout:
                          type: integer
                      type: object
                    custom:
                      properties:
                        container:
                          properties:
                            args:
                              items:
                                type: string
                              type: array
                            command:
                              items:
                                type: string
                              type: array
                            env:
                              items:
                                properties:
                                  name:
                                    type: string
                                  value:
                                    type: string
                                  valueFrom:
                                    properties:
                                      configMapKeyRef:
                                        properties:
                                          key:
                                            type: string
                                          name:
                                            type: string
                                          optional:
                                            type: boolean
                                        required:
                                        - key
                                        type: object
                                      fieldRef:
                                        properties:
                                          apiVersion:
                                            type: string
                                          fieldPath:
                                            type: string
                                        required:
                                        - fieldPath
                                        type: object
                                      resourceFieldRef:
                                        properties:
                                          containerName:
                                            type: string
                                          divisor:
                                            anyOf:
                                            - type: integer
                                            - type: string
                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                            x-kubernetes-int-or-string: true
                                          resource:
                                            type: string
                                        required:
                                        - resource
                                        type: object
                                      secretKeyRef:
                                        properties:
                                          key:
                                            type: string
                                          name:
                                            type: string
                                          optional:
                                            type: boolean
                                        required:
                                        - key
                                        type: object
                                    type: object
                                required:
                                - name
                                type: object
                              type: array
                            envFrom:
                              items:
                                properties:
                                  configMapRef:
                                    properties:
                                      name:
                                        type: string
                                      optional:
                                        type: boolean
                                    type: object
                                  prefix:
                                    type: string
                                  secretRef:
                                    properties:
                                      name:
                                        type: string
                                      optional:
                                        type: boolean
                                    type: object
                                type: object
                              type: array
                            image:
                              type: string
                            imagePullPolicy:
                              type: string
                            lifecycle:
                              properties:
                                postStart:
                                  properties:
                                    exec:
                                      properties:
                                        command:
                                          items:
                                            type: string
                                          type: array
                                      type: object
                                    httpGet:
                                      properties:
                                        host:
                                          type: string
                                        httpHeaders:
                                          items:
                                            properties:
                                              name:
                                                type: string
                                              value:
                                                type: string
                                            required:
                                            - name
                                            - value
                                            type: object
                                          type: array
                                        path:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                        scheme:
                                          type: string
                                      required:
                                      - port
                                      type: object
                                    tcpSocket:
                                      properties:
                                        host:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                      required:
                                      - port
                                      type: object
                                  type: object
                                preStop:
                                  properties:
                                    exec:
                                      properties:
                                        command:
                                          items:
                                            type: string
                                          type: array
                                      type: object
                                    httpGet:
                                      properties:
                                        host:
                                          type: string
                                        httpHeaders:
                                          items:
                                            properties:
                                              name:
                                                type: string
                                              value:
                                                type: string
                                            required:
                                            - name
                                            - value
                                            type: object
                                          type: array
                                        path:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                        scheme:
                                          type: string
                                      required:
                                      - port
                                      type: object
                                    tcpSocket:
                                      properties:
                                        host:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                      required:
                                      - port
                                      type: object
                                  type: object
                              type: object
                            livenessProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            name:
                              type: string
                            ports:
                              items:
                                properties:
                                  containerPort:
                                    format: int32
                                    type: integer
                                  hostIP:
                                    type: string
                                  hostPort:
                                    format: int32
                                    type: integer
                                  name:
                                    type: string
                                  protocol:
                                    type: string
                                required:
                                - containerPort
                                - protocol
                                type: object
                              type: array
                              x-kubernetes-list-map-keys:
                              - containerPort
                              - protocol
                              x-kubernetes-list-type: map
                            readinessProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            resources:
                              properties:
                                limits:
                                  additionalProperties:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                    x-kubernetes-int-or-string: true
                                  type: object
                                requests:
                                  additionalProperties:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                    x-kubernetes-int-or-string: true
                                  type: object
                              type: object
                            securityContext:
                              properties:
                                allowPrivilegeEscalation:
                                  type: boolean
                                capabilities:
                                  properties:
                                    add:
                                      items:
                                        type: string
                                      type: array
                                    drop:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                privileged:
                                  type: boolean
                                procMount:
                                  type: string
                                readOnlyRootFilesystem:
                                  type: boolean
                                runAsGroup:
                                  format: int64
                                  type: integer
                                runAsNonRoot:
                                  type: boolean
                                runAsUser:
                                  format: int64
                                  type: integer
                                seLinuxOptions:
                                  properties:
                                    level:
                                      type: string
                                    role:
                                      type: string
                                    type:
                                      type: string
                                    user:
                                      type: string
                                  type: object
                                windowsOptions:
                                  properties:
                                    gmsaCredentialSpec:
                                      type: string
                                    gmsaCredentialSpecName:
                                      type: string
                                    runAsUserName:
                                      type: string
                                  type: object
                              type: object
                            startupProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            stdin:
                              type: boolean
                            stdinOnce:
                              type: boolean
                            terminationMessagePath:
                              type: string
                            terminationMessagePolicy:
                              type: string
                            tty:
                              type: boolean
                            volumeDevices:
                              items:
                                properties:
                                  devicePath:
                                    type: string
                                  name:
                                    type: string
                                required:
                                - devicePath
                                - name
                                type: object
                              type: array
                            volumeMounts:
                              items:
                                properties:
                                  mountPath:
                                    type: string
                                  mountPropagation:
                                    type: string
                                  name:
                                    type: string
                                  readOnly:
                                    type: boolean
                                  subPath:
                                    type: string
                                  subPathExpr:
                                    type: string
                                required:
                                - mountPath
                                - name
                                type: object
                              type: array
                            workingDir:
                              type: string
                          required:
                          - name
                          type: object
                      required:
                      - container
                      type: object
                    logger:
                      properties:
                        mode:
                          type: string
                        url:
                          type: string
                      type: object
                    maxReplicas:
                      type: integer
                    minReplicas:
                      type: integer
                    onnx:
                      properties:
                        resources:
                          properties:
                            limits:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                            requests:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                          type: object
                        runtimeVersion:
                          type: string
                        storageUri:
                          type: string
                      required:
                      - storageUri
                      type: object
                    parallelism:
                      type: integer
                    pytorch:
                      properties:
                        modelClassName:
                          type: string
                        resources:
                          properties:
                            limits:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                            requests:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                          type: object
                        runtimeVersion:
                          type: string
                        storageUri:
                          type: string
                      required:
                      - storageUri
                      type: object
                    serviceAccountName:
                      type: string
                    sklearn:
                      properties:
                        resources:
                          properties:
                            limits:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                            requests:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                          type: object
                        runtimeVersion:
                          type: string
                        storageUri:
                          type: string
                      required:
                      - storageUri
                      type: object
                    tensorflow:
                      properties:
                        resources:
                          properties:
                            limits:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                            requests:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                          type: object
                        runtimeVersion:
                          type: string
                        storageUri:
                          type: string
                      required:
                      - storageUri
                      type: object
                    triton:
                      properties:
                        resources:
                          properties:
                            limits:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                            requests:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                          type: object
                        runtimeVersion:
                          type: string
                        storageUri:
                          type: string
                      required:
                      - storageUri
                      type: object
                    xgboost:
                      properties:
                        nthread:
                          type: integer
                        resources:
                          properties:
                            limits:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                            requests:
                              additionalProperties:
                                anyOf:
                                - type: integer
                                - type: string
                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                x-kubernetes-int-or-string: true
                              type: object
                          type: object
                        runtimeVersion:
                          type: string
                        storageUri:
                          type: string
                      required:
                      - storageUri
                      type: object
                  type: object
                transformer:
                  properties:
                    batcher:
                      properties:
                        maxBatchSize:
                          type: integer
                        maxLatency:
                          type: integer
                        timeout:
                          type: integer
                      type: object
                    custom:
                      properties:
                        container:
                          properties:
                            args:
                              items:
                                type: string
                              type: array
                            command:
                              items:
                                type: string
                              type: array
                            env:
                              items:
                                properties:
                                  name:
                                    type: string
                                  value:
                                    type: string
                                  valueFrom:
                                    properties:
                                      configMapKeyRef:
                                        properties:
                                          key:
                                            type: string
                                          name:
                                            type: string
                                          optional:
                                            type: boolean
                                        required:
                                        - key
                                        type: object
                                      fieldRef:
                                        properties:
                                          apiVersion:
                                            type: string
                                          fieldPath:
                                            type: string
                                        required:
                                        - fieldPath
                                        type: object
                                      resourceFieldRef:
                                        properties:
                                          containerName:
                                            type: string
                                          divisor:
                                            anyOf:
                                            - type: integer
                                            - type: string
                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                            x-kubernetes-int-or-string: true
                                          resource:
                                            type: string
                                        required:
                                        - resource
                                        type: object
                                      secretKeyRef:
                                        properties:
                                          key:
                                            type: string
                                          name:
                                            type: string
                                          optional:
                                            type: boolean
                                        required:
                                        - key
                                        type: object
                                    type: object
                                required:
                                - name
                                type: object
                              type: array
                            envFrom:
                              items:
                                properties:
                                  configMapRef:
                                    properties:
                                      name:
                                        type: string
                                      optional:
                                        type: boolean
                                    type: object
                                  prefix:
                                    type: string
                                  secretRef:
                                    properties:
                                      name:
                                        type: string
                                      optional:
                                        type: boolean
                                    type: object
                                type: object
                              type: array
                            image:
                              type: string
                            imagePullPolicy:
                              type: string
                            lifecycle:
                              properties:
                                postStart:
                                  properties:
                                    exec:
                                      properties:
                                        command:
                                          items:
                                            type: string
                                          type: array
                                      type: object
                                    httpGet:
                                      properties:
                                        host:
                                          type: string
                                        httpHeaders:
                                          items:
                                            properties:
                                              name:
                                                type: string
                                              value:
                                                type: string
                                            required:
                                            - name
                                            - value
                                            type: object
                                          type: array
                                        path:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                        scheme:
                                          type: string
                                      required:
                                      - port
                                      type: object
                                    tcpSocket:
                                      properties:
                                        host:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                      required:
                                      - port
                                      type: object
                                  type: object
                                preStop:
                                  properties:
                                    exec:
                                      properties:
                                        command:
                                          items:
                                            type: string
                                          type: array
                                      type: object
                                    httpGet:
                                      properties:
                                        host:
                                          type: string
                                        httpHeaders:
                                          items:
                                            properties:
                                              name:
                                                type: string
                                              value:
                                                type: string
                                            required:
                                            - name
                                            - value
                                            type: object
                                          type: array
                                        path:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                        scheme:
                                          type: string
                                      required:
                                      - port
                                      type: object
                                    tcpSocket:
                                      properties:
                                        host:
                                          type: string
                                        port:
                                          anyOf:
                                          - type: integer
                                          - type: string
                                          x-kubernetes-int-or-string: true
                                      required:
                                      - port
                                      type: object
                                  type: object
                              type: object
                            livenessProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            name:
                              type: string
                            ports:
                              items:
                                properties:
                                  containerPort:
                                    format: int32
                                    type: integer
                                  hostIP:
                                    type: string
                                  hostPort:
                                    format: int32
                                    type: integer
                                  name:
                                    type: string
                                  protocol:
                                    type: string
                                required:
                                - containerPort
                                - protocol
                                type: object
                              type: array
                              x-kubernetes-list-map-keys:
                              - containerPort
                              - protocol
                              x-kubernetes-list-type: map
                            readinessProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            resources:
                              properties:
                                limits:
                                  additionalProperties:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                    x-kubernetes-int-or-string: true
                                  type: object
                                requests:
                                  additionalProperties:
                                    anyOf:
                                    - type: integer
                                    - type: string
                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                                    x-kubernetes-int-or-string: true
                                  type: object
                              type: object
                            securityContext:
                              properties:
                                allowPrivilegeEscalation:
                                  type: boolean
                                capabilities:
                                  properties:
                                    add:
                                      items:
                                        type: string
                                      type: array
                                    drop:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                privileged:
                                  type: boolean
                                procMount:
                                  type: string
                                readOnlyRootFilesystem:
                                  type: boolean
                                runAsGroup:
                                  format: int64
                                  type: integer
                                runAsNonRoot:
                                  type: boolean
                                runAsUser:
                                  format: int64
                                  type: integer
                                seLinuxOptions:
                                  properties:
                                    level:
                                      type: string
                                    role:
                                      type: string
                                    type:
                                      type: string
                                    user:
                                      type: string
                                  type: object
                                windowsOptions:
                                  properties:
                                    gmsaCredentialSpec:
                                      type: string
                                    gmsaCredentialSpecName:
                                      type: string
                                    runAsUserName:
                                      type: string
                                  type: object
                              type: object
                            startupProbe:
                              properties:
                                exec:
                                  properties:
                                    command:
                                      items:
                                        type: string
                                      type: array
                                  type: object
                                failureThreshold:
                                  format: int32
                                  type: integer
                                httpGet:
                                  properties:
                                    host:
                                      type: string
                                    httpHeaders:
                                      items:
                                        properties:
                                          name:
                                            type: string
                                          value:
                                            type: string
                                        required:
                                        - name
                                        - value
                                        type: object
                                      type: array
                                    path:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                    scheme:
                                      type: string
                                  required:
                                  - port
                                  type: object
                                initialDelaySeconds:
                                  format: int32
                                  type: integer
                                periodSeconds:
                                  format: int32
                                  type: integer
                                successThreshold:
                                  format: int32
                                  type: integer
                                tcpSocket:
                                  properties:
                                    host:
                                      type: string
                                    port:
                                      anyOf:
                                      - type: integer
                                      - type: string
                                      x-kubernetes-int-or-string: true
                                  required:
                                  - port
                                  type: object
                                timeoutSeconds:
                                  format: int32
                                  type: integer
                              type: object
                            stdin:
                              type: boolean
                            stdinOnce:
                              type: boolean
                            terminationMessagePath:
                              type: string
                            terminationMessagePolicy:
                              type: string
                            tty:
                              type: boolean
                            volumeDevices:
                              items:
                                properties:
                                  devicePath:
                                    type: string
                                  name:
                                    type: string
                                required:
                                - devicePath
                                - name
                                type: object
                              type: array
                            volumeMounts:
                              items:
                                properties:
                                  mountPath:
                                    type: string
                                  mountPropagation:
                                    type: string
                                  name:
                                    type: string
                                  readOnly:
                                    type: boolean
                                  subPath:
                                    type: string
                                  subPathExpr:
                                    type: string
                                required:
                                - mountPath
                                - name
                                type: object
                              type: array
                            workingDir:
                              type: string
                          required:
                          - name
                          type: object
                      required:
                      - container
                      type: object
                    logger:
                      properties:
                        mode:
                          type: string
                        url:
                          type: string
                      type: object
                    maxReplicas:
                      type: integer
                    minReplicas:
                      type: integer
                    parallelism:
                      type: integer
                    serviceAccountName:
                      type: string
                  type: object
              required:
              - predictor
              type: object
          required:
          - default
          type: object
        status:
          properties:
            address:
              properties:
                url:
                  type: string
              type: object
            canary:
              additionalProperties:
                properties:
                  host:
                    type: string
                  name:
                    type: string
                type: object
              type: object
            canaryTraffic:
              type: integer
            conditions:
              items:
                properties:
                  lastTransitionTime:
                    type: string
                  message:
                    type: string
                  reason:
                    type: string
                  severity:
                    type: string
                  status:
                    type: string
                  type:
                    type: string
                required:
                - status
                - type
                type: object
              type: array
            default:
              additionalProperties:
                properties:
                  host:
                    type: string
                  name:
                    type: string
                type: object
              type: object
            observedGeneration:
              format: int64
              type: integer
            traffic:
              type: integer
            url:
              type: string
          type: object
      type: object
  version: v1alpha2
  versions:
  - name: v1alpha2
    served: true
    storage: true
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
---
apiVersion: admissionregistration.k8s.io/v1beta1
kind: MutatingWebhookConfiguration
metadata:
  annotations:
    cert-manager.io/inject-ca-from: kfserving-system/serving-cert
  creationTimestamp: null
  name: inferenceservice.serving.kubeflow.org
webhooks:
- clientConfig:
    caBundle: Cg==
    service:
      name: kfserving-webhook-server-service
      namespace: kfserving-system
      path: /mutate-inferenceservices
  failurePolicy: Fail
  name: inferenceservice.kfserving-webhook-server.defaulter
  rules:
  - apiGroups:
    - serving.kubeflow.org
    apiVersions:
    - v1alpha2
    operations:
    - CREATE
    - UPDATE
    resources:
    - inferenceservices
- clientConfig:
    caBundle: Cg==
    service:
      name: kfserving-webhook-server-service
      namespace: kfserving-system
      path: /mutate-pods
  failurePolicy: Fail
  name: inferenceservice.kfserving-webhook-server.pod-mutator
  namespaceSelector:
    matchExpressions:
    - key: control-plane
      operator: DoesNotExist
  objectSelector:
    matchExpressions:
    - key: serving.kubeflow.org/inferenceservice
      operator: Exists
  rules:
  - apiGroups:
    - ""
    apiVersions:
    - v1
    operations:
    - CREATE
    - UPDATE
    resources:
    - pods
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: leader-election-role
  namespace: kfserving-system
rules:
- apiGroups:
  - ""
  resources:
  - configmaps
  verbs:
  - get
  - list
  - watch
  - create
  - update
  - patch
  - delete
- apiGroups:
  - ""
  resources:
  - configmaps/status
  verbs:
  - get
  - update
  - patch
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  creationTimestamp: null
  name: kfserving-manager-role
rules:
- apiGroups:
  - admissionregistration.k8s.io
  resources:
  - mutatingwebhookconfigurations
  - validatingwebhookconfigurations
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
- apiGroups:
  - ""
  resources:
  - configmaps
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
- apiGroups:
  - ""
  resources:
  - namespaces
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - secrets
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
- apiGroups:
  - ""
  resources:
  - serviceaccounts
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - services
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
- apiGroups:
  - networking.istio.io
  resources:
  - virtualservices
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
- apiGroups:
  - networking.istio.io
  resources:
  - virtualservices/finalizers
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
- apiGroups:
  - networking.istio.io
  resources:
  - virtualservices/status
  verbs:
  - get
  - patch
  - update
- apiGroups:
  - serving.knative.dev
  resources:
  - services
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
- apiGroups:
  - serving.knative.dev
  resources:
  - services/finalizers
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
- apiGroups:
  - serving.knative.dev
  resources:
  - services/status
  verbs:
  - get
  - patch
  - update
- apiGroups:
  - serving.kubeflow.org
  resources:
  - inferenceservices
  - inferenceservices/finalizers
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
- apiGroups:
  - serving.kubeflow.org
  resources:
  - inferenceservices/status
  verbs:
  - get
  - patch
  - update
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kfserving-proxy-role
rules:
- apiGroups:
  - authentication.k8s.io
  resources:
  - tokenreviews
  verbs:
  - create
- apiGroups:
  - authorization.k8s.io
  resources:
  - subjectaccessreviews
  verbs:
  - create
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: leader-election-rolebinding
  namespace: kfserving-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: leader-election-role
subjects:
- kind: ServiceAccount
  name: default
  namespace: kfserving-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kfserving-manager-rolebinding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kfserving-manager-role
subjects:
- kind: ServiceAccount
  name: default
  namespace: kfserving-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kfserving-proxy-rolebinding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kfserving-proxy-role
subjects:
- kind: ServiceAccount
  name: default
  namespace: kfserving-system
---
apiVersion: v1
data:
  batcher: |-
    {
        "image" : "kfserving/batcher:v0.4.0",
        "memoryRequest": "1Gi",
        "memoryLimit": "1Gi",
        "cpuRequest": "1",
        "cpuLimit": "1"
    }
  credentials: |-
    {
       "gcs": {
           "gcsCredentialFileName": "gcloud-application-credentials.json"
       },
       "s3": {
           "s3AccessKeyIDName": "AWS_ACCESS_KEY_ID",
           "s3SecretAccessKeyName": "AWS_SECRET_ACCESS_KEY"
       }
    }
  explainers: |-
    {
        "alibi": {
            "image" : "gcr.io/kfserving/alibi-explainer",
            "defaultImageVersion": "v0.4.1"
        }
    }
  ingress: |-
    {
        "ingressGateway" : "knative-ingress-gateway.knative-serving",
        "ingressService" : "istio-ingressgateway.istio-system.svc.cluster.local"
    }
  logger: |-
    {
        "image" : "gcr.io/kfserving/logger:v0.4.1",
        "memoryRequest": "100Mi",
        "memoryLimit": "1Gi",
        "cpuRequest": "100m",
        "cpuLimit": "1",
        "defaultUrl": "http://default-broker"
    }
  predictors: |-
    {
        "tensorflow": {
            "image": "tensorflow/serving",
            "defaultImageVersion": "1.14.0",
            "defaultGpuImageVersion": "1.14.0-gpu"
        },
        "onnx": {
            "image": "mcr.microsoft.com/onnxruntime/server",
            "defaultImageVersion": "v1.0.0"
        },
        "sklearn": {
            "image": "gcr.io/kfserving/sklearnserver",
            "defaultImageVersion": "v0.4.1"
        },
        "xgboost": {
            "image": "gcr.io/kfserving/xgbserver",
            "defaultImageVersion": "v0.4.1"
        },
        "pytorch": {
            "image": "gcr.io/kfserving/pytorchserver",
            "defaultImageVersion": "v0.4.1",
            "defaultGpuImageVersion": "v0.4.1-gpu"
        },
        "triton": {
            "image": "nvcr.io/nvidia/tritonserver",
            "defaultImageVersion": "20.03-py3"
        }
    }
  storageInitializer: |-
    {
        "image" : "gcr.io/kfserving/storage-initializer:v0.4.1",
        "memoryRequest": "100Mi",
        "memoryLimit": "1Gi",
        "cpuRequest": "100m",
        "cpuLimit": "1"
    }
  transformers: |-
    {
    }
kind: ConfigMap
metadata:
  name: inferenceservice-config
  namespace: kfserving-system
---
apiVersion: v1
kind: Secret
metadata:
  name: kfserving-webhook-server-secret
  namespace: kfserving-system
---
apiVersion: v1
kind: Service
metadata:
  annotations:
    prometheus.io/port: "8443"
    prometheus.io/scheme: https
    prometheus.io/scrape: "true"
  labels:
    control-plane: controller-manager
    controller-tools.k8s.io: "1.0"
  name: kfserving-controller-manager-metrics-service
  namespace: kfserving-system
spec:
  ports:
  - name: https
    port: 8443
    targetPort: https
  selector:
    control-plane: controller-manager
    controller-tools.k8s.io: "1.0"
---
apiVersion: v1
kind: Service
metadata:
  labels:
    control-plane: kfserving-controller-manager
    controller-tools.k8s.io: "1.0"
  name: kfserving-controller-manager-service
  namespace: kfserving-system
spec:
  ports:
  - port: 443
  selector:
    control-plane: kfserving-controller-manager
    controller-tools.k8s.io: "1.0"
---
apiVersion: v1
kind: Service
metadata:
  name: kfserving-webhook-server-service
  namespace: kfserving-system
spec:
  ports:
  - port: 443
    targetPort: 9443
  selector:
    control-plane: kfserving-controller-manager
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    control-plane: kfserving-controller-manager
    controller-tools.k8s.io: "1.0"
  name: kfserving-controller-manager
  namespace: kfserving-system
spec:
  selector:
    matchLabels:
      control-plane: kfserving-controller-manager
      controller-tools.k8s.io: "1.0"
  serviceName: controller-manager-service
  template:
    metadata:
      labels:
        control-plane: kfserving-controller-manager
        controller-tools.k8s.io: "1.0"
    spec:
      containers:
      - args:
        - --secure-listen-address=0.0.0.0:8443
        - --upstream=http://127.0.0.1:8080/
        - --logtostderr=true
        - --v=10
        image: gcr.io/kubebuilder/kube-rbac-proxy:v0.4.0
        name: kube-rbac-proxy
        ports:
        - containerPort: 8443
          name: https
      - args:
        - --metrics-addr=127.0.0.1:8080
        command:
        - /manager
        env:
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: SECRET_NAME
          value: kfserving-webhook-server-cert
        image: gcr.io/kfserving/kfserving-controller:v0.4.1
        imagePullPolicy: Always
        name: manager
        ports:
        - containerPort: 443
          name: webhook-server
          protocol: TCP
        resources:
          limits:
            cpu: 100m
            memory: 300Mi
          requests:
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - mountPath: /tmp/k8s-webhook-server/serving-certs
          name: cert
          readOnly: true
      terminationGracePeriodSeconds: 10
      volumes:
      - name: cert
        secret:
          defaultMode: 420
          secretName: kfserving-webhook-server-cert
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: serving-cert
  namespace: kfserving-system
spec:
  commonName: kfserving-webhook-server-service.kfserving-system.svc
  dnsNames:
  - kfserving-webhook-server-service.kfserving-system.svc
  issuerRef:
    kind: Issuer
    name: selfsigned-issuer
  secretName: kfserving-webhook-server-cert
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: selfsigned-issuer
  namespace: kfserving-system
spec:
  selfSigned: {}
---
apiVersion: admissionregistration.k8s.io/v1beta1
kind: ValidatingWebhookConfiguration
metadata:
  annotations:
    cert-manager.io/inject-ca-from: kfserving-system/serving-cert
  creationTimestamp: null
  name: inferenceservice.serving.kubeflow.org
webhooks:
- clientConfig:
    caBundle: Cg==
    service:
      name: kfserving-webhook-server-service
      namespace: kfserving-system
      path: /validate-inferenceservices
  failurePolicy: Fail
  name: inferenceservice.kfserving-webhook-server.validator
  rules:
  - apiGroups:
    - serving.kubeflow.org
    apiVersions:
    - v1alpha2
    operations:
    - CREATE
    - UPDATE
    resources:
    - inferenceservices
examples/training/simple-train-sdk/utils.py METASEP
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

import gzip
import numpy as np
import struct


# load compressed MNIST gz files and return numpy arrays
def load_data(filename, label=False):
    with gzip.open(filename) as gz:
        struct.unpack('I', gz.read(4))
        n_items = struct.unpack('>I', gz.read(4))
        if not label:
            n_rows = struct.unpack('>I', gz.read(4))[0]
            n_cols = struct.unpack('>I', gz.read(4))[0]
            res = np.frombuffer(gz.read(n_items[0] * n_rows * n_cols), dtype=np.uint8)
            res = res.reshape(n_items[0], n_rows * n_cols)
        else:
            res = np.frombuffer(gz.read(n_items[0]), dtype=np.uint8)
            res = res.reshape(n_items[0], 1)
    return res


# one-hot encode a 1-D array
def one_hot_encode(array, num_of_classes):
    return np.eye(num_of_classes)[array.reshape(-1)]

docs/media/ws-msi.png METASEP

docs/media/update-identity2.png METASEP

docs/media/profileConfig.png METASEP

docs/media/privatelink-networkflow-v3.png METASEP

docs/media/gkecreate.png METASEP

docs/media/gke-ssh.png METASEP

docs/media/edit-identity.png METASEP

docs/media/detach.png METASEP

docs/media/attach.png METASEP

docs/media/attach-4.png METASEP

docs/media/attach-1.png METASEP

docs/media/assign-role.png METASEP

docs/media/README.md METASEP


docs/AKS-HCI/troubleshooting.md METASEP
# Troubleshooting for AzureML Training on Azure Stack Hub Kubernetes Cluster and Storage

## AzureML Dataset and Datastore Issues

* Known limitations:
   
   * AML Tabular Datasets are not currenly supported on ASH blob storage
   * AML Dataset downloading is not yet stable. PLease use mounting to access your files during training
   
* If you can't access your datastore (mounting or uploading): Please check if your generated SAS token for your ASH storage container is still valid and not expired. If unsure you can try to repeat the instruction from step 5 of [this document](Train-AzureArc.md#create-and-configure-azure-stack-hubs-storage-account).

## ASH Kubernetes Cluster Related Issues

* Attaching ASH Kubernetes Cluster to AzureML Workspace Failed
   
  * Make sure your Kubernetes cluster is connected to Azure using Azure Arc. Also, make sure the version of your Kubernetes cluster is [supported](https://docs.microsoft.com/en-us/azure/aks/supported-kubernetes-versions#kubernetes-version-support-policy). Please make sure you are using the latest Arc agent according to pre-requisites of [this doc](https://github.com/Azure/azure-arc-kubernetes-preview/blob/master/docs/k8s-extensions.md#pre-requisites). You can find most of your information from the Azure portal: 
      
      <p align="center">
            <img src="imgs/kubernetes_arc.png" />
      </p>

   * Please make sure the latest Arc extensions are installed and Arc connections are created as described in the pre-requisites of [this doc](https://github.com/Azure/azure-arc-kubernetes-preview/blob/master/docs/k8s-extensions.md#pre-requisites).
   

      You may also run the following kubectl commands against one of the master nodes of your cluster to check if you cluster is porperly attached to Azure via Azure Arc:
      
      <pre> kubectl get ns </pre>
      
       You should see "azure-arc" is one of the namespaces.

      <pre> kubectl get pods -n azure-arc </pre>
       You should see all the pods in "running" status.
   

## AzureML Run Issues

  * No Progress on AzureML Experiment Runs

    Currently, there is a limitation on the number of pods that can run simultaneously in a single node. There can't be more than 1 pending pod in a single node. This means that if there are more pending pods than the number of worker nodes, all the pending pods will remain pending indefinitely. As an example, if the combination of your training workloads is sending 5 pods to your Kubernetes cluster and you only have 4 worker nodes, your training pods will never get scheduled by the Kubernetes agent.  If you face this issue, please cancel all of your none-progressing runs on your AzureML workspace and retry accordingly. If you do a distributed training run, you may need to reduce the node_count value in Run Configuration.
   
  * Out of memory issue

      If your training job fails without any apparent reasons: This could be because of not having sufficient memory on your Kubernetes nodes. Insufficient Node memory could also be the reason for cases in which training is successful for only one epoch but fails for multiple epochs. Please try to either increase your Nodes' memory or optimize your training code to become less memory intensive.

* Bugs in your scripts
  

   These issues are relatively easy to debug. You can go to your AzureML Workspace to check run logs for information about environment image creations, run time errors, outputs generated by your scripts, etc. This way you can pinpoint the reason for your training workload failing. Here is a snapshot:

   <p align="center">
      <img src="imgs/azureml_log.png" />
   </p>


## Other Known Limitations

Please check out our other [known limitations](../limitations-and-knownIssues.md) and [troubleshooting](../troubleshooting.md) docs.

docs/AKS-HCI/Train-AzureArc.md METASEP
# Setup NFS Server on Azure Stack HCI and Use your Data and run managed Machine Learning Experiments On-Premises

In this article, you:
* How to set up an NFS server on Azure Stack HCI
* Configure the NFS server as the training data source (where you hold all your training data)
* Verify the NFS server setup using a sample notebook

## Setting up the NFS Server

You can follow this [link](https://help.ubuntu.com/community/SettingUpNFSHowTo) to setup an NFS server on an Ubuntu machine. The Ubuntu machine can be hosted on Azure Stack HCI or in the place which AKS-HCI cluster can access. Below shows an example how to setup an NFS Server on Azure Stack HCI VM. If you already have an NFS Server that AKS-HCI cluster can access, you can skip step this part and go to **Configure the NFS server as the training data source**.

1. Deploy a Ubuntu VM on Azure Stack HCI.

Helper link of creating VM on Azure Stack HCI: https://docs.microsoft.com/en-us/azure-stack/hci/manage/vm#create-a-new-vm

* Download the Ubuntu ISO file from https://ubuntu.com/download/desktop
* Select **Generation 1** (Recommended for Linux VMs)
* Choose **Install an operation system from an image file(.iso)** and load the Ubuntu ISO file from local.

Example, creating Ubuntu VM with ISO on Azure Stack HCI.

<p align="center">
  <img src="nfs/images/create-ubuntu-vm.png" />
</p>

After the deployment finishes successfully, you can see the VM from Windows Admin Center.

<p align="center">
  <img src="nfs/images/ubuntu-vm-created.png" />
</p>

2. Prerequisites on Ubuntu VM

To make sure the Ubuntu VM NFS Server can be accessed externally, if you don't use DHCP, you need to assign the public IP manually. Like,

<p align="center">
  <img src="nfs/images/configure-public-ip.png" />
</p>

Then reset the network to take effect.

<p align="center">
  <img src="nfs/images/reset-network.png" />
</p>

About SSH, you need to install openSSH server and open the required port - 22.

First update the system and install openssh-server package, run,

```shell
sudo apt update
sudo apt upgrade
sudo apt install openssh-server
```
Verify the ssh service running status
```shell
sudo systemctl status ssh
```
<p align="center">
  <img src="nfs/images/ssh-status.png" />
</p>

If the SSH service is not started automatically, you can start (or restart) the SSH service manually via below command:
```shell
sudo service ssh start
```
To make sure the Ubuntu VM can be connected from a remote location, need to enable UFW firewall and add a rule to allow incoming SSH connections.

To configure the UFW firewall and add a rule to allow incoming SSH connections.
```shell
sudo ufw allow ssh
```
Then enable UFW firewall via below command:
```shell
sudo ufw enable
```
Then check the status of UFW:
```shell
sudo ufw status numbered
```
<p align="center">
  <img src="nfs/images/ufw-ssh.png" />
</p>


3. Setup the NFS Server on the Ubuntu VM.

Here is the script to setup an NFS Server within your Ubuntu virtual machine - [nfs-server-setup.sh](nfs/nfs-server-setup.sh)

After you've created your VM, copy the script to your machine, then into the VM using: 

```shell
scp /path/to/script_file username@vm-ip-address:/home/{username}
```
If you copy the script from Windows machine, please pay attention to the format, could use dos2unix to convert the format:
```shell
sudo apt install dos2unix
dos2unix ~/nfs-server-setup.sh
```
Once your script is in your VM, you can ssh into the VM and execute it via the command:

```shell
sudo ~/nfs-server-setup.sh
```
If its execution fails because of a permission denied error, set execution permission via the command:

```shell
chmod +x ~/nfs-server-setup.sh
```

In [nfs-server-setup.sh](nfs/nfs-server-setup.sh), it accepts two parameters,
* The first one is DATA_DIRECTORY, indicating a folder which is used as the data store for NFS server
* The second one is AKS_SUBNET, indicating Kubernetes subnet address. Make sure to replace the AKS_SUBNET with the correct one from your cluster or else "*" will open your NFS Server to all ports and connections.

The NFS server will restart (because of the script) and you can mount the NFS Server for AKS-HCI. The mounting point is <NFS_IP>:/$(basename $DATA_DIRECTORY).

Configure the UFW firewall to allow the NFS incoming connection.
```shell
sudo ufw allow from any to any port nfs
sudo ufw allow from any to any port 111
```
<p align="center">
  <img src="nfs/images/ufw-nfs.png" />
</p>

You can verify the mounting point on another Ubuntu machine, with nfs-common installed and the network access to the NFS server.
```shell
# install nfs client
sudo apt install nfs-common -y
# mount: </path/to/desired/mountpoint> needs to be created in advance
sudo mount -t nfs <NFS_IP>:<folder name of DATA_DIRECTORY> </path/to/desired/mountpoint>
# umount
sudo fusermount -u </path/to/desired/mountpoint>
```
<p align="center">
  <img src="nfs/images/verify-nfs-vm.png" />
</p>

## Configure the NFS server as the Training Data Source

Follow the [doc](../setup-ephemeral-nfs-volume.md), complete the steps after setting up the NFS server.

[mount-config.yaml](nfs/mount-config.yaml) shows an example config as the following.

```yaml
apiVersion: v1
data:
  mounts.yaml: |
    mountPoints:
    - mountPath: <Mounting path on training pod>
      mountType: nfs
      name: <NFS_NAME>
      path: <NFS_EXPORT_FILE_PATH>
      server: <NFS_IP>
kind: ConfigMap
metadata:
  name: mount-config
  namespace: azureml
```

## Verify the NFS Setup

You can verify your NFS setup using [Verify the NFS Setup in AMLArc Notebook](nfs/Verify_NFS_Setup_in_AMLArc.ipynb).

## Next Steps

* Experiment with ArcML on AKS on Azure Stack HCI using [Interactive Python Notebooks and AzureML CLI V2 Sample Examples](../AKS-HCI#sample-notebooks).

docs/AKS-HCI/README.md METASEP
# Setup and Run AzureML Training & Inferencing Workloads On-Premises Using AKS on Azure Stack HCI Via Azure Arc 

This repository is intended to serve as an information hub for AKS on Azure Stack HCI customers and partners who are interested in Arc AML training using ARC Connected AKS cluster and NFS Server on Azure Stack HCI. Use this repository for onboarding and testing instructions as well as an avenue to provide feedback, issues, enhancement requests and stay up to date as the public preview progresses.

<p align="center">
            <img src="imgs/structure.png" />
</p>

## Setup Azure Arc-enabled Machine Learning on AKS on Azure Stack HCI

You can use the following documents to get started with setting up your Azure Arc-enabled Machine Learning on AKS on Azure Stack HCI:

1. [Setup Azure Arc-enabled Machine Learning Training and Inferencing on AKS on Azure Stack HCI](AML-ARC-Compute.md)
2. [Setup NFS Server on Azure Stack HCI and Use your Data and run managed Machine Learning Experiments On-Premises](Train-AzureArc.md)

## Sample Notebooks

After following the setup documents, you can go through the sample notebooks linked below to get a better understanding of how the process works and the possibilities it can unlock:

* [Image Classification Using Scikit-learn](notebooks/mnist/MNIST_Training_with_AKS-HCI_Cluster_and_NFS.ipynb) (Image Classification)

  This notebook serves as "hello world" of using for training and inference with AKS-HCI Cluster, on-premise NFS Server, and Azure Machine Learning, including
  * Training with AKS-HCI cluster and on-premise NFS Server
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model

* [Distributed PyTorch Training with DistributedDataParallel](notebooks/distributed-cifar10/distributed-pytorch-cifar10.ipynb) (Image Classification)

  This notebook demonstrates an example of Image classification with PyTorch, including,
  * Distributed training using PyTorch with 2 worker nodes on AKS-HCI cluster and the training data is stored in on-premise NFS Server
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model

* [Object Segmentation with Transfer Learning](notebooks/object-segmentation-on-azure-stack/object_segmentation-akshci.ipynb) (Object Segmentation)
  
  Object segmentation using pre-trained Mask R-CNN model on PyTorch. AML pipeline steps are used for data preprocessing. **Training data are stored in on-premise NFS server, and the intermediate data are stored in default datastore associated with the ML workspace.** The whole flow includes,
  * Use AML pipelines to read training data from on-premise NFS server, do data preprocessing and generate intermediate data to default datastore
  * Use AML pipelines to trigger train step on AKS-HCI cluster
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model 


* [Object Segmentation with Transfer Learning with all data on NFS server](notebooks/object-segmentation-on-azure-stack/object_segmentation-akshci-nfs.ipynb) (Object Segmentation)

  Object segmentation using pre-trained Mask R-CNN model on PyTorch. AML pipeline steps are used for data preprocessing. **Both the training and intermediate data are stored in on-prem NFS server.** The whole flow includes,
  * Use AML pipelines to read training data from on-premise NFS server, do data preprocessing and generate intermediate data to NFS server.
  * Use AML pipelines to trigger train step on AKS-HCI cluster
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model 

* [AML Pipelines with NYC-TAXI-DATA](notebooks/pipeline/nyc-taxi-data-regression-model-building.ipynb) (Structured Text Data Prediction)

  This notebook demonstrates an example of Structured Text Data Prediction, preparing / preprocessing / training data in **default datastore associated with the ML workspace**. The whole flow includes,
  * Download and upload training data to default datastore
  * Use AML pipelines to preprocess and train
    * Cleanse data in parallel
    * Merge cleansed data
    * Normalize data
    * Transform data
    * Split data
    * Train model
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model 

* [AML Pipelines with NYC-TAXI-DATA with all data on NFS server](notebooks/pipeline/nyc-taxi-data-regression-model-building-nfs.ipynb) (Structured Text Data Prediction)

  This notebook demonstrates an example of Structured Text Data Prediction, preparing / preprocessing / training data on **on-prem NFS server**. The whole flow includes,
  * Download and upload training data to default datastore
  * Use AML pipelines to preprocess and train
    * Cleanse data in parallel
    * Merge cleansed data
    * Normalize data
    * Transform data
    * Split data
    * Train model
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model 

* [Model Download and Upload](notebooks/upload-download-model/AML-model-download-upload.ipynb)

## CLI v2 Examples

### Prerequisites 

Follow this [document](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-train-cli?view=azure-devops#prerequisites) to set up the prerequisites of using Azure Machine Learning CLI v2.  

### Examples

* [Image Classification Using Scikit-learn](cli/mnist/README.md) (Image Classification)

  This example serves as "hello world" of using for training and inference with AKS-HCI Cluster, on-premise NFS Server, and Azure Machine Learning, including
  * Training with AKS-HCI cluster and on-premise NFS Server
  * Register model
  * Inference with the registered model on AKS-HCI cluster
  * Test model

## Troubleshooting

If you face issues during setup or experimenting, please check out [Limitations and known issues](../limitations-and-known-issues.md) and [Support](../../README.md#support) pages.

docs/AKS-HCI/AML-ARC-Compute.md METASEP
# Setup Azure Arc-enabled Machine Learning Training and Inferencing on AKS on Azure Stack HCI

In this article, you will:

*	Connect your AKS on Azure Stack HCI cluster to Azure Via Azure Arc
*	Install AzureML Arc extension on your AKS on Azure Stack HCI (AKS-HCI) cluster
*	Attach your Azure Arc-enabled AKS on Azure Stack HCI's cluster to your Azure Machine Learning Workspace as a Compute Target

## Prerequisites

Before you begin, please make sure that you have the following items available:

* An Azure subscription. If you don't have an Azure subscription, [create a free account](https://azure.microsoft.com/en-us/free/) before you begin.
* An AKS on Azure Stack HCI cluster with **only Linux worker nodes (no Windows worker nodes)**. **Your nodes must have a minimum of 4 vCPU cores and 8GB memory, around 2 vCPU cores and 3GB memory would be used by Arc and AzureML extension components** that we will be installed as part of this tutorial. If you don't have an AKS on Azure Stack HCI cluster, you can follow [the official documentation here](https://docs.microsoft.com/en-us/azure-stack/aks-hci/kubernetes-walkthrough-powershell) to create one on your Azure Stack HCI hardware. Alternatively, you can follow [AKS on Azure Stack HCI Evaluation guide](https://github.com/Azure/aks-hci/tree/main/eval) to create a cluster on an Azure VM with only a couple of commands (This should only be used for proof of concept, please use [the official documentation](https://docs.microsoft.com/en-us/azure-stack/aks-hci/kubernetes-walkthrough-powershell) and hardware for production workloads).
* An Azure Machine Learning (AzureML or AML) Workspace deployed as part of your subscription. You can [create an AML workspace](https://docs.microsoft.com/azure/machine-learning/how-to-manage-workspace?tabs=python) if you don't already have one. If you are using the AML Python SDK to create your workspace, please make sure it has a version>= **1.30**. We strongly recommend learning more about [the inner-workings and concepts in Azure Machine Learning](https://docs.microsoft.com/en-us/azure/machine-learning/concept-azure-machine-learning-architecture) before continuing with the rest of this article (optional).

## Connect your AKS on Azure Stack HCI Cluster to Azure Via Azure Arc

Your AKS on Azure Stack HCI (AKS-HCI) cluster needs Azure Resource Manager representation to be able to take advantage of AzureML training and Inferencing Arc extensions. 
You can connect your cluster to Azure using Azure Arc. Clusters are attached to standard Azure subscriptions, are located in a resource group, and can receive tags just like any other Azure resource. Also, the Azure Arc-enabled Kubernetes representation allows for extending the following capabilities on to your Kubernetes cluster beyond AzureML capabilities being discussed as part of this document:

* Management services - Configurations (GitOps), Azure Monitor for containers, Azure Policy (Gatekeeper)
* Data Services - SQL Managed Instance, PostgreSQL Hyperscale
* Application services - App Service, Functions, Event Grid, Logic Apps, API Management

To connect a Kubernetes cluster to Azure, the cluster administrator needs to deploy a couple of Arc agents. The agents are responsible for connectivity to Azure, collecting Azure Arc logs and metrics, and enabling the above-mentioned scenarios on the cluster. These agents run in a Kubernetes namespace named azure-arc and are standard Kubernetes deployments. You can follow [Connect an Azure Kubernetes Service on Azure Stack HCI cluster to Azure Arc-enabled Kubernetes](https://docs.microsoft.com/en-us/azure-stack/aks-hci/connect-to-arc) to connect your cluster to Azure. 

## Install AzureML Arc Extension on your AKS on Azure Stack HCI cluster

Now that you have an Arc-enabled cluster, you can install Arc extensions onto your cluster and expand its capabilities using the available extensions. To learn more about available Azure Arc extensions please visit [Deploy and manage Azure Arc-enabled Kubernetes cluster extensions](https://docs.microsoft.com/en-us/azure/azure-arc/kubernetes/extensions).

To enable managed ML training and inferencing on your Arc-enabled AKS-HCI cluster, you will need to install AzureML Arc extension using Azure Arc `k8s-extension` CLI. Before installation, please make sure your Arc-enabled AKS-HCI cluster meets AzureML Arc [extension prerequisites](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-attach-arc-kubernetes#prerequisites) and [networking requirements](../network-requirements.md).


<!--- Please follow the following steps to prepare your cluster for extension installation: -->

<!--- 
2. If your AKS-HCI cluster has a mix of Windows and Linux worker nodes please [taint](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) your all of your cluster's windows worker nodes using the following `kubectl` command. Since all of AzureML's extension constructs require Linux worker nodes, this makes sure that the constructs do not get scheduled onto your Windows worker nodes and fail. Please review [Adapt apps for mixed-OS Kubernetes clusters using node selectors or taints and tolerations](https://docs.microsoft.com/en-us/azure-stack/aks-hci/adapt-apps-mixed-os-clusters) to learn more about running ways to adapt applications for AKS-HCI mixed-OS environment.

    ```
    kubectl taint nodes <name-of-your-windows-nodes> node.kubernetes.io/os=windows:NoSchedule
    ```
-->

You can use the below command to install AzureML extension onto your cluster:

```
az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <resource-group> --configuration-settings enableTraining=True
```

**Please note that the parameters you pass as part of `--configuration-settings` in the command above will decide what ML capabilities are enabled as part of the installation. For example, the above command enables AzureML Training on your AKS-HCI cluster. If you want to enable both training and HTTP endpoint inferencing, you can use the below command for installation:**

```
az k8s-extension create --name <extension-name> --extension-type Microsoft.AzureML.Kubernetes --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <resource-group> --scope cluster --configuration-settings enableTraining=True enableInference=True allowInsecureConnections=True
```

You can find a list of available `--configuration-settings` here: [Training Configurations](../deploy-extension.md#deploy-azureml-extension-for-model-training), [Inferencing Configurations](https://github.com/Azure/amlarc-preview/blob/main/docs/deploy-extension.md#review-azureml-extension-deployment-configuration-settings)

## Attach your Azure Arc-enabled Cluster to your Azure Machine Learning Workspace as a Compute Target

If you do not already have an Azure Machine learning workspace in your desired Azure resource group, please [create your Machine learning workspace](https://docs.microsoft.com/en-us/azure/machine-learning/concept-workspace#-create-a-workspace).

Follow the steps mentioned in [Attach Arc cluster to AzureML Workspace](../attach-compute.md) to connect your Arc-enabled AKS on Azure Stack HCI cluster to Azure Machine Learning.

## Next Steps

* Learn how to [Setup NFS Server on Azure Stack HCI and Use your Data and run managed Machine Learning Experiments On-Premises](Train-AzureArc.md).
* Experiment with ArcML on AKS on Azure Stack HCI using [Interactive Python Notebooks and AzureML CLI V2 Sample Examples](../AKS-HCI#sample-notebooks).

docs/troubleshooting.md METASEP
This document is WIP.
1. Use `kubectl` to get logs, and contact suport for support.


# Timeout
Stuff took too long.
Tends to be transient. Try again.

# AgentInstallationFailedDueToExceptions
Encountered an error when attempting AMLK8s agent installation.
Please check the logs for more info.

# ClusterNotReachable
AKS API server cannot be connected. Please make sure AKS sets correct NSG rules and policy to allow AzureMachineLearning service.
To start, read https://docs.microsoft.com/en-us/azure/machine-learning/how-to-network-security-overview

# AttachmentOfPrivateAksClusterNotSupported
The attachment of private Aks clusters in this AML region is currently not supported.
During private preview Kubernetes compute is limited to only a few regions. One region is eastus.

# ConflictingArtifactsInCluster
The cluster contains artifacts that may conflict with the AMLK8s agent.
Please make sure the namespaces are clear before starting install.

docs/simple-train-cli.md METASEP

# Train an image classification model with AML 2.0 CLI

1. Remove any previous AML CLI extension installations

   ```azurecli
   az extension remove -n ml
   az extension remove -n azure-cli-ml
   ```

1. Install the latest AML 2.0 CLI, which is in public preview, and then verify installation

   ```azurecli
   az extension add -n ml
   az ml -h
   ```

1. Let's set some defaults for all subsequent "az ml" CLI commands

   ```azurecli
   az account set --subscription <subcription id>
   az configure --defaults workspace=<azureml workspace name> group=<resource group>
   ```

1. For this simple training job with AML 2.0 CLI, we have following project directory structure:

   ``` code
   simple-train-cli
   |-- src
   |   |-- train.py
   |   |-- utils.py
   |-- job.yml
   ```

   As you can see from above, the project simply contains a job YAML file and some Python training scripts. In general, this a very typical project setup for Azure Arc-enabled ML training. Let's take a look a job YAML file: 

   ```yaml
   experiment_name: Tutorial-sklearn-mnist
   code:
     local_path: ./src
   command: python train.py --data-folder ./mnist-data --regularization 0.5
   environment: azureml:AzureML-sklearn-0.24-ubuntu18.04-py37-cpu:7
   compute: azureml:<your compute target name>
   resources:
     instance_type: <your instance type>
   ```
   
   **Note**: **Instance type** is optional parameter. If it's not given, the compute default instance type will be used. Refer to [here](./instance-type.md) to learn how to create different instance types.

1. Git clone preview Github repo and switch to simple-train-cli directory

   ```console
   git clone https://github.com/Azure/AML-Kubernetes.git
   cd AML-Kubernetes/examples/training/simple-train-cli
   ```

1. Modify job YAML file to specify your own compute target name

1. Run the image classification training job

   ```azurecli
   az ml job create -f job.yml --web
   ```

   Creating this job uploads any specified local assets, like the source code directory, validates the YAML file, and submits the run. If needed, the environment is built, then the compute is scaled up and configured for running the job.

1. Once the job is compute, you can download the outputs:

   ```azurecli
   az ml job download -n $run_id --outputs
   ```

That is it! You have successfully trained an image classification model and download outputs to local directory.

## Additional resources

* [Train models (create jobs) with the 2.0 CLI (preview)](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-train-cli)
* [Additional examples](https://github.com/Azure/azureml-examples/tree/main/cli/jobs)

docs/simple-flow.md METASEP

# Deploy an image classification model - create an endpoint with blue deployment

## Azure CLI for ML installation and project setup

1. Remove any previous Azure ML CLI extension installations

    ```azurecli
    az extension remove -n ml
    az extension remove -n azure-cli-ml
    ```

1. Install the latest Azure CLI for ML, which is in public preview, and then verify installation

    ```azurecli
    az extension add -n ml
    az ml -h
    ```

1. Let's set some defaults for all subsequent "az ml" CLI commands

    ```azurecli
    az account set --subscription <subscription id>
    az configure --defaults workspace=<azureml workspace name> group=<resource group>
    ```

1. For this simple deployment flow, we have following project directory structure:

    ``` code
    simple-flow
    |-- model
    |   |-- conda.yml
    |   |-- sklearn_mnist_model.pkl
    |-- script
    |   |-- score.py
    |-- blue-deployment.yml
    |-- endpoint.yml
    |-- sample_request.json
    ```

    As you can see from above, "model" directory contains model and Conda environment definition, "score.py" is under "script" directory. At top level directory, we have endpoint, blue deployment YAML definition and sample request JSON file. In general, this is very typical project setup for Azure Arc enabled ML model deployment.

## Simple deployment flow

Now let's see simple deployment flow in action!

1. Git clone preview Github repo and switch to simple-flow directory

    ```console
    git clone https://github.com/Azure/AML-Kubernetes.git
    cd AML-Kubernetes/examples/inference/simple-flow
    ```

1. Modify endpoint YAML file to replace "\<your compute target name>" with your own compute target name, and replace "\<your instance type>" to the instance type defined in your compute configuration. Create an endpoint with blue deployment with following CLI command, endpoint creation and deployment might take a few minutes.

> Note that the resource requirements (CPU, memory, GPU) defined in the endpoint yaml should be no more than the resource limit of the specified instance type.


1. Create endpoint
    ```azurecli
    az ml online-endpoint create --name sklearn-mnist -f endpoint.yml
    ```
1. Check status of endpoint

    ```azurecli
    az ml online-endpoint show -n sklearn-mnist
    ```

1. Create blue deployment
    ```azurecli
    az ml online-deployment create --name blue --endpoint sklearn-mnist -f blue-deployment.yml --all-traffic
    ```

1. Check status of blue deployment

    ```azurecli
    az ml online-deployment show --name blue --endpoint sklearn-mnist
    ```

1. Test endpoint by scoring request

    ```azurecli
    az ml online-endpoint invoke -n sklearn-mnist -r sample-request.json
    ```

    You can also send a scoring request using cURL.

    * Obtain a token/keys for the scoring endpoint

    ```azurecli
    az ml online-endpoint get-credentials -n sklearn-mnist
    ```

    * Obtain the `scoring_uri` of the endpoint
  
    ```azurecli
    az ml online-endpoint show -n sklearn-mnist
    ```
  
    * Score using the token/key obtained above

    ```bash
    curl -v -i -X POST -H "Content-Type:application/json" -H "Authorization: Bearer <key_or_token>" -d '<sample_data>' <scoring_uri>
    ```

    That is it! You have successfully deployed an image classification model and scored the model with a request.

1. Get logs

    ```azurecli
    az ml online-deployment get-logs --name blue --endpoint sklearn-mnist
    ```

1. Delete endpoint

    ```azurecli
    az ml online-endpoint delete -n sklearn-mnist
    ```

## Additional resources

* [Deploy model using customer container with built-in model or entry script](inference-byoc.md). In this case, the model and the entry script will not be saved at the cloud, but in local.
* To learn more about Azure ML endpoint and deployment concents, please check [Managed Online Endpoints](https://docs.microsoft.com/azure/machine-learning/how-to-deploy-managed-online-endpoints).
* [Additional Examples](https://github.com/Azure/azureml-examples/tree/main/cli/endpoints/online)

docs/setup-ephemeral-nfs-volume.md METASEP
### Set up NFS server

Set up on Ubuntu [Link](https://help.ubuntu.com/community/SettingUpNFSHowTo) and make sure to grant NFS Share Access to your Kubernetes cluster.


### Create a Configmap with nfs server properties

```mount-config.yaml
kind: ConfigMap
apiVersion: v1
metadata:
  name: mount-config
  namespace: azureml
data:
  mounts.yaml: |
    mountPoints:
    - mountPath: /nfs_share
      mountType: nfs
      name: nfs-name
      path: /path/to/shared-folder
      server: nfs-server.domain-name.com
```

### Apply the Configmap

`kubectl apply -f mount-config.yaml`

### Documentation on Specific Fields
* `mountPath`: defines the path that the NFS volume will be mounted into inside your job
* `mountType`: must be `nfs`
* `name`: arbitrary symbolic name for your mount.  If you define multiple mounts then this must be unique per mount
* `path`: path (on the server) to the folder you want to mount
* `server`: NFS server address

Multiple NFS mounts may be defined under `mountPoints`

The rest of the `mount-config.yaml` file must be exactly as above

### How AML will use the mount for jobs

All jobs will look for the 'mount-config' ConfigMap.  If this ConfigMap is missing or malformed then no mounts will be applied.



docs/release-notes.md METASEP
New features are released at a biweekly cadance. 

**July 2, 2021 Release**

* New Kubernetes distributions support, OpenShift Kubernetes and GKE (Google Kubernetes Engine). 
* Autoscale support. If the user-managed Kubernetes cluster enables the autoscale, the cluster will be automatically scaled out or scaled in according to the volume of active runs and deployments.  
* Performance improvement on job laucher, which shortens the job execution time to a great deal.

**August 10, 2021 Release**

* New Kubernetes distribution support, K3S - Lightweight Kubernetes. 
* [Deploy AzureML extension to your AKS cluster without connecting via Azure Arc](./docs/deploy-ml-extension-on-AKS-without-arc.md).
* [Automated Machine Learning (AutoML) via Python SDK](https://docs.microsoft.com/en-us/azure/machine-learning/concept-automated-ml) 
* [Use 2.0 CLI to attach the Kubernetes cluster to AML Workspace](./docs/attach-compute.md#Create-compute-target-via-Azure-ML-2.0-CLI)
* Optimize AzureML extension components CPU/memory resources utilization. 

**August 24, 2021 Release**

* [Compute instance type is supported in job YAML](./docs/simple-train-cli.md).  
* [Assign Managed Identity to AMLArc compute](./docs/managed-identity.md)

**Sept 16, 2021 Release**

* New regions available, WestUS, CentralUS, NorthCentralUS, KoreaCentral.
* Job queue explanability. See job queue details in AML Workspace Studio.
* Auto-killing policy. Support `max_run_duration_seconds` in ``ScriptRunConfig``. The system will attempt to automatically cancel the run if it took longer than the setting value.
* Performance improvement on cluster autoscale support.
* [Arc agent and ML extension deployment from on-prem container registry](https://github.com/Azure/azure-arc-kubernetes-preview/blob/master/docs/custom-registry/connect-cluster.md) 

**Oct 14, 2021 Release**

* [PV/PVC volume mount support in AMLArc training job](./docs/pvc.md).
docs/pvc.md METASEP
### PV/PVC support in AMLArc training job

Now you can leverage Kubernetes native way to mount various data storage via [Persistent Volume (PV) and Persistent Volume Claim (PVC)](https://kubernetes.io/docs/concepts/storage/persistent-volumes/).

1. Create PV, take NFS as example,

```
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv 
spec:
  capacity:
    storage: 1Gi 
  accessModes:
    - ReadWriteMany 
  persistentVolumeReclaimPolicy: Retain
  storageClassName: ""
  nfs: 
    path: /share/nfs
    server: 20.98.110.84 
    readOnly: false
```
2. Cteate PVC. In `metadata`, add label `ml.azure.com/pvc: "true"` to indicate the PVC can be mounted to the upcoming training job, and add annotation  `ml.azure.com/mountpath: <mount path>` to specify the mount path. 

```
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc  
  namespace: default
  labels:
    ml.azure.com/pvc: "true"
  annotations:
    ml.azure.com/mountpath: "/mnt/nfs"
    ml.azure.com/gid:"XXX"
spec:
  storageClassName: ""
  accessModes:
  - ReadWriteMany      
  resources:
     requests:
       storage: 1Gi
```
### Access control

All AML workloads will be executed as a special user with `uid` `200513`. To have proper read/write permission to the mounted file system like NFS, refer to the following guidance,

* If the shared folder has '777' permission, all ML workloads will have read and write permission. 
* if the file system has set all_squash and anonuid/anongid, all ML workloads will have read and write permission. 
* If `uid 200513` is added to the group with proper read/write access to NFS, all ML workloads will have read and write permission. In this case, use the annotation `ml.azure.com/gid: "XXX"` in PVC setting, then the uid 200513 will be added to the specified group. **Note** to remove `RPCMOUNTDOPTS="--manage-gids` at the path of `/etc/default/nfs-kernel-server ` in NFS server to respect the permission control in the client side.



### How AML will use the PVC

The training job in the same `namespace` with the PVC will be mounted the volume automatically. Then data scientist can access the mount path in the training job.

By default, the job will be created in  `default` namespace. IT operator can decide the namespace in attached compute attach.





docs/onprem-baremetal-blobfuse-setup.md METASEP
The required blobfuse plugin isn't installed attaching the cluster to AML.

A manual solution on Ubuntu 20.04 LTS:
- Install blobfuse (on all nodes)
```
https://github.com/Azure/kubernetes-volume-drivers/blob/master/flexvolume/blobfuse/README.md`
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install -y blobfuse fuse
```
- Install jq (if there isn't on all nodes)
```
sudo apt-get -y jq
```
- Install blobfuse-flexvol-installer daemonset on the master node
```
kubectl apply -f https://raw.githubusercontent.com/Azure/kubernetes-volume-drivers/master/flexvolume/blobfuse/deployment/blobfuse-flexvol-installer-1.9.yaml
```

docs/network-requirements.md METASEP
## Meet network requirements

If your cluster has Internect access, it's all done. Otherwise, If the cluster is behind the outbound proxy or firewall with strict outbound network, make sure following protocols/ports/outbound URLs to function.

AMLArc depends on Azure Arc components. Please make sure to meet [Azure Arc network requirements](https://docs.microsoft.com/en-us/azure/azure-arc/kubernetes/quickstart-connect-cluster?tabs=azure-cli#meet-network-requirements) 

### AML extension
 
Need outbound access to following URLs when deploying ML extension to the cluster.

| Destination Endpoint| Port | Description |
|--|--|--|
| *.kusto.windows.net, *.table.core.windows.net, *.queue.core.windows.net | https:443 | Required to upload and anaylize system logs in Kusto |

### AML workload

Need outbound access to following URLs when submitting any AML workload (training or inference) to the cluster.
  
| Destination Endpoint| Port | Description |
|--|--|--|
| *.azurecr.io | https:443 | Azure container registry, required to pull container images to host training or inference jobs|
| *.blob.core.windows.net | https:443 | Azure blob storage, required to fetch ML project scripts, container images and job logs/metrics|
| *.workspace.\<region\>.api.azureml.ms ,  \<region\>.experiments.azureml.net,  \<region\>.api.azureml.ms | https:443 | Azure mahince learning service api, required to communucate with AML |

#### Training job
 
 Besides above URLs, need outbound access to following URLs for training workloads. If the cluster is only used for real-time inferencing, the following URLs are not required.

| Destination Endpoint| Port | Description |
|--|--|--|
| pypi.org | https:443 | Python package index, to install pip packages used to initilize the job environment |
| archive.ubuntu.com, security.ubuntu.com, ppa.launchpad.net | http:80 | This address lets the init container download the required security patches and updates |


>Note: `<region-code>` mapping for Azure cloud regions: eus (East US), weu (West Europe), wcus (West Central US), scus (South Central US), sea (South East Asia), uks (UK South), wus2 (West US 2), ae (Australia East), eus2 (East US 2), ne (North Europe), fc (France Central). `<region>` is the lowcase full spelling, e.g., eastus, southeastasia.

docs/managed-identity.md METASEP
# Assign Managed Identity to the compute target

A common challenge for developers is the management of secrets and credentials used to secure communication between different components making up a solution. [Managed Identity](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview) eliminate the need for developers to manage credentials.

To access Azure Container Registry (ACR) for Docker image, and Storage Account for trainig data, attach AMLArc compute with system-assigned or user-assigned managed identity enabled.

## Assign Managed Identity 

- You can assign Managed Identity to the compute in [compute attach](./attach-compute.md)
- If the compute has been attached, you can update the settings of Managed Identity in Machine Learning Studio.
  - Go to Azure Machine Learning Studio - Compute - Attached compute, select your attached compute.
  - Edit Managed Identity.
   ![Managed identity](./media/edit-identity.png)
   ![Managed identity](./media/update-identity2.png)

## Assign Azure roles to Managed Identity

Azure offers a couple of ways to assign roles to Managed Identity.
- [Use Azure Portal to assign roles](https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-portal?tabs=current).
- [Use CLI to assign roles](https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-cli)
- [Use PowerShell to assign roles](https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-powershell)

>If use Portal to assign roles, and you have system-assigned managed identity, select **User,group,or service principal**. Click Select members, find and search the identity name formatted as ``\<workspace name>/computes/\<compute target name>``
>
> If you have user-assigned managed identity, select **Managed identity** to find the target identity. 
   ![Managed identity](./media/assign-role.png)
docs/limitations-and-known-issues.md METASEP
# Limitations and known issues

## Failed to find any PEM data in certificate for gateway and cluster-status-reporter

If you see this error during AzureML extension deployment, it means the cluster lacks ```--cluster-signing-cert-file``` and ```--cluster-signing-key-file``` parameters in its controller manager setting. You can set ```enable_https``` to false and it will use http for in-cluster components communication. For morning please refer to [Kubernetes documentation](https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/#a-note-to-cluster-administrators).

## Custom IP interface for MPI job

For MPI job on Azure Arc-enabled on-premise Kubernetes cluster, AzureML provides a good default value if eth0 is not available. However this good default value might not be correct and MPI job will fail. To ensure that MPI job gets correct IP interface, you can st custome IP interface at AzureML extension deployment time by appending ```amloperator.custom_ip_interface_enabled=True``` and ```amloperator.custom_ip_interface=<your-ip-interface-name>``` to ```--configuration-settings``` parameter.  

## AML Dataset support

Azure Arc-enabled Machine Learning job supports mounting/downloading an AML Dataset to a local path specified by the field "PathOnCompute". But this path can not be any of following: under root folder (e.g. /<myfolder>), priviledge folder (e.g. /data/<myfolder>), and an existing folder. 

docs/instance-type.md METASEP
# Instance types

## What are instance types?
Instance types are an Azure Machine Learning concept that allows targeting certain types of
compute nodes for training and inference workloads.  For an Azure VM, an example for an 
instance type is `STANDARD_D2_V3`.

In Kubernetes clusters, instance types are represented by two elements: 
[nodeSelector](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector)
and [resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/).
In short, a `nodeSelector` lets us specify which node a pod should run on.  The node must have a
corresponding label.  In the `resources` section, we can set the compute resources (CPU, memory and
Nvidia GPU) for the pod.

## Create instance types
Instance types are represented in a custom resource definition (CRD) that is installed with the
Azure Machine Learning extension.  To create a new instance type, create a new custom resource
for the instance type CRD.  For example:
```bash
kubectl apply -f my_instance_type.yaml
```

With `my_instance_type.yaml`:
```yaml
apiVersion: amlarc.azureml.com/v1alpha1
kind: InstanceType
metadata:
  name: myinstancetypename
spec:
  nodeSelector:
    mylabel: mylabelvalue
  resources:
    limits:
      cpu: "1"
      nvidia.com/gpu: 1
      memory: "2Gi"
    requests:
      cpu: "700m"
      memory: "1500Mi"
```

This creates an instance type with the following behavior:
- Pods will be scheduled only on nodes with label `mylabel: mylabelvalue`.
- Pods will be assigned resource requests of `700m` CPU and `1500Mi` memory.
- Pods will be assigned resource limits of `1` CPU, `2Gi` memory and `1` Nvidia GPU.

Note:
- Nvidia GPU resources are only specified in the `limits` section as integer values.  For more information,
  please refer to the Kubernetes [documentation](https://kubernetes.io/docs/tasks/manage-gpus/scheduling-gpus/#using-device-plugins).
- CPU and memory resources are string values.
- CPU can be specified in millicores, for example `100m`, or in full numbers, for example `"1"` which
  is equivalent to `1000m`.
- Memory can be specified as a full number + suffix, for example `1024Mi` for 1024 MiB.

It is also possible to create multiple instance types at once:
```bash
kubectl apply -f my_instance_type_list.yaml
```

With `my_instance_type_list.yaml`:
```yaml
apiVersion: amlarc.azureml.com/v1alpha1
kind: InstanceTypeList
items:
  - metadata:
      name: cpusmall
    spec:
      resources:
        requests:
          cpu: "100m"
          memory: "100Mi"
        limits:
          cpu: "1"
          nvidia.com/gpu: 0
          memory: "1Gi"

  - metadata:
      name: defaultinstancetype
    spec:
      resources:
        requests:
          cpu: "1"
          memory: "1Gi" 
        limits:
          cpu: "1"
          nvidia.com/gpu: 0
          memory: "1Gi"
```

The above example creates two instance types: `cpusmall` and `defaultinstancetype`.  The latter
is examplained in more detail in the following section.

## Default instance types
If a training or inference workload is submitted without an instance type, it uses the default
instance type.  To specify a default instance type for a Kubernetes cluster, create an instance
type with name `defaultinstancetype`.  It will automatically be recognized as the default.

If no default instance type was defined, the following default behavior applies:
- No nodeSelector is applied, meaning the pod can get scheduled on any node.
- The workload's pods are assigned default resources with 0.6 cpu cores, 1536Mi memory and 0 GPU:
```yaml
resources:
  requests:
    cpu: "0.6"
    memory: "1536Mi"
  limits:
    cpu: "0.6"
    memory: "1536Mi"
    nvidia.com/gpu: null
```
- This default instance type will not appear as an InstanceType custom resource in the cluster when running the command ```kubectl get instancetype```,
but it will appear in all clients (UI, CLI, SDK).

**Note:** The default instance type purposefully uses little resources.  To ensure all ML workloads
run with appropriate resources, for example GPU resource,  it is highly recommended to create custom instance types.

## Select instance type to submit training job
To select an instance type for a training job using CLI (V2), specify its name as part of the
`compute` section.  For example:
```yaml
command: python -c "print('Hello world!')"
environment:
  docker:
    image: python
compute: azureml:<compute_target_name>
resources:
  instance_type: <instance_type_name>
```

In the above example, replace `<compute_target_name>` with the name of your Kubernetes compute
target and `<instance_type_name>` with the name of the instance type you wish to select.

## Select instance type to deploy model

To select an instance type for a model deployment using CLI (V2), specify its name deployment YAML.  For example:

```yaml
deployments:
  - name: blue
    app_insights_enabled: true
    model: 
      name: sklearn_mnist_model
      version: 1
      local_path: ./model/sklearn_mnist_model.pkl
    code_configuration:
      code: 
        local_path: ./script/
      scoring_script: score.py
    instance_type: <your instance type>
    environment: 
      name: sklearn-mnist-env
      version: 1
      path: .
      conda_file: file:./model/conda.yml
      docker:
        image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1
```

docs/inference-byoc.md METASEP
## Deploy model with customer container for real-time inference

The normal workflow to deploy your model is,

1. Register the model to AML workspace.
2. Prepare an entry script (score.py).
1. Specify an [AML inference curated environment](https://docs.microsoft.com/en-us/azure/machine-learning/concept-prebuilt-docker-images-inference#list-of-prebuilt-docker-images-for-inference) as the base Docker image.
1. Deploy the model to the compute.

The normal workflow requires to register the model and prepare an entry script in the cloud. If user has concern on that, we also support a BYOC mode that user can build the model and entry script into the custom docker image. In this way, the model or  the entry script will not be saved in the cloud. Then using AML CLI v2 to deploy model for real-time inference.

###  Prepare the docker image
<!-- cd into directory azureml_artifacts/inference and you can see all the dependencies. -->

Create the Docker file as follows and build your own image.

```Dockerfile
# Specify a base image from AML inference curated environment
FROM <BASE IMAGE>

USER root
RUN mkdir -p $HOME/.cache
WORKDIR /
RUN if dpkg --compare-versions `conda --version | grep -oE '[^ ]+$'` lt 4.4.11; then conda install conda==4.4.11; fi
# copy the conda dependencies file to the container target path
COPY <conda_dependencies.yml FILE PATH> azureml-environment-setup/conda_dependencies.yml

# copy the score.py file to the container target path. If you don't need the score.py built into the docker image, comment out the next line.
COPY <score.py FILE PATH> /var/azureml-app/script/score.py

# copy the model folder/file to the container target path.  If you don't need the model built into the docker image, comment out the next line.
COPY <MODEL FOLDER OR FILE PATH> /var/azureml-app/azureml-models/<MODEL FOLDER/FILE>

RUN ldconfig /usr/local/cuda/lib64/stubs && conda env create -p /azureml-envs/azureml -f azureml-environment-setup/conda_dependencies.yml && rm -rf "$HOME/.cache/pip" && conda clean -aqy && CONDA_ROOT_DIR=$(conda info --root) && rm -rf "$CONDA_ROOT_DIR/pkgs" && find "$CONDA_ROOT_DIR" -type d -name __pycache__ -exec rm -rf {} + && ldconfig
ENV PATH /azureml-envs/azureml/bin:$PATH
ENV AZUREML_CONDA_ENVIRONMENT_PATH /azureml-envs/azureml
ENV LD_LIBRARY_PATH /azureml-envs/azureml/lib:$LD_LIBRARY_PATH
ENV AZUREML_ENVIRONMENT_IMAGE True
CMD ["runsvdir","/var/runit"]
```
### Prepare entry script and conda dependency yaml

Sample script:
```python
import json
import numpy as np
import os
import pickle
import joblib

def init():
    global model
    # MODEL_FILE_PATH is an environment variable specified in online-deployment yaml.
    # load the model from the docker container
    model = joblib.load(os.getenv('MODEL_FILE_PATH'))

def run(raw_data):
    data = np.array(json.loads(raw_data)['data'])
    # make prediction
    y_hat = model.predict(data)
    # you can return any data type as long as it is JSON-serializable
    return y_hat.tolist()
```
Sample conda dependency yaml. Add the necessary dependencies here to run the entry script.
```yaml
channels:
- anaconda
- conda-forge
dependencies:
- python=3.6.2
- pip:
  - azureml-defaults~=1.24.0.0
  - scikit-learn==0.22.1
name: azureml
```

### Create the online-endpoint
Create online endpoint yaml,
```yaml
name: <endpoint name>
compute: azureml:<compute target>
auth_mode: key
```
Create the endpoint by running,
```bash
az ml online-endpoint create -f endpoint.yml -n ${endpoint_name} --sub ${subscription} -g ${resource_group} -w ${workspace}
```
### Create the deployment
Create a deployment yaml file, and you need to update the `image` accordingly, specify the `environment variables` to use custom container, and keep the SAME `inference_config` as the example below.
- `AML_APP_ROOT` : the entry script folder at the docker container.
- `AZUREML_ENTRY_SCRIPT`: the entry script at the docker container.
- `MODEL_FILE_PATH`: the model path at the docker container.
```yaml
name: <deployment name>
type: kubernetes
environment_variables:
  AML_APP_ROOT: /var/azureml-app/script
  AZUREML_ENTRY_SCRIPT: score.py
  MODEL_FILE_PATH: /var/azureml-app/azureml-models/<model file/folder>
environment:
  name: <custom environment name>
  version: 1
  image: <docker image>
  #Please keep the SAME inference_config as below.
  inference_config:
    scoring_route:
      port: 5001
      path: /score
    liveness_route:
      port: 5001
      path: /
    readiness_route:
      port: 5001
      path: /
request_settings:
  request_timeout_ms: 1000
  max_concurrent_requests_per_instance: 1
  max_queue_wait_ms: 1000
resources:
  requests:
    cpu: "0.1"
    memory: "0.1Gi"
  limits:
    cpu: "0.2"
    memory: "200Mi"
liveness_probe:
  initial_delay: 5
  period: 5
  timeout: 10
  success_threshold: 1
  failure_threshold: 1
readiness_probe:
  initial_delay: 5
  period: 5
  timeout: 10
  success_threshold: 1
  failure_threshold: 1
instance_count: 1
scale_settings:
  type: default
```
### Create the online deployment
Create online deployment with all traffic,
```bash
az ml online-deployment create -f deployment.yaml -n blue --endpoint ${endpoint_name} -g --sub ${subscription} -g ${resource_group} -w ${workspace} --all-traffic
```

 Invoke the endpoint to test,
```bash
az ml online-endpoint invoke -r ${request json} -n ${endpoint_name} --sub ${subscription} -g ${resource_group} -w ${workspace}
```

docs/gke-setup.md METASEP
## GKE setup
1. Select Ubuntu OS image during cluster create
2. A minimum of 3 nodes is required; need enough resources for arc agent and amlk8s agent installation
3. DO NOT select smaller VM's than 'medium' size

GKE console -> +Create Cluster -> Node Pools -> Default-pool -> Nodes
![GKEClusterCreate](/docs/media/gkecreate.png)


4. Once the installation is complete, you need to SSH into each node in your cluster (can be found in Compute Engine under VM instances, SSH tool found under connect column).

![GKEClusterSSH](/docs/media/gke-ssh.png)

5. Execute the following commands in each node:

  ```bash
  sudo ln -s /etc/kubernetes/volumeplugins/azure~blobfuse /home/kubernetes/flexvolume/

  sudo apt-get update; sudo apt-get install jq

  wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb; sudo dpkg -i packages-microsoft-prod.deb; sudo apt-get update; sudo apt-get install blobfuse
  ```

docs/faq.md METASEP

# Frequently Asked Questions 

## Who is Azure Arc enabled Machine Learning intended for?

With increasing adoption of Kubernetes for machine learning among enterprises, Azure Machine Learning provides enterprise ML infrastructure team to easily setup and enable Kubernetes for their data science teams to use. At the same time, data scientists can focus on building high quality models and model deployment professionals can focus on scaling models production without getting involved about Kubernetes technical details. 

## Why should I use Azure Arc enabled Machine Learning for model deployment?

Many enterprises want to start machine learning now with where data lives today, which could be in multi-cloud or on-premises. Enterprises also want to optimize IT operation to leverage wherever workload is available. With flexibility of cloud-native development provided by Kubernetes, enterprises now can spin up Kubernetes cluster anywhere to meet their machine learning needs, at the same time to address security and privacy compliance requirements in a highly regulated environment. With Azure Arc enabled Machine Learning, enterprises now can have hybrid machine learning lifecycle such as train models in cloud and deploy models on-premises, or train models on-premises and deploy models in cloud, to leverage where compute and data available and broaden service access.

## How do I use Azure Arc enabled Machine Learning?

Enterprise IT operator can easily setup and enable Kubernetes for Azure Machine Learning with the following steps:

* Spin up a Kubernetes cluster anywhere
* Connect Kubernetes cluster to Azure cloud via Azure Arc
* Deploy AzureML extension to Azure Arc enabled Kubernetes cluster
* Attach Azure Arc enabled Kubernetes cluster to Azure ML workspace and create compute target for data science teams to use

Once Kubernetes cluster is enabled for Azure Machine Learning, data science professionals can discover Kubernetes compute targets in AzureML workspace or through CLI command, and use those compute targets to submit training job or deploy model.

## How does model deployment with Azure Arc enabled Machine Learning compare to Azure Machine Learning Managed Online Endpoint?

Both online endpoints are built on AzureML online endpoint concept, and customers use the same set of tools to create and manage both types of online endpoints. Managed online endpoint runs on powerful Azure managed compute, no compute and infrastructure management for customers and customer gets a turnkey solution with guaranteed SLA. Kubernetes online endpoint runs on customer managed Kubernetes, customer is responsible for managing Kubernetes cluster and ensuring online endpoint SLA. 


## Recommended AKS cluster resources

We recommend you use a at least 3 nodes cluster, each node having at least 2C 4G. And if you want to running GPU jobs, you need some GPU nodes.

## Why the nodes run occupied in a run is more than node count in run list?

The node count in the number of worker, for distribute training job, such as ps-worker or MPI/horovod they may need extra launcher node or ps node, they may also ocuppy one node. We will optimise this in following version.

## What Azure storage does Azure Arc-enabled ML support?

Azure Arc-enabled ML compute only support Azure blob container, if your data is in other Azure storage, please move it to Azure blob first. We will support other Azure storage in following iteration.

docs/deploy-on-ocp.md METASEP
# Deploy AzureML extension on OpenShift Container Platform

Azure Arc enabled ML supports both Azure RedHat OpenShift Service (ARO) and OpenShift Container Platform (OCP).

## Prerequisites

1. An ARO or OCP Kubernetes cluster is up and running. 

   * To setup ARO Kubernetes cluster on Azure, please follow instruction [here](https://docs.microsoft.com/azure/openshift/tutorial-create-cluster)
   * to setup OCP Kubernetes clsuter, please follow instructure on [RedHat website](https://docs.openshift.com/container-platform/4.6/installing/installing_platform_agnostic/installing-platform-agnostic.html).

1. Ensure you have cluster admin privilege and you have kubeconfig access from where you run Azure CLI command.
1. Grant privileged access to AzureML service accounts, run $oc edit scc privileged, add following service accounts under users:

   * ```system:serviceaccount:azure-arc:azure-arc-kube-aad-proxy-sa```
   * ```system:serviceaccount:azureml:{EXTENSION NAME}-kube-state-metrics``` **(Note:** ```{EXTENSION NAME}``` **here must match with the extension name used in** ```az k8s-extension create --name``` **step)**
   * ```system:serviceaccount:azureml:cluster-status-reporter```
   * ```system:serviceaccount:azureml:prom-admission```
   * ```system:serviceaccount:azureml:default```
   * ```system:serviceaccount:azureml:prom-operator```
   * ```system:serviceaccount:azureml:csi-blob-node-sa```
   * ```system:serviceaccount:azureml:csi-blob-controller-sa```
   * ```system:serviceaccount:azureml:load-amlarc-selinux-policy-sa```
   * ```system:serviceaccount:azureml:azureml-fe```
   * ```system:serviceaccount:azureml:prom-prometheus```

## Deploy AzureML extension

To Deploy AzureML extension on ARO or OCP, you would need to specify one additional config setting ```openshift=True``` in addition to regular configuration settings for normal AzureML extension deployment. Following command will deploy AzureML extension to ARO or OCP and enable Kubernetes cluster for training workload.

   ```azurecli
   az k8s-extension create --name amlarc-compute --extension-type Microsoft.AzureML.Kubernetes --configuration-settings enableTraining=True openshift=True  --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <resource-group> --scope cluster
   ```

docs/deploy-extension.md METASEP
# Deploy AzureML extension to your Kubernetes cluster

With a simple AzureML extension deployment, an AKS cluster or any Azure Arc enabled Kubernetes cluster, you can instantly onboard data science professionals to submit ML workload to the Kubernetes clusters by using existing Azure ML tools and service capabilities. You can deploy AzureML extension and enables Kubernetes cluster for following machine learning needs:
* Deploy AzureML extension for model training and batch inference
* Deploy AzureML extension for real-time inferencing only
* Deploy AzureML extension for both model training and inferencing

Upon AzureML extension deployment completes, it will create following resources in Azure cloud and in Kubernetes cluster, depending on each AzureML extension deployment scenario:
   |Resource name  |Resource type |Training |Inference |Training and Inference| Description |
   |--|--|--|--|--|--|
   |Azure Service Bus|Azure resource|**&check;**|**&check;**|**&check;**|Used by gateway to sync job and cluster status to Azure Machine Learning services regularly.|
   |Azure Relay|Azure resource|**&check;**|**&check;**|**&check;**|Route traffic from Azure Machine Learning services to the Kubernetes cluster.|
   |aml-operator|Kubernetes deployment|**&check;**|N/A|**&check;**|Manage the lifecycle of training jobs.|
   |{EXTENSION-NAME}-kube-state-metrics|Kubernetes deployment|**&check;**|**&check;**|**&check;**|Export the cluster-related metrics to Prometheus.|
   |{EXTENSION-NAME}-prometheus-operator|Kubernetes deployment|**&check;**|**&check;**|**&check;**| Provide Kubernetes native deployment and management of Prometheus and related monitoring components.|
   |amlarc-identity-controller|Kubernetes deployment|N/A|**&check;**|**&check;**|Request and renew Blob/Azure Container Registry token with managed identity for infrastructure and user containers.|
   |amlarc-identity-proxy|Kubernetes deployment|N/A|**&check;**|**&check;**|Request and renew Blob/Azure Container Registry token with managed identity for infrastructure and user containers.|
   |azureml-fe|Kubernetes deployment|N/A|**&check;**|**&check;**|The front-end component that routes incoming inference requests to deployed services.|
   |inference-operator-controller-manager|Kubernetes deployment|N/A|**&check;**|**&check;**|Manage the lifecycle of inference endpoints. |
   |metrics-controller-manager|Kubernetes deployment|**&check;**|**&check;**|**&check;**|Manage the configuration for Prometheus|
   |relayserver|Kubernetes deployment|**&check;**|**&check;**|**&check;**|Pass the job spec from Azure Machine Learning services to the Kubernetes cluster.|
   |cluster-status-reporter|Kubernetes deployment|**&check;**|**&check;**|**&check;**|Gather the nodes and resource information, and upload it to Azure Machine Learning services.|
   |nfd-master|Kubernetes deployment|**&check;**|N/A|**&check;**|Node feature discovery.|
   |gateway|Kubernetes deployment|**&check;**|**&check;**|**&check;**|Send nodes and cluster resource information to Azure Machine Learning services.|
   |csi-blob-controller|Kubernetes deployment|**&check;**|N/A|**&check;**|Azure Blob Storage Container Storage Interface(CSI) driver.|
   |csi-blob-node|Kubernetes daemonset|**&check;**|N/A|**&check;**|Azure Blob Storage Container Storage Interface(CSI) driver.|
   |fluent-bit|Kubernetes daemonset|**&check;**|**&check;**|**&check;**|Gather infrastructure components' log.|
   |k8s-host-device-plugin-daemonset|Kubernetes daemonset|**&check;**|**&check;**|**&check;**|Expose fuse to pods on each node.|
   |nfd-worker|Kubernetes daemonset|**&check;**|N/A|**&check;**|Node feature discovery.|
   |prometheus-prom-prometheus|Kubernetes statefulset|**&check;**|**&check;**|**&check;**|Gather and send job metrics to Azure.|
   |frameworkcontroller|Kubernetes statefulset|**&check;**|N/A|**&check;**|Manage the lifecycle of Azure Machine Learning training pods.|
   |alertmanager|Kubernetes statefulset|**&check;**|N/A|**&check;**|Handle alerts sent by client applications such as the Prometheus server.|

> **<span style="color:orange">Important**:</span> 
   > * Azure ServiceBus and Azure Relay resources  are under the same resource group as the Arc cluster resource. These resources are used to communicate with the Kubernetes cluster and modifying them will break attached compute targets.
   > * By default, the deployed kubernetes deployment resourses are randomly deployed to 1 or more nodes of the cluster, and daemonset resource are deployed to ALL nodes. If you want to restrict the extension deployment to specific nodes, please use `nodeSelector` configuration setting described as below.


> **<span stype="color:orane">Notes**:</span>
   > * **{EXTENSION-NAME}:** This is the extension name specified with ```az k8s-extension create --name``` CLI command. 

## Review AzureML deployment configuration settings

Use ```k8s-extension create``` CLI command to deploy AzureML extension, review list of required and optional parameters for ```k8s-extension create``` CLI command [here](https://docs.microsoft.com/en-us/cli/azure/k8s-extension?view=azure-cli-latest#az_k8s_extension_create). For AzureML extension deployment configurations, use ```--config``` or ```--config-protected``` to specify list of ```key=value``` pairs. Following is the list of configuration settings available to be used for different AzureML extension deployment scenario ns.
   |Configuration Setting Key Name  |Description  |Training |Inference |Training and Inference
   |--|--|--|--|--|
   |```enableTraining``` |```True``` or ```False```, default ```False```. **Must** be set to ```True``` for AzureML extension deployment with Machine Learning model training support.  |  **&check;**| N/A |  **&check;** |
   |```logAnalyticsWS```  |```True``` or ```False```, default ```False```. AzureML extension integrates with Azure LogAnalytics Workspace to provide log viewing and analysis capability through LogAalytics Workspace. This setting must be explicitly set to ```True``` if customer wants to use this capability. LogAnalytics Workspace cost may apply.  |Optional |Optional |Optional |
   |```installNvidiaDevicePlugin```  | ```True``` or ```False```, default ```True```. Nvidia Device Plugin is required for ML workloads on Nvidia GPU hardware. By default, AzureML extension deployment will install Nvidia Device Plugin regardless Kubernetes cluster has GPU hardware or not. User can specify this configuration setting to False if Nvidia Device Plugin installation is not required (either it is installed already or there is no plan to use GPU for any workload). | Optional |Optional |Optional |
   |```blobCsiDriverEnabled```| ```True``` or ```False```, default ```True```.  Blob CSI driver is required for ML workloads. User can specify this configuration setting to ```False``` if it was installed already. | Optional |Optional |Optional |
   | ```enableInference``` |```True``` or ```False```, default ```False```.  **Must** be set to ```True``` for AzureML extension deployment with Machine Learning inference support. |N/A| **&check;** |  **&check;** |
   | ```allowInsecureConnections``` |```True``` or ```False```, default False. This **must** be set to ```True``` for AzureML extension deployment with HTTP endpoints support for inference, when ```sslCertPemFile``` and ```sslKeyPemFile``` are not provided. |N/A| Optional |  Optional |
   | ```privateEndpointNodeport``` |```True``` or ```False```, default ```False```.  **Must** be set to ```True``` for AzureML deployment with Machine Learning inference private endpoints support using serviceType nodePort. | N/A| Optional |  Optional |
   | ```privateEndpointILB``` |```True``` or ```False```, default ```False```.  **Must** be set to ```True``` for AzureML extension deployment with Machine Learning inference private endpoints support using serviceType internal load balancer | N/A| Optional |  Optional |
   | ```inferenceLoadBalancerHA``` |```True``` or ```False```, default ```True```. By default, AzureML extension will deploy 3 ingress controller replicas for high availability, which requires at least 3 workers in a cluster. Set this to ```False``` if you have fewer than 3 workers and want to deploy AzureML extension for development and testing only, in this case it will deploy one ingress controller replica only. | N/A| Optional |  Optional |
   |```openshift``` | ```True``` or ```False```, default ```False```. Set to ```True``` if you deploy AzureML extension on ARO or OCP cluster. The deployment process will automatically compile a policy package and load policy package on each node so AzureML services operation can function properly.  | Optional| Optional |  Optional |
   |```nodeSelector``` | Set the node selector so the extension components and the training/inference workloads will only be deployed to the nodes with all specified selectors. Usage: `nodeSelector.key=value`, support multiple selectors. Example: `nodeSelector.node-purpose=worker nodeSelector.node-region=eastus`| Optional| Optional |  Optional |
   |```sslCname``` |A SSL CName to use if enabling SSL validation on the cluster.   |  N/A | Optional |  Optional |

   |Configuration Protected Setting Key Name  |Description  |Training |Inference |Training and Inference
   |--|--|--|--|--|
   | ```sslCertPemFile```, ```sslKeyPemFile``` |Path to SSL certificate and key file (PEM-encoded), required for AzureML extension deployment with HTTPS endpoint support for inference, when  ``allowInsecureConnections`` is set to False. | N/A| Optional |  Optional |


## Prerequisites 

-  For AzureML extension deployment on ARO or OCP cluster, grant privileged access to AzureML service accounts, run ```oc edit scc privileged``` command, and add following service accounts under "users:":

   * ```system:serviceaccount:azure-arc:azure-arc-kube-aad-proxy-sa```
   * ```system:serviceaccount:azureml:{EXTENSION-NAME}-kube-state-metrics``` 
   * ```system:serviceaccount:azureml:cluster-status-reporter```
   * ```system:serviceaccount:azureml:prom-admission```
   * ```system:serviceaccount:azureml:default```
   * ```system:serviceaccount:azureml:prom-operator```
   * ```system:serviceaccount:azureml:csi-blob-node-sa```
   * ```system:serviceaccount:azureml:csi-blob-controller-sa```
   * ```system:serviceaccount:azureml:load-amlarc-selinux-policy-sa```
   * ```system:serviceaccount:azureml:azureml-fe```
   * ```system:serviceaccount:azureml:prom-prometheus```
   * ```system:serviceaccount:{KUBERNETES-COMPUTE-NAMESPACE}:default```
   > **<span stype="color:yellow">Notes</span>**
      >* **{EXTENSION-NAME}:** is the extension name specified with ```az k8s-extension create --name``` CLI command. 
      >* **{KUBERNETES-COMPUTE-NAMESPACE}:** is the namespace of kubernetes compute specified with ```az ml compute attach --namespace``` CLI command. Skip configuring 'system:serviceaccount:{KUBERNETES-COMPUTE-NAMESPACE}:default' if no namespace specified with ```az ml compute attach ``` CLI command.

-  Log in to Azure

   ```azurecli
   az login
   az account set --subscription <your-subscription-id>
   ```
   
- If you use Azure Kubernetes Services(AKS) cluster and it's not connected to Azure Arc, please register below feature for your subscription.
  ```azurecli
  az feature register --namespace Microsoft.ContainerService -n AKS-ExtensionManager
  ```

## Deploy AzureML extension for model training or batch inference workload

Following CLI command will deploy AzureML extension and enable Kubernetes cluster for model training and batch inference workload:
   ```azurecli
   az k8s-extension create --name arcml-extension --extension-type Microsoft.AzureML.Kubernetes --config enableTraining=True  --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <resource-group> --scope cluster --auto-upgrade-minor-version False
   ```
> **<span stype="color:orane">Notes**:</span>
   > * **If you deploy AzureML extension on AKS directly without Azure Arc connection, please change ```--cluster-type``` parameter value to ```managedClusters```**

## Deploy AzureML extension for real-time inference workload only

Depending on your network setup, Kubernetes distribution variant, and where your Kubernetes cluster is hosted (in cloud or on-premises), you can choose one of following options to deploy AzureML extension.

> **<span stype="color:orane">Notes**:</span>
   > * **If you deploy AzureML extension on AKS directly without Azure Arc connection, please change ```--cluster-type``` parameter value to ```managedClusters```**

   * **Public HTTPS endpoints support with public load balancer**

      ```azurecli
      az k8s-extension create --name arcml-extension --extension-type Microsoft.AzureML.Kubernetes --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --config enableInference=True sslCname=<cname> --config-protected sslCertPemFile=<path-to-the-SSL-cert-PEM-file> sslKeyPemFile=<path-to-the-SSL-key-PEM-file> --resource-group <resource-group> --scope cluster --auto-upgrade-minor-version False
      ```
   * **Private HTTPS endpoints support with internal load balancer**   
      ```azurecli
      az k8s-extension create --name amlarc-compute --extension-type Microsoft.AzureML.Kubernetes --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --config enableInference=True privateEndpointILB=True sslCname=<cname> --config-protected sslCertPemFile=<path-to-the-SSL-cert-PEM-file> sslKeyPemFile=<path-to-the-SSL-key-PEM-file> --resource-group <resource-group> --scope cluster --auto-upgrade-minor-version False
      ```
   * **Private HTTPS endpoints support with NodePort**
      ```azurecli
      az k8s-extension create --name arcml-extension --extension-type Microsoft.AzureML.Kubernetes --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <resource-group> --scope cluster --config enableInference=True privateEndpointNodeport=True sslCname=<cname> --config-protected sslCertPemFile=<path-to-the-SSL-cert-PEM-file> sslKeyPemFile=<path-to-the-SSL-key-PEM-file> --auto-upgrade-minor-version False
      ```  
     > **Note:**
     * Using a NodePort gives you the freedom to set up your own load-balancing solution, to configure environments that are not fully supported by Kubernetes, or even to expose one or more nodes' IPs directly.
     * When you deploy with NodePort service, the scoring url (or swagger url) will be responded with one of Node IP (for example, ```https://<NodeIP>:<NodePort>/<scoring_path>```) and remain unchanged even if the Node is unavailable. But you can replace it with any other Node IP.
   * **Private HTTP endpoints support with internal load balancer**   
      ```azurecli
      az k8s-extension create --name arcml-extension --extension-type Microsoft.AzureML.Kubernetes --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --config enableInference=True privateEndpointILB=True allowInsecureConnections=True --resource-group <resource-group> --scope cluster --auto-upgrade-minor-version False
      ```
   * **Private HTTP endpoints support with NodePort**
      ```azurecli
      az k8s-extension create --name arcml-extension --extension-type Microsoft.AzureML.Kubernetes --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --config enableInference=True privateEndpointNodeport=True allowInsecureConnections=Ture --resource-group <resource-group> --scope cluster --auto-upgrade-minor-version False
      ```
   * **Public HTTP endpoints support with public load balancer - the least secure way, NOT recommended**
      ```azurecli
      az k8s-extension create --name arcml-extension --extension-type Microsoft.AzureML.Kubernetes --cluster-type connectedClusters --cluster-name <your-connected-cluster-name>  --config enableInference=True allowInsecureConnections=True --resource-group <resource-group> --scope cluster --auto-upgrade-minor-version False
      ```
## Deploy AzureML extension for training, batch inference, and real-time inference workload

To enable Kubernetes cluster for all kinds of ML workload, choose one of above inference deployment options and append config settings for training and batch inference. Following CLI command will enable cluster with real-time inference HTTPS endpoints support, training, and batch inference workload:
   ```azurecli
   az k8s-extension create --name arcml-extension --extension-type Microsoft.AzureML.Kubernetes --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --config enableTraining=True enableInference=True --config-protected sslCertPemFile=<path-to-the-SSL-cert-PEM-file> sslKeyPemFile=<path-to-the-SSL-key-PEM-file> --resource-group <resource-group> --scope cluster --auto-upgrade-minor-version False
   ```

> **<span stype="color:orane">Notes**:</span>
   > * **If you deploy AzureML extension on AKS directly without Azure Arc connection, please change ```--cluster-type``` parameter value to ```managedClusters```**

## Verify your AzureML extension deployment

1. Run the following CLI command to check AzureML extension details:

   ```azurecli
   az k8s-extension show --name arcml-extension --cluster-type connectedClusters --cluster-name <your-connected-cluster-name> --resource-group <resource-group>
   ```

1. In the response, look for "name": "arcml-extension" and "provisioningState": "Succeeded". Note it might show "provisioningState": "Pending" for the first few minutes.

1. If the provisioningState shows Succeeded, run the following command on your machine with the kubeconfig file pointed to your cluster to check that all pods under "azureml" namespace are in 'Running' state:

   ```bash
    kubectl get pods -n azureml
   ```
## Update Azure Machine Learning extension

Use ```k8s-extension update``` CLI command to update the mutable properties of  AzureML extension, review list of required and optional parameters for ```k8s-extension update``` CLI command [here](https://docs.microsoft.com/en-us/cli/azure/k8s-extension?view=azure-cli-latest#az_k8s_extension_update). 

1.	Azure Arc supports update of  ``--auto-upgrade-minor-version``, ``--version``,  ``--config``, ``--config-protected``.  
2.	For configurationSettings, only the settings that require update need to be provided. If the user provides all settings, they would be merged/overwritten with the provided values. 
3.	For ConfigurationProtectedSettings, ALL  settings should be provided. If some settings are omitted, those settings would be considered obsolete and deleted. 

> [!IMPORTANT]
> **Don't** update following configs if you have active training workloads or real-time inference endpoints. Otherwise, the training jobs will be impacted and endpoints unavailable.
> 
> * `enableTraining` from `True` to `False`
> * `installNvidiaDevicePlugin` from `True` to `False` when using GPU.
> * `nodeSelector`. The update operation can't remove existing nodeSelectors. It can only update existing ones or add new ones.
>
> **Don't** update following configs if you have active real-time inference endpoints, otherwise, the endpoints will be unavailable.
> * `allowInsecureConnections`
> * `privateEndpointNodeport`
> * `privateEndpointILB`
> *  To update `logAnalyticsWS` from `True` to `False`, provide all original `configurationProtectedSettings`. Otherwise, those settings are considered obsolete and deleted.

## Delete Azure Machine Learning extension

Use [``k8s-extension delete``](https://docs.microsoft.com/en-us/cli/azure/k8s-extension?view=azure-cli-latest#az_k8s_extension_delete) CLI command to delete the existed AzureMl extension.

It takes around 10 minutes to delete all components deployed to the Kubernetes cluster. Run `kubectl get pods -n azureml` to check if all components were deleted.

docs/create-provision-AKS-cluster.md METASEP
## Create/provision AKS cluster
To enable AMLK8S, you will need to first provision an AKS (CPU/GPU) cluster, your can create a AKS via 
1. [Azure CLI](https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough)
2. [Azure PowerShell](https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough-powershell)
3. [Azure Portal](https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough-portal)
4. [Using ARM template](https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough-rm-template) 

You can refer [AKS documents](https://docs.microsoft.com/en-us/azure/aks/) to get more detailed informantion.

### Limitations

1. _The AML service requires the AKS cluster to have unrestricted inbound and outbound access. We need inbound access to reviece the requests from AML core servies, and we will create a pubilc ip for our rest server which NSG only allow traffic with AML service tag. We also need the outbound access to report the metrics and artifacts to AML core service_
1. _Private AKS clusters are NOT supported_
1. _AKS clusters with Authorized IP ranges are NOT supported_

### GPU VM size's in Azure
In Azure the VM size begining with "N" indicate this VM is a GPU SKU, and you can find detail GPU VM size at: https://docs.microsoft.com/en-us/azure/virtual-machines/sizes-gpu

#### Currently, AKS supports the NC and ND series of GPU's. You can view the list of supported GPU's when you create an AKS cluster in the portal and view all SKU's supported when you select 'Change Size' in the Node Size picker.

docs/azure-cni-setup.md METASEP
# AMLArc with AzureCNI AKS cluster and Private Link AML Workspace

Using an AMLArc enabled AzureCNI AKS cluster for compute in a workspace allow s for further security and does not require too much more setup than a publicly exposed cluster and workspace.

### Required public internet access

Azure Machine Learning requires both inbound and outbound access to the public internet. Documentation for inbound and outbound access is provided here: https://docs.microsoft.com/en-us/azure/machine-learning/how-to-secure-workspace-vnet?tabs=pe#required-public-internet-access

### Required permissions for Azure CNI AKS

The cluster identity used by the AKS cluster must have at least Network Contributor permissions on the subnet within your virtual network. If you wish to define a custom role instead of using the built-in Network Contributor role, the following permissions are required:

- Microsoft.Network/virtualNetworks/subnets/join/action
- Microsoft.Network/virtualNetworks/subnets/read

### Network flow:

Here is a graph to show network flow:

![Network Flow](media/privatelink-networkflow-v3.png)

### Setting up VNET:

The Azure VNET can be created independently or during the creation of the AKS cluster explained in the next section.

The VNET does need to have a sufficiently  large address space, The default address space of 10.0.0.0/16 has worked in our testing. The subnet also needs to be large enough to accommodate the AKS cluster, In general, you'll want 128 addresses per node in your cluster, if using default settings. More documentation on creating an Azure VNET can be found here:
https://docs.microsoft.com/en-us/azure/virtual-network/quick-create-portal.

### Setting up AKS cluster:

Setting up your AKS cluster with Azure CNI is documented here:
https://docs.microsoft.com/en-us/azure/aks/configure-azure-cni

As mentioned in the VNET setup section of this document the VNET being used can either be created independently or during setup of the AKS cluster through the portal. The portal has the added convenience of making sure your subnet is large enough for your cluster.

A private aks cluster uses an internal IP address to ensure that network traffic between the API server and node pools remains on a private network only.You can enable private aks in portal or [az aks cli](https://docs.microsoft.com/en-us/azure/aks/private-clusters#create-a-private-aks-cluster)

### Installing AMLArc:

All instructions for connecting to an AKS AzureCNI cluster are the same as a public AKS cluster:
https://docs.microsoft.com/en-us/azure/machine-learning/how-to-attach-arc-kubernetes

Do take note however that all commands must be run from a VM within the VNET to be able to communicate and install the Arc and AMLArc extensions on the cluster.

### Setting up AzureML Workspace:

Private link workspace are required if using an AzureCNI cluster and if the user wants to secure their connection to workspace.
Documentation for a private link workspace is provided here:
https://docs.microsoft.com/en-us/azure/machine-learning/how-to-configure-private-link?tabs=python

Notably, if one wants to access the workspace studio one has to either enable public access to the cluster explained in document above, or follow this documentation: https://docs.microsoft.com/en-us/azure/machine-learning/how-to-enable-studio-virtual-network.

### Setting up Azure Storage Account

Azure Machine Learning supports storage accounts configured to use either a private endpoint or service endpoint. Documentation for a private link storage account is provided here: https://docs.microsoft.com/en-us/azure/machine-learning/how-to-secure-workspace-vnet?tabs=pe#secure-azure-storage-accounts

### Setting up Azure Key Vault

Azure Machine Learning uses an associated Key Vault instance to store the following credentials:

- The associated storage account connection string
- Passwords to Azure Container Repository instances
- Connection strings to data stores

Documentation for a private link key vault is provided here: https://docs.microsoft.com/en-us/azure/machine-learning/how-to-secure-workspace-vnet?tabs=pe#secure-azure-key-vault

### Setting up Azure Container Registry

Azure Machine Learning uses Azure Container Registry to store customers image. Documentation for a private link container registry is provided here: https://docs.microsoft.com/en-us/azure/container-registry/container-registry-private-link#set-up-private-endpoint---portal-recommended. 

Configure compute cluster for building image in your vnet. https://docs.microsoft.com/en-us/azure/machine-learning/how-to-secure-workspace-vnet?tabs=pe#enable-azure-container-registry-acr

docs/attach-compute.md METASEP
# Create a compute target - attach AKS or Arc cluster to AML workspace

## Pre-requesitie

Azure Machine Learning workspace defaults to have a system-assigned managed identity to access Azure ML resources. It's all done if this default setting is applied. 

![Managed Identity in workspace](./media/ws-msi.png)

Otherwise, if a user-assigned managed identity is specified in Azure Machine Learning workspace creation, the following role assignments need to be granted to the identity manually before attaching the compute,

|Azure resource name  |Role to be assigned|
|--|--|
|Azure Service Bus|Azure Service Bus Data Owner|
|Azure Relay|Azure Relay Owner|Azure Relay Owner|
|Azure Arc-enable Kubernetes|Reader|

The Azure Service Bus and Azure Relay resource are created under the same Resource Group as the Arc cluster.

## Create compute target via Azure ML 2.0 CLI

You can attach AKS or Arc cluster and create KubernetesCompute target easily via AzureML 2.0 CLI.

1. Refer to [Install, set up, and use the 2.0 CLI (preview)](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-configure-cli) to install ML 2.0 CLI. Compute attach support **requires ml extension >= 2.0.1a4**. 

1. Attach the  Arc-enabled Kubernetes cluster,

```azurecli
az ml compute attach --resource-group
                     --workspace-name
                     --name
                     --resource-id
                     --type					 
                     [--namespace]
                     [--identity-type]
                     [--user-assigned-identities]
                     [--no-wait]

```

**Required Parameters**

* `--resource-group -g` 

   Name of resource group. You can configure the default group using `az configure --defaults group=<name>`.
* `--workspace-name -w` 
   
   Name of the Azure ML workspace. You can configure the default group using `az configure --defaults workspace=<name>`.
* `--name -n`

   Name of the compute target.
* `--resource-id`

   The fully qualified ID of the resource, including the resource name and resource type.
   
   For Arc-enabld k8s cluster, it's like ` /subscriptions/<sub ID>/resourceGroups/<resource group>/providers/Microsoft.Kubernetes/connectedClusters/<cluster name>"`

   For AKS cluster with ML extension deployed without Arc conntected, it's like ` "/subscriptions/<sub ID>/resourceGroups/<resource group>/providers/Microsoft.ContainerService/managedclusters/<cluster name>`
* `--type -t`

   The type of compute target. Allowed values: kubernetes, virtualmachine. Specify `kubernetes` to attach arc-enabled kubernetes cluster or AKS cluster with ML extension deployed.

**Optional Parameters**

* `--namespace`

   Kubernetes namespace to host the ML workloads at this compute, default to `default`.
* `--no-wait`

   Do not wait for the long-running operation to finish.
* `--identity-type`

   The type of managed identity. Allowed values: SystemAssigned, UserAssigned.
* `--user-assigned-identities`
 
   Only needed when user assigned identity is used. A list of resource IDs separated by commas. Only the first identity in the list can be used today.

## Create a compute target via AML Studio UI

It is easy to attach Azure Arc-enabled Kubernetes cluster to AML workspace, you can do so from AML Studio UI portal. 


1. Go to AML studio portal > Compute > Attached compute, click "+New" button, and select "Kubernetes (Preview)"

   ![Create a generic compute target](./media/attach-1.png)

1. Enter a compute name, and select your AKS or Azure Arc-enabled Kubernetes cluster from Kubernetes cluster dropdown list.

   ![Create a generic compute target](./media/attach.png)


   * (Optional) Assign system-assigned or user-assigned [Managed Identity](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview).


1. Click 'Attach' button. You will see the 'provisioning state' as 'Creating'. If it succeeds, you will see a 'Succeeded' state or else 'Failed' state.

   ![Create a generic compute target](./media/attach-4.png)



## Create compute target via AML Python SDK

You can also attach AKS or Arc cluster and create KubernetesCompute target easily via AML Python SDK 1.30 or above.

Following Python code snippets shows how you can easily attach an kubernetes cluster and create a compute target with Managed Identity enabled.


```python

from azureml.core.compute import KubernetesCompute
from azureml.core.compute import ComputeTarget
from azureml.core.workspace import Workspace
import os

ws = Workspace.from_config()

# Specify a name for your Kubernetes compute
amlarc_compute_name = "<COMPUTE_CLUSTER_NAME>"

# resource ID for the Kubernetes cluster and user-managed identity
resource_id = "/subscriptions/<sub ID>/resourceGroups/<RG>/providers/Microsoft.Kubernetes/connectedClusters/<cluster name>"

user_assigned_identity_resouce_id = ['subscriptions/<sub ID>/resourceGroups/<RG>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity name>']

ns = "default" 

if amlarc_compute_name in ws.compute_targets:
    amlarc_compute = ws.compute_targets[amlarc_compute_name]
    if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
        print("found compute target: " + amlarc_compute_name)
else:
   print("creating new compute target...")


# assign user-assigned managed identity
amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id = resource_id, namespace = ns,  identity_type ='UserAssigned',identity_ids = user_assigned_identity_resouce_id) 

# assign system-assigned managed identity
# amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id = resource_id, namespace = ns,  identity_type ='SystemAssigned') 

amlarc_compute = ComputeTarget.attach(ws, amlarc_compute_name, amlarc_attach_configuration)
amlarc_compute.wait_for_completion(show_output=True)

# get detailed compute description containing managed identity principle ID, used for permission access. 
print(amlarc_compute.get_status().serialize())
```

**Parameters of `KubernetesCompute.attach_configuration()`**

`resource_id`, [string](https://docs.python.org/3/library/string.html#module-string), required

  The fully qualified ID of the resource, including the resource name and resource type.

`namespace`, [string](https://docs.python.org/3/library/string.html#module-string), optional

Kubernetes namespace to host the ML workloads at this compute, default to `default`.

`identity_type`, [string](https://docs.python.org/3/library/string.html#module-string), optional

default value: None

Possible values are:

- SystemAssigned - System assigned identity

- UserAssigned - User assigned identity. Requires identity_ids to be set.

`identity_ids`, [list](https://docs.python.org/3/library/stdtypes.html#list)[[str](https://docs.python.org/3/library/string.html#module-string)], optional

default value: None

List of resource ids for the user assigned identity. e.g. ['subscriptions/\<sub ID>/resourceGroups/\<RG>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/\<identity name>']

## Next Step
- [Create and select different instance types for training and inferencing workloads](./instance-type.md)
- [Update Managed Identity and Assign roles to Managed Identity](./managed-identity.md)

docs/aml-system-pods.md METASEP
| Component Name      | Description |
| ----------- | ----------- |
| aml-operator-* | Manages and executes job requests represented by **amljob** resources|                     
| cluster-status-reporter-* ||              
| fluent-bit-* |Metrics and logs from the training jobs deployed|                                                                          
| frameworkcontroller-* ||                                
| gateway-* | Converts incoming job requests to **amljob** resources and communicates job and cluster status to the Job Scheduler service|                            
| metrics-controller-manager-* ||                                               
| nfd-* | Detects hardware features and system configuration, exposing as labels on nodes ([third-party](https://github.com/kubernetes-sigs/node-feature-discovery)) |                                                                        
| prom-operator-* | Reporting AML training jobs metrics back to Azure. Not collecting metrics for other workloads deployed|                       
| prometheus-prom-prometheus-* ||                          
| relayserver-* | Relay server service enables you to securely expose services that run in your corporate network to the public cloud|                                                     
| tls-creator-* ||                                     
| trainingcompute-kube-state-metrics-* ||   
| webhook-patcher-* ||                                 

docs/4. View metrics in Compute level and runs level.markdown METASEP

For Data Scientists, job(run) level monitoring and reporting during training import to them, it can help them to:

- Understand the performance of their training script (does the job fully used capacity of GPUs, CPUs, what is the throughput of this model etc.)
- Find the bottleneck of this training job(run), GPU Memory, network etc.
- Better understand to different training parameters impact their job (batch size, epoch, learning rate etc.)

For Admin, compute level monitor and reporting are important, it can help them to:
- Optimized quota(resource) allocation strategy
- Understand the utilization of resource

## Enable custom metrics 

CMAKS use application insights of AML worksapce to show the metrics of compute level and run level. To enable this function, you need enable custom metrics in ```appinsights>config>usage & estimated cost> custom metrics```.

![custom metrics](/pics/2.6custommetrics.png)

![ennable custom metrics](/pics/2.7ennablecustommetrics.png)


After AML agnet is sucessful installed, you can [attach CMAKS compute](https://github.com/Azure/CMK8s-Samples/blob/master/docs/2.%20Attach%20CMAKS%20compute.markdown)

### Using flight
Because this function is under preview, you need use `flight=computeMetrics` to enble it manually.

### View compute level metrics

To view the CMKAKS compute level metrics, you can go to `attached compute > compute detail > Monitoring`. Note, only CMAKS compute target support this page.

![compute level metrics](/pics/5.2computemetrics.png)

### View run level metrics

To view the CMKAKS run level metrics, you can use to two workflow:
1. `compute detail > runs > Monitoring`
2. `experiment > runs > Monitoring`

![run level metrics](/pics/5.3runmetrics.png)

## Useful chart toolkit
We provide some useful functions in the charts:
- Zoom: Zoom time range, mouse drag and drop on the charts 
- Pan: change the time range through pan the x axis
- Reset Axes: Reset axes to default value, double click on the chart
- Switch Chart type: switch the chart type between bar chart and line chart
- Select/unselect legends: click on the legend will select or unselect legend
- Only select one legend: double click on one selected legend will only show the data of this legend, this is very helpful if you have many legend on the chart.



SECURITY.md METASEP
<!-- BEGIN MICROSOFT SECURITY.MD V0.0.5 BLOCK -->

## Security

Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).

If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below.

## Reporting Security Issues

**Please do not report security vulnerabilities through public GitHub issues.**

Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report).

If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com).  If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc).

You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). 

Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:

  * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
  * Full paths of source file(s) related to the manifestation of the issue
  * The location of the affected source code (tag/branch/commit or direct URL)
  * Any special configuration required to reproduce the issue
  * Step-by-step instructions to reproduce the issue
  * Proof-of-concept or exploit code (if possible)
  * Impact of the issue, including how an attacker might exploit the issue

This information will help us triage your report more quickly.

If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs.

## Preferred Languages

We prefer all communications to be in English.

## Policy

Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd).

<!-- END MICROSOFT SECURITY.MD BLOCK -->
README.md METASEP
# Azure Arc-enabled Machine Learning

As part of Azure Machine Learning (AzureML) service capabilities,  Azure Arc enabled ML extends Azure ML service capabilities seamlessly to Kubernetes clusters, and enables customer to train and deploy models on Kubernetes anywhere at scale. With a simple AzureML extension deployment, customer can instantly onboard their data science team with productivity tools for full ML lifecycle, and have access to both Azure managed compute and customer managed Kubernetes anywhere. Customer is flexible to train and deploy models wherever and whenever business requires so. With built-in AzureML pipeline and MLOps support for Kubernetes, customer can scale machine learning adoption in their organization easily. Built on top of Azure Arc hybrid cloud platform, Arc enabled ML natively supports on-premise machine learning with Kubernetes.

This repository is intended to serve as an information hub for customers and partners who are interested in Azure Arc enabled ML public preview. Use this repository for onboarding and testing instructions as well as an avenue to provide feedback, issues, enhancement requests and stay up to date as the preview progresses. 

## Prerequisites

1. An Azure subscription. If you don't have an Azure subscription, [create a free account](https://aka.ms/AMLFree) before you begin.
1. A Kubernetes cluster up and running - **We recommend minimum of 4 vCPU cores and 8GB memory, around 2 vCPU cores and 3GB memory will be used by Azure Arc agent and AzureML extension components**.
1. A ```kubeconfig``` file and context pointing to the Kubernetes cluster.
1. Install the [latest release of Helm 3](https://helm.sh/docs/intro/install/).
1. The Kubernetes cluster is [connected to Azure Arc](https://docs.microsoft.com/azure/azure-arc/kubernetes/quickstart-connect-cluster). For Azure Kubernetes Services (AKS) cluster, connection to Azure Arc is optional.
1. (**Optional**) If the Kubernetes cluster is behind of [an outbound proxy server](https://docs.microsoft.com/azure/azure-arc/kubernetes/quickstart-connect-cluster?tabs=azure-cli#4a-connect-using-an-outbound-proxy-server) or [firewall](https://docs.microsoft.com/azure/firewall/protect-azure-kubernetes-service), please ensure to meet [network requirements](./docs/network-requirements.md). 
1. Meet the pre-requisites listed under the [generic cluster extensions documentation](https://docs.microsoft.com/azure/azure-arc/kubernetes/extensions#prerequisites).
   * Azure CLI version >=**2.24.0**
   * Azure CLI extension k8s-extension version >=**1.0.0**.
1. [Create an AzureML workspace](https://docs.microsoft.com/azure/machine-learning/how-to-manage-workspace?tabs=python) if you don't have one already.
   * [Install and setup the latest AzureML CLI v2](https://docs.microsoft.com/azure/machine-learning/how-to-configure-cli).

## Getting started

Getting started with ArcML is easy with following steps:

* [Deploy AzureML extension Kubernetes cluster](./docs/deploy-extension.md)
* [Attach Kubernetes cluster to AzureML workspace and create a compute target](./docs/attach-compute.md)
* [Train image classification model with AzureML CLI v2](./docs/simple-train-cli.md)
* [Train image classification model with AzureML Python SDK 1.30 or above](./examples/training/simple-train-sdk/img-classification-training.ipynb)
* [Deploy an image classification model - create an endpoint with blue/green deployment](./docs/simple-flow.md)
* [Use AKS on Azure Stack HCI for on-premises machine learning](https://aka.ms/aks-hci-ml)

## Supported AzureML built-features and ArcML unique features

Azure Arc enabled ML essentially brings a new compute target to Azure Machine Learning service. With this new Kubernetes compute target, customer can use existing Azure ML tools and service capabilities to train or deploy model on Kubernetes anywhere. You can git clone available Azure ML examples on the internet, with simple change of compute target name, and those examples will run seamlessly on Kubernetes.

|AzureML built-in features  |ArcML support  |
   |--|--|
   |[Train with the CLI (v2)](https://docs.microsoft.com/azure/machine-learning/how-to-train-cli?view=azure-devops) |&check;|
   |[Train with the job creation UI](https://docs.microsoft.com/azure/machine-learning/how-to-train-with-ui) |&check;|
   |[Train with the Python SDK](https://docs.microsoft.com/azure/machine-learning/how-to-set-up-training-targets) |&check;|
   |[Train with the REST API](https://docs.microsoft.com/azure/machine-learning/how-to-train-with-rest) |&check;|
   |[Basic Python training job](https://docs.microsoft.com/azure/machine-learning/how-to-train-cli?view=azure-devops#basic-python-training-job) |&check;|
   [Distributed training - PyTorch](https://docs.microsoft.com/azure/machine-learning/how-to-train-cli?view=azure-devops#pytorch)|&check;|
   [Distributed training - TensorFlow](https://docs.microsoft.com/azure/machine-learning/how-to-train-cli?view=azure-devops#tensorflow)|&check;|
   [Distributed training - MPI](https://docs.microsoft.com/azure/machine-learning/how-to-train-cli?view=azure-devops#mpi)|&check;|
   [Sweep hyperparameters](https://docs.microsoft.com/azure/machine-learning/how-to-train-cli?view=azure-devops#sweep-hyperparameters)|&check;|
   [Batch Inference](https://docs.microsoft.com/azure/machine-learning/tutorial-pipeline-batch-scoring-classification?view=azure-devops)|&check;|
   |[Deploy model with Online Endpoint - safe production rollout with blue/green deployment](https://docs.microsoft.com/azure/machine-learning/how-to-deploy-managed-online-endpoints)|&check;|
   |[Deploy model with Online Endpoint - REST endpoint with public/private IP and full TLS encryption](https://docs.microsoft.com/azure/machine-learning/how-to-deploy-managed-online-endpoints)|&check;|
   |[Deploy model with isolated Azure Kubernetes Service - VNET and private link support](https://docs.microsoft.com/azure/machine-learning/how-to-deploy-managed-online-endpoints)|&check;|
   |[Build and use ML Pipeline (Python)](https://docs.microsoft.com/azure/machine-learning/how-to-create-machine-learning-pipelines)|&check;|
   |[Train with Designer pipeline](https://docs.microsoft.com/azure/machine-learning/how-to-track-designer-experiments)|&check;|
   |[Train and deploy with AutoML (Python)](https://docs.microsoft.com/azure/machine-learning/how-to-configure-auto-train)|&check;|
   |[Use managed identity to access Azure resources](./docs/managed-identity)|&check;|
   |[Deploy model with Designer UI](https://docs.microsoft.com/azure/machine-learning/how-to-deploy-model-designer)|Coming soon|
   |[Train and deploy with AutoML (Studio UI)](https://docs.microsoft.com/azure/machine-learning/how-to-use-automated-ml-for-ml-models)|Coming soon|
   |[Deploy model with Batch Endpoint](https://docs.microsoft.com/azure/machine-learning/how-to-deploy-managed-online-endpoints)|Coming soon|


In addition to above built-in AzureML features, ArcML also supports following unique machine learning features:

* [Target different instance typs (node types) for training or inference workload deployment](./docs/instance-type.md) 
<!-- * [Train model with NFS](./docs/setup-ephemeral-nfs-volume.md) -->
* [Train model with PV/PVC storage mount](./docs/pvc.md)
* [Assign managed identity to the compute](./docs/managed-identity.md)
* Use managed identity for your endpoint
* [Custom container registry support](https://github.com/Azure/azure-arc-kubernetes-preview/blob/master/docs/custom-registry/connect-cluster.md)
* Multiple AzureML workspaces share the same Kubernetes cluster
* [Deploy model using customer container with built-in model or entry script](./docs/inference-byoc.md). In this case, the model and the entry script will not be saved at the cloud, but in local.
* [Interactive job](https://github.com/Azure/azureml-previews/tree/main/previews/interactive-job) to access your training compute using VS Code, Jupyter Notebook, Jupyter Lab, and summarize metrics with Tensorboard. Sign up [here](https://forms.office.com/pages/responsepage.aspx?id=v4j5cvGGr0GRqy180BHbR8PsZ1-HON9JqtABfkUgwtpUNUtMWTEyRklBQUk2RzZQTUZGTjBUQzJINy4u) to get access to its Github repo.

## Supported Kubernetes distributions and versions

* Azure Kubernetes Services (AKS)
* AKS Engine
* AKS on Azure Stack HCI
* Azure RedHat OpenShift Service (ARO)
* OpenShift Container Platform (OCP)
* Google GKE  
* Canonical Kubernetes Distribution
* Amazon EKS 
* Kind
* K3s-Lightweight Kubernetes 
* Kubernetes 1.18.x, 1.19.x, 1.20.x, 1.21.x, 1.22.x

## [Frequently Asked Questions](./docs/faq.md)

## [Release notes](./docs/release-notes.md) 

## [Limitations and known issues](./docs/limitations-and-known-issues.md)

## Support

We are always looking for feedback on our current experiences and what we should work on next. If there is anything you would like us to prioritize, please feel free to suggest so via our [GitHub Issue Tracker](https://github.com/Azure/AML-Kubernetes/issues). You can submit a bug report, a feature suggestion or participate in discussions.

Or reach out to us: amlarc-pm@microsoft.com if you have any questions or feedback.

## Activities

* [Check for known issues](https://github.com/Azure/amlk8s-preview/labels/known-issue)
* [View general feedback](https://github.com/Azure/amlk8s-preview/labels/feedback)
* [Browse roadmap items](https://github.com/Azure/amlk8s-preview/labels/roadmap)
* [Open a bug, provide feedback, or suggest an improvement](https://github.com/Azure/amlk8s-preview/issues/new/choose)

## Contributing

This project welcomes contributions and suggestions.  Most contributions require you to agree to a
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide
a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions
provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.

![Impressions](https://PixelServer20190423114238.azurewebsites.net/api/impressions/CMK8s-Samples/README.png)

## Disclaimer

The lifecycle management (health, kubernetes version upgrades, security updates to nodes, scaling, etc.) of the AKS or Arc enabled Kubernetes cluster is the responsibility of the customer.

For AKS, read what is managed and what is shared responsibility [here](https://docs.microsoft.com/azure/aks/support-policies)

All preview features are available on a self-service, opt-in basis and are subject to breaking design and API changes. Previews are provided "as is" and "as available," and they're excluded from the service-level agreements and limited warranty.

CODE_OF_CONDUCT.md METASEP
# Microsoft Open Source Code of Conduct

This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).

Resources:

- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns

files/migrate-aks-service.sh METASEP

export subscription_id="<YOUR_SUBSCRIPTION_ID>"
export resource_group="<YOUR_RESOURCE_GROUP>"
export workspace_name="<YOUR_WORKSPACE_NAME>"
export aks_cluster_name="<YOUR_AKS_CLUSTER_NAME>"
export service_name="<YOUR_SERVICE_NAME>"
export arcml_compute_name="arcml-compute"
export arcml_extension_name="arcml-extension"
export inference_compute_name="<YOUR_INFERENCE_COMPUTE_NAME>"

service_namespace=`kubectl get deployment -A -ojson | jq -r --arg service_name "$service_name" '.items[] | select(.metadata.name == $service_name) | .metadata.namespace'`

# Choose one option below to install AzureML extension based endpoint type of AKS service

# OPTION A) AKS service has public https endpoint
export ssl_cname="<YOUR_SSL_CNAME>"
export ssl_cert_pem_file="<YOUR_CERT_PEM_FILE>"
export ssl_key_pem_file="<YOUR_KEY_PEM_FILE>"

az k8s-extension create --cluster-name $aks_cluster_name --cluster-type managedClusters -n $arcml_extension_name \
--extension-type Microsoft.AzureML.Kubernetes --scope cluster --configuration-settings enableInference=True isAKSMigration=true \
scoringFe.namespace=default sslCname=$ssl_cname --config-protected sslCertPemFile=$ssl_cert_pem_file sslKeyPemFile=$ssl_key_pem_file \
--subscription $subscription_id -g $resource_group --auto-upgrade-minor-version False

# OPTION B) AKS service has public http endpoint
#az k8s-extension create --cluster-name $aks_cluster_name --cluster-type managedClusters -n $arcml_extension_name \
#--extension-type Microsoft.AzureML.Kubernetes --scope cluster --configuration-settings enableInference=True allowInsecureConnections=true \
#isAKSMigration=true scoringFe.namespace=default \
#--subscription $subscription_id -g $resource_group --auto-upgrade-minor-version False

# OPTION C) AKS service has private http endpoint
#az k8s-extension create --cluster-name $aks_cluster_name --cluster-type managedClusters -n $arcml_extension_name \
#--extension-type Microsoft.AzureML.Kubernetes --scope cluster --configuration-settings enableInference=True allowInsecureConnections=true \
#privateEndpointILB=True isAKSMigration=true scoringFe.namespace=default \
#--subscription $subscription_id -g $resource_group --auto-upgrade-minor-version False

extension_install_state=`az k8s-extension show --name $arcml_extension_name  --cluster-type managedClusters --cluster-name $aks_cluster_name   --resource-group $resource_group | jq -r '.provisioningState'`
echo $extension_install_state
if [[ $extension_install_state == "Succeeded" ]]
then
  echo "AzureML extention created successfully"
else
  echo "AzureML extention creation failed"
  exit 1
fi

python3 migrate-service-util.py $subscription_id $resource_group $workspace_name $aks_cluster_name $service_name $service_namespace $arcml_compute_name $inference_compute_name 

files/k8s_extension-0.6.1-py3-none-any.whl METASEP

files/migrate-service-util.py METASEP
#!/usr/bin/python3

from azureml.core.compute import KubernetesCompute
from azureml.core.compute import AksCompute, ComputeTarget
from azureml.core.workspace import Workspace
from azureml.core.webservice import AksWebservice
import sys

def run(subscription_id, resource_group, workspace_name, aks_cluster_name, service_name, service_namespace, amlarc_compute_name, inference_compute_name):

    ws = Workspace.get(
        subscription_id = subscription_id, 
        resource_group = resource_group, 
        name = workspace_name)
    print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\n')

    # resource ID for your Azure Arc-enabled Kubernetes cluster
    resource_id = "/subscriptions/" + subscription_id + "/resourceGroups/" + resource_group + "/providers/Microsoft.ContainerService/managedClusters/" + aks_cluster_name

    if amlarc_compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[amlarc_compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            print("found compute target: " + amlarc_compute_name)
    else:
        print("creating new compute target...")

        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace = service_namespace) 
        amlarc_compute = ComputeTarget.attach(ws, amlarc_compute_name, amlarc_attach_configuration)

    
        amlarc_compute.wait_for_completion(show_output=True)
        
        # For a more detailed view of current KubernetesCompute status, use get_status()
        print(amlarc_compute.get_status().serialize())
    
    aks_service = AksWebservice(ws, service_name)
    aks_service.update(is_migration=True, compute_target=amlarc_compute_name)

    aks_service.wait_for_deployment(show_output=True)

    try:
        inference_compute = AksCompute(ws, inference_compute_name)
        print("detaching inference compute target: " + inference_compute_name)
        inference_compute.detach()
    except ComputeTargetException:
        print("Not found inference compute target: " + inference_compute_name)

if __name__ == "__main__":

    print(len(sys.argv))
    print(str(sys.argv))
    subscription_id = sys.argv[1]
    resource_group = sys.argv[2]
    workspace_name = sys.argv[3]
    aks_cluster_name = sys.argv[4]
    service_name = sys.argv[5]
    service_namespace = sys.argv[6]
    amlarc_compute_name = sys.argv[7]
    inference_compute_name = sys.argv[8]

    print(subscription_id)
    run(subscription_id, resource_group, workspace_name, aks_cluster_name, service_name, service_namespace, amlarc_compute_name, inference_compute_name)

files/export-service-util.py METASEP

import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
        parms["onlineEndpointName"]["value"] = endpoint_name

    # this is optional
    if deployment_name:
        parms["onlineDeployments"]["value"][0]["name"] = deployment_name
        traffic["traffic"][deployment_name] = traffic["traffic"].pop(list(traffic["traffic"].keys())[0])

    temp_file = tempfile.NamedTemporaryFile(mode="w+", suffix=".json", delete=False)
    json.dump(online_endpoint_deployment, temp_file)
    temp_file.flush()
    print(temp_file.name)


if __name__ == "__main__":

    def parse_args():
        parser = argparse.ArgumentParser(description="Export v1 service script")

        parser.add_argument('--attach', action='store_true', help='using script for attach amlarc compute')
        parser.add_argument('--export', action='store_true', help='using script for export services')
        parser.add_argument('--overwrite-parameters', action='store_true',
                            help='using script for overwrite parameters purpose')
        parser.add_argument('-w', '--workspace', type=str, help='workspace name')
        parser.add_argument('-g', '--resource-group', type=str, help='resource group name')
        parser.add_argument('-s', '--subscription', type=str, help='subscription id')
        parser.add_argument('-c', '--compute-type', default=None, type=str,
                            help='compute type to export, available types are AKS and ACI, default to export for both '
                                 'two types')
        parser.add_argument('--cluster-name', type=str, help='AmlArc installed cluster name')
        parser.add_argument('--compute-name', default='inferencecompute', type=str, help='compute name')
        parser.add_argument('--compute-namespace', type=str, help='compute attach namespace')
        parser.add_argument('-e', '--export-json', action='store_true', dest='export_json',
                            help='show export result in json')
        parser.add_argument('-mp', '--parameters-path', type=str, help='parameters file path')
        parser.add_argument('-mc', '--migrate-compute', type=str, help='v2 compute target name for migrate.')
        parser.add_argument('-me', '--migrate-endpoint-name', type=str, default=None,
                            help='v2 online-endpoint name, default is v1 service name')
        parser.add_argument('-md', '--migrate-deployment-name', type=str, default=None,
                            help='v2 online-deployment name, default is v1 service name')
        parser.set_defaults(compute_type=None)
        return parser.parse_args()

    # parse args
    args = parse_args()

    if args.attach:
        workspace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)
        attach(workspace, args.compute_name, args.cluster_name, args.compute_namespace)

    if args.export:
        worskpace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)
        storage_account, blob_folder = export(worskpace, args.compute_type, show_output=not args.export_json)
        if args.export_json:
            print(json.dumps({"storage_account": storage_account, "blob_folder": blob_folder}))

infile
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
        parms["onlineEndpointName"]["value"] = endpoint_name

    # this is optional
    if deployment_name:
        parms["onlineDeployments"]["value"][0]["name"] = deployment_name
        traffic["traffic"][deployment_name] = traffic["traffic"].pop(list(traffic["traffic"].keys())[0])

    temp_file = tempfile.NamedTemporaryFile(mode="w+", suffix=".json", delete=False)
    json.dump(online_endpoint_deployment, temp_file)
    temp_file.flush()
    print(temp_file.name)


if __name__ == "__main__":

    def parse_args():
        parser = argparse.ArgumentParser(description="Export v1 service script")

        parser.add_argument('--attach', action='store_true', help='using script for attach amlarc compute')
        parser.add_argument('--export', action='store_true', help='using script for export services')
        parser.add_argument('--overwrite-parameters', action='store_true',
                            help='using script for overwrite parameters purpose')
        parser.add_argument('-w', '--workspace', type=str, help='workspace name')
        parser.add_argument('-g', '--resource-group', type=str, help='resource group name')
        parser.add_argument('-s', '--subscription', type=str, help='subscription id')
        parser.add_argument('-c', '--compute-type', default=None, type=str,
                            help='compute type to export, available types are AKS and ACI, default to export for both '
                                 'two types')
        parser.add_argument('--cluster-name', type=str, help='AmlArc installed cluster name')
        parser.add_argument('--compute-name', default='inferencecompute', type=str, help='compute name')
        parser.add_argument('--compute-namespace', type=str, help='compute attach namespace')
        parser.add_argument('-e', '--export-json', action='store_true', dest='export_json',
                            help='show export result in json')
        parser.add_argument('-mp', '--parameters-path', type=str, help='parameters file path')
        parser.add_argument('-mc', '--migrate-compute', type=str, help='v2 compute target name for migrate.')
        parser.add_argument('-me', '--migrate-endpoint-name', type=str, default=None,
                            help='v2 online-endpoint name, default is v1 service name')
        parser.add_argument('-md', '--migrate-deployment-name', type=str, default=None,
                            help='v2 online-deployment name, default is v1 service name')
        parser.set_defaults(compute_type=None)
        return parser.parse_args()

    # parse args
    args = parse_args()

    if args.attach:
        workspace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)
        attach(workspace, args.compute_name, args.cluster_name, args.compute_namespace)

    if args.export:
        worskpace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)
        storage_account, blob_folder = export(worskpace, args.compute_type, show_output=not args.export_json)
        if args.export_json:
            print(json.dumps({"storage_account": storage_account, "blob_folder": blob_folder}))

    if args.overwrite_parameters:
        with open(args.parameters_path) as f:
            online_endpoint_deployment = json.load(f)
infile
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
infile
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
        parms["onlineEndpointName"]["value"] = endpoint_name

    # this is optional
    if deployment_name:
        parms["onlineDeployments"]["value"][0]["name"] = deployment_name
        traffic["traffic"][deployment_name] = traffic["traffic"].pop(list(traffic["traffic"].keys())[0])

    temp_file = tempfile.NamedTemporaryFile(mode="w+", suffix=".json", delete=False)
    json.dump(online_endpoint_deployment, temp_file)
    temp_file.flush()
    print(temp_file.name)


if __name__ == "__main__":

    def parse_args():
        parser = argparse.ArgumentParser(description="Export v1 service script")

        parser.add_argument('--attach', action='store_true', help='using script for attach amlarc compute')
        parser.add_argument('--export', action='store_true', help='using script for export services')
        parser.add_argument('--overwrite-parameters', action='store_true',
                            help='using script for overwrite parameters purpose')
        parser.add_argument('-w', '--workspace', type=str, help='workspace name')
        parser.add_argument('-g', '--resource-group', type=str, help='resource group name')
        parser.add_argument('-s', '--subscription', type=str, help='subscription id')
        parser.add_argument('-c', '--compute-type', default=None, type=str,
                            help='compute type to export, available types are AKS and ACI, default to export for both '
                                 'two types')
        parser.add_argument('--cluster-name', type=str, help='AmlArc installed cluster name')
        parser.add_argument('--compute-name', default='inferencecompute', type=str, help='compute name')
        parser.add_argument('--compute-namespace', type=str, help='compute attach namespace')
        parser.add_argument('-e', '--export-json', action='store_true', dest='export_json',
                            help='show export result in json')
        parser.add_argument('-mp', '--parameters-path', type=str, help='parameters file path')
        parser.add_argument('-mc', '--migrate-compute', type=str, help='v2 compute target name for migrate.')
        parser.add_argument('-me', '--migrate-endpoint-name', type=str, default=None,
                            help='v2 online-endpoint name, default is v1 service name')
        parser.add_argument('-md', '--migrate-deployment-name', type=str, default=None,
                            help='v2 online-deployment name, default is v1 service name')
        parser.set_defaults(compute_type=None)
infile
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
        parms["onlineEndpointName"]["value"] = endpoint_name

    # this is optional
    if deployment_name:
        parms["onlineDeployments"]["value"][0]["name"] = deployment_name
        traffic["traffic"][deployment_name] = traffic["traffic"].pop(list(traffic["traffic"].keys())[0])

    temp_file = tempfile.NamedTemporaryFile(mode="w+", suffix=".json", delete=False)
    json.dump(online_endpoint_deployment, temp_file)
    temp_file.flush()
    print(temp_file.name)


if __name__ == "__main__":

    def parse_args():
        parser = argparse.ArgumentParser(description="Export v1 service script")

        parser.add_argument('--attach', action='store_true', help='using script for attach amlarc compute')
        parser.add_argument('--export', action='store_true', help='using script for export services')
        parser.add_argument('--overwrite-parameters', action='store_true',
                            help='using script for overwrite parameters purpose')
        parser.add_argument('-w', '--workspace', type=str, help='workspace name')
        parser.add_argument('-g', '--resource-group', type=str, help='resource group name')
        parser.add_argument('-s', '--subscription', type=str, help='subscription id')
        parser.add_argument('-c', '--compute-type', default=None, type=str,
                            help='compute type to export, available types are AKS and ACI, default to export for both '
                                 'two types')
        parser.add_argument('--cluster-name', type=str, help='AmlArc installed cluster name')
        parser.add_argument('--compute-name', default='inferencecompute', type=str, help='compute name')
        parser.add_argument('--compute-namespace', type=str, help='compute attach namespace')
        parser.add_argument('-e', '--export-json', action='store_true', dest='export_json',
                            help='show export result in json')
        parser.add_argument('-mp', '--parameters-path', type=str, help='parameters file path')
        parser.add_argument('-mc', '--migrate-compute', type=str, help='v2 compute target name for migrate.')
        parser.add_argument('-me', '--migrate-endpoint-name', type=str, default=None,
                            help='v2 online-endpoint name, default is v1 service name')
        parser.add_argument('-md', '--migrate-deployment-name', type=str, default=None,
                            help='v2 online-deployment name, default is v1 service name')
        parser.set_defaults(compute_type=None)
        return parser.parse_args()

    # parse args
infile
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
        parms["onlineEndpointName"]["value"] = endpoint_name

    # this is optional
    if deployment_name:
        parms["onlineDeployments"]["value"][0]["name"] = deployment_name
        traffic["traffic"][deployment_name] = traffic["traffic"].pop(list(traffic["traffic"].keys())[0])

    temp_file = tempfile.NamedTemporaryFile(mode="w+", suffix=".json", delete=False)
    json.dump(online_endpoint_deployment, temp_file)
    temp_file.flush()
    print(temp_file.name)


if __name__ == "__main__":

    def parse_args():
        parser = argparse.ArgumentParser(description="Export v1 service script")

        parser.add_argument('--attach', action='store_true', help='using script for attach amlarc compute')
        parser.add_argument('--export', action='store_true', help='using script for export services')
        parser.add_argument('--overwrite-parameters', action='store_true',
                            help='using script for overwrite parameters purpose')
        parser.add_argument('-w', '--workspace', type=str, help='workspace name')
        parser.add_argument('-g', '--resource-group', type=str, help='resource group name')
        parser.add_argument('-s', '--subscription', type=str, help='subscription id')
        parser.add_argument('-c', '--compute-type', default=None, type=str,
                            help='compute type to export, available types are AKS and ACI, default to export for both '
                                 'two types')
        parser.add_argument('--cluster-name', type=str, help='AmlArc installed cluster name')
        parser.add_argument('--compute-name', default='inferencecompute', type=str, help='compute name')
        parser.add_argument('--compute-namespace', type=str, help='compute attach namespace')
        parser.add_argument('-e', '--export-json', action='store_true', dest='export_json',
                            help='show export result in json')
        parser.add_argument('-mp', '--parameters-path', type=str, help='parameters file path')
        parser.add_argument('-mc', '--migrate-compute', type=str, help='v2 compute target name for migrate.')
        parser.add_argument('-me', '--migrate-endpoint-name', type=str, default=None,
                            help='v2 online-endpoint name, default is v1 service name')
        parser.add_argument('-md', '--migrate-deployment-name', type=str, default=None,
                            help='v2 online-deployment name, default is v1 service name')
        parser.set_defaults(compute_type=None)
        return parser.parse_args()

    # parse args
    args = parse_args()

infile
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
        parms["onlineEndpointName"]["value"] = endpoint_name

    # this is optional
    if deployment_name:
        parms["onlineDeployments"]["value"][0]["name"] = deployment_name
        traffic["traffic"][deployment_name] = traffic["traffic"].pop(list(traffic["traffic"].keys())[0])

    temp_file = tempfile.NamedTemporaryFile(mode="w+", suffix=".json", delete=False)
    json.dump(online_endpoint_deployment, temp_file)
    temp_file.flush()
    print(temp_file.name)


if __name__ == "__main__":

    def parse_args():
        parser = argparse.ArgumentParser(description="Export v1 service script")

        parser.add_argument('--attach', action='store_true', help='using script for attach amlarc compute')
        parser.add_argument('--export', action='store_true', help='using script for export services')
        parser.add_argument('--overwrite-parameters', action='store_true',
                            help='using script for overwrite parameters purpose')
        parser.add_argument('-w', '--workspace', type=str, help='workspace name')
        parser.add_argument('-g', '--resource-group', type=str, help='resource group name')
        parser.add_argument('-s', '--subscription', type=str, help='subscription id')
        parser.add_argument('-c', '--compute-type', default=None, type=str,
                            help='compute type to export, available types are AKS and ACI, default to export for both '
                                 'two types')
        parser.add_argument('--cluster-name', type=str, help='AmlArc installed cluster name')
        parser.add_argument('--compute-name', default='inferencecompute', type=str, help='compute name')
        parser.add_argument('--compute-namespace', type=str, help='compute attach namespace')
        parser.add_argument('-e', '--export-json', action='store_true', dest='export_json',
                            help='show export result in json')
        parser.add_argument('-mp', '--parameters-path', type=str, help='parameters file path')
        parser.add_argument('-mc', '--migrate-compute', type=str, help='v2 compute target name for migrate.')
        parser.add_argument('-me', '--migrate-endpoint-name', type=str, default=None,
                            help='v2 online-endpoint name, default is v1 service name')
        parser.add_argument('-md', '--migrate-deployment-name', type=str, default=None,
                            help='v2 online-deployment name, default is v1 service name')
        parser.set_defaults(compute_type=None)
        return parser.parse_args()

    # parse args
    args = parse_args()

    if args.attach:
        workspace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)
infile
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
        parms["onlineEndpointName"]["value"] = endpoint_name

    # this is optional
    if deployment_name:
        parms["onlineDeployments"]["value"][0]["name"] = deployment_name
        traffic["traffic"][deployment_name] = traffic["traffic"].pop(list(traffic["traffic"].keys())[0])

    temp_file = tempfile.NamedTemporaryFile(mode="w+", suffix=".json", delete=False)
    json.dump(online_endpoint_deployment, temp_file)
    temp_file.flush()
    print(temp_file.name)


if __name__ == "__main__":

    def parse_args():
        parser = argparse.ArgumentParser(description="Export v1 service script")

        parser.add_argument('--attach', action='store_true', help='using script for attach amlarc compute')
        parser.add_argument('--export', action='store_true', help='using script for export services')
        parser.add_argument('--overwrite-parameters', action='store_true',
                            help='using script for overwrite parameters purpose')
        parser.add_argument('-w', '--workspace', type=str, help='workspace name')
        parser.add_argument('-g', '--resource-group', type=str, help='resource group name')
        parser.add_argument('-s', '--subscription', type=str, help='subscription id')
        parser.add_argument('-c', '--compute-type', default=None, type=str,
                            help='compute type to export, available types are AKS and ACI, default to export for both '
                                 'two types')
        parser.add_argument('--cluster-name', type=str, help='AmlArc installed cluster name')
        parser.add_argument('--compute-name', default='inferencecompute', type=str, help='compute name')
        parser.add_argument('--compute-namespace', type=str, help='compute attach namespace')
        parser.add_argument('-e', '--export-json', action='store_true', dest='export_json',
                            help='show export result in json')
        parser.add_argument('-mp', '--parameters-path', type=str, help='parameters file path')
        parser.add_argument('-mc', '--migrate-compute', type=str, help='v2 compute target name for migrate.')
        parser.add_argument('-me', '--migrate-endpoint-name', type=str, default=None,
                            help='v2 online-endpoint name, default is v1 service name')
        parser.add_argument('-md', '--migrate-deployment-name', type=str, default=None,
                            help='v2 online-deployment name, default is v1 service name')
        parser.set_defaults(compute_type=None)
        return parser.parse_args()

    # parse args
    args = parse_args()

    if args.attach:
        workspace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)
        attach(workspace, args.compute_name, args.cluster_name, args.compute_namespace)

infile
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
        parms["onlineEndpointName"]["value"] = endpoint_name

    # this is optional
    if deployment_name:
        parms["onlineDeployments"]["value"][0]["name"] = deployment_name
        traffic["traffic"][deployment_name] = traffic["traffic"].pop(list(traffic["traffic"].keys())[0])

    temp_file = tempfile.NamedTemporaryFile(mode="w+", suffix=".json", delete=False)
    json.dump(online_endpoint_deployment, temp_file)
    temp_file.flush()
    print(temp_file.name)


if __name__ == "__main__":

    def parse_args():
        parser = argparse.ArgumentParser(description="Export v1 service script")

        parser.add_argument('--attach', action='store_true', help='using script for attach amlarc compute')
        parser.add_argument('--export', action='store_true', help='using script for export services')
        parser.add_argument('--overwrite-parameters', action='store_true',
                            help='using script for overwrite parameters purpose')
        parser.add_argument('-w', '--workspace', type=str, help='workspace name')
        parser.add_argument('-g', '--resource-group', type=str, help='resource group name')
        parser.add_argument('-s', '--subscription', type=str, help='subscription id')
        parser.add_argument('-c', '--compute-type', default=None, type=str,
                            help='compute type to export, available types are AKS and ACI, default to export for both '
                                 'two types')
        parser.add_argument('--cluster-name', type=str, help='AmlArc installed cluster name')
        parser.add_argument('--compute-name', default='inferencecompute', type=str, help='compute name')
        parser.add_argument('--compute-namespace', type=str, help='compute attach namespace')
        parser.add_argument('-e', '--export-json', action='store_true', dest='export_json',
                            help='show export result in json')
        parser.add_argument('-mp', '--parameters-path', type=str, help='parameters file path')
        parser.add_argument('-mc', '--migrate-compute', type=str, help='v2 compute target name for migrate.')
        parser.add_argument('-me', '--migrate-endpoint-name', type=str, default=None,
                            help='v2 online-endpoint name, default is v1 service name')
        parser.add_argument('-md', '--migrate-deployment-name', type=str, default=None,
                            help='v2 online-deployment name, default is v1 service name')
        parser.set_defaults(compute_type=None)
        return parser.parse_args()

    # parse args
    args = parse_args()

    if args.attach:
        workspace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)
        attach(workspace, args.compute_name, args.cluster_name, args.compute_namespace)

    if args.export:
        worskpace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)
infile
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
        parms["onlineEndpointName"]["value"] = endpoint_name

    # this is optional
    if deployment_name:
        parms["onlineDeployments"]["value"][0]["name"] = deployment_name
        traffic["traffic"][deployment_name] = traffic["traffic"].pop(list(traffic["traffic"].keys())[0])

    temp_file = tempfile.NamedTemporaryFile(mode="w+", suffix=".json", delete=False)
    json.dump(online_endpoint_deployment, temp_file)
    temp_file.flush()
    print(temp_file.name)


if __name__ == "__main__":

    def parse_args():
        parser = argparse.ArgumentParser(description="Export v1 service script")

        parser.add_argument('--attach', action='store_true', help='using script for attach amlarc compute')
        parser.add_argument('--export', action='store_true', help='using script for export services')
        parser.add_argument('--overwrite-parameters', action='store_true',
                            help='using script for overwrite parameters purpose')
        parser.add_argument('-w', '--workspace', type=str, help='workspace name')
        parser.add_argument('-g', '--resource-group', type=str, help='resource group name')
        parser.add_argument('-s', '--subscription', type=str, help='subscription id')
        parser.add_argument('-c', '--compute-type', default=None, type=str,
                            help='compute type to export, available types are AKS and ACI, default to export for both '
                                 'two types')
        parser.add_argument('--cluster-name', type=str, help='AmlArc installed cluster name')
        parser.add_argument('--compute-name', default='inferencecompute', type=str, help='compute name')
        parser.add_argument('--compute-namespace', type=str, help='compute attach namespace')
        parser.add_argument('-e', '--export-json', action='store_true', dest='export_json',
                            help='show export result in json')
        parser.add_argument('-mp', '--parameters-path', type=str, help='parameters file path')
        parser.add_argument('-mc', '--migrate-compute', type=str, help='v2 compute target name for migrate.')
        parser.add_argument('-me', '--migrate-endpoint-name', type=str, default=None,
                            help='v2 online-endpoint name, default is v1 service name')
        parser.add_argument('-md', '--migrate-deployment-name', type=str, default=None,
                            help='v2 online-deployment name, default is v1 service name')
        parser.set_defaults(compute_type=None)
        return parser.parse_args()

    # parse args
    args = parse_args()

    if args.attach:
        workspace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)
        attach(workspace, args.compute_name, args.cluster_name, args.compute_namespace)

    if args.export:
        worskpace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)
        storage_account, blob_folder = export(worskpace, args.compute_type, show_output=not args.export_json)
        if args.export_json:
            print(json.dumps({"storage_account": storage_account, "blob_folder": blob_folder}))

    if args.overwrite_parameters:
inproject
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
        parms["onlineEndpointName"]["value"] = endpoint_name

    # this is optional
    if deployment_name:
        parms["onlineDeployments"]["value"][0]["name"] = deployment_name
        traffic["traffic"][deployment_name] = traffic["traffic"].pop(list(traffic["traffic"].keys())[0])

    temp_file = tempfile.NamedTemporaryFile(mode="w+", suffix=".json", delete=False)
    json.dump(online_endpoint_deployment, temp_file)
    temp_file.flush()
    print(temp_file.name)


if __name__ == "__main__":

    def parse_args():
        parser = argparse.ArgumentParser(description="Export v1 service script")

        parser.add_argument('--attach', action='store_true', help='using script for attach amlarc compute')
        parser.add_argument('--export', action='store_true', help='using script for export services')
        parser.add_argument('--overwrite-parameters', action='store_true',
                            help='using script for overwrite parameters purpose')
        parser.add_argument('-w', '--workspace', type=str, help='workspace name')
        parser.add_argument('-g', '--resource-group', type=str, help='resource group name')
        parser.add_argument('-s', '--subscription', type=str, help='subscription id')
        parser.add_argument('-c', '--compute-type', default=None, type=str,
                            help='compute type to export, available types are AKS and ACI, default to export for both '
                                 'two types')
        parser.add_argument('--cluster-name', type=str, help='AmlArc installed cluster name')
        parser.add_argument('--compute-name', default='inferencecompute', type=str, help='compute name')
        parser.add_argument('--compute-namespace', type=str, help='compute attach namespace')
        parser.add_argument('-e', '--export-json', action='store_true', dest='export_json',
                            help='show export result in json')
        parser.add_argument('-mp', '--parameters-path', type=str, help='parameters file path')
        parser.add_argument('-mc', '--migrate-compute', type=str, help='v2 compute target name for migrate.')
        parser.add_argument('-me', '--migrate-endpoint-name', type=str, default=None,
                            help='v2 online-endpoint name, default is v1 service name')
        parser.add_argument('-md', '--migrate-deployment-name', type=str, default=None,
                            help='v2 online-deployment name, default is v1 service name')
        parser.set_defaults(compute_type=None)
        return parser.parse_args()

    # parse args
    args = parse_args()

    if args.attach:
        workspace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)
        attach(workspace, args.compute_name, args.cluster_name, args.compute_namespace)

    if args.export:
        worskpace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)
        storage_account, blob_folder = export(worskpace, args.compute_type, show_output=not args.export_json)
        if args.export_json:
            print(json.dumps({"storage_account": storage_account, "blob_folder": blob_folder}))

    if args.overwrite_parameters:
        with open(args.parameters_path) as f:
inproject
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
common
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
common
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
common
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
common
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
        parms["onlineEndpointName"]["value"] = endpoint_name

    # this is optional
    if deployment_name:
        parms["onlineDeployments"]["value"][0]["name"] = deployment_name
        traffic["traffic"][deployment_name] = traffic["traffic"].pop(list(traffic["traffic"].keys())[0])

common
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
        parms["onlineEndpointName"]["value"] = endpoint_name

    # this is optional
    if deployment_name:
        parms["onlineDeployments"]["value"][0]["name"] = deployment_name
        traffic["traffic"][deployment_name] = traffic["traffic"].pop(list(traffic["traffic"].keys())[0])

    temp_file = tempfile.NamedTemporaryFile(mode="w+", suffix=".json", delete=False)
    json.dump(online_endpoint_deployment, temp_file)
    temp_file.flush()
    print(temp_file.name)


if __name__ == "__main__":

    def parse_args():
        parser = argparse.ArgumentParser(description="Export v1 service script")

        parser.add_argument('--attach', action='store_true', help='using script for attach amlarc compute')
        parser.add_argument('--export', action='store_true', help='using script for export services')
        parser.add_argument('--overwrite-parameters', action='store_true',
                            help='using script for overwrite parameters purpose')
        parser.add_argument('-w', '--workspace', type=str, help='workspace name')
        parser.add_argument('-g', '--resource-group', type=str, help='resource group name')
        parser.add_argument('-s', '--subscription', type=str, help='subscription id')
        parser.add_argument('-c', '--compute-type', default=None, type=str,
                            help='compute type to export, available types are AKS and ACI, default to export for both '
                                 'two types')
        parser.add_argument('--cluster-name', type=str, help='AmlArc installed cluster name')
        parser.add_argument('--compute-name', default='inferencecompute', type=str, help='compute name')
        parser.add_argument('--compute-namespace', type=str, help='compute attach namespace')
        parser.add_argument('-e', '--export-json', action='store_true', dest='export_json',
                            help='show export result in json')
        parser.add_argument('-mp', '--parameters-path', type=str, help='parameters file path')
        parser.add_argument('-mc', '--migrate-compute', type=str, help='v2 compute target name for migrate.')
        parser.add_argument('-me', '--migrate-endpoint-name', type=str, default=None,
                            help='v2 online-endpoint name, default is v1 service name')
        parser.add_argument('-md', '--migrate-deployment-name', type=str, default=None,
                            help='v2 online-deployment name, default is v1 service name')
        parser.set_defaults(compute_type=None)
        return parser.parse_args()

    # parse args
    args = parse_args()

    if args.attach:
common
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
common
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
        parms["onlineEndpointName"]["value"] = endpoint_name

    # this is optional
    if deployment_name:
        parms["onlineDeployments"]["value"][0]["name"] = deployment_name
        traffic["traffic"][deployment_name] = traffic["traffic"].pop(list(traffic["traffic"].keys())[0])

    temp_file = tempfile.NamedTemporaryFile(mode="w+", suffix=".json", delete=False)
    json.dump(online_endpoint_deployment, temp_file)
    temp_file.flush()
    print(temp_file.name)


if __name__ == "__main__":

    def parse_args():
        parser = argparse.ArgumentParser(description="Export v1 service script")

        parser.add_argument('--attach', action='store_true', help='using script for attach amlarc compute')
        parser.add_argument('--export', action='store_true', help='using script for export services')
        parser.add_argument('--overwrite-parameters', action='store_true',
                            help='using script for overwrite parameters purpose')
        parser.add_argument('-w', '--workspace', type=str, help='workspace name')
        parser.add_argument('-g', '--resource-group', type=str, help='resource group name')
        parser.add_argument('-s', '--subscription', type=str, help='subscription id')
        parser.add_argument('-c', '--compute-type', default=None, type=str,
                            help='compute type to export, available types are AKS and ACI, default to export for both '
                                 'two types')
        parser.add_argument('--cluster-name', type=str, help='AmlArc installed cluster name')
        parser.add_argument('--compute-name', default='inferencecompute', type=str, help='compute name')
        parser.add_argument('--compute-namespace', type=str, help='compute attach namespace')
        parser.add_argument('-e', '--export-json', action='store_true', dest='export_json',
                            help='show export result in json')
        parser.add_argument('-mp', '--parameters-path', type=str, help='parameters file path')
        parser.add_argument('-mc', '--migrate-compute', type=str, help='v2 compute target name for migrate.')
        parser.add_argument('-me', '--migrate-endpoint-name', type=str, default=None,
                            help='v2 online-endpoint name, default is v1 service name')
        parser.add_argument('-md', '--migrate-deployment-name', type=str, default=None,
                            help='v2 online-deployment name, default is v1 service name')
        parser.set_defaults(compute_type=None)
        return parser.parse_args()

    # parse args
    args = parse_args()

    if args.attach:
        workspace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)
        attach(workspace, args.compute_name, args.cluster_name, args.compute_namespace)

    if args.export:
common
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
        parms["onlineEndpointName"]["value"] = endpoint_name

    # this is optional
    if deployment_name:
        parms["onlineDeployments"]["value"][0]["name"] = deployment_name
        traffic["traffic"][deployment_name] = traffic["traffic"].pop(list(traffic["traffic"].keys())[0])

    temp_file = tempfile.NamedTemporaryFile(mode="w+", suffix=".json", delete=False)
    json.dump(online_endpoint_deployment, temp_file)
    temp_file.flush()
    print(temp_file.name)


if __name__ == "__main__":

    def parse_args():
        parser = argparse.ArgumentParser(description="Export v1 service script")

        parser.add_argument('--attach', action='store_true', help='using script for attach amlarc compute')
        parser.add_argument('--export', action='store_true', help='using script for export services')
        parser.add_argument('--overwrite-parameters', action='store_true',
                            help='using script for overwrite parameters purpose')
        parser.add_argument('-w', '--workspace', type=str, help='workspace name')
        parser.add_argument('-g', '--resource-group', type=str, help='resource group name')
        parser.add_argument('-s', '--subscription', type=str, help='subscription id')
        parser.add_argument('-c', '--compute-type', default=None, type=str,
                            help='compute type to export, available types are AKS and ACI, default to export for both '
                                 'two types')
        parser.add_argument('--cluster-name', type=str, help='AmlArc installed cluster name')
        parser.add_argument('--compute-name', default='inferencecompute', type=str, help='compute name')
        parser.add_argument('--compute-namespace', type=str, help='compute attach namespace')
        parser.add_argument('-e', '--export-json', action='store_true', dest='export_json',
                            help='show export result in json')
        parser.add_argument('-mp', '--parameters-path', type=str, help='parameters file path')
        parser.add_argument('-mc', '--migrate-compute', type=str, help='v2 compute target name for migrate.')
        parser.add_argument('-me', '--migrate-endpoint-name', type=str, default=None,
                            help='v2 online-endpoint name, default is v1 service name')
        parser.add_argument('-md', '--migrate-deployment-name', type=str, default=None,
                            help='v2 online-deployment name, default is v1 service name')
        parser.set_defaults(compute_type=None)
        return parser.parse_args()

    # parse args
    args = parse_args()

    if args.attach:
        workspace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)
        attach(workspace, args.compute_name, args.cluster_name, args.compute_namespace)

    if args.export:
        worskpace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)
        storage_account, blob_folder = export(worskpace, args.compute_type, show_output=not args.export_json)
        if args.export_json:
non_informative
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]
non_informative
import json
non_informative
non_informative
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
non_informative
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
random
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
random
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
        parms["onlineEndpointName"]["value"] = endpoint_name

    # this is optional
    if deployment_name:
        parms["onlineDeployments"]["value"][0]["name"] = deployment_name
        traffic["traffic"][deployment_name] = traffic["traffic"].pop(list(traffic["traffic"].keys())[0])

    temp_file = tempfile.NamedTemporaryFile(mode="w+", suffix=".json", delete=False)
    json.dump(online_endpoint_deployment, temp_file)
    temp_file.flush()
    print(temp_file.name)


if __name__ == "__main__":

    def parse_args():
        parser = argparse.ArgumentParser(description="Export v1 service script")

        parser.add_argument('--attach', action='store_true', help='using script for attach amlarc compute')
        parser.add_argument('--export', action='store_true', help='using script for export services')
        parser.add_argument('--overwrite-parameters', action='store_true',
                            help='using script for overwrite parameters purpose')
        parser.add_argument('-w', '--workspace', type=str, help='workspace name')
        parser.add_argument('-g', '--resource-group', type=str, help='resource group name')
        parser.add_argument('-s', '--subscription', type=str, help='subscription id')
        parser.add_argument('-c', '--compute-type', default=None, type=str,
                            help='compute type to export, available types are AKS and ACI, default to export for both '
                                 'two types')
        parser.add_argument('--cluster-name', type=str, help='AmlArc installed cluster name')
        parser.add_argument('--compute-name', default='inferencecompute', type=str, help='compute name')
random
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

    mms_endpoint = base_url + '/services/export'
    export_payload = {"computeType": compute_type}
    resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,
                                    json=export_payload)

    if resp.status_code == 202:
        service_entity.state = 'Exporting'
        operation_url = _get_mms_url(service_entity.workspace) + f'/operations/{resp.content.decode("utf-8")}'
        service_entity._operation_endpoint = operation_url
        state, _, operation = service_entity._wait_for_operation_to_complete(show_output, timeout_seconds)
        if state == "Succeeded":
            export_folder = operation.get("resourceLocation").split("/")[-1]
            storage_account = service_entity.workspace.get_details().get("storageAccount")
            if show_output:
                print(f"Services have been exported to storage account: {storage_account} \n"
                      f"Folder path: azureml/{export_folder}")
            return storage_account.split("/")[-1], export_folder
    else:
        raise WebserviceException('Received bad response from Model Management Service:\n'
                                  'Response Code: {}\n'
                                  'Headers: {}\n'
                                  'Content: {}'.format(resp.status_code, resp.headers, resp.content))


def overwrite_parameters(parms: dict,
                         target_compute: str,
                         endpoint_name: str = None,
                         deployment_name: str = None):
    """
    Overwrite parameters
    :param deployment_name: v2 online-deployment name. Default will be v1 service name.
    :param endpoint_name: v2 online-endpoint name. Default will be v1 service name.
    :param target_compute: v2 compute target. For export to AmlArc, the compute should be a cluster with AmlArc extension installed cluster.
    :param parms: parameters as dict: loaded v2 parameters.
    """
    properties = parms["onlineEndpointProperties"]["value"]
    traffic = parms["onlineEndpointPropertiesTrafficUpdate"]["value"]
    if target_compute:
        properties["target"] = target_compute
        traffic["target"] = target_compute
    properties.pop("keys")
    traffic.pop("keys")
    if endpoint_name:
        parms["onlineEndpointName"]["value"] = endpoint_name

    # this is optional
    if deployment_name:
        parms["onlineDeployments"]["value"][0]["name"] = deployment_name
        traffic["traffic"][deployment_name] = traffic["traffic"].pop(list(traffic["traffic"].keys())[0])

    temp_file = tempfile.NamedTemporaryFile(mode="w+", suffix=".json", delete=False)
    json.dump(online_endpoint_deployment, temp_file)
    temp_file.flush()
    print(temp_file.name)


if __name__ == "__main__":

    def parse_args():
        parser = argparse.ArgumentParser(description="Export v1 service script")

        parser.add_argument('--attach', action='store_true', help='using script for attach amlarc compute')
        parser.add_argument('--export', action='store_true', help='using script for export services')
        parser.add_argument('--overwrite-parameters', action='store_true',
                            help='using script for overwrite parameters purpose')
        parser.add_argument('-w', '--workspace', type=str, help='workspace name')
        parser.add_argument('-g', '--resource-group', type=str, help='resource group name')
        parser.add_argument('-s', '--subscription', type=str, help='subscription id')
        parser.add_argument('-c', '--compute-type', default=None, type=str,
                            help='compute type to export, available types are AKS and ACI, default to export for both '
                                 'two types')
        parser.add_argument('--cluster-name', type=str, help='AmlArc installed cluster name')
        parser.add_argument('--compute-name', default='inferencecompute', type=str, help='compute name')
        parser.add_argument('--compute-namespace', type=str, help='compute attach namespace')
        parser.add_argument('-e', '--export-json', action='store_true', dest='export_json',
                            help='show export result in json')
random
import json
import argparse
import tempfile
from azureml.core import Workspace
from azureml.exceptions import WebserviceException
from azureml.core.compute import KubernetesCompute, ComputeTarget
from azureml._model_management._util import _get_mms_url
from azureml._model_management._util import get_paginated_results
from azureml._model_management._util import get_requests_session
from azureml._model_management._constants import AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE, UNKNOWN_WEBSERVICE_TYPE
from azureml._model_management._constants import MMS_SYNC_TIMEOUT_SECONDS
from azureml.core.webservice import Webservice
from azureml._restclient.clientbase import ClientBase

MIGRATION_WEBSERVICE_TYPES = [AKS_WEBSERVICE_TYPE, ACI_WEBSERVICE_TYPE]


def attach(ws: Workspace,
           compute_name: str,
           cluster_name: str,
           namespace: str = None):
    """
    Attach AmlArc compute to the workspace.
    :param cluster_name: AKS cluster name.
    :param namespace: Compute namespace, if not provided will be set to 'default' namespace
    :param compute_name: Compute name.
    :param ws: Target workspace.
    """
    resource_id = f"'/subscriptions/{ws.subscription_id}/resourceGroups/{ws.resource_group}/providers/" \
                  f"Microsoft.ContainerService/managedClusters/{cluster_name}"
    compute_id = None
    if compute_name in ws.compute_targets:
        amlarc_compute = ws.compute_targets[compute_name]
        if amlarc_compute and type(amlarc_compute) is KubernetesCompute:
            compute_id = amlarc_compute.id
    else:
        amlarc_attach_configuration = KubernetesCompute.attach_configuration(resource_id, namespace=namespace)
        amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)
        amlarc_compute.wait_for_completion(show_output=True)
        compute_id = amlarc_compute.id
    print(compute_id)


def export(ws: Workspace,
           compute_type: str = None,
           timeout_seconds: int = None,
           show_output: bool = True) -> (str, str):
    """
    Export all services under target workspace into template and parameters,
    valid compute_types are "AKS"/"ACI", default to export for both two types.
    :param show_output: Whether print outputs.
    :param timeout_seconds: Timeout settings for waiting export.
    :param ws: Target workspace.
    :param compute_type: Compute type to export.
    """
    base_url = _get_mms_url(ws)
    mms_endpoint = base_url + '/services'
    webservices = []
    headers = {'Content-Type': 'application/json'}
    headers.update(ws._auth_object.get_authentication_header())
    params = None
    if compute_type:
        if compute_type.upper() not in MIGRATION_WEBSERVICE_TYPES:
            raise WebserviceException('Invalid compute type "{}". Valid options are "{}"'
                                      .format(compute_type, ",".join(())))
        params = {'computeType': compute_type}
    try:
        resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,
                                        params=params, timeout=MMS_SYNC_TIMEOUT_SECONDS)
    except:
        raise WebserviceException(f'Cannot list WebServices ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    content = resp.content
    if isinstance(resp.content, bytes):
        content = resp.content.decode("utf-8")
    services_payload = json.loads(content)
    for service_dict in get_paginated_results(services_payload, headers):
        service_type = service_dict['computeType']
        child_class = None

        for child in Webservice._all_subclasses(Webservice):
            if service_type == child._webservice_type:
                child_class = child
                break
            elif child._webservice_type == UNKNOWN_WEBSERVICE_TYPE:
                child_class = child

        if child_class:
            service_obj = child_class.deserialize(ws, service_dict)
            webservices.append(service_obj)
    if len(webservices) == 0:
        raise WebserviceException(f'No Webservices found in workspace ' +
                                  (f'with type: {compute_type}' if compute_type else ''))
    service_entity = webservices[0]

random
    if args.overwrite_parameters:         overwrite_parameters(online_endpoint_deployment,         amlarc_compute = ComputeTarget.attach(ws, compute_name, amlarc_attach_configuration)         return parser.parse_args()     args = parse_args()     if args.attach:         attach(workspace, args.compute_name, args.cluster_name, args.compute_namespace)     if args.export:         storage_account, blob_folder = export(worskpace, args.compute_type, show_output=not args.export_json)         with open(args.parameters_path) as f:             online_endpoint_deployment = json.load(f)     resp = ClientBase._execute_func(get_requests_session().post, mms_endpoint, params=params, headers=headers,         resp = ClientBase._execute_func(get_requests_session().get, mms_endpoint, headers=headers,             export_folder = operation.get("resourceLocation").split("/")[-1]             storage_account = service_entity.workspace.get_details().get("storageAccount")     temp_file = tempfile.NamedTemporaryFile(mode="w+", suffix=".json", delete=False)         workspace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)     headers.update(ws._auth_object.get_authentication_header())         worskpace = Workspace.get(name=args.workspace, resource_group=args.resource_group, subscription_id=args.subscription)             print(json.dumps({"storage_account": storage_account, "blob_folder": blob_folder})) import argparse import json     """     properties.pop("keys")         parms["onlineEndpointName"]["value"] = endpoint_name         parser.add_argument('--compute-namespace', type=str, help='compute attach namespace')         parser.add_argument('-mp', '--parameters-path', type=str, help='parameters file path')     mms_endpoint = base_url + '/services/export'