├── .gitignore ├── node2vec.jar ├── lib ├── argparse4j-0.7.0.jar └── argparse4j-0.7.0-javadoc.jar ├── src ├── word2vec │ ├── domain │ │ ├── HiddenNeuron.java │ │ ├── Neuron.java │ │ └── WordNeuron.java │ ├── util │ │ ├── MapCount.java │ │ └── Haffman.java │ ├── Word2VEC.java │ └── Model.java └── node2vec │ ├── Main.java │ ├── AliasMethod.java │ └── Graph.java ├── graph └── karate.edgelist ├── node2vec.iml ├── README.md └── emb └── karate.emb /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | out/ 3 | target/ 4 | META-INF/ 5 | .DS_Store -------------------------------------------------------------------------------- /node2vec.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/freemso/node2vec-java/HEAD/node2vec.jar -------------------------------------------------------------------------------- /lib/argparse4j-0.7.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/freemso/node2vec-java/HEAD/lib/argparse4j-0.7.0.jar -------------------------------------------------------------------------------- /lib/argparse4j-0.7.0-javadoc.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/freemso/node2vec-java/HEAD/lib/argparse4j-0.7.0-javadoc.jar -------------------------------------------------------------------------------- /src/word2vec/domain/HiddenNeuron.java: -------------------------------------------------------------------------------- 1 | package word2vec.domain; 2 | 3 | public class HiddenNeuron extends Neuron{ 4 | 5 | public double[] syn1 ; //hidden->out 6 | 7 | public HiddenNeuron(int layerSize){ 8 | syn1 = new double[layerSize] ; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/word2vec/domain/Neuron.java: -------------------------------------------------------------------------------- 1 | package word2vec.domain; 2 | 3 | public abstract class Neuron implements Comparable { 4 | public double freq; 5 | public Neuron parent; 6 | public int code; 7 | public int category = -1; 8 | 9 | @Override 10 | public int compareTo(Neuron neuron) { 11 | if (this.category == neuron.category) { 12 | if (this.freq > neuron.freq) { 13 | return 1; 14 | } else { 15 | return -1; 16 | } 17 | } else if (this.category > neuron.category) { 18 | return 1; 19 | } else { 20 | return -1; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /graph/karate.edgelist: -------------------------------------------------------------------------------- 1 | 1 32 2 | 1 22 3 | 1 20 4 | 1 18 5 | 1 14 6 | 1 13 7 | 1 12 8 | 1 11 9 | 1 9 10 | 1 8 11 | 1 7 12 | 1 6 13 | 1 5 14 | 1 4 15 | 1 3 16 | 1 2 17 | 2 31 18 | 2 22 19 | 2 20 20 | 2 18 21 | 2 14 22 | 2 8 23 | 2 4 24 | 2 3 25 | 3 14 26 | 3 9 27 | 3 10 28 | 3 33 29 | 3 29 30 | 3 28 31 | 3 8 32 | 3 4 33 | 4 14 34 | 4 13 35 | 4 8 36 | 5 11 37 | 5 7 38 | 6 17 39 | 6 11 40 | 6 7 41 | 7 17 42 | 9 34 43 | 9 33 44 | 9 33 45 | 10 34 46 | 14 34 47 | 15 34 48 | 15 33 49 | 16 34 50 | 16 33 51 | 19 34 52 | 19 33 53 | 20 34 54 | 21 34 55 | 21 33 56 | 23 34 57 | 23 33 58 | 24 30 59 | 24 34 60 | 24 33 61 | 24 28 62 | 24 26 63 | 25 32 64 | 25 28 65 | 25 26 66 | 26 32 67 | 27 34 68 | 27 30 69 | 28 34 70 | 29 34 71 | 29 32 72 | 30 34 73 | 30 33 74 | 31 34 75 | 31 33 76 | 32 34 77 | 32 33 78 | 33 34 -------------------------------------------------------------------------------- /src/word2vec/util/MapCount.java: -------------------------------------------------------------------------------- 1 | // 2 | // Source code recreated from a .class file by IntelliJ IDEA 3 | // (powered by Fernflower decompiler) 4 | // 5 | 6 | package word2vec.util; 7 | 8 | import java.util.HashMap; 9 | 10 | public class MapCount { 11 | private HashMap hm = null; 12 | 13 | public MapCount() { 14 | this.hm = new HashMap(); 15 | } 16 | 17 | public void add(T t, int n) { 18 | Integer integer; 19 | if((integer = this.hm.get(t)) != null) { 20 | this.hm.put(t, Integer.valueOf(integer.intValue() + n)); 21 | } else { 22 | this.hm.put(t, Integer.valueOf(n)); 23 | } 24 | 25 | } 26 | 27 | public void add(T t) { 28 | this.add(t, 1); 29 | } 30 | 31 | public int size() { 32 | return this.hm.size(); 33 | } 34 | 35 | public HashMap get() { 36 | return this.hm; 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /src/word2vec/util/Haffman.java: -------------------------------------------------------------------------------- 1 | package word2vec.util; 2 | 3 | import word2vec.domain.HiddenNeuron; 4 | import word2vec.domain.Neuron; 5 | 6 | import java.util.Collection; 7 | import java.util.TreeSet; 8 | 9 | public class Haffman { 10 | private int layerSize; 11 | 12 | public Haffman(int layerSize) { 13 | this.layerSize = layerSize; 14 | } 15 | 16 | private TreeSet set = new TreeSet<>(); 17 | 18 | public void make(Collection neurons) { 19 | set.addAll(neurons); 20 | while (set.size() > 1) { 21 | merger(); 22 | } 23 | } 24 | 25 | private void merger() { 26 | HiddenNeuron hn = new HiddenNeuron(layerSize); 27 | Neuron min1 = set.pollFirst(); 28 | Neuron min2 = set.pollFirst(); 29 | hn.category = min2.category; 30 | hn.freq = min1.freq + min2.freq; 31 | min1.parent = hn; 32 | min2.parent = hn; 33 | min1.code = 0; 34 | min2.code = 1; 35 | set.add(hn); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /node2vec.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/word2vec/domain/WordNeuron.java: -------------------------------------------------------------------------------- 1 | package word2vec.domain; 2 | 3 | import java.util.Collections; 4 | import java.util.LinkedList; 5 | import java.util.List; 6 | import java.util.Random; 7 | 8 | public class WordNeuron extends Neuron { 9 | public String name; 10 | public double[] syn0 = null; // input->hidden 11 | public List neurons = null;// 路径神经元 12 | public int[] codeArr = null; 13 | 14 | public List makeNeurons() { 15 | if (neurons != null) { 16 | return neurons; 17 | } 18 | Neuron neuron = this; 19 | neurons = new LinkedList<>(); 20 | while ((neuron = neuron.parent) != null) { 21 | neurons.add(neuron); 22 | } 23 | Collections.reverse(neurons); 24 | codeArr = new int[neurons.size()]; 25 | 26 | for (int i = 1; i < neurons.size(); i++) { 27 | codeArr[i - 1] = neurons.get(i).code; 28 | } 29 | codeArr[codeArr.length - 1] = this.code; 30 | 31 | return neurons; 32 | } 33 | 34 | public WordNeuron(String name, double freq, int layerSize) { 35 | this.name = name; 36 | this.freq = freq; 37 | this.syn0 = new double[layerSize]; 38 | Random random = new Random(); 39 | for (int i = 0; i < syn0.length; i++) { 40 | syn0[i] = (random.nextDouble() - 0.5) / layerSize; 41 | } 42 | } 43 | 44 | /** 45 | * 用于有监督的创造hoffman tree 46 | * 47 | * @param name 48 | * @param freq 49 | * @param layerSize 50 | */ 51 | public WordNeuron(String name, double freq, int category, int layerSize) { 52 | this.name = name; 53 | this.freq = freq; 54 | this.syn0 = new double[layerSize]; 55 | this.category = category; 56 | Random random = new Random(); 57 | for (int i = 0; i < syn0.length; i++) { 58 | syn0[i] = (random.nextDouble() - 0.5) / layerSize; 59 | } 60 | } 61 | 62 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # node2vec-java 2 | 3 | This repository is an implementation of *node2vec* using Java. 4 | 5 | The *node2vec* algorithm learns continuous representations for nodes in any (un)directed, (un)weighted graph. Please check the [project page](https://snap.stanford.edu/node2vec/) for more details. 6 | 7 | >[node2vec: Scalable Feature Learning for Networks](http://arxiv.org/abs/1607.00653). A. Grover, J. Leskovec. ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD), 2016. 8 | 9 | The original oficial Python implementation can be found in [this repository](https://github.com/aditya-grover/node2vec). 10 | 11 | ### Basic Usage 12 | 13 | #### Example 14 | To run *node2vec* on Zachary's karate club network, execute the following command from the project home directory:
15 | ``java -jar node2vec.jar --input graph/karate.edgelist --output emb/karate.emd`` 16 | 17 | #### Options 18 | You can check out the other options available to use with *node2vec* using:
19 | ``java -jar node2vec.jar --help`` 20 | 21 | #### Input 22 | The supported input format is an edgelist: 23 | 24 | node1_id_int node2_id_int 25 | 26 | The graph is assumed to be undirected and unweighted by default. These options can be changed by setting the appropriate flags. 27 | 28 | #### Output 29 | The output file has *n+1* lines for a graph with *n* vertices. 30 | The first line has the following format: 31 | 32 | num_of_nodes dim_of_representation 33 | 34 | The next *n* lines are as follows: 35 | 36 | node_id dim1 dim2 ... dimd 37 | 38 | where dim1, ... , dimd is the *d*-dimensional representation learned by *node2vec*. 39 | 40 | ### Library 41 | - [argparse4j](https://github.com/tatsuhiro-t/argparse4j) by [tatsuhiro-t](https://github.com/tatsuhiro-t) 42 | - [AliasMethod.java](http://www.keithschwarz.com/interesting/code/?dir=alias-method) by Keith Schwarz(htiek@cs.stanford.edu). 43 | - [Word2VEC_java](https://github.com/NLPchina/Word2VEC_java) by [NLPchina](https://github.com/NLPchina) 44 | -------------------------------------------------------------------------------- /src/word2vec/Word2VEC.java: -------------------------------------------------------------------------------- 1 | package word2vec; 2 | 3 | import java.io.*; 4 | import java.util.HashMap; 5 | 6 | public class Word2VEC { 7 | 8 | private static final int MAX_SIZE = 50; 9 | 10 | private HashMap wordMap = new HashMap<>(); 11 | private int words, size; 12 | public void loadGoogleModel(String path) throws IOException { 13 | DataInputStream dis = null; 14 | BufferedInputStream bis = null; 15 | double len = 0; 16 | float vector = 0; 17 | try { 18 | bis = new BufferedInputStream(new FileInputStream(path)); 19 | dis = new DataInputStream(bis); 20 | words = Integer.parseInt(readString(dis)); 21 | size = Integer.parseInt(readString(dis)); 22 | String word; 23 | float[] vectors; 24 | for (int i = 0; i < words; i++) { 25 | word = readString(dis); 26 | vectors = new float[size]; 27 | len = 0; 28 | for (int j = 0; j < size; j++) { 29 | vector = readFloat(dis); 30 | len += vector * vector; 31 | vectors[j] = vector; 32 | } 33 | len = Math.sqrt(len); 34 | 35 | for (int j = 0; j < size; j++) { 36 | vectors[j] /= len; 37 | } 38 | 39 | wordMap.put(word, vectors); 40 | dis.read(); 41 | } 42 | } finally { 43 | bis.close(); 44 | dis.close(); 45 | } 46 | } 47 | 48 | 49 | 50 | private static float readFloat(InputStream is) throws IOException { 51 | byte[] bytes = new byte[4]; 52 | is.read(bytes); 53 | return getFloat(bytes); 54 | } 55 | 56 | private static float getFloat(byte[] b) { 57 | int accum = 0; 58 | accum = accum | (b[0] & 0xff) << 0; 59 | accum = accum | (b[1] & 0xff) << 8; 60 | accum = accum | (b[2] & 0xff) << 16; 61 | accum = accum | (b[3] & 0xff) << 24; 62 | return Float.intBitsToFloat(accum); 63 | } 64 | 65 | private static String readString(DataInputStream dis) throws IOException { 66 | // TODO Auto-generated method stub 67 | byte[] bytes = new byte[MAX_SIZE]; 68 | byte b = dis.readByte(); 69 | int i = -1; 70 | StringBuilder sb = new StringBuilder(); 71 | while (b != 32 && b != 10) { 72 | i++; 73 | bytes[i] = b; 74 | b = dis.readByte(); 75 | if (i == 49) { 76 | sb.append(new String(bytes)); 77 | i = -1; 78 | bytes = new byte[MAX_SIZE]; 79 | } 80 | } 81 | sb.append(new String(bytes, 0, i + 1)); 82 | return sb.toString(); 83 | } 84 | 85 | public HashMap getWordMap() { 86 | return wordMap; 87 | } 88 | 89 | 90 | } 91 | -------------------------------------------------------------------------------- /src/node2vec/Main.java: -------------------------------------------------------------------------------- 1 | package node2vec; 2 | 3 | import net.sourceforge.argparse4j.ArgumentParsers; 4 | import net.sourceforge.argparse4j.impl.Arguments; 5 | import net.sourceforge.argparse4j.inf.ArgumentParser; 6 | import net.sourceforge.argparse4j.inf.ArgumentParserException; 7 | import net.sourceforge.argparse4j.inf.Namespace; 8 | import word2vec.Model; 9 | 10 | import java.io.File; 11 | import java.io.FileWriter; 12 | import java.io.IOException; 13 | import java.util.List; 14 | 15 | /** 16 | * Created by freemso on 17-3-14. 17 | */ 18 | public class Main { 19 | public static void main(String[] args) { 20 | // parse arguments 21 | ArgumentParser parser = ArgumentParsers 22 | .newArgumentParser("node2vec") 23 | .defaultHelp(true) 24 | .description("Run node2vec"); 25 | parser.addArgument("-i", "--input") 26 | .nargs("?") 27 | .setDefault("graph/karate.edgelist") 28 | .help("Input graph edge information path"); 29 | parser.addArgument("-o", "--output") 30 | .nargs("?") 31 | .setDefault("emb/karate.emb") 32 | .help("Output embedding path"); 33 | parser.addArgument("--dimensions") 34 | .type(Integer.class) 35 | .setDefault(128) 36 | .help("Number of dimensions. Default is 128"); 37 | parser.addArgument("--walkLength") 38 | .type(Integer.class) 39 | .setDefault(80) 40 | .help("Length og walk per source. Default is 80"); 41 | parser.addArgument("--numWalks") 42 | .type(Integer.class) 43 | .setDefault(10) 44 | .help("Number of walks per source. Default is 10"); 45 | parser.addArgument("--windowSize") 46 | .type(Integer.class) 47 | .setDefault(10) 48 | .help("Context size for optimization. Default is 10"); 49 | parser.addArgument("--iter") 50 | .type(Integer.class) 51 | .setDefault(1) 52 | .help("Number of epochs in SGD"); 53 | parser.addArgument("--workers") 54 | .type(Integer.class) 55 | .setDefault(8) 56 | .help("Number of parallel workers. Default is 8"); 57 | parser.addArgument("-p", "--p") 58 | .type(Double.class) 59 | .setDefault(1.0) 60 | .help("Return hyperparameter. Default is 1"); 61 | parser.addArgument("-q", "--q") 62 | .type(Double.class) 63 | .setDefault(1.0) 64 | .help("Inout hyperparameter. Default is 1"); 65 | parser.addArgument("--weighted") 66 | .dest("weighted") 67 | .action(Arguments.storeTrue()) 68 | .help("Boolean specifying (un)weighted. Default is unweighted"); 69 | parser.addArgument("--unweighted") 70 | .dest("weighted") 71 | .action(Arguments.storeFalse()); 72 | parser.setDefault("weighted", false); 73 | parser.addArgument("--directed") 74 | .dest("directed") 75 | .action(Arguments.storeTrue()) 76 | .help("node2vec.Graph is (un)directed. Default is undirected"); 77 | parser.addArgument("--undirected") 78 | .dest("directed") 79 | .action(Arguments.storeFalse()); 80 | parser.setDefault("directed", false); 81 | 82 | try { 83 | Namespace ns = parser.parseArgs(args); 84 | Graph graph = new Graph(ns.get("input"), 85 | ns.getBoolean("directed"), 86 | ns.getDouble("p"), 87 | ns.getDouble("q")); 88 | List pathList = graph. 89 | simulateWalks(ns.getInt("numWalks"), 90 | ns.getInt("walkLength")); 91 | 92 | System.out.println("Learning Embedding..."); 93 | 94 | // convert path list to string 95 | String sentList = ""; 96 | for (List path : 97 | pathList) { 98 | String sent = ""; 99 | for (Graph.Node node : 100 | path) { 101 | sent += node.getId() + " "; 102 | } 103 | sentList += sent + "\n"; 104 | } 105 | // write to temp file 106 | String tempPath = System.getProperty("java.io.tmpdir"); 107 | File tempFile = File.createTempFile("pathList", "txt", new File(tempPath)); 108 | FileWriter fw = new FileWriter(tempFile); 109 | fw.write(sentList); 110 | fw.flush(); 111 | fw.close(); 112 | // use word2vec to do word embedding 113 | Model model = new Model(false, ns.getInt("dimensions"), ns.getInt("windowSize"), null, null); 114 | model.learnFile(tempFile); 115 | model.storeModel(new File(ns.getString("output"))); 116 | 117 | } catch (ArgumentParserException e) { 118 | parser.handleError(e); 119 | } catch (IOException e) { 120 | System.err.println("invalid arguments"); 121 | } 122 | 123 | } 124 | } 125 | -------------------------------------------------------------------------------- /src/node2vec/AliasMethod.java: -------------------------------------------------------------------------------- 1 | package node2vec; /****************************************************************************** 2 | * File: node2vec.AliasMethod.java 3 | * Author: Keith Schwarz (htiek@cs.stanford.edu) 4 | * 5 | * An implementation of the alias method implemented using Vose's algorithm. 6 | * The alias method allows for efficient sampling of random values from a 7 | * discrete probability distribution (i.e. rolling a loaded die) in O(1) time 8 | * each after O(n) preprocessing time. 9 | * 10 | * For a complete writeup on the alias method, including the intuition and 11 | * important proofs, please see the article "Darts, Dice, and Coins: Smpling 12 | * from a Discrete Distribution" at 13 | * 14 | * http://www.keithschwarz.com/darts-dice-coins/ 15 | */ 16 | import java.util.*; 17 | 18 | public final class AliasMethod { 19 | /* The random number generator used to sample from the distribution. */ 20 | private final Random random; 21 | 22 | /* The probability and alias tables. */ 23 | private final int[] alias; 24 | private final double[] probability; 25 | 26 | /** 27 | * Constructs a new node2vec.AliasMethod to sample from a discrete distribution and 28 | * hand back outcomes based on the probability distribution. 29 | *

30 | * Given as input a list of probabilities corresponding to outcomes 0, 1, 31 | * ..., n - 1, this constructor creates the probability and alias tables 32 | * needed to efficiently sample from this distribution. 33 | * 34 | * @param probabilities The list of probabilities. 35 | */ 36 | public AliasMethod(List probabilities) { 37 | this(probabilities, new Random()); 38 | } 39 | 40 | /** 41 | * Constructs a new node2vec.AliasMethod to sample from a discrete distribution and 42 | * hand back outcomes based on the probability distribution. 43 | *

44 | * Given as input a list of probabilities corresponding to outcomes 0, 1, 45 | * ..., n - 1, along with the random number generator that should be used 46 | * as the underlying generator, this constructor creates the probability 47 | * and alias tables needed to efficiently sample from this distribution. 48 | * 49 | * @param probabilities The list of probabilities. 50 | * @param random The random number generator 51 | */ 52 | public AliasMethod(List probabilities, Random random) { 53 | /* Begin by doing basic structural checks on the inputs. */ 54 | if (probabilities == null || random == null) 55 | throw new NullPointerException(); 56 | if (probabilities.size() == 0) 57 | throw new IllegalArgumentException("Probability vector must be nonempty."); 58 | 59 | /* Allocate space for the probability and alias tables. */ 60 | probability = new double[probabilities.size()]; 61 | alias = new int[probabilities.size()]; 62 | 63 | /* Store the underlying generator. */ 64 | this.random = random; 65 | 66 | /* Compute the average probability and cache it for later use. */ 67 | final double average = 1.0 / probabilities.size(); 68 | 69 | /* Make a copy of the probabilities list, since we will be making 70 | * changes to it. 71 | */ 72 | probabilities = new ArrayList(probabilities); 73 | 74 | /* Create two stacks to act as worklists as we populate the tables. */ 75 | Deque small = new ArrayDeque(); 76 | Deque large = new ArrayDeque(); 77 | 78 | /* Populate the stacks with the input probabilities. */ 79 | for (int i = 0; i < probabilities.size(); ++i) { 80 | /* If the probability is below the average probability, then we add 81 | * it to the small list; otherwise we add it to the large list. 82 | */ 83 | if (probabilities.get(i) >= average) 84 | large.add(i); 85 | else 86 | small.add(i); 87 | } 88 | 89 | /* As a note: in the mathematical specification of the algorithm, we 90 | * will always exhaust the small list before the big list. However, 91 | * due to floating point inaccuracies, this is not necessarily true. 92 | * Consequently, this inner loop (which tries to pair small and large 93 | * elements) will have to check that both lists aren't empty. 94 | */ 95 | while (!small.isEmpty() && !large.isEmpty()) { 96 | /* Get the index of the small and the large probabilities. */ 97 | int less = small.removeLast(); 98 | int more = large.removeLast(); 99 | 100 | /* These probabilities have not yet been scaled up to be such that 101 | * 1/n is given weight 1.0. We do this here instead. 102 | */ 103 | probability[less] = probabilities.get(less) * probabilities.size(); 104 | alias[less] = more; 105 | 106 | /* Decrease the probability of the larger one by the appropriate 107 | * amount. 108 | */ 109 | probabilities.set(more, 110 | (probabilities.get(more) + probabilities.get(less)) - average); 111 | 112 | /* If the new probability is less than the average, add it into the 113 | * small list; otherwise add it to the large list. 114 | */ 115 | if (probabilities.get(more) >= 1.0 / probabilities.size()) 116 | large.add(more); 117 | else 118 | small.add(more); 119 | } 120 | 121 | /* At this point, everything is in one list, which means that the 122 | * remaining probabilities should all be 1/n. Based on this, set them 123 | * appropriately. Due to numerical issues, we can't be sure which 124 | * stack will hold the entries, so we empty both. 125 | */ 126 | while (!small.isEmpty()) 127 | probability[small.removeLast()] = 1.0; 128 | while (!large.isEmpty()) 129 | probability[large.removeLast()] = 1.0; 130 | } 131 | 132 | /** 133 | * Samples a value from the underlying distribution. 134 | * 135 | * @return A random value sampled from the underlying distribution. 136 | */ 137 | public int next() { 138 | /* Generate a fair die roll to determine which column to inspect. */ 139 | int column = random.nextInt(probability.length); 140 | 141 | /* Generate a biased coin toss to determine which option to pick. */ 142 | boolean coinToss = random.nextDouble() < probability[column]; 143 | 144 | /* Based on the outcome, return either the column or its alias. */ 145 | return coinToss? column : alias[column]; 146 | } 147 | } 148 | -------------------------------------------------------------------------------- /src/node2vec/Graph.java: -------------------------------------------------------------------------------- 1 | package node2vec; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.FileReader; 5 | import java.io.IOException; 6 | import java.util.*; 7 | 8 | /** 9 | * Created by freemso on 17-3-14. 10 | */ 11 | public class Graph { 12 | 13 | private static final double DEFAULT_WEIGHT = 1; 14 | 15 | private Set nodeSet = new HashSet<>(); 16 | private Set edgeSet = new HashSet<>(); 17 | 18 | private boolean directed; 19 | 20 | private double p, q; 21 | 22 | private Map aliasNodes = new HashMap<>(); 23 | private Map aliasEdges = new HashMap<>(); 24 | 25 | public Graph(String file, boolean directed, double p, double q) throws IOException { 26 | this.directed = directed; 27 | this.p = p; 28 | this.q = q; 29 | 30 | loadGraphFrom(file); 31 | preprocess(); 32 | } 33 | 34 | /** 35 | * load graph data from file 36 | * input format: node1_id_int node2_id_int 37 | * @param file path of the input file 38 | * @throws IOException file not found or file format not fit 39 | */ 40 | private void loadGraphFrom(String file) throws IOException { 41 | // read graph info from file 42 | FileReader fr = new FileReader(file); 43 | BufferedReader br = new BufferedReader(fr); 44 | String lineTxt; 45 | while ((lineTxt = br.readLine()) != null) { 46 | // parse the line text to get the edge info 47 | String[] strList = lineTxt.split(" "); 48 | int node1ID = Integer.parseInt(strList[0]); 49 | int node2ID = Integer.parseInt(strList[1]); 50 | // add the nodes to the graph 51 | Node node1 = this.addNode(node1ID); 52 | Node node2 = this.addNode(node2ID); 53 | // add the edge to the graph 54 | if (strList.length > 2) { 55 | double weight = Double.parseDouble((strList[2])); 56 | this.addEdge(node1, node2, weight); 57 | } else { 58 | this.addEdge(node1, node2, DEFAULT_WEIGHT); 59 | } 60 | } 61 | } 62 | 63 | /** 64 | * pre-processing of transition probabilities for guiding the random walks 65 | */ 66 | private void preprocess() { 67 | for (Node node : nodeSet) { 68 | List neighbors = this.sortedNeighborList(node); 69 | List probs = new ArrayList<>(); 70 | double weightSum = 0; 71 | for (Node neighbor : neighbors) { 72 | // assert has an edge 73 | double weight = this.getEdge(node, neighbor).weight; 74 | probs.add(weight); 75 | weightSum += weight; 76 | } 77 | double norm = weightSum; 78 | probs.forEach(aDouble -> aDouble /= norm); 79 | aliasNodes.put(node, new AliasMethod(probs)); 80 | } 81 | for (Edge edge : 82 | edgeSet) { 83 | aliasEdges.put(edge, this.computeAliasEdge(edge)); 84 | } 85 | } 86 | 87 | /** 88 | * to compute the alias method for an edge 89 | * @param edge the edge to compute 90 | * @return the node2vec.AliasMethod object that store distribution information 91 | */ 92 | private AliasMethod computeAliasEdge(Edge edge) { 93 | List neighbors = this.sortedNeighborList(edge.dst); 94 | List probs = new ArrayList<>(); 95 | double weightSum = 0; 96 | for (Node neighbor : 97 | neighbors) { 98 | double weight; 99 | if (neighbor == edge.src) 100 | weight = edge.weight / this.p; 101 | else if (this.hasEdge(neighbor, edge.src)) 102 | weight = edge.weight; 103 | else weight = edge.weight / this.q; 104 | weightSum += weight; 105 | probs.add(weight); 106 | } 107 | double norm = weightSum; 108 | probs.forEach(aDouble -> aDouble /= norm); 109 | return new AliasMethod(probs); 110 | } 111 | 112 | /** 113 | * random walk in the graph starting from a node 114 | * @param walkLength the steps of this walk 115 | * @param startNode the start node of this walk 116 | * @return the path that we pass, expressed as a Node List 117 | */ 118 | private List walk(int walkLength, Node startNode) { 119 | List path = new ArrayList<>(); 120 | path.add(startNode); 121 | 122 | while (path.size() < walkLength) { 123 | Node current = path.get(path.size()-1); // the last node on the path 124 | List neighbors = this.sortedNeighborList(current); 125 | if (neighbors.size() > 0) { 126 | if (path.size() == 1) { 127 | int nextIndex = aliasNodes.get(current).next(); 128 | path.add(neighbors.get(nextIndex)); 129 | } else { 130 | Node prev = path.get(path.size()-2); 131 | int nextIndex = aliasEdges.get(this.getEdge(prev, current)).next(); 132 | path.add(neighbors.get(nextIndex)); 133 | } 134 | } else break; 135 | } 136 | return path; 137 | } 138 | 139 | /** 140 | * simulation of a bunch of walks 141 | * @param numWalks iteration times 142 | * @param walkLength steps of every walk 143 | * @return the list of paths that we've walked 144 | */ 145 | public List simulateWalks(int numWalks, int walkLength) { 146 | List pathList = new ArrayList<>(); 147 | System.out.println("Walk iteration:"); 148 | List nodeList = new ArrayList<>(nodeSet); 149 | for (int i = 0; i < numWalks; i++) { 150 | System.out.println(i+1+"/"+numWalks); 151 | Collections.shuffle(nodeList); 152 | for (Node node : 153 | nodeList) { 154 | pathList.add(walk(walkLength, node)); 155 | } 156 | } 157 | return pathList; 158 | } 159 | 160 | /** 161 | * get a node's neighbors in a sorted list 162 | * the set of the neighbors of node is defined as {x|node-->x} 163 | * sort the nodes according to its ids 164 | * @param node the node 165 | * @return a sorted list of nodes 166 | */ 167 | private List sortedNeighborList(Node node) { 168 | List neighborList = new ArrayList<>(); 169 | for (Node n : nodeSet) { 170 | if (this.hasEdge(node, n)) neighborList.add(n); // only node-->n 171 | } 172 | neighborList.sort(Comparator.comparingInt(n -> n.id)); 173 | return neighborList; 174 | } 175 | 176 | /** 177 | * check whether there is an edge between two nodes 178 | * note that all the edges in the graph are directive 179 | * @param src node1 180 | * @param dst node2 181 | * @return true is there is an edge 182 | */ 183 | private boolean hasEdge(Node src, Node dst) { 184 | for (Edge edge : edgeSet) { 185 | if (edge.equals(new Edge(src, dst))) { 186 | return true; 187 | } 188 | } 189 | return false; 190 | } 191 | 192 | /** 193 | * get the edge between two nodes 194 | * @param src node1 195 | * @param dst node2 196 | * @return the edge, null is not exist such an edge 197 | */ 198 | private Edge getEdge(Node src, Node dst) { 199 | for (Edge edge : edgeSet) { 200 | if (edge.equals(new Edge(src, dst))) { 201 | return edge; 202 | } 203 | } 204 | throw new NoSuchElementException(); 205 | } 206 | 207 | /** 208 | * add a new edge to the graph 209 | * if such an edge already exists, update the weight 210 | * note that all the edges in the graph are directed 211 | * if the graph is not directed, 212 | * we just simply add two directed edges with the opposite directions 213 | * that connect two nodes 214 | * @param src first node of the edge 215 | * @param dst second node of the edge 216 | * @param weight of the edge 217 | */ 218 | private void addEdge(Node src, Node dst, double weight) { 219 | if (directed) { 220 | Edge edge; 221 | if (hasEdge(src, dst)) { 222 | edge = getEdge(src, dst); 223 | edge.weight = weight; // update the weight of the edge 224 | } else { 225 | edge = new Edge(src, dst, weight); 226 | edgeSet.add(edge); // add it to edge set 227 | } 228 | } else { 229 | Edge edge1; 230 | Edge edge2; 231 | if (hasEdge(src, dst)) { 232 | edge1 = getEdge(src, dst); 233 | edge2 = getEdge(dst, src); 234 | // update the weight of the edges 235 | edge1.weight = weight; 236 | edge2.weight = weight; 237 | } else { 238 | edge1 = new Edge(src, dst, weight); 239 | edge2 = new Edge(dst, src, weight); 240 | // add it to edge set 241 | edgeSet.add(edge1); 242 | edgeSet.add(edge2); 243 | } 244 | } 245 | } 246 | 247 | /** 248 | * add a node with the id to the graph 249 | * if such a node already exists, return it and do nothing 250 | * if not, create a new node, add it to the graph and return it 251 | * @param id the id of the node 252 | * @return the node found 253 | */ 254 | private Node addNode(int id) { 255 | for (Node node : nodeSet) { 256 | if (node.id == id) { 257 | return node; 258 | } 259 | } 260 | // not exists, create a new node with the id 261 | Node node = new Node(id); 262 | // add it to the nodeSet 263 | nodeSet.add(node); 264 | return node; 265 | } 266 | 267 | class Node { 268 | 269 | private int id; 270 | 271 | Node(int id) { 272 | this.id = id; 273 | } 274 | 275 | boolean equals(Node that) { 276 | return this.id == that.id; 277 | } 278 | 279 | public int getId() { 280 | return id; 281 | } 282 | } 283 | 284 | class Edge { 285 | 286 | private Node src, dst; 287 | private double weight; 288 | 289 | Edge(Node src, Node dst) { 290 | if (src == null || dst == null) 291 | throw new IllegalArgumentException(); 292 | this.src = src; 293 | this.dst = dst; 294 | } 295 | 296 | Edge(Node src, Node dst, double weight) { 297 | if (src == null || dst == null) 298 | throw new IllegalArgumentException(); 299 | this.src = src; 300 | this.dst = dst; 301 | this.weight = weight; 302 | } 303 | 304 | /** 305 | * two edges are equal if and only if they start at the same node 306 | * and end at the same node 307 | * @param that the node to compare 308 | * @return true if two are equal 309 | */ 310 | boolean equals(Edge that) { 311 | return this.src.equals(that.src) 312 | && this.dst.equals(that.dst); 313 | } 314 | } 315 | 316 | } 317 | 318 | 319 | -------------------------------------------------------------------------------- /src/word2vec/Model.java: -------------------------------------------------------------------------------- 1 | package word2vec; 2 | 3 | import word2vec.domain.HiddenNeuron; 4 | import word2vec.domain.Neuron; 5 | import word2vec.domain.WordNeuron; 6 | import word2vec.util.Haffman; 7 | import word2vec.util.MapCount; 8 | 9 | import java.io.*; 10 | import java.util.ArrayList; 11 | import java.util.HashMap; 12 | import java.util.List; 13 | import java.util.Map; 14 | import java.util.Map.Entry; 15 | 16 | public class Model { 17 | private static final int DEFAULT_LAYER_SIZE = 200; 18 | private static final int DEFAULT_WINDOW_SIZE = 5; 19 | private static final double DEFAULT_SAMPLE = 1e-3; 20 | private static final double DEFAULT_ALPHA = 0.025; 21 | 22 | private static final int EXP_TABLE_SIZE = 1000; 23 | 24 | private Map word2neuron = new HashMap<>(); 25 | 26 | private int layerSize, windowSize; 27 | private double sample, alpha, startingAlpha; 28 | private boolean isCBOW; 29 | 30 | private double[] expTable = new double[EXP_TABLE_SIZE]; 31 | 32 | private int trainWordsCount = 0; 33 | 34 | private int MAX_EXP = 6; 35 | 36 | public Model(Boolean isCBOW, Integer layerSize, Integer windowSize, Double alpha, Double sample) { 37 | createExpTable(); 38 | if (isCBOW != null) this.isCBOW = isCBOW; 39 | else this.isCBOW = false; 40 | if (layerSize != null) this.layerSize = layerSize; 41 | else this.layerSize = DEFAULT_LAYER_SIZE; 42 | if (windowSize != null) this.windowSize = windowSize; 43 | else this.windowSize = DEFAULT_WINDOW_SIZE; 44 | if (alpha != null) this.alpha = alpha; 45 | else this.alpha = DEFAULT_ALPHA; 46 | if (sample != null) this.sample = sample; 47 | else this.sample = DEFAULT_SAMPLE; 48 | } 49 | 50 | /** 51 | * train model with the file data 52 | * 53 | * @throws IOException 54 | */ 55 | private void trainModel(File file) throws IOException { 56 | BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); 57 | long nextRandom = 5; 58 | int wordCount = 0; 59 | int lastWordCount = 0; 60 | int wordCountActual = 0; 61 | String lineTxt; 62 | while ((lineTxt = br.readLine()) != null) { 63 | if (wordCount - lastWordCount > 10000) { 64 | System.out.println("alpha:" + alpha + "\tProgress: " 65 | + (int) (wordCountActual / (double) (trainWordsCount + 1) * 100) 66 | + "%"); 67 | wordCountActual += wordCount - lastWordCount; 68 | lastWordCount = wordCount; 69 | alpha = startingAlpha * (1 - wordCountActual / (double) (trainWordsCount + 1)); 70 | if (alpha < startingAlpha * 0.0001) { 71 | alpha = startingAlpha * 0.0001; 72 | } 73 | } 74 | String[] strs = lineTxt.split(" "); 75 | wordCount += strs.length; 76 | List sentence = new ArrayList(); 77 | for (int i = 0; i < strs.length; i++) { 78 | Neuron entry = word2neuron.get(strs[i]); 79 | if (entry == null) { 80 | continue; 81 | } 82 | // The subsampling randomly discards frequent words while keeping the 83 | // ranking same 84 | if (sample > 0) { 85 | double ran = (Math.sqrt(entry.freq / (sample * trainWordsCount)) + 1) 86 | * (sample * trainWordsCount) / entry.freq; 87 | nextRandom = nextRandom * 25214903917L + 11; 88 | if (ran < (nextRandom & 0xFFFF) / (double) 65536) { 89 | continue; 90 | } 91 | } 92 | sentence.add((WordNeuron) entry); 93 | } 94 | for (int index = 0; index < sentence.size(); index++) { 95 | nextRandom = nextRandom * 25214903917L + 11; 96 | if (isCBOW) cbowGram(index, sentence, (int) nextRandom % windowSize); 97 | else skipGram(index, sentence, (int) nextRandom % windowSize); 98 | } 99 | 100 | } 101 | System.out.println("Vocab size: " + word2neuron.size()); 102 | System.out.println("Words in train file: " + trainWordsCount); 103 | System.out.println("success train over!"); 104 | } 105 | 106 | /** 107 | * skip gram train 108 | * 109 | */ 110 | private void skipGram(int index, List sentence, int b) { 111 | WordNeuron word = sentence.get(index); 112 | int a, c; 113 | for (a = b; a < windowSize * 2 + 1 - b; a++) { 114 | if (a == windowSize) { 115 | continue; 116 | } 117 | c = index - windowSize + a; 118 | if (c < 0 || c >= sentence.size()) { 119 | continue; 120 | } 121 | 122 | double[] neu1e = new double[layerSize];// 误差项 123 | // HIERARCHICAL SOFTMAX 124 | List neurons = word.neurons; 125 | WordNeuron we = sentence.get(c); 126 | for (int i = 0; i < neurons.size(); i++) { 127 | HiddenNeuron out = (HiddenNeuron) neurons.get(i); 128 | double f = 0; 129 | // Propagate hidden -> output 130 | for (int j = 0; j < layerSize; j++) { 131 | f += we.syn0[j] * out.syn1[j]; 132 | } 133 | if (f <= -MAX_EXP || f >= MAX_EXP) { 134 | continue; 135 | } else { 136 | f = (f + MAX_EXP) * (EXP_TABLE_SIZE / MAX_EXP / 2); 137 | f = expTable[(int) f]; 138 | } 139 | // 'g' is the gradient multiplied by the learning rate 140 | double g = (1 - word.codeArr[i] - f) * alpha; 141 | // Propagate errors output -> hidden 142 | for (c = 0; c < layerSize; c++) { 143 | neu1e[c] += g * out.syn1[c]; 144 | } 145 | // Model weights hidden -> output 146 | for (c = 0; c < layerSize; c++) { 147 | out.syn1[c] += g * we.syn0[c]; 148 | } 149 | } 150 | 151 | // Model weights input -> hidden 152 | for (int j = 0; j < layerSize; j++) { 153 | we.syn0[j] += neu1e[j]; 154 | } 155 | } 156 | 157 | } 158 | 159 | /** 160 | * bag of words 161 | * 162 | */ 163 | private void cbowGram(int index, List sentence, int b) { 164 | WordNeuron word = sentence.get(index); 165 | int a, c; 166 | 167 | List neurons = word.neurons; 168 | double[] neu1e = new double[layerSize]; 169 | double[] neu1 = new double[layerSize]; 170 | WordNeuron last_word; 171 | 172 | for (a = b; a < windowSize * 2 + 1 - b; a++) 173 | if (a != windowSize) { 174 | c = index - windowSize + a; 175 | if (c < 0) continue; 176 | if (c >= sentence.size()) continue; 177 | last_word = sentence.get(c); 178 | if (last_word == null) continue; 179 | for (c = 0; c < layerSize; c++) neu1[c] += last_word.syn0[c]; 180 | } 181 | 182 | // HIERARCHICAL SOFTMAX 183 | for (int d = 0; d < neurons.size(); d++) { 184 | HiddenNeuron out = (HiddenNeuron) neurons.get(d); 185 | double f = 0; 186 | // Propagate hidden -> output 187 | for (c = 0; c < layerSize; c++) f += neu1[c] * out.syn1[c]; 188 | if (f <= -MAX_EXP) continue; 189 | else if (f >= MAX_EXP) continue; 190 | else f = expTable[(int) ((f + MAX_EXP) * (EXP_TABLE_SIZE / MAX_EXP / 2))]; 191 | // 'g' is the gradient multiplied by the learning rate 192 | // double g = (1 - word.codeArr[d] - f) * alpha; 193 | // double g = f*(1-f)*( word.codeArr[i] - f) * alpha; 194 | double g = f * (1 - f) * (word.codeArr[d] - f) * alpha; 195 | for (c = 0; c < layerSize; c++) { 196 | neu1e[c] += g * out.syn1[c]; 197 | } 198 | // Model weights hidden -> output 199 | for (c = 0; c < layerSize; c++) { 200 | out.syn1[c] += g * neu1[c]; 201 | } 202 | } 203 | for (a = b; a < windowSize * 2 + 1 - b; a++) { 204 | if (a != windowSize) { 205 | c = index - windowSize + a; 206 | if (c < 0) continue; 207 | if (c >= sentence.size()) continue; 208 | last_word = sentence.get(c); 209 | if (last_word == null) continue; 210 | for (c = 0; c < layerSize; c++) last_word.syn0[c] += neu1e[c]; 211 | } 212 | 213 | } 214 | } 215 | 216 | /** 217 | * 218 | * count word frequency in a file 219 | * @param file 220 | * @throws IOException 221 | */ 222 | private void countWordFreq(File file) throws IOException { 223 | MapCount mc = new MapCount<>(); 224 | BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); 225 | String lineTxt; 226 | while ((lineTxt = br.readLine()) != null) { 227 | String[] split = lineTxt.split(" "); 228 | trainWordsCount += split.length; 229 | for (String string : split) { 230 | mc.add(string); 231 | } 232 | } 233 | for (Entry element : mc.get().entrySet()) { 234 | word2neuron.put(element.getKey(), new WordNeuron(element.getKey(), 235 | (double) element.getValue() / mc.size(), layerSize)); 236 | } 237 | } 238 | 239 | /** 240 | * Pre-compute the exp() table f(x) = x / (x + 1) 241 | */ 242 | private void createExpTable() { 243 | for (int i = 0; i < EXP_TABLE_SIZE; i++) { 244 | expTable[i] = Math.exp(((i / (double) EXP_TABLE_SIZE * 2 - 1) * MAX_EXP)); 245 | expTable[i] = expTable[i] / (expTable[i] + 1); 246 | } 247 | } 248 | 249 | /** 250 | * 251 | * learn from the data in the file 252 | */ 253 | public void learnFile(File file) throws IOException { 254 | countWordFreq(file); 255 | new Haffman(layerSize).make(word2neuron.values()); 256 | 257 | for (Neuron neuron : word2neuron.values()) { 258 | ((WordNeuron) neuron).makeNeurons(); 259 | } 260 | 261 | trainModel(file); 262 | } 263 | 264 | public void storeModel(File file) { 265 | try { 266 | FileWriter fw = new FileWriter(file); 267 | fw.write(word2neuron.size()+" "+layerSize+"\n"); 268 | double[] syn0; 269 | for (Entry element : word2neuron.entrySet()) { 270 | fw.write(element.getKey()+" "); 271 | syn0 = ((WordNeuron) element.getValue()).syn0; 272 | for (double d : syn0) { 273 | fw.write(((Double) d).floatValue()+" "); 274 | } 275 | fw.write("\n"); 276 | } 277 | fw.flush(); 278 | fw.close(); 279 | } catch (IOException e) { 280 | e.printStackTrace(); 281 | } 282 | } 283 | } 284 | -------------------------------------------------------------------------------- /emb/karate.emb: -------------------------------------------------------------------------------- 1 | 34 128 2 | 22 0.1821487 -0.14600317 0.116326064 -0.10979314 0.105511196 0.102590404 0.14767711 0.06910531 -0.10638263 0.099735096 -0.027917862 0.039294045 -0.0071753636 0.06037757 -0.057677213 -0.019134559 -0.03582664 -0.010924784 0.17873587 0.10809856 0.055747878 0.060848434 0.018695476 0.016508283 -0.063683055 0.06899306 0.082780704 -0.030826978 -0.04816471 0.0047709146 0.06363708 -0.032162134 -0.04182954 0.0028047364 0.063349195 0.043027 0.12741727 -0.008102806 -0.0016466641 -0.06405969 0.10115922 -0.03241647 0.036528803 -0.1640987 0.08161492 0.0037793338 0.030930828 0.0055984003 -0.11831737 0.026254252 0.060630977 -0.004279551 -0.03624406 -0.09632961 -0.03572987 -0.14861874 0.02314351 0.048774447 0.043954197 -0.12985384 -0.003383798 0.011586147 -0.06616301 -0.07558104 0.095947385 -0.011789435 -0.120202996 0.08661656 0.121825464 -0.038976487 -0.05697792 -0.03993333 -0.017476127 0.022369806 0.04293568 0.07009442 0.0390006 -0.052700084 0.11259083 -0.04016899 0.064478405 -0.104010046 0.0074903714 -0.07703918 0.1259057 0.027939904 -0.09567071 -0.06925666 0.029572716 -0.038965248 -0.05420588 -0.1258046 0.11898506 0.09050788 -0.052481655 -0.06349785 -0.04859992 0.09840988 0.04429312 -0.1030435 -0.0100439675 0.07017873 -0.094130225 0.11530836 -0.16998728 0.015001894 0.12221362 0.032665916 0.015437954 0.014901171 0.0329289 0.070511 -0.03665882 -0.024702474 0.09679714 0.043778926 0.08514011 -0.043605056 -0.046964396 -0.0283106 0.0128531195 -0.12924019 -0.023189792 0.11238788 0.096063465 0.051087108 -0.072582826 0.12809199 3 | 23 0.028375661 0.04795634 0.10599798 0.04046922 0.16443151 0.079451874 -0.05754446 0.049944397 -0.10623677 -0.09537121 0.118634045 -0.14276728 -0.10341239 0.11091766 -0.040854443 -0.025891878 0.061824806 0.035266418 0.06897366 -0.063835196 0.042173937 -0.053931773 0.22115009 0.01986362 -0.039733917 0.11461788 0.069328696 0.045040634 -0.00860743 0.0015088667 0.03869549 -0.13835678 -0.002315054 -0.053963102 0.1489051 -0.080735445 0.102075875 -0.056646895 -0.016122468 -0.026013635 -0.021883387 -0.15846747 -0.069300175 -0.104295254 -0.052402012 -0.0060268724 -0.07230706 -0.04142504 -0.2016928 0.073439956 -0.13861775 0.030878382 -0.13026863 -0.02793336 -0.06964886 0.05471191 0.04766108 -0.06489452 0.07063249 -0.12674396 -0.05244932 0.017628696 -0.05196734 -0.070001125 0.026363172 0.02233561 -0.21235436 0.09905592 -0.033558767 -0.13196716 -0.0037705975 0.0034768407 0.055066556 -0.0066931364 -0.15713312 -0.045633797 0.008313906 0.019732572 0.066875115 0.018622562 -0.10354879 -0.10170343 0.08773783 -0.07883883 -0.021138825 0.07460113 -0.19947542 0.0032242571 0.10113554 -0.010281366 -0.19166705 -0.109787524 0.1503132 0.1300915 0.015804496 -0.10867038 -0.028355205 -0.044126626 -0.020656845 0.047165144 0.08851092 0.053451724 -0.031468127 0.14158396 -0.021540698 0.08859927 -0.04343107 -0.16688865 0.105404295 0.021255404 0.15843153 0.07225651 0.070443116 0.01662086 0.18742022 0.0059783137 0.105789885 -0.027951064 0.04041941 0.14491078 -0.04893504 -0.1958695 -0.056535505 0.05393233 -0.1273838 0.0902796 -0.1814225 0.1923107 4 | 24 -0.048994362 0.11846702 0.0743396 0.031634677 0.18724047 0.06544468 -0.09001176 -0.018809948 -0.12544626 -0.124479204 0.08637826 -0.12732741 -0.12228497 0.036238365 0.0716063 0.08820847 0.096138984 0.075112976 -0.020335447 -0.0045082937 0.062943034 -0.0487621 0.19408727 0.03093611 -0.02958481 0.1878024 0.08964418 0.11551742 0.05228678 0.025589805 0.025675988 -0.097252 -0.019627752 -0.06142453 0.10943794 -0.04119083 0.018895295 -0.023383923 0.039869037 -0.02488888 -0.15344484 -0.08286309 -0.105242915 -0.06530535 -0.061994974 0.09153183 -0.10260162 -0.047825597 -0.24874924 0.11418831 -0.12197794 0.07802706 -0.16352177 0.041731223 -0.0010736005 0.05255872 0.022329064 -0.12621571 0.06204006 -0.058587253 -0.055273205 -0.028100746 -0.01920598 -0.013955939 0.052773066 -0.0027463709 -0.1492269 0.093065076 -0.08720536 -0.0835943 -0.107209094 -0.023597792 0.059640493 -0.0023358958 -0.14735182 -0.015164342 0.019601233 0.11291385 0.057855897 -0.023598261 -0.10313679 -0.07852023 0.12824029 -0.056300372 -0.08172824 0.053257886 -0.19869831 0.045333754 0.10657276 -0.029702438 -0.14720726 -0.07572335 0.033390626 0.08051954 0.012770471 -0.051595945 -0.0065196436 -0.15558104 -0.028033879 0.059823178 0.13908589 0.014074686 0.02323012 0.15039419 -0.0040520667 0.077116676 -0.063514866 -0.21417661 0.1329269 0.04554744 0.09912121 0.00417222 -0.017480155 0.045104876 0.1347777 0.03534074 0.041379247 -0.049795024 -0.003665155 0.14331885 -0.17303006 -0.17858794 0.008965891 -0.0072263787 -0.16609786 0.12599082 -0.11641517 0.089804225 5 | 25 0.022734346 0.16669345 0.1342203 0.058562193 0.14373356 -0.039631322 -0.0859904 0.13395624 0.002193284 -0.06812119 0.10675106 -0.08327502 -0.03157942 0.13087004 -0.08994663 0.06243978 0.05412838 0.09667864 -0.02669939 0.018557489 -0.041769866 0.008776961 0.17922406 -0.024083933 0.037944205 0.13897848 -0.0022936238 -0.06861979 -0.038195506 0.071683854 0.17705125 -0.042471033 0.0247901 -0.06886569 0.09155166 -0.06682337 -0.013079276 0.0068600774 0.05985017 -0.06771978 -0.25290236 -0.003655058 -0.046168346 0.098010436 -0.091923565 0.09703767 -0.13487165 -0.052628133 -0.23621248 0.17458081 -0.08599201 0.07119102 -0.13160437 -0.059518106 0.17460422 0.09190632 0.06276772 -0.3236851 0.1121994 0.05832523 0.040747207 -0.22385517 -0.058269437 -0.1249894 0.25974542 -0.102110945 -0.14876443 0.18747205 -0.08138787 -0.0735902 -0.14947246 -0.036881205 0.09864841 -0.09155626 -0.08094405 -0.0102731595 0.103235744 0.16557662 0.12713152 0.011814891 0.062269226 -0.06969533 0.03233952 -0.1524944 -0.12450363 0.16154166 -0.039367788 0.04372336 0.068130605 -0.14061427 -0.053953227 -0.051081493 -0.020701107 0.21243018 0.09766622 -0.010896843 -0.117392294 -0.08433346 -0.06682336 0.0043665646 0.042803664 0.065754876 -0.03219353 0.06666533 -0.08528164 -0.07733689 0.024523336 -0.11283239 0.14982346 0.13179491 0.11022328 -0.021127239 -0.073718496 0.09555856 0.042765867 -0.114241675 0.061793208 -9.318305E-4 -0.090526715 0.03475302 -0.18051095 -0.24470867 -0.06764471 -0.030491013 -0.14299193 0.06779758 -0.1800463 0.0260493 6 | 26 -0.0068591074 0.13414489 0.14879334 0.0064438423 0.08443095 -0.04518342 -0.05671771 0.064837225 -0.023514058 -0.081924714 0.045116562 -0.13090965 -0.045194834 0.19819777 0.00806405 0.016686631 0.050729547 0.024752261 -0.019718247 0.008246339 0.046463337 0.042153247 0.1577874 0.009552787 -0.019406786 0.17745681 0.028759565 0.011805487 -0.046893355 0.033795066 0.16355433 -0.041845374 0.028410316 -0.0933049 0.11396246 -0.075480044 0.038490202 0.04533059 0.011376723 0.03159977 -0.18117768 0.007163877 -0.031990506 0.013523729 -0.09465614 0.024065554 -0.16074833 -0.0026612724 -0.264788 0.11190502 -0.10817086 0.08627926 -0.11112116 -0.059918076 0.082186595 0.08931916 -0.030172933 -0.292156 0.07991076 -0.040955085 -0.08956138 -0.22656706 -0.036665093 -0.11288254 0.13508075 -0.08158595 -0.11427994 0.22539483 0.007968694 -0.09944911 -0.13213238 -0.06195775 0.016500693 -0.064616755 -0.16600807 0.029806415 0.0469521 0.087129235 0.14617306 0.022646321 2.0051881E-4 -0.11423625 0.028045168 -0.1381094 -0.09756532 0.082388334 -0.057295203 -0.014876247 -0.0070980364 -0.114779584 0.0013614513 -0.05063741 -0.12778798 0.23806764 0.118041635 -0.048236642 -0.10808676 -0.036975432 -0.075119734 -0.024653926 0.0865149 0.045477252 -0.060537215 0.12700999 -0.009925997 0.0030250847 0.011446343 -0.122044586 0.110751696 0.07576046 0.12522732 -0.03721183 -0.05992572 0.039584305 0.063558534 -0.0437275 0.13507764 0.052912287 -0.0940867 0.012536588 -0.12361215 -0.21362294 -0.031651206 -0.038594663 -0.09518999 0.082502544 -0.19015884 0.023395747 7 | 27 -0.066345155 0.10038279 0.08755364 -8.9629967E-4 0.15133557 0.027589181 -0.091664135 -0.0021953199 -0.12178096 -0.11609908 0.078149356 -0.21127908 -0.14611489 0.10544191 0.066726476 -0.012804321 0.13321835 -0.015103809 -0.044365074 -0.014858057 0.07071372 -0.04447895 0.24486236 0.033546764 -0.07621639 0.22925787 0.07191055 0.1525348 0.033680826 0.05490346 0.04620381 -0.18493775 -0.011290822 -0.03868687 0.17558177 -0.057149753 0.09600344 0.0070670815 0.016488578 0.006227668 -0.111537516 -0.08115876 -0.091945276 -0.08563715 -0.106338084 0.065427415 -0.16396773 -0.036743697 -0.28383356 0.06743263 -0.10433949 0.047413934 -0.123001985 0.029521259 -0.018279092 0.11614583 0.017716156 -0.13150366 0.10209649 -0.17018442 -0.13192257 -0.096287735 -0.03992033 -0.0050648735 0.01845822 -0.0031260748 -0.1872218 0.17361332 -0.08978067 -0.11513207 -0.028619988 -0.013339595 0.016698405 0.038773347 -0.20485567 -0.03693199 0.04136567 0.07122237 0.07024043 0.019258788 -0.17824721 -0.09345924 0.097863 -0.05481856 -0.046143565 -0.0030946713 -0.16169292 0.02674691 0.06529228 -0.024761679 -0.13844304 -0.08161848 -0.012412548 0.16882746 0.09089227 -0.14978294 -0.04263519 -0.12563775 -0.12981263 0.03840281 0.10685192 0.057978462 -0.030400192 0.18840295 0.07202665 0.09233784 -0.05058634 -0.2018243 0.16206679 0.0038567705 0.10791762 0.026597051 -0.013716318 0.01228094 0.12658207 -0.005512573 0.13902214 -0.052778315 0.024272352 0.17991677 -0.14500791 -0.24442233 -0.032498013 0.031146595 -0.19449265 0.12436769 -0.14203773 0.17275715 8 | 28 0.0056517418 0.11344297 0.1531956 0.009543954 0.06515459 -0.025771989 -0.02296741 0.107915424 -0.014943627 -0.072277956 0.09418213 -0.047785334 -5.275279E-4 0.08029638 -0.06738301 0.03789656 0.04893098 0.07855713 0.04941621 -0.034994993 0.024605459 -0.018225517 0.14760318 -0.028846433 0.014588093 0.052865073 0.056990884 -0.049942475 -0.01553949 0.10459857 0.116221115 -0.023787575 -0.02488796 -0.05119349 -0.008931158 -0.14507475 0.060825195 -0.052841894 0.051252797 -0.11556171 -0.10233515 -0.045815222 -0.03668238 0.06800913 -0.021428006 0.02923297 -0.060118876 -0.07754408 -0.21689273 0.06639371 -0.07181323 0.045458462 -0.08689378 -0.046170842 0.09112715 -0.009572329 -0.020187113 -0.23322056 0.07730574 0.051340345 -0.034114197 -0.12421946 -0.07255637 -0.1367145 0.24091855 -0.08911035 -0.099130414 0.08310205 -0.08115728 -0.049245864 -0.1350907 -0.049058743 0.07746352 -0.075297035 -0.11150963 0.03367216 0.08009355 0.14644897 0.104415506 0.031147804 -0.0019173817 -0.100683615 0.09021383 -0.08143787 -0.023434635 0.09378655 -0.05023269 0.014519783 0.09182249 -0.106006846 -0.029280242 -0.08306241 -0.017441282 0.13147296 0.03898693 -0.014609411 -0.09910752 -0.09290528 -0.011394235 -0.02119072 0.054622784 3.872566E-4 6.8187586E-4 0.07334594 -0.085255206 -0.0637122 0.013358551 -0.10289767 0.15239522 0.11114748 0.10890317 -0.018781453 -0.058359798 0.07139973 0.050760496 -0.053505003 0.040577825 0.025827032 0.0055311928 -0.020251704 -0.07078454 -0.23577195 -0.027660217 -0.026196055 -0.039419036 0.06259185 -0.16254863 0.0632596 9 | 29 0.07933041 0.019016286 0.08321108 -0.0043732915 0.100601785 0.010669411 0.017745826 0.14975882 0.005835006 -0.040870216 0.07099433 -0.054803528 -0.014169453 0.09786296 -0.091845065 0.02050313 0.016408004 0.02737145 0.04483912 0.02599855 -0.04615165 0.038206104 0.122393034 0.024427287 0.0028330362 0.06645258 0.008815544 -0.077794805 -0.055907227 0.07886094 0.09431202 -0.053578828 -0.0436714 -0.009563467 0.036516078 -0.061893173 0.044314537 -0.032879464 0.068864144 -0.080433086 -0.057214256 -0.0088931685 -0.030684689 0.038263444 -0.016310716 0.044199087 -0.08574285 -0.071447834 -0.16978526 0.066371076 0.024751816 0.02635597 -0.073722154 -0.048613306 0.06480617 0.005248854 0.064247414 -0.12175045 0.10417074 -0.048580248 0.026433839 -0.11250058 -0.06366597 -0.08897656 0.17173052 -0.05448437 -0.15244183 0.07912383 -0.050421398 -0.039785694 -0.055045515 0.022733338 0.02179318 -0.06413518 -0.04794997 -0.017855575 0.0729116 0.08768567 0.056538995 0.0107084075 0.01939235 -0.065128624 0.03414731 -0.079356916 0.02629552 0.06844047 -0.043009017 0.028822694 0.07123606 -0.060399566 -0.07036619 -0.084880374 0.078343675 0.15495437 0.052616812 -0.053984378 -0.077238314 -0.032020174 -0.057463706 -0.029142926 -0.021074377 0.060115166 -0.016007498 0.08180933 -0.09536566 -0.045217518 0.030227344 -0.086849526 0.102435134 0.05736538 0.06488336 0.022487134 -0.021325596 0.051433343 0.046728823 -0.068048365 0.047337536 -0.060300108 -0.033839155 0.019923666 -0.029192528 -0.2024329 -0.041000236 0.036066152 -0.039207675 0.07517499 -0.10255894 0.110060684 10 | 30 -0.111210205 0.060428083 0.082548805 0.0026796702 0.065212876 0.07491174 -0.07040108 -0.05670935 -0.08356306 -0.1341931 0.045791402 -0.14042732 -0.11043879 0.04980886 0.09124593 -0.0031984348 0.095156394 -0.011924883 0.018790772 -0.08289335 0.07421601 -0.0532975 0.15310757 0.020971073 -0.08007526 0.098727964 0.07737293 0.13080509 0.03213887 0.04339686 0.013090487 -0.10315489 -0.03827624 -0.07925446 0.050307985 -0.10520782 0.12975958 -0.019463982 0.015200942 0.0076411883 0.024414599 -0.08304533 -0.036562517 -0.09073913 -0.050521143 -0.001978272 -0.08633934 -0.04820506 -0.17754166 -0.028326817 -0.10970097 0.030305948 -0.06375164 0.0074724155 -0.12926163 -0.0060752663 -0.060029957 -0.048517834 0.031374957 -0.08677632 -0.14272267 0.03868851 -0.019207716 -0.03128359 -0.054197263 0.024998855 -0.08193532 0.043305792 -0.03252196 -0.10034365 -0.018196972 -0.005948069 -0.018734224 -0.005419117 -0.19457021 -0.016441943 -0.014041165 0.02262273 0.026757756 0.0045453054 -0.19232649 -0.065668546 0.1496478 -0.017979085 -0.0135935 -0.047281705 -0.1489871 0.005191093 0.059833076 0.051046573 -0.075399004 -0.07008021 -0.02132588 0.04218369 0.025946666 -0.12913302 -0.009629836 -0.08449851 -0.0047081504 0.045195866 0.14161865 -0.006438729 0.02622019 0.12831114 0.094420314 0.09193879 -0.1088442 -0.18698458 0.096623205 -0.039132655 0.08441477 0.016519956 0.016621599 -0.020185415 0.12404598 0.07520368 0.06004181 0.008803566 0.07341934 0.07177757 0.010178519 -0.13426548 0.020141011 -0.0155616915 -0.083162434 0.10428444 -0.075344935 0.14696096 11 | 31 -0.02288271 -0.044855732 0.086582094 0.0050856797 0.16626984 0.21430212 -0.017563203 -0.07848647 -0.13959834 -0.06896653 0.030178104 -0.07608346 -0.1483747 -0.0011144275 0.057655457 -0.0024555107 0.040718276 -0.02924844 0.095032014 -0.038494095 0.09158803 -0.058617476 0.11071275 0.023869772 -0.10024978 0.1273531 0.104189895 0.11808559 0.024317648 -0.046980545 0.016530357 -0.14500982 -0.03452227 -0.06627853 0.14592813 0.020618612 0.14322652 -0.014774259 0.0117755085 -0.0023458102 0.0728758 -0.13178337 0.027831994 -0.2049101 -0.028761348 0.026382335 -0.03439531 -0.059174243 -0.09567416 -0.004999957 -0.12088663 0.035742667 -0.073684685 -0.05193624 -0.19070596 -0.069029495 0.00914858 0.0952188 0.0024238417 -0.11653402 -0.08387249 0.17395712 -0.023887932 -0.0018041228 -0.120071895 0.13571715 -0.12513684 0.060896978 0.06843334 -0.11969713 0.02731605 0.0024045536 0.0018962794 0.039110415 -0.10193346 -0.02494966 -0.060700934 -0.095843606 0.02951898 -0.048883956 -0.16049753 -0.032348752 0.117466666 -0.045884047 0.02198536 -0.039422136 -0.24243836 -0.02162019 0.03592284 0.10457269 -0.14142677 -0.07148089 0.117568284 0.01801379 -0.051138278 -0.15643777 0.026547978 -0.0044994783 0.06354581 0.006779583 0.16417092 0.051266138 -0.015722286 0.0977488 0.028634703 0.1405302 -0.087592475 -0.15531397 0.006077067 -0.09238769 0.06121178 0.11434865 0.04680161 -0.05435353 0.20382199 0.13922048 0.052233204 -0.081526354 0.06736446 0.110819645 -9.52976E-6 -0.049603496 0.005113996 0.056421913 -0.084074944 0.06577062 -0.052995197 0.1920239 12 | 32 0.06827344 0.03971069 0.084925935 0.024882145 0.12861742 0.04844021 -0.0011114024 0.0923398 -0.06778136 -0.041119583 0.033406682 0.025347255 -0.016678859 0.047712367 -0.08369032 0.04945012 -0.021198919 0.07790715 0.09430294 0.042815186 -0.010785835 0.02921064 0.063104704 -0.019594813 -0.025515368 0.026898142 0.049259976 -0.0802359 -0.05810831 0.104749754 0.15222383 0.015381545 -0.031969097 -0.0018294506 0.030146597 -0.075511105 0.028635204 -0.0024920874 0.06785205 -0.11976456 -0.08124446 -0.03137279 -0.012629611 0.080870636 -0.046019964 0.0524693 -0.06200089 -0.073572315 -0.18261524 0.06200079 0.009066108 0.062287487 -0.043227643 -0.060882594 0.09601064 -0.05617921 0.026783308 -0.19606571 0.05618772 0.053925652 0.0021166345 -0.107372835 -0.09591698 -0.14870876 0.25721014 -0.10911488 -0.1203971 0.053532857 -0.059622034 0.0030696606 -0.13403276 -0.036115922 0.060798343 -0.07511756 -0.042461507 -0.00798287 0.062225405 0.105036154 0.12640585 -0.06446003 0.08419349 -0.07588774 0.06522254 -0.07777449 -0.02800758 0.06644234 -0.04202093 0.028944049 0.086965464 -0.054384287 -0.029120594 -0.12111023 0.03979327 0.105731316 0.050084047 0.026172101 -0.045564137 -0.010889604 -0.03818183 -0.03390182 0.060108285 0.06534077 -0.020590983 0.02503277 -0.15383112 -0.059820477 0.058796 -0.08029837 0.124164656 0.12103363 0.067391075 0.0105144335 -0.03592766 0.048980102 0.051708873 -0.035189148 0.028298642 -0.032165598 -0.05441652 -0.016311033 -0.10438019 -0.18676715 0.010907392 0.006781064 -0.013672366 0.105177246 -0.1254315 0.016396232 13 | 10 0.053594932 0.03921308 0.11317014 -0.04118246 0.0553294 -0.026486903 0.047425214 0.1443937 0.0126622375 -0.047271512 0.11697948 -0.07838807 -0.0036829158 0.085032344 -0.042798534 0.06785667 0.06274005 0.044078723 0.04050873 -0.033736695 0.019197062 0.0057139164 0.17710039 0.03919881 0.026872871 0.07979278 0.043801468 -0.014251876 0.029117675 0.06470864 -0.01241174 -0.059431158 -0.07827575 -0.041301627 -0.038279355 -0.1182142 0.064254254 -0.12552054 0.054418642 -0.08178906 -0.027927969 -0.037183125 -0.09038477 -0.021023976 0.06590578 0.030297065 -0.022139197 -0.067371495 -0.20593868 0.063553564 -0.021819975 0.0035732696 -0.12991935 0.015535916 -0.0012504798 -0.029487023 -0.009002332 -0.07255454 0.086279914 -0.08090385 -0.002264392 -0.03751555 -0.026557956 -0.04322493 0.12342073 -0.035197355 -0.13756236 0.044620913 -0.07053056 -0.07182605 -0.08440176 0.0317666 0.032016948 -0.039111163 -0.08552104 0.03895429 0.07099735 0.1308069 0.00763379 0.07557981 -0.0684014 -0.10971959 0.08019556 -0.054804463 0.073760815 0.078219876 -0.106131226 0.023457866 0.11666692 -0.09589741 -0.093969405 -0.07905462 0.063311994 0.096874446 -0.015904522 -0.070226744 -0.06727377 -0.12465977 0.0203512 0.0031904348 -0.018906087 -0.043954395 0.031696245 0.16682759 -0.057654697 -0.004433584 -0.018691115 -0.11465333 0.1261636 0.03585358 0.104207754 -0.0069361166 -0.024765272 0.07206541 0.07118574 -0.022812301 0.0053344388 -0.014386722 0.032130867 0.029241903 0.02637228 -0.20899466 -0.04146881 0.029974177 -0.028524483 0.0526106 -0.110312395 0.16369507 14 | 33 -0.0084953755 -0.046977773 0.050056566 -0.053508516 0.057259936 0.14074235 0.030376274 -0.12263033 -0.13376243 -0.008681679 -0.037288357 0.022230437 -0.116037615 -0.06609054 0.060351048 0.05008256 0.023884537 -0.021337947 0.05487022 0.026041036 0.06158257 -0.046132702 0.0151686985 -0.021483518 -0.07379722 0.112000935 0.09540952 0.11897147 0.01807802 0.022831494 0.00978143 -0.062663354 -0.0704289 -0.030434739 0.04796157 0.008627588 0.102217935 -0.009598371 0.068692505 -0.040116824 0.060419478 -0.007514363 0.031982232 -0.13404913 0.02285234 0.104590714 0.010900472 -0.0717097 -0.09801575 -0.026415398 -0.0043878276 0.031107694 -0.009154884 -0.034291226 -0.10446933 -0.13719839 -0.039495848 0.053205088 6.007097E-4 -0.028630754 -0.08739664 0.09099597 -0.016468856 -0.025375033 -0.02468219 0.020702358 -0.010983574 -9.5506554E-4 0.034697063 0.015027707 -0.032588977 -0.04626291 -0.008778522 0.029404644 -0.013452261 0.013934899 0.01337333 -0.0689896 0.041163128 -0.09052949 -0.081374645 -0.01790648 0.08806657 0.0152378455 0.049691264 -0.08552621 -0.10046687 0.004262634 0.035739742 0.081318386 -0.023825847 -0.06203641 -0.0068013207 -0.046959944 -0.055029914 -0.09641142 0.029292999 -0.024252992 0.05079508 -0.020304777 0.09118141 0.0017555399 -0.013811299 0.046033084 -0.005778883 0.049194705 -0.009030295 -0.05687065 0.039321244 -0.087022 -0.013473726 0.04727826 -0.057890978 -0.03996594 0.05909689 0.08032023 0.004400512 -0.047469757 0.027429735 -0.009964108 -0.016717734 -0.043994267 0.07851973 -0.012583708 -0.022373572 0.074836075 0.022776056 0.09234424 15 | 11 0.065646894 -0.065108374 -0.15090083 0.071771994 0.079468876 0.05236764 -0.015273843 0.051433012 -0.03645063 0.00892643 -0.11918988 0.07403228 -0.01611983 0.011527265 -0.08064611 -0.04616409 -0.096871145 -0.03091134 0.022328261 0.0841041 -0.17840455 0.10218899 -0.10430696 0.01263396 -0.063074164 -0.08068626 -0.08690173 -0.117064506 -0.14020562 0.100191675 0.12823881 0.047783867 0.011327631 0.108230196 0.0449704 0.05666709 -0.04635859 0.11585655 0.085062675 -0.010133725 -0.016054725 0.06435807 0.057983458 0.1662126 -0.1401176 0.03835713 -0.124367096 -0.025713837 0.049917057 -0.03486573 0.19207679 0.013834722 0.12092178 -0.037713457 0.06920468 0.02098541 0.12816226 -0.03312041 0.008627903 0.010279653 0.06940059 -0.11756816 -0.076772995 -0.061450806 0.085006975 -0.10028046 -0.054077804 -0.04336415 -0.034488957 0.09350591 0.072809406 0.050577763 -0.045934632 -0.049180046 0.063244365 -0.12926377 -0.017668918 -0.011094322 0.012631424 -0.1328643 0.12350787 0.07988706 -0.0739988 0.006727669 -0.036335494 -0.07159528 0.12703638 0.06335538 -0.023112683 0.12184643 0.053053584 -0.059756197 0.058328602 0.02849358 0.14276755 0.030875068 0.0372106 0.15585208 -0.1800324 -0.010622328 -0.04691161 0.16375498 -0.004660627 -0.118819475 -0.05626502 -0.055519614 0.06444184 0.02119895 -0.009954879 0.023750342 -0.08246188 0.0339044 0.054100014 -0.06022897 -0.051999737 -0.06850945 -0.0022578607 -0.114731506 -0.08647937 0.0021687837 -0.025596859 0.012611685 0.015418447 0.061153762 0.02780142 0.098317966 0.052940793 -0.088698395 16 | 34 -0.03653256 -0.092074156 0.031306483 -0.08093728 0.036695503 0.1627509 0.061735608 -0.10763594 -0.0954292 0.0013925084 -0.074387655 0.010775321 -0.114564754 -0.046638265 0.11246852 0.029867165 0.024667272 -0.09654262 0.052159004 0.018307101 0.074846126 3.701538E-4 -0.00622967 0.01128017 -0.11591834 0.10891056 0.07626241 0.13924618 0.042513154 0.026069075 0.007318024 -0.088955194 -0.097553015 -0.040649842 0.042717814 0.033021938 0.1315891 0.009055623 0.07272016 -0.0076874327 0.112590715 0.016981468 0.06236927 -0.14939715 0.021166611 0.082763605 -0.015810382 -0.06537142 -0.06085272 -0.08693795 0.027757145 0.0078990515 0.028841302 -0.023160908 -0.16265762 -0.16185662 -0.08701093 0.112529725 -0.02008837 -0.0808137 -0.11796748 0.12327517 0.0012996746 0.027677545 -0.103214465 0.059913367 -0.023594497 0.02201191 0.07846696 -0.021837903 -0.0071862056 0.015316979 -0.067190096 0.05308763 -0.034717057 0.013630758 -0.026894324 -0.084633864 0.014318737 -0.07072006 -0.14131415 -0.0055122967 0.08349038 0.006051535 0.08580291 -0.14178877 -0.10702435 -0.009207674 -0.00587199 0.10193774 0.016018093 -0.040125377 -0.06338002 -0.050663695 -0.03288565 -0.15263705 0.036565244 -7.6081866E-4 0.049630128 -0.041202534 0.10072717 0.004322953 0.0040444047 0.0769819 0.061942738 0.07352827 -0.058416955 -0.070574075 0.003400498 -0.13944358 -0.028715566 0.05734107 -0.044339094 -0.069121085 0.067210965 0.13630234 -0.007824334 -0.067668445 0.045199852 0.0038127794 0.063382134 -0.0034103307 0.07330414 0.019776003 -0.0015660072 0.052651495 0.073591374 0.12574556 17 | 12 0.26636052 -0.18304625 -0.07245026 -0.027564865 0.18398495 0.08045351 0.13675036 0.16548267 -0.05355983 0.087764144 -0.05476184 0.0361746 0.0020501725 0.10399107 -0.09805866 0.015074482 -0.118558146 -0.019216117 0.101177335 0.17716981 -0.101265304 0.17165716 -0.04158134 0.10898498 -0.053144515 0.05526177 -0.033536866 -0.13006544 -0.12195247 -0.023511657 0.051474195 0.010697735 -0.024389159 0.09861902 0.111843206 0.13905242 -0.037301704 0.055117693 0.030522788 0.008470418 -2.28372E-4 0.03374155 -0.02394781 -0.02800669 -7.3858903E-4 0.035348922 -0.06282645 0.035013225 -0.048090305 0.08708734 0.19695185 0.012296378 -0.03372015 -0.041895367 0.02965887 -0.018041665 0.16849479 0.07391487 0.061782062 -0.18356532 0.12877868 -0.07986088 -0.054388084 -0.019101957 0.077718765 -0.04301743 -0.1954452 0.05911631 0.060121354 0.02383969 0.020486651 0.08397071 -0.06664209 -0.015450752 0.114812195 -0.06165368 0.012329189 -0.04022093 0.023587156 -0.08689662 0.17870495 -0.025474235 -0.10442177 -0.072015144 0.07899797 0.041749828 -0.026540069 0.013499901 -4.039554E-4 0.010545122 -0.09150355 -0.11816153 0.2182036 0.13345738 0.053294376 -3.5801797E-5 0.026202848 0.1513983 -0.09541217 -0.0545031 -0.11216132 0.16198193 -0.06395583 0.08041681 -0.19542018 0.027644327 0.1384812 0.02179823 -0.030905103 0.034882054 -0.018788064 0.06744401 0.06416479 -0.025449343 0.042861708 -0.03328274 0.057905275 -0.14857145 -0.16455701 0.058960266 -0.028251283 -0.053918935 -0.03270889 0.16988806 0.044796333 0.09955951 -0.008955221 0.039840557 18 | 13 0.2216544 -0.17125036 0.09201414 -0.07977124 0.19459417 0.12690705 0.16946018 0.17620838 -0.03967693 0.15711358 -0.030205205 0.116696 0.06453038 0.026314491 -0.09616216 0.0017520528 -0.096757144 0.014899757 0.20032595 0.17937969 0.02935532 0.14319053 -0.028244974 0.046460394 -0.03438225 0.008440967 0.041816477 -0.14935839 -0.039667066 -0.02914929 0.11968434 0.0188353 -0.018379612 0.026917046 0.051127624 0.16276631 0.04946769 0.01637526 -0.007443236 -0.079137065 0.046086174 -0.028071688 0.084835805 -0.10793847 0.0758354 -0.022509163 0.030208498 0.030395644 -0.010505409 0.07925452 0.09256232 -9.967978E-4 -0.048457235 -0.096681684 0.030234968 -0.16084425 0.11315286 0.073131144 0.022917124 -0.0882436 0.14717662 0.026873434 -0.06136605 -0.023905523 0.1300896 0.0457576 -0.13661267 0.10636897 0.16721058 -0.08637165 -0.09152707 0.003974193 0.014421131 0.02722039 0.14178137 0.09559604 -0.0026783668 0.0065576974 0.09786926 -0.034033205 0.15908931 -0.049386784 -0.036437906 -0.13817392 0.098454185 0.102672584 -0.107361615 -0.075184815 0.010515665 -0.083869964 -0.051943295 -0.08629088 0.18730503 0.09407671 -0.072601035 0.01714021 -0.06758013 0.14242037 0.069566645 -0.15068795 -0.02577359 0.11435885 -0.06700281 0.07791065 -0.2565265 -0.0075816577 0.12160533 0.07083214 -0.07078402 0.07669457 -0.005677512 0.08953171 -0.030181121 0.014176579 0.11137845 0.08350044 0.028871924 -0.1297093 -0.102044046 0.005834258 -0.028341103 -0.028416047 -0.074645095 0.1945262 0.123751596 -0.014469846 -0.039902546 0.076100275 19 | 14 0.009470174 0.0057734502 0.10672589 0.0032503477 0.080312684 0.094534434 0.014596663 0.039967265 -0.031338748 -0.023242798 0.03184757 0.0520416 -0.011580965 -0.039806746 -0.06467869 0.044125155 0.011406385 0.043259997 0.09899704 -0.009748351 0.0043890635 -0.022734364 0.03787115 -0.046346854 -0.020651948 -0.006927889 0.05435791 -0.06378761 -0.015772173 0.06559949 0.10245389 -0.02110787 -0.044768035 -0.029774329 -0.011532096 -0.053989217 0.07676274 -0.034480557 0.06889629 -0.13168012 0.0033725586 -0.038658276 0.05372586 0.024812438 0.011693405 0.055171728 3.5794376E-4 -0.097016245 -0.07403569 0.0011221796 -0.022304175 0.020952001 -0.010340459 -0.07998611 0.01759387 -0.11102401 0.0063513783 -0.079005755 0.02764062 0.08752779 0.009296798 0.029352808 -0.06489931 -0.09880781 0.15415102 -0.01020126 -0.043978233 -0.0017812789 -0.012612008 -0.017540803 -0.075629994 -0.020608637 0.05693845 -0.046693824 -0.005004258 0.010430428 0.028944053 0.04438932 0.05914401 -0.04120147 0.010030508 -0.008845162 0.09974705 -0.049387738 0.022126745 0.0316448 -0.063115954 0.013263241 0.06636572 0.0016774962 -0.01700859 -0.067278415 0.05177277 0.019543564 -0.03280517 -0.036705524 -0.045494128 -0.020216873 0.057016272 -0.04390165 0.06645298 0.025856016 0.013458654 -0.009861034 -0.08893188 -0.06300476 0.0075751003 -0.053488407 0.06887712 0.04131729 0.016815769 0.043478005 -0.046966434 0.027724866 0.05655993 0.011057591 -0.029847264 -0.03714542 0.032311514 -0.041086048 -0.01608266 -0.11049912 0.0016300781 -7.241128E-4 0.003922007 0.028298503 -0.045614026 0.071529254 20 | 15 -0.031638622 0.04916783 0.16589043 0.0063529243 0.1760791 0.13081005 -0.039982814 0.029822102 -0.11061566 -0.15416934 0.10073998 -0.1613615 -0.1272162 0.12347494 0.05694884 0.039205797 0.094309494 0.011739549 0.070098706 -0.089123316 0.12868051 -0.03940524 0.23715255 0.03446449 -0.09458164 0.19072603 0.11541517 0.10997328 0.03277799 0.019024614 0.060054976 -0.1535575 -0.06706833 -0.110703975 0.13953929 -0.112386465 0.1536716 -0.05566898 0.017685791 -0.029718917 -0.02318752 -0.1419994 -0.066307224 -0.13831529 -0.032005314 0.026329529 -0.09954169 -0.07425937 -0.281504 0.038103305 -0.17913482 0.057877507 -0.1459486 -0.03805848 -0.121867605 1.96998E-4 -0.07205965 -0.09165004 0.06305237 -0.12243945 -0.15475926 0.037304424 -0.03272794 -0.06277777 0.012220612 0.03902435 -0.2248025 0.13727172 -0.013906785 -0.16478209 -0.08420818 0.024921456 0.018803207 -0.010620263 -0.23617296 -0.014902993 -0.020358562 0.042119168 0.08858574 0.0038860042 -0.18489335 -0.13443159 0.16494323 -0.1041126 -0.009447037 0.027189292 -0.27652213 0.0011787598 0.0922485 -0.008182534 -0.16093709 -0.119979456 0.037007768 0.12921439 0.00928569 -0.17024496 -0.01797774 -0.09737567 0.027327633 0.026496438 0.18614708 0.010322878 -0.00476412 0.21847177 0.03022169 0.11555054 -0.10687849 -0.2587971 0.13281691 0.003778172 0.17754336 0.06381544 0.03450488 0.0061254487 0.22208817 0.0927508 0.08332377 -0.017672427 0.060697388 0.12794314 -0.03583486 -0.2230706 -0.0057381624 0.01677847 -0.13223055 0.11410433 -0.17225352 0.21428473 21 | 16 -0.036150802 -0.0023838594 0.023285618 0.0017463702 0.10642111 0.09038737 -0.05366574 -0.045942243 -0.1183795 -0.08844449 0.049789026 -0.14059642 -0.12805378 0.04783033 0.050380103 -0.039080866 0.07449204 -0.05506847 0.0042529213 -0.05539879 0.07928272 -0.062742524 0.1583919 0.035007894 -0.10010812 0.12922134 0.06077126 0.13910948 0.036201842 -0.0036650524 -0.009916257 -0.16475612 -0.02116405 -0.010621845 0.16468212 -0.031923365 0.10312811 -0.0078037763 -0.028425701 0.021544036 0.03415342 -0.11881166 -0.060748454 -0.121600084 -0.06840882 0.01689293 -0.07285612 -0.025613733 -0.13943349 -0.016760033 -0.090850584 0.0048801014 -0.04582455 0.029201483 -0.13085584 0.056830507 -0.016698318 0.01609913 0.037178908 -0.16498792 -0.12319788 0.059998833 -0.022085926 0.017157419 -0.090862885 0.04430705 -0.16973643 0.068042755 -0.037974045 -0.09042281 0.054111745 0.043229755 -0.0028074482 0.06126964 -0.15416221 -0.07815571 -0.022441529 -0.032967407 0.026515007 -0.0025411176 -0.1718279 -0.05167735 0.0842343 -0.017285943 -0.0021990186 -0.05700477 -0.16762257 0.019557135 0.054327797 0.05596139 -0.14939483 -0.07837607 0.05385981 0.056894407 0.040980183 -0.15472654 0.034857098 -0.052480288 -0.068069056 0.04735729 0.09566898 0.04110807 -0.023737315 0.12996571 0.09869823 0.12309698 -0.06553169 -0.14841878 0.088009275 -0.056230973 0.10131956 0.07245732 0.070751525 -0.027505033 0.13486193 0.047700986 0.09008489 -0.04690533 0.0719783 0.17946549 -0.032086562 -0.11238396 -0.014583429 0.053235188 -0.14789827 0.077799395 -0.07621731 0.18595544 22 | 17 0.15180287 -0.13916856 -0.34444153 0.1196004 0.050252825 -0.030699752 0.0106007485 0.11080106 0.1207573 0.100314155 -0.16202748 0.07644759 0.04305925 0.07702029 -0.08895205 -0.047970578 -0.21111858 -0.072989486 -0.0838686 0.20204099 -0.3329531 0.2504477 -0.27270305 0.110584244 -0.0026147945 -0.12243026 -0.2590417 -0.20262861 -0.18789111 -0.04445893 0.053646885 0.12727451 0.09065953 0.17092618 0.066059016 0.2563658 -0.2526524 0.2114761 0.025973473 0.17086308 -0.074086905 0.18910079 0.052190334 0.22482103 -0.16487207 -0.008909999 -0.13610284 0.11120813 0.27636114 0.036084373 0.31220388 -0.0025454808 0.122081876 0.008616153 0.121562086 0.1411451 0.26879188 0.09475135 -0.025833702 -0.05594964 0.25798142 -0.17723265 0.004274278 0.07230819 -0.071375936 -0.038161837 0.002109718 -0.016082132 0.042733744 0.12251636 0.18252644 0.15348127 -0.13940467 -0.061540827 0.23502146 -0.19499151 -0.048586637 -0.109352276 -0.10231883 -0.10544906 0.28648123 0.17938407 -0.28887993 0.0068928436 -0.06349133 -0.020975623 0.2657233 0.061994996 -0.17776829 0.11647148 0.08608513 0.05215441 0.10931438 0.056525465 0.20019682 0.13642186 0.102251254 0.28928 -0.22747052 0.017315293 -0.19854285 0.23748589 -0.031595737 -0.19356827 -0.05546854 -0.016720032 0.09460561 0.14519988 -0.20426194 -0.015531001 -0.19546543 0.0064672832 0.1335004 -0.069600634 -0.16109027 -0.12936692 -0.007953315 -0.14564991 -0.25789252 0.016477972 0.010424812 0.251366 -0.0188517 0.09899721 0.04863569 0.0268086 0.17779441 -0.22194968 23 | 18 0.22224864 -0.19883546 0.10976189 -0.04558409 0.17052576 0.23837975 0.13219702 0.0012427762 -0.17917894 0.12713856 -0.083933756 0.117116734 -0.06171215 0.038819972 -0.10777729 -0.052916244 -0.1227404 -0.007275034 0.26830435 0.12074956 0.016206188 0.056263205 -0.05818672 -0.02541922 -0.10255738 0.041625965 0.08521732 -0.069757506 -0.12850289 -0.032254096 0.15297459 -0.005740253 -0.009083777 -0.014859601 0.14447713 0.09467028 0.15570302 0.048698194 0.011964334 -0.05215051 0.14931522 -0.06639051 0.14435901 -0.20512217 0.026114317 0.0037627572 0.04158061 -0.010480371 -0.034807075 0.015901059 0.043661788 0.023382433 0.012634392 -0.20935401 -0.08935639 -0.22038203 0.07681884 0.09037342 -0.005641705 -0.06737706 0.019457376 0.08661681 -0.10298319 -0.15703925 0.06747971 0.020371102 -0.10799765 0.08880468 0.22634675 -0.023620376 -0.01864467 -0.085936606 -0.006126523 0.001128636 0.101482995 0.02635983 -0.011510161 -0.19375466 0.16767679 -0.14789003 0.12942761 -0.06791244 -0.024875702 -0.09809441 0.08551651 0.019455157 -0.104978494 -0.08902508 -0.016802752 0.07048182 -0.04122786 -0.15081489 0.19661987 0.061645277 -0.06042394 -0.05973976 -0.013237206 0.256706 0.085385144 -0.11551597 0.054940462 0.15929963 -0.14678071 0.0024062076 -0.22727914 0.039148774 0.13627267 0.06676493 -0.060490467 -0.020720929 0.006705503 0.14904875 0.0032021755 -0.094541594 0.15603249 0.08324955 0.10092419 -0.06774967 -0.07658753 -0.07338824 0.022608664 -0.037739217 0.0014449705 0.11857579 0.13093314 0.06765371 -0.07445371 0.09267784 24 | 19 0.061135154 0.024190526 0.10320703 0.06622575 0.17937887 0.10598847 -0.063101634 0.023497408 -0.12916781 -0.061514154 0.08111085 -0.11243379 -0.09951193 0.12751712 -0.047041673 -0.059023194 0.011450777 0.04686098 0.089110866 -0.034785654 0.04242261 -0.043219093 0.16321738 0.0019783997 -0.04434653 0.11505069 0.061755292 0.035721976 -0.042432733 -0.042024035 0.07607157 -0.098002814 0.03980084 -0.066022724 0.19589628 -0.027108293 0.08273923 0.0022482213 -0.052731417 0.010858768 -0.028942306 -0.16563423 -0.03155108 -0.14055905 -0.07433867 -0.030585438 -0.057841532 0.0044447198 -0.14025362 0.093708165 -0.16245696 0.040120006 -0.117641285 -0.08510028 -0.055605624 0.06403018 0.057388764 -0.048097387 0.0398934 -0.08622383 -0.043570798 0.016823519 -0.04652555 -0.09469994 0.007657961 0.03192228 -0.19430088 0.1447204 0.03967601 -0.12533517 -0.004561217 -0.03537471 0.055229634 -0.0056596976 -0.115745805 -0.043984286 -0.018126097 -0.04651834 0.1204127 -0.019484181 -0.03843542 -0.10422373 0.026216522 -0.102942504 -0.07128734 0.09612375 -0.17980574 -0.03015495 0.044007957 -0.0012039159 -0.17086461 -0.0945952 0.15288155 0.12532617 0.014590073 -0.06912265 -0.00849388 0.049061887 0.0021206457 0.040303823 0.114568956 0.08962225 -0.085184395 0.091165744 -0.054764017 0.10376988 -0.01592027 -0.11391158 0.046403524 0.035376333 0.15104705 0.09140518 0.08399828 -0.01927325 0.19911389 0.027273625 0.1324152 -0.0070682936 -0.0049565947 0.11414474 -0.07690956 -0.12411253 -0.052801836 0.049467653 -0.09340981 0.07528228 -0.18219078 0.110013194 25 | 1 -0.07248621 -0.021234794 0.02202946 -0.015151738 0.058341585 0.13968052 -0.036493164 -0.089107715 -0.20201214 -0.053466935 -0.09192623 0.02402264 -0.0842383 -0.093344696 -0.004697614 -0.100056544 0.041805618 0.006667141 0.14696628 -0.008874721 -0.035634547 -0.061175954 0.04391359 -0.054516282 -0.10404887 -0.08621663 0.095539734 0.05044701 -0.059143722 0.22484764 0.088221356 -0.0354646 -0.0619217 0.019378714 -0.051323503 -0.10845412 0.20215125 0.009459609 0.104452886 -0.14595556 0.1618932 -0.067406416 0.07231436 -0.02079567 -0.058979694 0.016014814 -0.070051774 -0.112686574 -0.105190106 -0.13943124 0.09389717 -0.0152628925 0.10463608 -0.0405358 -0.068340555 -0.15144868 0.0410153 0.012288071 0.020491645 -0.006022312 -0.102778085 0.047951296 -0.13199276 -0.13823222 0.09715068 -0.08684761 -0.019007977 -0.11997411 -0.061285265 0.03548963 0.027634982 -0.09317917 -0.014786415 0.0044233496 -0.08174992 -0.021094806 0.0172018 0.024201011 0.06677403 -0.12409649 -0.118259326 -0.008989793 0.16173775 0.07060383 0.050866593 -0.14632949 -0.008756196 0.01387642 0.1114677 0.17585234 0.0014011224 -0.14846987 0.06874757 -0.07123666 0.014428133 -0.08013057 -0.02513229 0.039122876 -0.07554531 -0.015580931 0.088949725 0.076369226 0.032167733 -0.031480912 -0.033202678 -0.031105202 0.009627668 -0.07438377 0.11771704 -0.003414737 -0.04480433 0.052675508 -0.026914036 -0.083042435 0.06408962 0.05201783 0.024180535 -0.08128753 0.11886801 -0.030908087 0.034801222 -0.16537209 0.046739712 0.03934109 0.08893966 0.17638324 -0.0028291037 0.09524274 26 | 2 0.07794314 -0.2047732 -0.00644866 -0.032919332 0.13410848 0.25385076 0.08944962 -0.0289081 -0.1655108 0.046380974 -0.14354797 0.13392293 -0.055512637 -0.07939425 -0.019875161 -0.0643372 -0.0879981 -0.07092592 0.20714277 0.08565737 0.023405064 0.048459556 -0.103797905 -0.01832737 -0.16946453 -0.049933907 0.08147784 -0.024774032 -0.07619654 0.09420099 0.13625981 -0.020178305 -0.07864704 0.06785112 0.074075714 0.06301488 0.14396694 0.076804735 0.06686761 -0.11027193 0.19244285 -0.049456127 0.14096579 -0.066721134 -0.031650644 0.015225723 -0.014055711 -0.07511693 0.013043154 -0.13504535 0.13156928 -3.894904E-4 0.13940565 -0.11550757 -0.086444244 -0.20406325 0.009641506 0.1206333 -0.027753131 -0.019310405 -0.062187415 0.116473384 -0.10533949 -0.08186912 0.0536221 0.004761582 -0.088947386 -0.036667902 0.08512419 0.038092013 0.0171309 0.0018268124 -0.043611847 0.03490295 0.04244053 -0.03723421 -0.0615724 -0.1023193 0.10514764 -0.18284915 0.01467012 0.003403823 0.051598527 -7.117519E-5 0.089522116 -0.13882506 -0.062181253 -0.019473646 0.008635101 0.15830547 0.009922207 -0.12960652 0.100686796 -0.049806293 -0.00744912 -0.06698246 0.05022353 0.18330027 -0.016120818 -0.10552505 0.09526589 0.1361495 -0.045502275 -0.046943154 -0.10967977 0.007889387 0.050855413 -1.2625568E-4 -0.013535254 -0.016999464 -0.05778921 0.13623425 0.020880288 -0.10628211 0.09548798 0.12860703 0.011670505 -0.14150473 0.024336621 -0.014394111 0.021415394 -0.006161799 0.062766895 0.11293911 0.11529383 0.09199068 0.052528974 0.050179888 27 | 3 -0.03622468 -0.052848402 0.051904265 -0.05282837 0.05304789 0.13999514 0.033100296 -0.058926053 -0.12787178 0.0058981916 -0.02961086 0.12816694 -0.008950633 -0.21185854 -0.036183983 7.477044E-4 0.031049354 0.011466168 0.1332466 -0.014682748 0.05696215 -0.094005905 -0.0035492054 -0.07195217 -0.05888787 -0.09853592 0.11350622 -0.010345372 0.03280949 0.106590696 0.04141547 -0.035830796 -0.06733844 0.054752443 -0.0650221 -0.03825861 0.1360952 -0.055004682 0.06200578 -0.20021339 0.13439852 -0.081006706 0.07855787 0.0050794063 0.042555027 0.05637317 0.061912116 -0.121206954 -0.009566968 -0.10911405 0.04186019 -0.019434689 0.09196815 -0.010918907 -0.042865492 -0.18684551 -4.2601916E-4 0.045922138 -0.008015656 0.06790297 -0.026586011 0.15204555 -0.095099725 -0.048466306 0.11802221 -0.0024961268 0.010413243 -0.15776482 -0.056395315 0.04276973 -0.009806353 -0.040182203 0.06351092 0.045705117 0.02219994 0.020725021 0.007240321 0.037427828 0.014309662 -0.07868645 -0.05266472 0.048312515 0.17093375 0.0513195 0.09047747 -0.09954809 -0.0617373 0.017411286 0.122488745 0.089562126 -0.022879172 -0.09296976 0.08463649 -0.119759284 -0.092162095 -0.042882472 -0.014212305 -0.04808444 0.03547622 -0.06267999 0.059855357 0.00310109 0.05260973 -0.05578547 -0.06048107 -0.06591062 0.030046768 -0.010337952 0.079662144 0.008009062 -0.045532487 0.06477293 -0.04939162 -0.0024914742 0.039150182 0.06213137 -0.075592995 -0.09335992 0.14224452 -0.0036183887 -0.0076109995 -0.07727406 0.03395332 0.04961256 0.038689494 0.025911655 0.029427227 0.11007095 28 | 4 0.05516301 -0.040758047 0.13607025 -0.05764336 0.11199366 0.12003728 0.03573005 -0.017623797 -0.16363408 0.05678867 -0.02433006 0.10499335 -0.006822736 -0.10723319 -0.08391983 -0.04713075 -0.0044983234 0.04485644 0.18119812 0.07800611 0.096162654 -0.059695054 0.021938432 -0.08910221 -0.046021763 -0.03681658 0.14482196 -0.02801712 -0.016587889 0.11354888 0.14569327 -0.027473304 -0.022476498 0.035523675 0.029069386 -0.011188703 0.13456456 0.0016934865 0.027852897 -0.20782194 0.061478082 -0.09268151 0.090431914 -0.036436956 0.009970049 0.02650632 0.04164747 -0.085676834 -0.099989384 -0.01607713 0.0112988595 0.015963674 0.045166757 -0.08236967 0.07295075 -0.1622336 0.023691962 -0.06721265 0.025510708 0.06349788 -0.03114291 0.029540312 -0.13241173 -0.13009544 0.24299748 -0.0520121 -0.0556666 0.0018897584 -0.0024028786 0.00793247 -0.09729215 -0.13343865 0.09844089 0.039561246 0.023546707 0.06926987 0.055359542 0.042621527 0.17348953 -0.08796665 0.042724386 -0.055102896 0.10774134 -0.030217934 0.039042052 -0.0032916134 -0.06430812 -0.040079575 0.096103325 -0.022789098 -0.028011749 -0.11038682 0.07107138 0.0056553083 -0.06704007 0.009942165 -0.07476346 0.02441465 0.016542336 -0.11695366 0.075789705 0.064034626 -0.06547768 -0.040316314 -0.17830202 -0.07646662 0.119471535 0.028097909 0.08930397 0.0962581 0.009723059 0.06965662 -0.09065112 0.0135996565 0.06942561 0.03954294 0.042516816 -0.06331249 0.042231835 -0.022109516 -0.12322408 -0.15363786 0.0046367757 0.053285588 0.05480813 0.03881904 -0.08505025 0.05737067 29 | 5 0.17507696 -0.049109653 -0.06944049 0.013443012 0.0907545 -0.02970631 0.05490514 0.08672183 -0.032056324 0.0787892 -0.07926755 0.03588383 0.013089915 0.11981907 -0.06521502 0.009979292 -0.111448064 0.031992182 0.023547268 0.17469364 -0.123126805 0.15305711 -0.082012445 0.05228466 0.0015836974 0.04417592 -0.057595465 -0.11146822 -0.14196502 -0.0033360778 0.088211566 0.097757585 0.046304177 0.05574032 0.063357756 0.09745144 -0.09961686 0.10576199 0.026878454 0.06296812 -0.1028227 0.095484704 -0.007341872 0.047637224 -0.057807036 0.01855344 -0.080502145 0.07364804 -0.0394217 0.11537225 0.15065879 0.050345406 -0.024380388 -0.04532515 0.122767106 0.03133584 0.13976194 -0.0643831 0.029408118 -0.060272407 0.11022837 -0.20246077 -0.035419416 -0.06660137 0.10492657 -0.10750342 -0.0493204 0.08236468 0.059965327 0.06315119 -0.030552536 -0.02887464 -0.045036376 -0.055684198 0.102794535 -0.021905765 0.033579346 -0.017624604 0.06541171 -0.07801037 0.22471188 -0.028608492 -0.14403425 -0.051707167 -0.033213273 0.06214152 0.09342461 -0.004324093 -0.056808013 -0.021215845 0.03263083 -0.058363326 0.058583446 0.1268655 0.09355923 0.09817483 -0.0029892833 0.15518117 -0.109743156 -0.031989843 -0.09191717 0.1327103 -0.07768306 -0.0027452647 -0.16521926 -0.008501881 0.14315994 0.06984347 -0.03715878 0.066881664 -0.04322131 -0.019908832 0.0011307054 -0.023625003 -0.040988162 -0.083794475 0.07411149 -0.037459914 -0.20838407 -0.042921066 -0.0833241 -0.011579472 -8.554749E-4 0.056759212 0.06690518 0.09447547 -0.028037576 -0.12145719 30 | 6 0.051212825 -0.023487901 -0.13127449 0.061668217 0.13408041 0.08208532 -0.043687128 -0.051479295 -0.12408622 -0.0020505888 -0.1403897 0.03914679 -0.06431522 4.0008518E-4 0.016977152 0.009175205 -0.07398035 0.034732927 0.010020998 0.14056829 -0.14739975 0.08675818 -0.09908959 0.02984167 -0.048071716 0.019728435 -0.0349825 -0.031674724 -0.1272848 0.04922199 0.08702369 0.07326197 0.036997247 0.054370522 0.06919528 0.10503971 -0.0778582 0.14324021 0.081577115 0.033072002 -0.092150316 0.07095471 0.020851854 0.05421071 -0.11803599 0.079770684 -0.13194697 0.014985895 -0.01705686 0.039651774 0.14811663 0.057052605 0.031149983 -0.027012475 0.074591234 0.018993484 0.15605314 -0.029044293 0.0071596424 -0.0015792826 0.059432533 -0.11104004 -0.052054584 -0.05104255 0.043618534 -0.08689696 -0.012429315 -0.012220699 0.0032257382 0.100310214 0.011550466 -0.04001653 -0.058186766 -0.041972425 0.05970696 -0.08331745 -0.015205887 -0.02749791 0.037047263 -0.17953868 0.13413796 0.05424673 -0.04949715 0.015456956 -0.080367446 -0.034453657 0.06427462 0.041290138 -0.033818446 0.12358419 0.022854658 -0.058175158 0.06421186 0.021563075 0.090957366 0.0681193 0.043792617 0.12528329 -0.13385537 0.013529994 0.0147694005 0.15597598 -0.01425957 -0.073508956 -0.090133406 -0.0046942886 0.07735537 -0.013439685 -0.02173798 0.034828585 -0.11145331 -0.0010953636 0.01014418 -0.070106246 -0.01621178 -0.02522673 0.025816372 -0.1034183 -0.14524102 -0.006416381 -0.12545596 5.465885E-5 0.051259656 0.019133188 0.026070658 0.16084385 0.047660217 -0.14558823 31 | 7 0.060373157 -0.08569849 -0.14555304 0.09063924 0.18656267 0.14332117 -0.03983608 0.028006837 -0.050500397 -0.05692306 -0.07930485 -0.044797692 -0.13088585 0.08165056 -0.022704298 -0.0032495689 -0.069844745 -0.07545785 -0.005523182 0.10121144 -0.16797891 0.11235711 -0.03635069 0.07334448 -0.11831675 0.08244897 -0.08215078 -0.025394317 -0.13390972 0.04050826 0.115984015 -0.060671404 -0.016049296 0.06965047 0.18345235 0.10820416 -0.030291276 0.14017561 0.096311495 0.06361204 -0.043573152 0.054702345 0.03167928 0.061453044 -0.18383688 0.089478515 -0.19355848 -0.040241595 -0.027349908 0.011902865 0.13888882 0.048995625 0.03537206 -0.049041767 -0.021660274 0.058748495 0.14976868 0.007809479 0.042916425 -0.10865237 0.038187087 -0.085564 -0.048271216 -0.017447012 -0.03135983 -0.012619567 -0.16049282 0.0560067 -0.011023135 0.017704714 0.097743474 0.11540488 -0.087094456 -0.04871072 0.010238392 -0.19947416 -0.032464374 -0.081938766 0.0064245877 -0.14680624 0.03673603 0.06119316 -0.05452967 -0.038158 -0.04631555 -0.078794435 0.0012827882 0.08046586 -0.045353565 0.16644487 -0.051575407 -0.07256586 0.10031879 0.10330246 0.16307768 -0.08496992 0.081711695 0.14431709 -0.17987889 0.026979735 0.015462212 0.21419503 -0.035533406 -0.022926513 0.0046643214 0.05922799 -0.004969641 -0.095694914 -0.014509716 -0.060520627 -0.054278456 0.08714872 0.09233709 -0.07554899 0.03370872 -0.027290622 0.05048533 -0.16500963 -0.11651717 0.10409478 -0.04671709 -7.023993E-5 0.026419872 0.070528276 -0.09341853 0.1514202 0.04943157 0.02336931 32 | 8 0.044713367 -0.03497532 0.27609393 -0.052319445 0.12237357 0.16218005 0.06335016 0.09674113 -0.06878626 0.028531902 0.09860221 0.035377756 0.0032634907 -0.02165641 -0.111334056 -0.051956665 0.043323744 0.03930432 0.23747604 -0.057018906 0.13123353 -0.078240745 0.1545195 -0.07487952 -0.034998294 -0.010642982 0.13887973 -0.056306727 0.032343 0.051659077 0.13622889 -0.10537771 -0.0545897 -0.09824615 0.023238733 -0.080438 0.23931365 -0.10046058 -0.00224755 -0.20609833 0.12709175 -0.1836561 0.09873971 -0.14588101 0.08032739 -0.032624505 0.071582176 -0.100895055 -0.09382009 -0.013487095 -0.13779521 -0.025598494 -0.04284027 -0.14666396 -0.05958234 -0.19759616 -0.03293776 -0.014199945 0.034187056 0.035535827 -0.023334503 0.1605212 -0.09539641 -0.12980057 0.16410291 0.06931605 -0.13983394 0.08259184 0.08451233 -0.16154958 -0.098308675 -0.055759843 0.11290927 0.019316975 -0.04806822 0.096798375 0.024188226 0.035578877 0.14131396 0.03486932 -0.07644557 -0.09666243 0.1522444 -0.12753306 0.08211404 0.08774034 -0.20268188 -0.07788813 0.111334704 -0.063808925 -0.09651001 -0.10166536 0.13414897 0.045849796 -0.12703347 -0.1216064 -0.12105159 -0.0029067637 0.17217565 -0.10239616 0.11898583 0.014801591 -0.034353808 0.07409265 -0.13450406 -0.03460143 -0.0048417444 -0.04498099 0.075867034 0.04927213 0.11997049 0.12668721 -0.04506013 0.030263813 0.202673 0.10510387 0.023673259 -0.031191627 0.13640791 -0.008411058 0.049400017 -0.17995107 -0.08416068 0.08896332 0.044606414 -0.041327696 -0.14510854 0.23879853 33 | 9 -0.005212816 -0.05359284 0.11297921 -0.044596422 0.049682047 0.11650387 0.04900906 0.0405005 -0.06581046 -0.05318306 0.042243503 -0.00881735 -0.027953375 -0.013708007 -0.009804972 -0.016351538 0.043835167 -0.013106062 0.14226678 -0.06851227 0.09816847 -0.042821147 0.116434775 -0.009889214 -0.06341597 -0.016321091 0.111850776 0.034710363 0.03779499 0.10561193 0.025046365 -0.08357809 -0.11903131 -0.03861969 -0.025263019 -0.12292363 0.17313038 -0.09962294 0.041311514 -0.13397123 0.15904488 -0.11083244 0.008925581 -0.0897467 0.057565194 -0.027066607 0.026173599 -0.10567472 -0.11833486 -0.08968358 -0.031232081 -0.022898054 6.5325544E-4 -0.031115603 -0.106215805 -0.13950144 -0.09184323 0.044937156 0.018664647 -0.034974556 -0.10761409 0.13342124 -0.051298346 -0.0671748 0.05481436 0.010647324 -0.12654257 -0.03244854 -0.014904945 -0.06949156 -0.048710648 0.023304135 0.02083941 0.0129643995 -0.10772175 0.02430052 -0.011636925 0.04883223 0.055319678 -0.0015784915 -0.15165469 -0.0959133 0.15030974 -0.01536746 0.099067025 -0.040094603 -0.15517728 -0.008504329 0.11686002 0.019867204 -0.073955774 -0.09994389 0.0604899 -0.029313432 -0.06730717 -0.11320126 -0.0156609 -0.04199228 0.067159146 -0.030246986 0.08554846 -0.037637208 0.026461232 0.095399894 -0.022262111 0.012007426 -0.062751964 -0.113394246 0.09489105 0.001809431 0.09284046 0.07417505 0.008500977 0.0020965948 0.13153355 0.10420447 -0.015408659 -0.036230687 0.1379387 0.023715649 0.09507743 -0.134283 0.01150387 0.041928843 0.03971726 0.046253722 -0.05342882 0.17570178 34 | 20 0.04151019 -0.05116444 0.022490272 -0.019586155 0.09204956 0.12103163 0.016890123 -0.07208123 -0.1287832 0.0046484326 -0.04474158 0.0023639228 -0.09950353 -0.01003997 0.013603689 0.0075176945 -0.008111376 -0.006808907 0.07126941 0.059981134 0.0014375042 -0.00878236 -5.464153E-4 -0.008252382 -0.06962736 0.08533082 0.059198156 0.05827944 -0.0401642 0.022426676 0.04762277 -0.043954257 -0.026222497 -0.0058310446 0.08921179 0.031021178 0.07360291 0.03893261 0.043957658 -0.024872791 0.034145832 -0.011750743 0.02423334 -0.09851905 -0.020487063 0.07103058 -0.02572443 -0.03871164 -0.08381899 0.0013432744 0.025424695 0.028506773 -0.009193884 -0.054807693 -0.04721612 -0.084387496 0.027803479 0.021966036 0.01939512 -0.04333052 -0.044656273 0.024219617 -0.044535875 -0.0585952 0.018609751 -0.007540146 -0.052710578 0.03362786 0.042374298 0.019311234 -0.010924668 -0.04818935 -0.017541502 0.0063270004 0.004708606 -0.020807073 0.02359425 -0.07422043 0.06838549 -0.09697608 -0.0063671474 -0.020038988 0.039371558 -0.009618758 0.019186424 -0.041656304 -0.061024934 -0.0050662467 0.012314601 0.07103562 -0.04097061 -0.08118887 0.050957523 0.016536469 -0.007254811 -0.06306093 0.021179724 0.04609436 -7.069764E-4 -0.018073386 0.06040305 0.07052336 -0.04978633 0.023564853 -0.050457735 0.037180554 0.03740268 -0.031979647 0.027774688 -0.03936629 -0.016899465 0.052192207 -0.018592723 -0.043787245 0.05470228 0.031428903 0.050972708 -0.048890177 -0.02695163 7.48382E-5 -0.041524317 -0.06427929 0.041083634 0.014211487 -0.009868171 0.09635462 -0.007475949 0.059973266 35 | 21 -0.0020232217 0.04302368 0.19965662 0.023443544 0.173959 0.15501517 -0.05777205 -0.028578406 -0.13892487 -0.06335526 0.11553417 -0.12030239 -0.13241126 0.07479139 -0.0025169824 -0.04087119 0.069698706 0.028706728 0.10545689 -0.069805786 0.14203516 -0.108613774 0.20879072 -0.035925716 -0.055162583 0.17150491 0.12735076 0.10753648 0.033508107 -0.048735008 0.073163696 -0.16949867 0.010019271 -0.12209924 0.20573726 -0.043576986 0.15916617 -0.03728708 -0.048742406 -0.03122906 -0.002013534 -0.19571297 0.0025461514 -0.22203456 -0.030183496 -0.0045614745 -0.012884499 -0.039544005 -0.16819254 0.07427586 -0.24783877 0.035875246 -0.13584994 -0.104111284 -0.10492221 -0.009871518 -0.019185256 -0.03400531 0.034677684 -0.066098705 -0.1030017 0.1077003 -0.037090294 -0.073236786 -0.017028721 0.10293229 -0.18171135 0.1811844 0.06758532 -0.17872718 -0.04369805 -0.060567867 0.091304615 0.035281967 -0.1463039 0.01016423 -0.014547759 -0.054335896 0.13987073 0.008918651 -0.1387466 -0.11911164 0.09953852 -0.11670717 -0.046981823 0.084115505 -0.26388508 -0.059481345 0.05695656 -0.02162998 -0.1752781 -0.076017864 0.09807729 0.101283856 -0.05541869 -0.13933602 -0.03322522 -0.02001418 0.09396541 0.011107877 0.18237197 0.037100863 -0.08499879 0.12394953 -0.012045313 0.115681924 -0.06372113 -0.14005646 0.06615614 -0.011259477 0.16963845 0.111512624 0.029027427 -0.008356806 0.24246256 0.090233415 0.12385082 0.006768905 0.06786283 0.117098816 -0.07272069 -0.14244685 -0.047990963 0.028963782 -0.12931451 0.027171016 -0.18933007 0.1952464 36 | --------------------------------------------------------------------------------