Skip to content

Instantly share code, notes, and snippets.

@burke
Created April 17, 2023 21:21
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save burke/dd08c4db641a304e2d82610e1285e44f to your computer and use it in GitHub Desktop.
Save burke/dd08c4db641a304e2d82610e1285e44f to your computer and use it in GitHub Desktop.
// this is not fast code, it's just a demo
// https://www.mycplus.com/source-code/c-source-code/base64-encode-decode/
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
static char encoding_table[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', '0', '1', '2', '3',
'4', '5', '6', '7', '8', '9', '+', '/'};
static char *decoding_table = NULL;
static int mod_table[] = {0, 2, 1};
void build_decoding_table() {
decoding_table = malloc(256);
for (int i = 0; i < 64; i++)
decoding_table[(unsigned char) encoding_table[i]] = i;
}
void base64_cleanup() {
free(decoding_table);
}
char *base64_encode(const unsigned char *data,
size_t input_length,
size_t *output_length) {
*output_length = 4 * ((input_length + 2) / 3) + 1;
char *encoded_data = malloc(*output_length);
if (encoded_data == NULL) return NULL;
for (int i = 0, j = 0; i < input_length;) {
uint32_t octet_a = i < input_length ? (unsigned char)data[i++] : 0;
uint32_t octet_b = i < input_length ? (unsigned char)data[i++] : 0;
uint32_t octet_c = i < input_length ? (unsigned char)data[i++] : 0;
uint32_t triple = (octet_a << 0x10) + (octet_b << 0x08) + octet_c;
encoded_data[j++] = encoding_table[(triple >> 3 * 6) & 0x3F];
encoded_data[j++] = encoding_table[(triple >> 2 * 6) & 0x3F];
encoded_data[j++] = encoding_table[(triple >> 1 * 6) & 0x3F];
encoded_data[j++] = encoding_table[(triple >> 0 * 6) & 0x3F];
}
for (int i = 0; i < mod_table[input_length % 3]; i++)
encoded_data[*output_length - 2 - i] = '=';
encoded_data[*output_length - 1] = 0;
return encoded_data;
}
unsigned char *base64_decode(const char *data,
size_t input_length,
size_t *output_length) {
if (decoding_table == NULL) build_decoding_table();
if (input_length % 4 != 0) return NULL;
*output_length = input_length / 4 * 3;
if (data[input_length - 1] == '=') (*output_length)--;
if (data[input_length - 2] == '=') (*output_length)--;
unsigned char *decoded_data = malloc(*output_length);
if (decoded_data == NULL) return NULL;
for (int i = 0, j = 0; i < input_length;) {
uint32_t sextet_a = data[i] == '=' ? 0 & i++ : decoding_table[data[i++]];
uint32_t sextet_b = data[i] == '=' ? 0 & i++ : decoding_table[data[i++]];
uint32_t sextet_c = data[i] == '=' ? 0 & i++ : decoding_table[data[i++]];
uint32_t sextet_d = data[i] == '=' ? 0 & i++ : decoding_table[data[i++]];
uint32_t triple = (sextet_a << 3 * 6)
+ (sextet_b << 2 * 6)
+ (sextet_c << 1 * 6)
+ (sextet_d << 0 * 6);
if (j < *output_length) decoded_data[j++] = (triple >> 2 * 8) & 0xFF;
if (j < *output_length) decoded_data[j++] = (triple >> 1 * 8) & 0xFF;
if (j < *output_length) decoded_data[j++] = (triple >> 0 * 8) & 0xFF;
}
return decoded_data;
}
// most of this code is from GGML
#include <stdint.h>
#include <stdio.h>
#include <math.h>
#include <assert.h>
#include <arm_neon.h>
#include <string.h>
char *base64_encode(const unsigned char *data,
size_t input_length,
size_t *output_length);
#undef MAX
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define QK 32
// blocks of QK elements
// represented with a single float (delta) and QK/2 8-bit ints (i.e QK 4-bit signed integer factors)
typedef struct {
float d; // delta
uint8_t qs[QK / 2]; // nibbles / quants
} block_q4_0;
static_assert(sizeof(block_q4_0) == sizeof(float) + QK / 2, "wrong q4_0 block size/padding");
static void quantize_row_q4_0(const float * restrict x, void * restrict vy, int k);
static void ggml_vec_dot_q4_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy);
float bananas[1536] = {-0.02246837317943573, -0.02779618836939335, 0.01125326007604599, -0.014661027118563652, -0.004558524116873741, -0.006491287611424923, -0.02255738340318203, -0.011939899995923042, -0.0006035912083461881, -0.018831728026270866, 0.0010911530116572976, 0.014533871784806252, -0.004552166443318129, -0.003906852100044489, 0.0002827222633641213, 0.023676350712776184, 0.032704390585422516, -0.01113246288150549, 0.01134862657636404, -0.024184973910450935, -0.009002608247101307, -0.01972181536257267, 0.01733129285275936, -0.017890777438879013, -0.0016482529463246465, -0.005458149127662182, -0.0007561777601949871, -0.02517678588628769, 0.009148837067186832, -0.006456319708377123, 0.03143283724784851, -0.018145088106393814, -0.013554774224758148, -0.023663636296987534, -0.01706426590681076, -0.015195080079138279, -0.0065008243545889854, -0.008754654787480831, 0.017674611881375313, -0.0012636076426133513, -0.0048096561804413795, 0.012206926941871643, 0.0035985002759844065, -0.017674611881375313, -0.023180445656180382, 0.024464715272188187, -0.0029023238457739353, -0.026168597862124443, -0.03361991047859192, 0.0066375164315104485, 0.03367077186703682, 0.016237756237387657, -0.023600058630108833, 0.0012834756635129452, -0.0029643122106790543, 0.0036080367863178253, -0.006112999748438597, 0.010286878794431686, 0.009835476987063885, -0.006885469425469637, -0.007572108879685402, 0.015131502412259579, -0.018869873136281967, 0.02853369154036045, -0.010636555962264538, -0.008258748799562454, -0.005334172397851944, -0.018742717802524567, 0.00282285176217556, 0.008824590593576431, 0.012092486955225468, 0.01987440139055252, -0.005489937961101532, -0.003728834679350257, 0.010159723460674286, -0.00023484027769882232, -0.010356814600527287, 0.0022013792768120766, -0.02017957530915737, -0.0011849302100017667, 0.0276944637298584, -0.03087335079908371, -0.020268583670258522, 0.0059476979076862335, 0.020904362201690674, 0.007877281866967678, -0.012232357636094093, 0.010636555962264538, -0.01558926235884428, -0.027745326980948448, -0.00984183419495821, 0.018640993162989616, 0.026219461113214493, 0.01725499890744686, -0.014788182452321053, 0.03115309402346611, 0.010509400628507137, 0.023053288459777832, -0.013249601237475872, -0.024541009217500687, -0.013809085823595524, 0.01739487051963806, -0.012690117582678795, -0.018221380189061165, -0.0071207070723176, -0.0011181735899299383, -0.005683850031346083, -0.006720167119055986, 0.029347484931349754, -0.04145268723368645, -0.016072453930974007, 0.01558926235884428, -0.001150757074356079, -0.03440827503800392, -0.01277276873588562, -0.015385814011096954, -0.0040880488231778145, 0.0016228219028562307, -0.011615653522312641, -0.023320315405726433, 0.009822760708630085, -0.013364041224122047, 0.020853498950600624, -0.00554397888481617, 0.012988932430744171, 0.0020440244115889072, -0.0034872391261160374, -0.011666515842080116, -0.01653021201491356, -0.01116425171494484, 0.029271192848682404, 0.019111469388008118, 0.01944207400083542, 0.008195171132683754, -0.013389472849667072, 0.026244891807436943, -0.010909940116107464, -0.02260824479162693, 0.001703883521258831, -0.013453050516545773, -0.004835087340325117, 0.02521493285894394, -0.02264639176428318, -0.015055209398269653, -0.01705154962837696, 0.030441023409366608, 0.018679140135645866, 0.03690052032470703, -0.003202728694304824, -0.019149616360664368, 0.0020646871998906136, -0.015182364732027054, 0.024553723633289337, -0.02226492576301098, -0.0005626630154438317, 0.006144788581877947, -0.01926405541598797, 0.00054160290164873, -0.0024652269203215837, -0.010426749475300312, 0.0067901029251515865, -0.014762751758098602, 0.003881421172991395, 0.0005038536037318408, 0.013669214211404324, 0.03412853181362152, 0.01722956821322441, 0.0046570696868002415, -0.0006715399213135242, -0.008023510687053204, -0.013008005917072296, 0.03967251256108284, -0.015233227051794529, 0.02297699637711048, 0.009930843487381935, 0.002160053700208664, -0.013567490503191948, 0.012493026442825794, 9.323079575551674e-05, -0.00426288740709424, -0.0279742069542408, 0.00827782228589058, 0.012963501736521721, 0.023816222324967384, 0.005607557017356157, 0.006542149465531111, 0.008919957093894482, -0.012995290569961071, 0.006605727598071098, -0.00846855528652668, 0.01955651305615902, 0.017445731908082962, 0.009536661207675934, -0.0027831157203763723, -0.7039327621459961, -0.0031518666073679924, 0.02014142833650112, 0.0015123555203899741, 0.027160411700606346, 0.05345616489648819, 0.021400267258286476, -0.0002425888233119622, -0.008919957093894482, -0.009339570067822933, 0.003267895895987749, -0.0030406054574996233, 0.012283219955861568, -0.0138472318649292, 0.005178407300263643, -0.02487161196768284, 0.02014142833650112, -0.004323286470025778, -0.0010474432492628694, 0.020713629201054573, -0.018094224855303764, 0.01548753771930933, -0.013364041224122047, 0.0030612682458013296, 0.006510360632091761, 0.021006086841225624, 0.01293171290308237, -0.006087568588554859, 0.0139235258102417, 0.018819011747837067, -0.0279742069542408, 0.009568450041115284, 0.00965110119432211, 0.00769926467910409, 0.051777713000774384, 0.015411244705319405, -0.026270322501659393, 0.02559639886021614, 0.008246033452451229, 0.03929104283452034, -0.014521156437695026, -0.02516406960785389, 0.012651970610022545, -0.0038909579161554575, -0.008087088353931904, 0.0016093115555122495, 0.035552673041820526, -0.012346797622740269, -0.0023348925169557333, -0.026728082448244095, 0.020319446921348572, 0.0026321185287088156, -0.007394091226160526, -0.010026209987699986, -0.008703792467713356, 0.014966200105845928, 0.01139313168823719, -0.01697525754570961, -0.0052229114808142185, 0.017763620242476463, -0.021680010482668877, 0.0022919776383787394, -0.04002854600548744, -0.026804376393556595, -0.005725175607949495, 0.004666606429964304, -0.012194210663437843, 0.029500072821974754, 0.017878061160445213, -0.01684810221195221, 0.029220329597592354, 0.005439075641334057, -0.01141220424324274, -0.015779996290802956, 0.01687353290617466, 0.020828068256378174, 0.018615562468767166, -0.02292613312602043, -0.02567269280552864, -0.010604767128825188, 0.00968289002776146, 0.019136900082230568, -0.01276641059666872, -0.009384075179696083, 0.026066875085234642, -0.007737411186099052, -0.029703520238399506, -0.0010458538308739662, 0.0021219071932137012, -0.004250172059983015, 0.026550065726041794, 0.011653800494968891, 0.0028435145504772663, 0.01279184129089117, -0.011914469301700592, -0.0032742538023740053, -0.035425517708063126, -0.01728042960166931, 2.7691086870618165e-05, 0.0008519417606294155, -0.0019311739597469568, 0.009619312360882759, -0.010808216407895088, 0.0047905826941132545, 0.007400449365377426, 0.009790971875190735, -0.01958194375038147, 0.02866084687411785, 0.03300956264138222, -0.04463157430291176, -0.003770160023123026, -0.011933541856706142, -0.0033378314692527056, -0.010127934627234936, 0.01669551432132721, -0.026829807087779045, 0.004275603219866753, -0.012785484082996845, 0.006802818272262812, -0.023066004738211632, 0.020433885976672173, 0.0039036732632666826, 0.006834607105702162, 0.0016275901580229402, 0.006860038265585899, 0.013008005917072296, -0.0017293145647272468, -0.024439284577965736, -0.01249938365072012, -0.029500072821974754, -0.012111559510231018, 0.009657459333539009, 0.003995860926806927, -0.007311440538614988, 0.028838863596320152, 0.0030882887076586485, 0.01941664330661297, -0.013109730556607246, 0.017890777438879013, -0.026499202474951744, -0.037917766720056534, -0.008252390660345554, -0.004431368783116341, 0.029754383489489555, 0.0006882290472276509, -0.018501123413443565, -0.0013891736743971705, -0.006268765311688185, -0.0006325985305011272, 0.00766747584566474, 0.030313868075609207, -0.013122445903718472, -0.018183235079050064, 0.015818141400814056, 0.018755434080958366, -0.016008876264095306, -0.0017436195630580187, -0.011800029315054417, 0.0006039885338395834, 0.0020138248801231384, 0.014788182452321053, 0.021400267258286476, 0.008792801760137081, -0.01148849818855524, -0.001996341161429882, -0.03122938610613346, -0.014699174091219902, 0.008157024160027504, -0.03328930586576462, -0.027236703783273697, 0.005661597941070795, -0.0138472318649292, 0.005245163571089506, 0.011978046968579292, -0.007489458192139864, 0.023053288459777832, -0.0032774326391518116, -0.012429448775947094, 0.0013852000702172518, 0.00863385759294033, -0.0013859947212040424, -0.008150666952133179, -0.013961671851575375, 0.0031534559093415737, 0.020713629201054573, 0.014851760119199753, 0.003158224280923605, 0.01736943982541561, -0.018234096467494965, 0.009174267761409283, 0.0006830633501522243, -0.000673924048896879, 0.002163232769817114, -0.01650478132069111, 0.0007045208476483822, 0.005915909074246883, 0.0015012294752523303, 0.02812679298222065, 0.018742717802524567, 0.02212505415081978, 0.01691167987883091, -0.001670505153015256, 0.004450441803783178, 0.0011197630083188415, 0.0025526464451104403, -0.029347484931349754, 0.023498333990573883, -0.017789052799344063, 0.03377249836921692, 0.01658107526600361, 0.005365961231291294, -0.021616432815790176, -0.009021681733429432, 0.0017913029296323657, 0.007069844752550125, 0.026626357808709145, 0.0032106759026646614, 0.005028999410569668, 0.008004438132047653, -0.004599849693477154, 0.0032170338090509176, 0.0028753033839166164, 0.014737321063876152, 0.0025876141153275967, -0.011081600561738014, 0.029245762154459953, 0.013681930489838123, 0.04150354862213135, -0.0018962061731144786, -0.018501123413443565, 0.0013589742593467236, -0.004485409706830978, -0.007394091226160526, 0.01983625628054142, 0.00028609985020011663, -0.00863385759294033, 0.027465583756566048, -0.01427956111729145, 0.01148849818855524, 0.007966291159391403, -0.0069299740716814995, 0.01686081662774086, 0.01276641059666872, 0.010757354088127613, 0.0138472318649292, 0.007406807038933039, 0.034815169870853424, 0.012086128816008568, 0.007915428839623928, 0.005111650563776493, 0.0003633865271694958, 0.006777387112379074, -0.03140740469098091, -0.011698304675519466, 0.0008567100740037858, -0.01998884230852127, 0.024808034300804138, 0.018310390412807465, 0.020383024588227272, 0.02222677879035473, 0.027669033035635948, -0.00555033702403307, 0.01256931945681572, -0.005439075641334057, -0.005283310543745756, 0.0002592779928818345, 0.006542149465531111, 0.011183325201272964, 0.0031725293956696987, -0.0023062825202941895, 0.0023555553052574396, -0.0023905232083052397, 0.020662765949964523, -0.021705441176891327, -0.005257879383862019, -0.021591002121567726, 0.007508531212806702, 0.021527422592043877, -0.01270283292979002, -0.009549376554787159, -0.00641817320138216, -0.026295753195881844, -0.008214244619011879, -0.008754654787480831, -0.026829807087779045, -0.03601043298840523, -0.017738189548254013, -0.005232448223978281, 0.006488108541816473, 0.021565569564700127, 0.007298724725842476, 0.02530394122004509, -0.00830961111932993, 0.0023555553052574396, -0.0038400955963879824, 0.020624618977308273, 0.006554865278303623, -0.004313749726861715, 0.002578077372163534, 0.0006206777179613709, -0.007546678185462952, -7.385945355053991e-05, -0.010147007182240486, -0.018844442442059517, 0.014915338717401028, 0.0018660067580640316, -0.0015965960919857025, -0.006138430908322334, 0.019187763333320618, 0.0004188183811493218, -0.013097015209496021, 0.006573938298970461, -0.0006961762555874884, -0.007959933020174503, 0.001535402494482696, 0.003776517929509282, -0.0005865046987310052, -0.01686081662774086, 0.03870612755417824, 0.004339180886745453, -0.018373968079686165, -0.02290070243179798, -0.013961671851575375, 0.015512969344854355, 0.06250963360071182, 0.026041442528367043, -0.003557174699380994, 0.002314229728654027, 0.017954355105757713, -0.006726525258272886, -0.023892516270279884, 0.010878151282668114, 0.011952615343034267, 0.0003514657146297395, -0.0002596753474790603, 0.0059127300046384335, 0.02805049903690815, 0.006106642074882984, -0.001838986179791391, -0.004952705930918455, -0.0276944637298584, -0.015245942398905754, 0.002530394122004509, -0.01670823059976101, -0.0138472318649292, 0.0034141247160732746, 0.01962009072303772, 0.029830677434802055, 0.021743588149547577, 0.02241751179099083, 0.015779996290802956, 0.032831545919179916, 0.03214490786194801, -0.023129582405090332, -0.017738189548254013, -0.010369529947638512, 0.002071044873446226, -0.008322326466441154, -0.00241913297213614, -0.0003061665629502386, 0.011240544728934765, 0.003328294726088643, 0.002228399971500039, -0.001053006388247013, 0.004161163233220577, 0.01102438010275364, 0.007381375879049301, -0.023625489324331284, 0.011819101870059967, -0.016250470653176308, -0.012842703610658646, 0.020586472004652023, -0.01142492052167654, -0.017916208133101463, 0.02239208109676838, -0.009962632320821285, -0.000836842053104192, -0.014444863423705101, -0.002284030430018902, 0.006561222951859236, -0.005493117030709982, -0.007127064745873213, -0.016377625986933708, -0.018017932772636414, -0.003388693556189537, -0.008926315233111382, 0.01953108236193657, 0.00843040831387043, 0.007406807038933039, -0.0031725293956696987, -0.040588028728961945, -0.01724228449165821, -0.01687353290617466, -0.006840965244919062, -0.0035794267896562815, -0.00503535708412528, -0.00773105351254344, 0.00571246026083827, 0.03133111074566841, 0.012690117582678795, 0.003906852100044489, 0.006291017401963472, 0.015881719067692757, 0.032221198081970215, 0.003792412346228957, -0.010140649974346161, -0.008741939440369606, 0.007241504732519388, -0.008837305940687656, 0.00862749945372343, 0.02564726024866104, -0.013249601237475872, -0.008093446493148804, -0.0025081420317292213, 0.026270322501659393, -0.007006267085671425, 0.012047981843352318, -0.008347757160663605, 0.004685679450631142, -0.005585304461419582, 0.010941728949546814, -0.002377807628363371, -0.007127064745873213, -0.020878929644823074, -0.0029627226758748293, -0.02286255545914173, 0.010267805308103561, 0.0019724995363503695, 0.0051879435777664185, 0.014572018757462502, 0.005925445351749659, 0.018081510439515114, -0.030212143436074257, 0.0039322832599282265, 0.027440153062343597, -0.005404108203947544, 0.0060843899846076965, 0.012461237609386444, 0.010611125268042088, 0.03074619546532631, -0.006860038265585899, 0.0029245761688798666, -0.008996250107884407, -0.014088827185332775, 0.011501213535666466, -0.02838110364973545, 0.00968289002776146, 0.013084298931062222, -0.006039885338395834, 0.011342269368469715, 0.03089878335595131, -0.037841472774744034, -0.002762452932074666, -0.008703792467713356, 0.004666606429964304, 0.03280611336231232, 0.0004057054757140577, -0.015042494051158428, -0.02243022806942463, -0.006090747658163309, -0.013402188196778297, 0.006310090888291597, 0.006421351805329323, -0.009078901261091232, -0.014228698797523975, 0.010325025767087936, 0.01279819943010807, -0.020586472004652023, -0.03138197213411331, -0.027643602341413498, 0.0019057427998632193, 0.01721685193479061, 0.0069935517385602, 0.017445731908082962, -0.02562182955443859, 0.009956274181604385, -0.015907151624560356, -0.006046243477612734, -0.00834139995276928, -0.04290226101875305, -0.02807593159377575, 0.00015089780208654702, 0.034993190318346024, -0.0008773728623054922, 0.030542748048901558, 0.007483100052922964, 0.02204876020550728, 0.027084117755293846, -0.005973129067569971, -0.015652840957045555, 0.0070634870789945126, -0.013821801170706749, -0.02850825898349285, 0.011545717716217041, 0.026906101033091545, 0.034967757761478424, 0.013745508156716824, 0.00426606647670269, 0.004450441803783178, 0.027592740952968597, -0.0017452089814469218, -0.016136031597852707, -0.00991812814027071, -0.020446602255105972, 0.0004188183811493218, -0.010763711296021938, -0.009066185913980007, 0.006345058791339397, 0.01257567759603262, -0.011583864688873291, 0.024782603606581688, -0.013198738917708397, 0.005009925924241543, -0.012251431122422218, 0.02246837317943573, -0.015500253066420555, -0.0030962361488491297, -0.0028641773387789726, 0.023879799991846085, -0.03120395541191101, -0.002849872224032879, 0.0010991002200171351, -0.008385904133319855, 0.002824441296979785, 0.018602848052978516, -0.0001512951566837728, -0.016275901347398758, -0.011723735369741917, -0.0019502472132444382, 0.020726343616843224, -0.009759183041751385, -0.0031391510274261236, 0.01979810930788517, -0.009460368193686008, 0.000516966509167105, -0.004796940833330154, -0.020433885976672173, -0.03962164744734764, -0.0015671913279220462, 0.026524633169174194, -0.014126974157989025, 0.029449209570884705, -0.023549195379018784, -0.013198738917708397, -0.0012222820660099387, 0.018297674134373665, 0.030237574130296707, 0.0028164940886199474, 0.01664465293288231, 0.00035782347549684346, 0.0023730392567813396, -0.009619312360882759, 0.00994991697371006, 0.0063387006521224976, -0.006936331745237112, 0.012397659942507744, 0.005022641737014055, -0.0016291796928271651, -0.03870612755417824, 0.006726525258272886, 0.012327724136412144, -0.010922656394541264, -0.01991254836320877, 0.017471162602305412, -0.0005547158070839942, 0.017471162602305412, -0.01138677354902029, -0.02820308692753315, -0.018946167081594467, 0.02208690717816353, -0.0073241558857262135, -0.005210196133702993, -0.02508777752518654, -0.0277707576751709, -0.03918932005763054, 0.025990581139922142, -0.018234096467494965, 0.03318758308887482, -0.012136991135776043, -0.03466258570551872, 0.0014376516919583082, 0.019162330776453018, -0.013402188196778297, 0.007228789385408163, 0.006313269957900047, 0.00036318786442279816, 0.008678361773490906, 0.010102503001689911, -0.01693711057305336, 0.014851760119199753, -0.017916208133101463, 0.010197869502007961, 0.023167729377746582, 0.02838110364973545, -0.0024779425002634525, -0.008939030580222607, -0.00631962763145566, 0.009275992400944233, 0.0005880941171199083, -0.0041039432398974895, -0.013516628183424473, -0.008722865954041481, -0.007877281866967678, -0.0063609532080590725, 0.00826510600745678, 0.032272063195705414, -0.04892943054437637, -0.015512969344854355, -0.005353245884180069, -0.0034967758692801, -0.05053158849477768, -0.011107031255960464, 0.011647442355751991, -0.008837305940687656, -0.021425699815154076, -0.0035953212063759565, 0.004148447886109352, 0.015373097732663155, 0.009466725401580334, -0.007724695838987827, -0.001471824711188674, 0.014661027118563652, -0.012086128816008568, 0.03473887965083122, -0.015538400039076805, 0.0035667114425450563, -0.018183235079050064, -0.015067924745380878, -0.001312085660174489, -0.0284065343439579, 0.01243580598384142, -0.026168597862124443, -0.037739746272563934, -0.009670174680650234, -0.013720076531171799, 0.014839044772088528, 0.015195080079138279, -0.018005216494202614, 0.05167599022388458, 0.007642044685781002, 0.010426749475300312, -0.01993797905743122, -0.01394895650446415, 0.006179756484925747, -0.027236703783273697, -0.00352856470271945, 0.012016193009912968, -0.015233227051794529, -0.013732791878283024, -0.004434547387063503, 0.0060684955678880215, 0.017763620242476463, -0.043919503688812256, -0.027592740952968597, -0.014432147145271301, 0.05274409428238869, -0.010325025767087936, -0.0028609985020011663, 0.0014265255304053426, -0.006936331745237112, -0.011800029315054417, 0.010420392267405987, -0.02218863181769848, -0.020166859030723572, 0.0007764431647956371, 0.02243022806942463, 0.016059737652540207, -0.0007736616535112262, -0.008214244619011879, 0.0007514094468206167, -0.011679231189191341, -0.011513928882777691, -0.015106071718037128, -0.01946750469505787, -0.01946750469505787, 0.026702651754021645, 0.01975996233522892, -0.006980835925787687, 0.004863697104156017, 0.008837305940687656, -0.03603586554527283, 0.00641817320138216, -0.0036239312030375004, -0.002714769681915641, -0.00011374455061741173, -0.0006922026514075696, -0.004046723246574402, 0.0018453439697623253, -0.005009925924241543, 0.001716598984785378, -0.01949293538928032, -0.007286009378731251, 0.04460614547133446, 0.0008884989656507969, 0.01683538593351841, 0.004246992990374565, -0.03155999258160591, -0.016390342265367508, 0.029703520238399506, 0.0008765780949033797, 0.013001648709177971, 0.011304122395813465, 0.00625287089496851, -0.009390432387590408, -0.023396609351038933, 0.023409323766827583, -0.007972649298608303, -0.010973518714308739, 0.029144037514925003, -0.006208366714417934, -0.013402188196778297, -0.015818141400814056, 0.014457578770816326, -0.015945298597216606, -0.008722865954041481, -0.004685679450631142, 0.0036271102726459503, 0.005699744448065758, -0.021794449537992477, -0.0028323885053396225, -0.009384075179696083, -0.04857339337468147, -0.007514888886362314, 0.003193192183971405, -0.0036112158559262753, 0.012353154830634594, -0.00988633930683136, -0.03153456002473831, 0.006739240605384111, -0.007387733552604914, 0.0005721997004002333, -0.015118787065148354, 0.023460187017917633, -0.014483009465038776, -0.01678452454507351, -0.00493999058380723, 0.007648402359336615, -0.023638203740119934, 0.013707361184060574, -0.008862737566232681, -0.01733129285275936, -0.01407611183822155, 0.0282793790102005, 0.010229658335447311, -0.009543019346892834, -0.0008487628656439483, 0.01286177709698677, 0.01945478841662407, 0.008004438132047653, -0.01708969660103321, 0.006669305264949799, -0.005782395601272583, 0.012175137177109718, 0.029067743569612503, -0.03105136938393116, -0.011704661883413792, -0.009250561706721783, 0.011068885214626789, -0.020751774311065674, 0.0009767130250111222, 0.1969384104013443, -0.00968289002776146, 0.032119475305080414, 0.02527851052582264, 0.010681061074137688, 0.026270322501659393, 0.014533871784806252, -0.007171569392085075, 0.0008328684489242733, 0.035374656319618225, 0.0018691855948418379, 0.008856379427015781, -0.026753513142466545, -0.00018864708545152098, -0.00015348063607234508, -0.012677401304244995, -0.04170699790120125, -0.008017153479158878, -0.020586472004652023, -0.029856108129024506, 0.012105202302336693, -0.009492157027125359, -0.02000155672430992, -0.014622881077229977, 0.017738189548254013, -0.0005261058104224503, -0.0042438143864274025, 0.005311920307576656, 0.01682266965508461, 0.018691856414079666, 0.008315968327224255, -0.020243152976036072, -0.0022744936868548393, 0.004091227892786264, -0.02541838213801384, -0.012486668303608894, -0.012721906416118145, -0.007438595872372389, 0.02231578715145588, 0.030008694157004356, -0.010286878794431686, 0.009015323594212532, -0.0013907630927860737, 0.006904542911797762, -0.012162421829998493, 0.01119604054838419, -0.0017674611881375313, -0.026321185752749443, 0.014292276464402676, 0.026028728112578392, -0.02527851052582264, 0.0028896082658320665, 0.014254129491746426, 0.030466454103589058, -0.010369529947638512, 0.003929104655981064, -0.02287527173757553, -0.0010951266158372164, -0.009206056594848633, -0.0025510569103062153, -0.005683850031346083, 0.017560172826051712, 0.00024954264517873526, 0.0278979130089283, -0.012397659942507744, 0.008087088353931904, -0.023244023323059082, -0.0002864972047973424, -0.005957234650850296, -0.024006955325603485, -0.0014726194785907865, -0.016021590679883957, -0.0033537258859723806, 0.005474043544381857, -0.02000155672430992, -0.03756172955036163, 0.021603716537356377, 0.009218772873282433, 0.014826329424977303, 0.0050893984735012054, -0.008773728273808956, -0.00984183419495821, -0.007947217673063278, -0.004037186503410339, -0.04226648434996605, -0.03102593868970871, 0.035705260932445526, -0.008951745927333832, -0.006306911818683147, -0.009625670500099659, 0.011622011661529541, -0.026575496420264244, 0.015843573957681656, 0.004145268816500902, -0.0138472318649292, 0.01963280700147152, -0.01714055985212326, 0.01975996233522892, -0.024502862244844437, -0.009320496581494808, -0.021247681230306625, -0.03155999258160591, 0.01286177709698677, -0.004186594393104315, -0.015627408400177956, 0.0042406353168189526, -0.006751956418156624, 0.024960622191429138, 0.014088827185332775, -0.019022461026906967, -0.020840784534811974, 0.004256529733538628, 0.0054804012179374695, -0.0033696203026920557, 0.02009056694805622, -0.0073050823993980885, -0.00014195717812981457, -0.006605727598071098, 0.016225039958953857, -0.006980835925787687, 0.02498605288565159, -0.01951836608350277, -0.004370969720184803, -0.0007843903731554747, -0.020548326894640923, -0.0027640422340482473, -0.004126195330172777, 0.008850021287798882, 0.006701094098389149, -0.021107809618115425, -0.0033982302993535995, -0.015182364732027054, -0.010503043420612812, -0.006100284401327372, 0.00045934919035062194, 0.018081510439515114, 0.007553035859018564, 0.0012000298593193293, 0.018895305693149567, 0.007464027032256126, -0.0007482305518351495, -0.011780955828726292, 0.0026988752651959658, -0.0011602938175201416, -0.018335821107029915, -0.0017293145647272468, 3.961191396228969e-05, -3.0199427783372812e-05, 0.0009727394790388644, -0.004955885000526905, 0.0063418797217309475, -0.021591002121567726, 0.0065993694588541985, -0.02516406960785389, 0.00213144370354712, -0.007413164712488651, -0.016339479014277458, -0.035120345652103424, 0.005302383564412594, 0.021718157455325127, -0.0283048115670681, -0.008188812993466854, 0.011978046968579292, -0.0004581570974551141, -0.023282168433070183, -0.011793671175837517, -0.16347108781337738, 0.01556383166462183, 0.020166859030723572, -0.021896174177527428, 0.016034306958317757, -0.000897240883205086, 0.018208665773272514, 0.0071842847391963005, 0.005524905864149332, 0.012651970610022545, 0.01743301749229431, 0.0016609685262665153, -0.023752644658088684, -0.02234121784567833, 0.017712758854031563, -0.011081600561738014, 0.007959933020174503, 0.01989983394742012, 0.006437246222048998, 0.010922656394541264, 0.00994355883449316, -0.02019229158759117, 0.001703883521258831, -0.021298544481396675, -0.010204227641224861, 0.00823967531323433, -0.016263186931610107, 0.00696176290512085, -0.007546678185462952, -0.0028578194323927164, -0.020624618977308273, 0.006189293228089809, 0.010916298255324364, -0.0053596035577356815, 0.009167910553514957, 0.0025224469136446714, -0.008786443620920181, -0.01975996233522892, -0.0011865196283906698, 0.00432964414358139, 0.0039672511629760265, 0.026982393115758896, 0.008799159899353981, -0.0006222671363502741, 0.004469515290111303, 0.01656835898756981, 0.024121396243572235, -0.00981004536151886, 0.007546678185462952, -0.013720076531171799, 0.018679140135645866, -0.02807593159377575, 0.012715548276901245, 0.011698304675519466, 0.026028728112578392, 0.00248588970862329, -0.007133422885090113, 0.013186023570597172, -0.011081600561738014, -0.01407611183822155, 0.0025860245805233717, -0.017560172826051712, 0.018793581053614616, -0.005346888210624456, -0.015500253066420555, -0.023574626073241234, -0.01703883521258831, -0.002163232769817114, -0.020433885976672173, 0.006720167119055986, -0.01653021201491356, -0.017547456547617912, 0.027491016313433647, -0.030466454103589058, 0.04178329184651375, 0.017738189548254013, -0.01710241287946701, 0.03107680007815361, -0.018615562468767166, 0.00561073562130332, -0.010083429515361786, 0.02807593159377575, -0.010967160575091839, 0.007165211718529463, -0.00779463117942214, 0.0032901482190936804, -0.007012624759227037, 0.009543019346892834, -0.0009568450041115284, -0.018335821107029915, 0.023701781406998634, -0.02009056694805622, 0.00430103437975049, -0.03471344709396362, 0.006974478252232075, 0.03168714791536331, -0.0007482305518351495, -0.005302383564412594, 0.009492157027125359, -0.0004613359924405813, 0.008614784106612206, -0.003480881452560425, -0.021222250536084175, 0.008087088353931904, 0.04857339337468147, 0.010032568126916885, 0.03466258570551872, 0.0039004944264888763, 0.032577235251665115, 0.0008837305940687656, 0.0008781675714999437, -0.0006445193430408835, 0.013783654198050499, 0.03133111074566841, 0.015233227051794529, -0.001702293986454606, 0.005985844414681196, -0.003757444443181157, 0.03959621861577034, -0.004561703186482191, 0.038146644830703735, 0.004402758553624153, -0.020777206867933273, -0.02211233787238598, -0.010604767128825188, 0.027058687061071396, -0.09668903052806854, -0.03389965370297432, 0.015144217759370804, 0.017954355105757713, -0.013338610529899597, 0.01110067404806614, 0.009015323594212532, 0.00413255300372839, 0.01253753062337637, 0.021565569564700127, -0.027669033035635948, -0.017649181187152863, 0.013758223503828049, -0.00030914676608517766, 0.01997612603008747, 0.006163862068206072, -0.027643602341413498, 0.0005900809192098677, -0.004739720840007067, 0.003773339092731476, 0.00628783879801631, -0.01105616893619299, -0.005760143510997295, -0.012524815276265144, 0.000859888968989253, 0.024464715272188187, -0.014444863423705101, 0.015907151624560356, 0.01293171290308237, 0.015385814011096954, -0.0005360398208722472, -0.00484462408348918, 0.014406716451048851, -0.02260824479162693, -0.007896355353295803, 0.008773728273808956, -0.01529680471867323, -0.0013017542660236359, 0.014432147145271301, -0.0029420601204037666, 0.0015489127254113555, -0.00413573207333684, 0.017776336520910263, -0.03334016725420952, 0.032450079917907715, -0.011889037676155567, -0.02284984104335308, 0.00554715795442462, -0.004491767380386591, -0.027084117755293846, -0.01995069533586502, -0.0005757759208790958, -0.0054962956346571445, 0.00500038918107748, -0.0012580446200445294, -0.02229035645723343, 0.029296623542904854, 0.010388603433966637, 0.001134862657636404, -0.005718817934393883, 0.0059476979076862335, 0.0009544608765281737, -0.003143919399008155, 0.030161280184984207, 0.014902622438967228, 0.014800898730754852, -0.015042494051158428, -0.021921604871749878, 0.015652840957045555, -0.02208690717816353, -0.00568067142739892, 0.0050893984735012054, -0.00695540476590395, 0.018526554107666016, -0.03288240730762482, -0.015169649384915829, -0.026448341086506844, -0.011513928882777691, -0.0002723908983170986, -0.018679140135645866, -0.010744638741016388, -0.014978916384279728, 0.015869004651904106, -0.002220452530309558, 0.0069935517385602, 0.01942935772240162, 0.019111469388008118, 0.008093446493148804, -0.017776336520910263, -0.02799963764846325, 0.012938070110976696, 0.03417939320206642, 0.0037638023495674133, -0.020726343616843224, -0.018310390412807465, 0.03328930586576462, -0.009441294707357883, 0.003312400309368968, 0.026041442528367043, -0.01420326717197895, -0.014813614077866077, -0.00972103700041771, -0.041223809123039246, 0.0282793790102005, 0.003620752366259694, -0.0019693204667419195, 0.03857897222042084, 0.00483826594427228, 0.023676350712776184, 0.012143348343670368, 0.009231488220393658, -0.0019820360466837883, -0.029678089544177055, 0.0017674611881375313, -0.0046920375898480415, -0.0020932971965521574, -0.03641733154654503, -0.014266845770180225, 0.02779618836939335, 0.004049902316182852, 0.027745326980948448, 0.008169739507138729, 0.026855237782001495, 0.018615562468767166, 0.02212505415081978, 0.00014702352927997708, -0.017700042575597763, 0.007578467018902302, -0.013770938850939274, 0.01953108236193657, -0.01973453164100647, -0.011730093508958817, 0.021718157455325127, -0.01922590844333172, -0.00715249590575695, 0.023218590766191483, -0.003512670285999775, 0.008118878118693829, 0.0006798844551667571, 0.0008233317639678717, 0.019251341000199318, 0.006764671765267849, -0.002751326886937022, -0.04259708896279335, 0.0012651970610022545, -0.015945298597216606, -0.010490327142179012, 0.0018358073430135846, -0.01687353290617466, 0.0023523764684796333, 0.023167729377746582, -0.024146826937794685, 0.01276641059666872, 0.03303499519824982, 0.016250470653176308, -0.03313671797513962, -0.005966770928353071, -0.01693711057305336, 0.01678452454507351, -0.0039672511629760265, 0.0012055928818881512, -0.02527851052582264, 0.0032265703193843365, -0.006163862068206072, 0.018437545746564865, -0.000858299492392689, -0.009695605374872684, -0.010127934627234936, -0.008080731146037579, -0.007101633585989475, 0.013898094184696674, -0.043919503688812256, 0.0024731741286814213, -0.013236885890364647, 0.013275032863020897, 0.0015520916786044836, 0.010388603433966637, 0.016110599040985107, -0.016161462292075157, 0.018501123413443565, -0.008894526399672031, 0.019009744748473167, 0.016225039958953857, 0.00981004536151886, -0.045979421585798264, 0.01728042960166931, 0.005807826761156321, 0.007680191192775965, -0.01254388876259327, 0.012918997555971146, -0.001081616384908557, 0.018691856414079666, -0.029067743569612503, 0.015538400039076805, -0.01998884230852127, -0.00820152834057808, -0.0043646120466291904, 0.020942507311701775, -0.012117917649447918, -0.023727213963866234, 0.007197000551968813, -0.005337351467460394, 0.01260110829025507, -0.013859948143362999, -0.006208366714417934, 0.00483826594427228, -0.021387552842497826, -0.0027878840919584036, -0.01546210702508688, -0.020917076617479324, 0.003992682322859764, 0.005254700314253569, 0.011431277729570866, -2.741790194704663e-05, 0.006475393194705248, 0.02554553747177124, -0.010433107614517212, 0.02522764727473259, -0.018513837829232216, -0.019187763333320618, -0.01260110829025507, 0.013681930489838123, 0.034840602427721024, 0.01532223541289568, 0.01427956111729145, -0.008888168260455132, -0.011304122395813465, 0.004218383226543665, -0.0006747188162989914, -0.026372047141194344, 0.004059439059346914, -0.007095275912433863, 0.004285139963030815, -0.012289577163755894, 0.010941728949546814, -0.027058687061071396, -0.020205006003379822, -0.007807346526533365, 0.007451311219483614, 0.024769889190793037, -0.017572887241840363, 0.021362122148275375, -0.009498514235019684, -0.0059095509350299835, 0.006573938298970461, 0.00036517466651275754, 0.012448522262275219, 0.014584734104573727, -0.005702923517674208, -0.01558926235884428, -0.012938070110976696, -0.002991332672536373, 0.005137081723660231, 0.01270919106900692, 0.006573938298970461, -0.01655564457178116, 0.020662765949964523, -0.003604857949540019, 0.004997210577130318, -0.014813614077866077, -0.016225039958953857, 0.007578467018902302, 0.0011094316141679883, 0.038222938776016235, 0.0036143946927040815, -0.010350456461310387, 0.003050142200663686, 0.014826329424977303, -0.007756484672427177, -0.024362990632653236, -0.021743588149547577, 0.007254220545291901, 0.006116178818047047, -0.03387422114610672, -0.005865046754479408, 0.00490502268075943, -0.002498605288565159, 0.0020646871998906136, 0.024413853883743286, 0.007940859533846378, 0.008226959966123104, -0.011800029315054417, 0.006443604361265898, -0.006097105331718922, -0.018043363466858864, 0.020306730642914772, -0.009695605374872684, -0.003954535350203514, -0.013656498864293098, -0.0012834756635129452};
float apples[1536] = {0.007942411117255688, -0.024231309071183205, 0.0014242021134123206, -0.03714849054813385, 0.004825726617127657, 0.02025679126381874, -0.03113372065126896, -0.004829038865864277, 0.011565846391022205, -0.030842255800962448, 0.012075909413397312, 0.02273423969745636, -0.009187759831547737, 0.012254762463271618, -0.01416253112256527, 0.023794110864400864, 0.023820608854293823, -0.00160305539611727, 0.005160248838365078, -0.03232607617974281, -0.030444804579019547, -0.006097572389990091, 0.018613990396261215, -0.013380875810980797, -0.0009447759366594255, 0.0026099332608282566, 0.0019607620779424906, -0.024443283677101135, 0.006697061937302351, -0.010724573396146297, 0.02306544966995716, -0.01677246391773224, -0.021184178069233894, 0.0028334998060017824, -0.006975278258323669, -0.016361763700842857, -0.008200754411518574, -0.020548256114125252, 0.015288644470274448, -0.008121264167129993, 0.014745459891855717, 0.013440493494272232, -0.015010427683591843, -0.0046799941919744015, -0.024271054193377495, 0.011108776554465294, -0.015977559611201286, -0.0068626669235527515, -0.019302906468510628, 0.006253241095691919, 0.014612976461648941, -0.00042105044121854007, -0.0395067036151886, -0.0019243288552388549, -0.00633604358881712, -0.004971459042280912, -0.009141390211880207, 0.007240246050059795, -0.007359481882303953, 0.002215793589130044, -0.007121010683476925, 0.014732211828231812, -0.026761751621961594, 0.012314380146563053, -0.01144661009311676, -0.014612976461648941, -0.010578840970993042, 0.003471078583970666, 0.012632342055439949, 0.018931951373815536, 0.024098824709653854, 0.018772970885038376, 0.009538842365145683, 0.019316155463457108, -0.015235650353133678, 0.0005705088842660189, -0.017819086089730263, -0.003260760335251689, -0.0019226728472858667, 0.006647380534559488, 0.014904440380632877, -0.029570410028100014, -0.008147761225700378, 0.0002931206545326859, 0.014665969647467136, 0.0038850908167660236, -0.0338628888130188, 0.01453348621726036, -0.011632087640464306, -0.002159487921744585, 0.020018320530653, 0.008214002475142479, 0.006829545833170414, 0.024827485904097557, -0.01755411922931671, 0.02269449457526207, 0.0019574498292058706, 0.032485056668519974, -0.001872991444543004, -0.02537067048251629, 0.00035170340561307967, 0.011943425051867962, -0.00838623195886612, -0.0077039399184286594, -0.0005282796337269247, -0.016322018578648567, 0.018772970885038376, -0.013963804580271244, 0.02033628150820732, -0.03116021677851677, -0.005994897335767746, 0.0011550941271707416, 0.015142912045121193, -0.038128871470689774, -0.0019806346390396357, -0.02856353297829628, -0.0016668132739141583, 0.000386066414648667, -0.0013952212175354362, -0.029888372868299484, 0.01669297367334366, 0.012519730255007744, 0.04046059027314186, -0.02601984143257141, 0.018640486523509026, -0.008253748528659344, -0.013294761069118977, -0.0017024183180183172, -0.026298057287931442, -0.02244277484714985, 0.04247434437274933, 0.016123292967677116, 0.014175779186189175, -0.003683052957057953, -0.01158571895211935, 0.01012177113443613, -0.019408894702792168, 0.024019334465265274, 0.0005783751257695258, -0.010241006501019001, -0.0017554119694977999, 0.018057558685541153, -0.02028328739106655, 0.016507497057318687, -0.018945200368762016, 0.04268631711602211, 0.02829856425523758, 0.023701373487710953, -0.0154873700812459, -0.0045706951059401035, 0.013142405077815056, -0.015898069366812706, 0.018216539174318314, -0.007578080054372549, -0.0027904424350708723, 0.0027225445955991745, -0.021276917308568954, 0.0035041996743530035, -0.010380115360021591, -0.005514643155038357, -0.004746236372739077, -0.004116937983781099, 0.005882286000996828, -0.01716991513967514, 0.007896041497588158, 0.021767107769846916, 0.023913348093628883, 0.022085068747401237, -0.0010284064337611198, -0.0067334952764213085, -0.019302906468510628, -0.003283945145085454, -0.017872080206871033, 0.018825965002179146, 0.005614005960524082, 0.021687617525458336, 0.009783937595784664, 0.01701093465089798, -0.00020307301019784063, -0.007425723597407341, -0.010989541187882423, -0.0024840733967721462, 0.008531964384019375, 0.020879466086626053, 0.0008801900548860431, 0.01008865050971508, 0.011757947504520416, 0.0043090395629405975, -0.007889417000114918, -0.020826471969485283, 0.010194637812674046, 0.018508004024624825, -0.006922284606844187, -0.018388768658041954, -0.6914600729942322, -0.013751830905675888, 0.013950556516647339, -0.006090948358178139, 0.0253971666097641, 0.03335944935679436, 0.030126843601465225, 0.0007067188853397965, -0.018203290179371834, 0.0064188456162810326, 0.018415264785289764, -0.00722037348896265, 0.018693480640649796, 0.0013538200873881578, -0.007617825176566839, -0.019316155463457108, 0.02261500433087349, -0.023900099098682404, -0.009161262772977352, 0.02237653359770775, -0.020693987607955933, 0.01004228089004755, -0.012115654535591602, -0.018998194485902786, -0.0022886598017066717, 0.028086591511964798, 0.013096035458147526, -0.003924835938960314, -0.018256284296512604, 0.02806009352207184, -0.02534417435526848, 0.009141390211880207, 0.020018320530653, 0.00988992489874363, 0.050052423030138016, 0.023383410647511482, -0.061419542878866196, 0.02571512944996357, 0.007710563950240612, 0.05127127468585968, -0.01987258717417717, -0.0086313271895051, -0.0018100615125149488, -0.010664955712854862, -0.011757947504520416, -0.0012445207685232162, 0.03383639454841614, 0.006624195724725723, 0.015752337872982025, -0.03375690057873726, 0.027821622788906097, 0.013115908019244671, 0.0006392349023371935, -0.0021081503946334124, -0.005305980797857046, 0.023979589343070984, 0.0083001172170043, -0.024112073704600334, 0.01299004815518856, 0.016375012695789337, -0.013533231802284718, 0.008333238773047924, -0.0521191731095314, -0.029331939294934273, -0.013778327032923698, 0.00243936013430357, -0.007001774851232767, 0.012294507585465908, 0.015328389592468739, -0.027212196961045265, 0.010505974292755127, 0.013738581910729408, -0.013977053575217724, -0.0077039399184286594, -0.0014167499030008912, 0.02885499782860279, 0.015752337872982025, -0.014838199131190777, -0.03645957261323929, 0.006928909104317427, 0.0129966726526618, 0.0030222893692553043, -0.0044647082686424255, -0.0100091602653265, 0.029543913900852203, 0.020866217091679573, -0.024602264165878296, 0.0012163679348304868, -0.004103689454495907, -0.003171333810314536, 0.024655256420373917, 0.01979309692978859, -0.008326614275574684, -0.022124813869595528, -0.012579347938299179, -0.007717188447713852, -0.03182263672351837, -0.018243035301566124, 0.003583689918741584, -0.0005030249012634158, 0.003967893309891224, 0.016520744189620018, -0.00043015871779061854, 0.00975081603974104, 0.010896801948547363, 0.009439479559659958, -0.00833986233919859, 0.004428274929523468, 0.04038110002875328, -0.0447530671954155, 0.007087889593094587, -0.018680231645703316, -0.010684828273952007, -0.0008735658484511077, 0.002248914446681738, -0.0225752592086792, 0.019369149580597878, -0.013062913902103901, 0.012546227313578129, -0.01710367389023304, 0.038420334458351135, 0.003822161117568612, 0.008459098637104034, -0.00999591127038002, -0.008883046917617321, 0.01453348621726036, -0.010896801948547363, -0.0349227599799633, -0.018256284296512604, 0.004292478784918785, -0.008949289098381996, 0.0009638204937800765, 0.004829038865864277, -0.0030090410728007555, 0.01742163486778736, 0.0038685305044054985, 0.008015276864171028, -0.019263161346316338, 0.0086313271895051, -0.023714620620012283, -0.03110722452402115, 0.006942157167941332, -0.0009845211170613766, 0.00581273203715682, 0.008134512230753899, -0.029994359239935875, -0.015646351501345634, -0.006803049240261316, 0.005269547924399376, -0.002099870005622506, 0.010108523070812225, -0.010459605604410172, -0.015195905230939388, 0.003093499457463622, 0.01960762031376362, -0.012294507585465908, -0.008849925361573696, -0.011082279495894909, 0.01682545803487301, -0.002614901401102543, 0.000858661369420588, 0.02864302322268486, 0.0028467481024563313, -0.014043295755982399, 0.006190311163663864, -0.029941365122795105, 0.00021031821961514652, 0.00841935258358717, -0.02019055001437664, -0.021435897797346115, 0.012307755649089813, -0.008777059614658356, 0.01731564849615097, 0.012519730255007744, -0.011148521676659584, 0.023502647876739502, -0.017991315573453903, 0.0007679926929995418, 0.007419099565595388, 0.0058756619691848755, 0.012029539793729782, -0.004173243418335915, -0.012884060852229595, 0.008399480022490025, 0.01697118952870369, 0.018097303807735443, -0.0029229263309389353, 0.024708250537514687, -0.01734214462339878, 0.013334506191313267, -0.018799468874931335, 0.024615511298179626, 0.006617571692913771, -0.012546227313578129, -0.008955912664532661, -0.011135273613035679, -0.004935026168823242, 0.022297043353319168, 0.01138036884367466, 0.023741118609905243, 0.015063421800732613, -0.016401508823037148, 0.014586479403078556, -0.015845077112317085, 0.010592089034616947, -0.032803017646074295, 0.009254002012312412, -0.009240753017365932, 0.00637247646227479, 0.024257805198431015, 0.0009017186821438372, -0.01960762031376362, -0.004216300789266825, -0.007253494579344988, 0.002750697312876582, 0.020707236602902412, 0.003610186744481325, 0.012758200988173485, 0.0016858578892424703, -0.010452981106936932, 0.004610440228134394, -0.024575766175985336, 0.027291687205433846, -0.010810688138008118, -0.007664194796234369, 0.00492177763953805, 0.015063421800732613, 0.041070014238357544, 0.002195921028032899, -0.01016814075410366, -0.0039049633778631687, -0.013804824091494083, -0.010353618301451206, 0.005272860173135996, 0.011002789251506329, 0.010373490862548351, -0.0010325465118512511, -0.03489626571536064, 0.014997179619967937, 0.004222924821078777, -0.004603816196322441, 0.0005096490494906902, 0.007982156239449978, 0.007756933569908142, -0.00029684678884223104, 0.005233114585280418, 0.041758932173252106, 0.004587255883961916, -0.006756679620593786, -0.005312605295330286, -0.002631461713463068, 0.0048621599562466145, -0.023873602971434593, -0.001982290530577302, -0.0016138197388499975, -0.020574752241373062, 0.03815536946058273, 0.03190212696790695, 0.02845754474401474, 0.03100123628973961, 0.009697822853922844, -0.016573738306760788, 0.008737314492464066, -0.009002282284200191, -0.022071821615099907, 0.008644575253129005, -0.007862920872867107, -0.009783937595784664, -0.010062153451144695, -0.012201769277453423, -0.0001224441220983863, 0.0010664955480024219, 0.032644037157297134, 0.0014995523961260915, 0.00701502338051796, -0.003325346391648054, 0.0028914615977555513, 0.01121476385742426, -0.0010623554699122906, 0.0009530562092550099, -0.02276073768734932, -0.02005806565284729, 0.0022588507272303104, 0.009571962989866734, -0.009353364817798138, -0.005186745431274176, -0.012201769277453423, -0.0014606352197006345, 0.008618079125881195, 0.027424171566963196, 0.007664194796234369, 0.014387753792107105, 0.003113372018560767, 0.013162277638912201, 0.012440240010619164, 0.007717188447713852, 0.0075913285836577415, -0.006259865127503872, 0.013056290335953236, 0.00324916816316545, -0.01736864075064659, 0.00026351879932917655, -0.01158571895211935, -0.005478209815919399, 0.02588735707104206, 0.007034895941615105, -0.007107762154191732, -0.030285824090242386, 0.016202783212065697, -0.011102152056992054, -0.023489398881793022, 0.015447624959051609, -0.015831828117370605, -0.024734746664762497, 0.008644575253129005, 0.008929416537284851, -0.008969161659479141, -0.012016291730105877, 0.04075205326080322, 0.016189534217119217, -0.0008218142902478576, -0.04854210838675499, -0.00427591847255826, 0.02005806565284729, 0.058398909866809845, 0.007207124959677458, -0.007988779805600643, 0.011281006038188934, 0.004183179698884487, 0.014453995041549206, -0.01694469340145588, 0.010101898573338985, 0.02244277484714985, -0.006024706177413464, 0.0029461111407727003, -0.00847234670072794, 0.012493233196437359, -0.005130439531058073, 0.020720485597848892, 0.003951332997530699, -0.010512598790228367, -0.008253748528659344, -0.033226966857910156, -0.004815790336579084, -0.006345979869365692, 0.0039778295904397964, 0.04271281510591507, 0.027185700833797455, 0.02024354226887226, 0.018057558685541153, 0.02286672405898571, 0.030338816344738007, 0.008883046917617321, -0.020482013002038002, -0.020905962213873863, -0.004716427531093359, -0.0071541317738592625, -0.016083547845482826, 0.0018796155927702785, 0.012042787857353687, 0.006783176679164171, 0.018150296062231064, 0.0019061124185100198, 0.012254762463271618, 0.006981902290135622, 0.01971360668540001, 0.0008060818654485047, -0.026218567043542862, 0.005517955403774977, -0.008412729017436504, -0.010055528953671455, 0.030179835855960846, -0.0010151580208912492, -0.022350037470459938, 0.016414757817983627, 0.008525339886546135, 0.0197533518075943, -0.011141897179186344, -0.0030670026317238808, 0.03404836729168892, -0.009306995198130608, -0.008220626972615719, -0.014215524308383465, -0.04557446762919426, -0.007121010683476925, -0.0062698014080524445, -0.010717948898673058, 0.0021975769195705652, -0.0012296163477003574, -0.015023676678538322, -0.021594878286123276, -0.01959437131881714, -0.017832335084676743, -0.004216300789266825, -0.003401524620130658, -0.00839285645633936, 0.0004384389612823725, 0.002020379761233926, 0.03929473087191582, 0.013235143385827541, 0.006726870778948069, 0.003527384251356125, 0.0028467481024563313, 0.032299578189849854, -0.0016916539752855897, -0.021197427064180374, -0.005405344069004059, 0.018004564568400383, -0.022257298231124878, -0.0017040744423866272, 0.013380875810980797, -0.008260372094810009, 0.00871081743389368, -0.011433362029492855, 0.013327882625162601, 0.009737567976117134, 0.009214256890118122, -0.004779357463121414, -0.009777313098311424, 0.007790054194629192, 0.0010706356260925531, 6.342796950775664e-06, -0.006680501624941826, -0.03351842984557152, 0.007790054194629192, -0.008849925361573696, -0.008876422420144081, -0.0031398688443005085, 0.006909036543220282, 0.014414249919354916, 0.012294507585465908, 0.01691819727420807, -0.030259326100349426, 0.0011973234359174967, 0.026920732110738754, -0.005183433182537556, 0.024430034682154655, 0.019170422106981277, 0.013778327032923698, 0.032856009900569916, -0.013380875810980797, -0.0009191071731038392, -0.02012430690228939, -0.006981902290135622, -0.012036164291203022, -0.027503661811351776, 0.002917958190664649, 0.007068017031997442, -0.013261640444397926, 0.010817311704158783, -0.0020352841820567846, -0.024602264165878296, -0.015924567356705666, 0.0014548390172421932, 0.0002500634000170976, 0.007730436511337757, 0.004514389671385288, -0.01158571895211935, -0.023409908637404442, -0.0007526742410846055, -0.0022886598017066717, 0.015964312478899956, 0.006259865127503872, 0.0021661119535565376, 0.0004500313079915941, 0.01955462619662285, 0.0039016513619571924, -0.023489398881793022, -0.01124788448214531, -0.03190212696790695, 0.010539095848798752, 0.0006976106087677181, 0.00722037348896265, 0.012274635024368763, -0.015262147411704063, -0.0021892967633903027, -0.01999182254076004, -0.0007535023032687604, -0.024800989776849747, -0.027583152055740356, -0.02864302322268486, 0.003765855450183153, 0.03240556642413139, 0.008108016103506088, 0.02837805449962616, 0.007816551253199577, 0.01736864075064659, 0.005034388974308968, -0.0016510807909071445, 0.009075148031115532, 0.00709451362490654, -0.006177062634378672, -0.01683870516717434, 0.022297043353319168, 0.007578080054372549, 0.01954137720167637, 0.019130676984786987, 0.010519223287701607, -0.0012370685581117868, 0.018984945490956306, 0.005388783290982246, 0.0023582137655466795, -0.012546227313578129, -0.024920225143432617, -0.01751437410712242, -0.010406611487269402, -0.002984200371429324, -0.006796425208449364, -0.002250570571050048, -0.012082532979547977, 0.013546480797231197, -0.005021140445023775, 0.00500458013266325, -0.01675921492278576, 0.04870108887553215, -0.023767614737153053, 0.024562519043684006, 0.007823175750672817, 0.012274635024368763, -0.02588735707104206, -0.00871744193136692, -0.004057319834828377, -0.005325853358954191, 0.008644575253129005, 0.0012826098827645183, -0.010545720346271992, -0.024337295442819595, -0.01768660359084606, 0.01124788448214531, 0.035532187670469284, -0.03529371693730354, -0.029040474444627762, -0.006110820919275284, -0.026827992871403694, 0.014838199131190777, 0.005637190770357847, -0.005984961055219173, -0.005239739082753658, 0.009161262772977352, 0.018137048929929733, -0.01298342365771532, 0.013486863113939762, -0.020561503246426582, -0.016070298850536346, 0.009565338492393494, 0.02264150232076645, 0.033253464847803116, 0.009048651903867722, 0.03510823845863342, -0.01428176648914814, -0.004302415065467358, -0.01964736543595791, 0.0052794842049479485, -0.006200247444212437, 0.0007766869966872036, 0.008141136728227139, 0.01281781867146492, 0.003934772219508886, -0.021767107769846916, 0.014705714769661427, -0.005736553575843573, -0.00633604358881712, -0.015103166922926903, 0.024350544437766075, 0.013818073086440563, 0.010300624184310436, -0.024191563948988914, -0.03187562897801399, -0.013937308453023434, 0.041811924427747726, -0.001165858469903469, 0.001947513548657298, -0.005249675363302231, -0.030259326100349426, -0.01751437410712242, 0.024814238771796227, -0.019475135952234268, 0.0197533518075943, 0.0013422276824712753, -0.029729390516877174, 0.01449374109506607, -0.014838199131190777, -0.02303895354270935, 0.013977053575217724, 0.0022207617294043303, 0.008459098637104034, -0.008889670483767986, 0.014705714769661427, -0.021608127281069756, 0.00022087553224992007, -0.02236328460276127, 0.004110313486307859, -0.0016883419593796134, 0.027768628671765327, -0.021806852892041206, -0.00987667590379715, -0.021780356764793396, 0.021555133163928986, 0.003855281975120306, -0.004345472436398268, -0.007730436511337757, -0.004560758825391531, -0.016322018578648567, -0.02003156766295433, 0.026616018265485764, 0.028219074010849, -0.03153117373585701, -0.0032938814256340265, -0.0008570053614675999, -0.00649171182885766, -0.028086591511964798, 0.00500126788392663, 0.016255777329206467, 0.0009571962873451412, -0.021846598014235497, -0.009134765714406967, -0.0031978306360542774, 0.013202022761106491, 0.0037327343598008156, -0.026827992871403694, -0.006783176679164171, 0.021223923191428185, -0.01673271879553795, 0.010360242798924446, -0.016520744189620018, 0.010386738926172256, -0.018176794052124023, 0.0007439799956046045, -0.007604577112942934, -0.006077699828892946, 0.005951839964836836, -0.023542392998933792, -0.023595385253429413, -0.018733225762844086, 0.005746489856392145, -0.0031398688443005085, -0.0005899674724787474, 0.0008801900548860431, 0.029729390516877174, -0.0006971966358833015, -0.0010383427143096924, -0.03105423040688038, -0.027013471350073814, 0.0011393616441637278, -0.007823175750672817, 0.002383054466918111, 0.024549270048737526, -0.012731704860925674, 0.004670057911425829, 0.004246109630912542, 0.006657316815108061, 0.024946721270680428, -0.032723527401685715, -0.030259326100349426, -0.023979589343070984, 0.020707236602902412, -0.01946188695728779, 0.009240753017365932, -0.003454518271610141, 0.01021451037377119, -0.013738581910729408, -0.005441776942461729, -0.000991973327472806, -0.002856684383004904, -0.01946188695728779, 0.01992558129131794, 0.014599727466702461, 0.007472093217074871, 0.00851871632039547, 0.0007352857501246035, -0.010698076337575912, -0.005524579435586929, -0.012970175594091415, -0.01153934933245182, -0.005501394625753164, 0.02260175719857216, 0.027503661811351776, -0.016123292967677116, -0.01698443852365017, 0.011943425051867962, -0.030656779184937477, -0.01294367853552103, 0.002555283484980464, -0.001585666905157268, 0.004010950680822134, -0.00047073193127289414, -0.0008437569485977292, -0.01125450897961855, 0.0037824157625436783, 0.007399227004498243, -0.03433983027935028, -0.004199740011245012, 0.02800709940493107, -0.014639472588896751, 0.023621883243322372, -0.013109283521771431, -0.03108072653412819, -0.01144661009311676, 0.02609933167695999, 0.0083001172170043, 0.01727590337395668, 0.011188266798853874, 0.007319736294448376, -0.014599727466702461, -0.013413996435701847, 0.013990301638841629, 0.003914899658411741, -0.001430826261639595, 0.021131185814738274, -0.02305220253765583, -0.005186745431274176, -0.0058458526618778706, 0.006935533136129379, -0.021581631153821945, 0.012552850879728794, 0.003189550247043371, -0.010353618301451206, 0.020707236602902412, -0.009141390211880207, -0.00044837527093477547, 0.000953884213231504, -0.04035460203886032, 0.006100884638726711, -0.0018647111719474196, -0.009141390211880207, 0.009485848248004913, -0.012281259521842003, -0.04787968844175339, -0.01141348946839571, 0.008286869153380394, -0.021992329508066177, -0.02327742427587509, 0.024403538554906845, -0.012519730255007744, -0.013500111177563667, -0.008319989778101444, 0.02042902074754238, -0.03190212696790695, 0.0023565576411783695, -0.005494770593941212, -0.014096288941800594, -0.005998209584504366, 0.021753858774900436, 0.01754087023437023, -0.0013033105060458183, 0.010969668626785278, 0.014930937439203262, 0.010658331215381622, -0.010108523070812225, 0.006471839267760515, 0.015076669864356518, -0.01290393341332674, 0.0038884030655026436, 0.02017730101943016, -0.01687845028936863, -0.02856353297829628, -0.006564578041434288, 0.011479731649160385, -0.010651706717908382, 0.006299610249698162, 0.1992558091878891, -0.0026033089961856604, 0.021714113652706146, 0.04827713966369629, 0.005352350417524576, 0.017991315573453903, 0.0025817803107202053, -0.006766615901142359, -0.0029659837018698454, 0.014891192317008972, -0.006216807756572962, 0.007617825176566839, -0.029225952923297882, 0.00016995202167890966, -0.003186238231137395, -0.015076669864356518, -0.030577288940548897, 0.004371969494968653, -0.006312858778983355, -0.01997857540845871, 0.007034895941615105, -0.025132199749350548, -0.00834648683667183, -0.015911318361759186, 0.03187562897801399, -0.00324585591442883, -0.013255015946924686, 0.01715666800737381, 6.318862142506987e-05, 0.024615511298179626, -0.0033303145319223404, -0.009472600184381008, 0.009015530347824097, 0.00282356352545321, -0.01690494827926159, -0.015646351501345634, -0.0016899979673326015, 0.007167379837483168, 0.029252449050545692, 0.03195511922240257, 0.001813373644836247, 0.010366866365075111, 0.004769421182572842, -0.013645843602716923, -0.01677246391773224, 0.00847897119820118, -0.013645843602716923, -0.020720485597848892, 0.017964819446206093, 0.009578587487339973, -0.04054008051753044, 0.008492219261825085, 0.026470286771655083, 0.029835378751158714, -0.015315140597522259, 0.001374520594254136, -0.027848118916153908, 0.0028699329122900963, -0.011069031432271004, 0.004544198513031006, -0.0038519699592143297, 0.022257298231124878, 0.0100091602653265, 0.03131919726729393, -0.005779610946774483, -0.008134512230753899, -0.05164223164319992, 0.0077039399184286594, -0.013871066272258759, -0.004699867218732834, -0.011632087640464306, -0.004352096933871508, -0.00020566058810800314, -0.012142150662839413, -0.02548990584909916, -0.035823650658130646, 0.01958112232387066, 0.030762765556573868, 0.021753858774900436, 0.029967863112688065, -0.011281006038188934, 0.00975744053721428, 0.002079997444525361, 0.0064983363263309, -0.018852461129426956, -0.030391810461878777, 0.02276073768734932, -0.004246109630912542, -0.0002953977382276207, -0.0033899322152137756, -0.0062896739691495895, -0.008525339886546135, 0.009234129451215267, -0.013831321150064468, 0.00013672753993887454, 0.0031812700908631086, -0.02282697893679142, 0.015010427683591843, -0.012307755649089813, -0.005630566738545895, -0.029331939294934273, -0.01987258717417717, 0.013115908019244671, -0.0101747652515769, -0.012546227313578129, 0.013387500308454037, 0.014891192317008972, 0.02256201207637787, 0.015447624959051609, 0.0013786607887595892, -0.03166365623474121, -0.004302415065467358, 0.0033435628283768892, 0.002613245276734233, 0.02246927283704281, 0.007915914058685303, 0.00495821051299572, -0.02584761194884777, -0.007578080054372549, -0.0010366867063567042, 0.009181135334074497, -0.014997179619967937, -0.005706744734197855, 0.019130676984786987, -0.020786726847290993, -0.023568889126181602, -0.01274495292454958, -0.009293747134506702, 0.020932458341121674, -0.03614161163568497, 0.004216300789266825, -0.016401508823037148, -0.009671325795352459, 0.0042825425043702126, 0.02266799844801426, 0.018918704241514206, 0.0074389721266925335, -0.004620376508682966, 0.0015508899232372642, 0.001697450177744031, -0.005471585784107447, 0.024959970265626907, 0.02017730101943016, 0.01677246391773224, 0.004815790336579084, -0.003951332997530699, -0.020905962213873863, -0.0002040045364992693, -0.017580615356564522, -0.013513359241187572, -0.0014978962717577815, -0.018799468874931335, -0.011731451377272606, -0.023409908637404442, 0.02579461969435215, -0.014626224525272846, -0.041361480951309204, -0.023939844220876694, 0.014573231339454651, 0.010015783831477165, -0.021316662430763245, -0.010452981106936932, 0.019117429852485657, -0.01709042489528656, -0.03161066398024559, -0.015924567356705666, -0.17212310433387756, 0.016361763700842857, 0.009810433723032475, 0.005256299395114183, 0.021329911425709724, -0.017726348713040352, 0.002151207532733679, 0.012599220499396324, 0.01020788587629795, 0.007823175750672817, 0.016110043972730637, -0.004378593526780605, -0.017898578196763992, -0.00649171182885766, 0.04350771754980087, -0.020892713218927383, 0.005342414136976004, 0.033332955092191696, 0.026417292654514313, 0.015871573239564896, 0.004381905775517225, -0.01963411644101143, 0.017660105600953102, -0.021210676059126854, -0.01153934933245182, 0.021025197580456734, -0.006743431556969881, 0.005309293046593666, -0.00983030628412962, -0.013506735675036907, -0.00996941514313221, -0.0013041385682299733, 0.015712592750787735, 0.02558264508843422, 0.010320497676730156, -0.013003296218812466, -0.01685195416212082, -0.024218060076236725, 0.004242797382175922, 0.017766093835234642, 0.01157909445464611, 0.029172958806157112, -0.000658693490549922, -0.0052529871463775635, 0.01270520780235529, 0.007458844687789679, 0.013632595539093018, -0.0048356628976762295, -0.0015070046065375209, -0.01171157881617546, 0.005623942241072655, -0.016110043972730637, -0.003898339346051216, 0.012486609630286694, 0.016401508823037148, 0.007346233353018761, 0.0033336265478283167, 0.011122024618089199, -0.016110043972730637, -0.013659091666340828, -0.010505974292755127, -0.02289322018623352, 0.02584761194884777, -0.012215017341077328, -0.029649900272488594, -0.030126843601465225, -0.015831828117370605, -0.0063327313400805, -0.017911825329065323, 0.008293493650853634, 0.0011923552956432104, -0.01958112232387066, 0.04093753173947334, -0.024072328582406044, 0.012559475377202034, 0.006640756502747536, -0.009055275470018387, 0.03712199255824089, -0.007399227004498243, 0.006700374186038971, 0.005514643155038357, 0.022389782592654228, -0.0035870021674782038, -0.0014680874301120639, -0.0033849640749394894, 0.015646351501345634, 0.0039016513619571924, -0.0031398688443005085, -0.0013082786463201046, -0.02824557200074196, 0.007366105914115906, -0.022018827497959137, 0.006488400045782328, -0.01979309692978859, 0.010830560699105263, 0.047482237219810486, 0.006647380534559488, -0.021237172186374664, -0.00213961536064744, -0.00636916421353817, -0.0064188456162810326, -0.008611454628407955, -0.020693987607955933, 0.03338594734668732, 0.026814745739102364, -0.00975744053721428, 0.02327742427587509, 0.0128310676664114, 0.029331939294934273, -0.013924059458076954, -0.013102659955620766, 0.005945215933024883, 0.029490919783711433, 0.0257283765822649, 0.003928148187696934, 0.008783684112131596, 0.02260175719857216, -0.02030978538095951, 0.019408894702792168, 0.005067510064691305, 0.03174314647912979, 0.014665969647467136, -0.0005257955635897815, -0.002697703894227743, -0.007935786619782448, 0.011936801485717297, -0.09602434188127518, -0.035320211201906204, 0.0056934962049126625, 0.00427260622382164, -0.014798454008996487, 0.021674368530511856, 0.004335536155849695, 0.0017504437128081918, 0.0010250943014398217, 0.020601248368620872, -0.018441760912537575, -0.024112073704600334, 0.005614005960524082, 0.0011998075060546398, 0.008439225144684315, -0.0064453426748514175, -0.03243206441402435, -0.021369656547904015, -0.018216539174318314, 0.006759991869330406, -0.011678457260131836, -0.016216032207012177, -0.008949289098381996, -0.01671946980059147, 0.008028525859117508, -0.00568687217310071, -0.02845754474401474, 0.02562239021062851, 0.02264150232076645, 0.016586987301707268, 0.012850940227508545, -0.009591835550963879, 0.010393363423645496, -0.03738696128129959, 0.012579347938299179, -0.0024559206794947386, -0.014944186434149742, -0.0023648380301892757, 0.024575766175985336, -0.024257805198431015, -0.00209821411408484, 0.009373237378895283, 0.00996941514313221, -0.04931051284074783, 0.02861652709543705, -0.024085575714707375, -0.008644575253129005, 0.004030823241919279, -0.0008685977081768215, -0.016480999067425728, -0.02570188045501709, 0.010823936201632023, 0.0021114624105393887, -0.0010408267844468355, 0.012685335241258144, -0.021316662430763245, 0.0007013367139734328, 0.012850940227508545, -0.016043802723288536, -0.015089917927980423, -0.004905216861516237, -0.009817058220505714, -0.02603309042751789, 0.027530157938599586, 0.021555133163928986, -0.006024706177413464, -0.009081772528588772, -0.003709549782797694, 0.010645083151757717, -0.0200845617800951, 0.0007439799956046045, 0.005156936589628458, -0.023515895009040833, 0.025158695876598358, -0.03203461319208145, -0.01020788587629795, -0.023979589343070984, -0.008127888664603233, 0.000914967036806047, -0.026708757504820824, -0.012764825485646725, -0.02297271229326725, 0.018388768658041954, -0.010188013315200806, 0.008962537162005901, 0.0031613975297659636, 0.002591716591268778, 0.01171157881617546, -0.01755411922931671, -0.005514643155038357, 0.017699850723147392, 0.01705067977309227, 0.03179613873362541, -0.0049913316033780575, -0.01707717776298523, 0.023621883243322372, 0.010598713532090187, -0.00499795563519001, 0.04893955960869789, -0.008492219261825085, 0.008207378908991814, -0.005570948589593172, -0.041705936193466187, 0.023356914520263672, -0.005349038168787956, 0.011744699440896511, 0.036088619381189346, 0.014414249919354916, 0.008730689994990826, -0.0203495305031538, 0.004186491947621107, -0.0020733734127134085, -0.013082786463201046, 0.008114639669656754, -0.004295791033655405, 0.003928148187696934, -0.02254876308143139, -0.021170930936932564, 0.023767614737153053, 0.009101645089685917, 0.0197533518075943, 0.01299004815518856, 0.012340877205133438, 0.015010427683591843, 0.017951570451259613, 0.007511838339269161, -0.013672340661287308, 0.024112073704600334, -0.010234382934868336, 0.008909543044865131, -0.019183671101927757, -0.027556654065847397, 0.02592710219323635, -0.0031199962832033634, -0.015301892533898354, 0.03327995911240578, -0.0037956642918288708, 0.0049880193546414375, 0.0032806331291794777, 0.013659091666340828, 0.0171964131295681, 0.002349933609366417, -0.0019375772681087255, -0.030577288940548897, 0.013334506191313267, -0.02260175719857216, -0.013765078969299793, -0.011943425051867962, -0.009611708112061024, 0.005498082377016544, 0.019249914214015007, -0.011069031432271004, 0.02020379714667797, 0.024959970265626907, -0.000914967036806047, -0.02550315484404564, -0.013466990552842617, -0.04602491483092308, 0.018706729635596275, -0.020680740475654602, -0.015871573239564896, -0.02046876586973667, 0.0033336265478283167, 0.00988992489874363, 0.02045551687479019, -0.005173496901988983, 0.0017901889514178038, -0.018481506034731865, -0.02318468503654003, -0.007558207493275404, 0.027662642300128937, -0.02009781077504158, 0.0004140122327953577, -0.01764685846865177, 0.012552850879728794, -0.018613990396261215, 0.007962283678352833, 0.008266996592283249, 0.0028914615977555513, -0.008492219261825085, -0.0007493621669709682, 0.03982466459274292, 0.002828531665727496, -0.005534515716135502, -0.035770658403635025, 0.03190212696790695, 0.012188520282506943, 0.005137064028531313, -0.011817565187811852, -0.004219612572342157, 0.002542035188525915, 0.012652214616537094, 0.012109030038118362, 0.011022661812603474, -0.006180374883115292, -0.016308769583702087, -0.009518969804048538, 0.013559728860855103, -0.007551583461463451, -0.02556939609348774, -0.0006466871127486229, 0.003055410459637642, 0.0017901889514178038, -0.00019634531054180115, 0.000505508971400559, -0.01312253251671791, -0.017766093835234642, 0.001871335320174694, 0.0005423560505732894, -0.02294621430337429, -0.01720966026186943, -0.006143941543996334, 0.023608634248375893, 0.010154892690479755, 0.006435406394302845, 0.018998194485902786, -0.022124813869595528, 0.016507497057318687, -0.017925074324011803, -0.006392349023371935, -0.005756426136940718, 0.026854490861296654, 0.047561727464199066, 0.013082786463201046, 0.01282444316893816, 0.0009257313795387745, 0.01556686032563448, 0.00018589149112813175, 0.010062153451144695, -0.02030978538095951, 0.007399227004498243, 0.0010184701532125473, -0.004660121630877256, -0.006730183027684689, -0.002333373064175248, -0.027185700833797455, -0.018627239391207695, 0.009114893153309822, 0.003060378599911928, 0.0171964131295681, -0.01406979188323021, 0.02898748219013214, -0.0048356628976762295, -0.006942157167941332, 0.0036499318666756153, 0.01408304087817669, 0.026377547532320023, 0.011830814182758331, 0.013493486680090427, -0.017660105600953102, -0.033253464847803116, -0.0003165123634971678, -0.004265982192009687, 0.00706139300018549, -0.009002282284200191, -0.020905962213873863, 0.01946188695728779, -0.022257298231124878, 0.009313619695603848, -0.018335774540901184, -0.018123799934983253, 0.01699768751859665, 0.007419099565595388, 0.027039967477321625, -0.006657316815108061, -0.012062660418450832, -0.007909289561212063, 0.0066871256567537785, 0.008180881850421429, -0.016533993184566498, -0.007081265561282635, 0.01004890538752079, 0.006869290955364704, -0.04480605944991112, -0.015646351501345634, 0.022257298231124878, -0.0037062375340610743, -0.0028732449281960726, 0.010678203776478767, 0.035558681935071945, 0.0036366835702210665, -0.0256621353328228, -0.0005667827790603042, -0.013751830905675888, -0.008068270981311798, 0.010300624184310436, -0.004756172653287649, -0.013818073086440563, 0.0055411397479474545, 0.02024354226887226};
float nonsequitur[1536] = {-0.016399359330534935, -0.03143433481454849, 0.002574940212070942, -0.005103063303977251, -0.012172444723546505, 0.011242791078984737, -0.007764949928969145, -0.00560467503964901, -0.012934895232319832, -0.003859066404402256, 0.026217574253678322, 0.018512817099690437, 0.019837072119116783, 0.021763261407613754, 0.006547705270349979, -0.013302743434906006, 0.03584852069616318, -0.022351820021867752, 0.037774708122015, 0.0016294021625071764, -0.012687432579696178, 0.01603819988667965, 0.00680854357779026, -0.04061048477888107, -0.0028056816663593054, 0.0012264406541362405, 0.002824074123054743, -0.02902659960091114, -0.007838519290089607, -0.005631427746266127, 0.007972282357513905, 0.01622546836733818, -0.009289849549531937, -0.021188080310821533, -0.01164408028125763, 0.015623534098267555, -0.01164408028125763, -0.004731870722025633, -0.0027304398827254772, -0.014085257425904274, 0.009256408549845219, -0.01294827088713646, -0.014727320522069931, -0.020465759560465813, -0.023207902908325195, 0.0005889757885597646, 0.038363266736269, -0.00959081668406725, -0.023167774081230164, 0.009597504511475563, 0.022258184850215912, 0.0029026600532233715, -0.026043681427836418, 0.009965353645384312, 0.014954717829823494, 0.0004075595352333039, -0.022686226293444633, -0.013516764156520367, 0.0009246376575902104, -0.009202903136610985, 0.020211609080433846, 0.01728219725191593, -0.02260596863925457, 0.01342981867492199, -0.008828367106616497, -0.014620310626924038, -0.025093963369727135, -0.021723132580518723, -0.027367936447262764, -0.00893537700176239, 0.024130869656801224, 0.032236915081739426, -0.007885336875915527, -0.021856894716620445, 0.03212990239262581, -0.032343924045562744, -0.012968335300683975, 0.005417407024651766, -0.01487446017563343, 0.010152621194720268, 0.026164067909121513, -0.04079775512218475, -0.020064469426870346, 0.021228209137916565, 0.01970330998301506, -0.010353266261518002, -0.01676052063703537, 0.040449969470500946, -0.006648027803748846, -0.0012373089557513595, -0.007176391780376434, 0.02077341452240944, 0.0002083778817905113, 0.0005797795602120459, -0.019382277503609657, 0.03338727727532387, 0.009998793713748455, 0.026150692254304886, 0.011376554146409035, -0.025481875985860825, 0.004728526808321476, 0.00944367703050375, -0.010172686539590359, -0.002452881308272481, -0.012894765473902225, -0.018619827926158905, 0.0015650286804884672, 0.005066278390586376, 0.025923294946551323, -0.01618533954024315, 0.010005482472479343, 0.05559195578098297, -0.0063370284624397755, -0.014767449349164963, -0.0028692190535366535, -0.033494286239147186, 0.031514592468738556, 0.019235137850046158, -0.003986141178756952, -0.03999517485499382, 0.018472688272595406, -0.012219262309372425, 0.008433765731751919, -0.014941342175006866, 0.03855053335428238, 0.0067617264576256275, -0.013897988945245743, 0.026311207562685013, -0.02356906421482563, -0.00850064679980278, 0.011844725348055363, 0.007203144486993551, 0.028464794158935547, -0.016492994502186775, -0.021321842446923256, 0.017268819734454155, -0.028973093256354332, 0.0023926880676299334, -0.01502159982919693, -0.0356612503528595, 0.007490735501050949, 0.00977808516472578, -0.02391684800386429, -0.0004232349165249616, 0.029882684350013733, 0.05206061154603958, 0.03004319965839386, 0.043687038123607635, -0.004949235823005438, -0.012038681656122208, 0.020760037004947662, -0.012105563655495644, 0.013322807848453522, -0.02719404362142086, 0.001340975402854383, 0.009309913963079453, 0.011911606416106224, 0.03138083219528198, 0.014125386252999306, -0.00813948642462492, -0.005591298919171095, 0.00619323318824172, -0.00893537700176239, -0.01429927907884121, 0.0278762374073267, 0.0347784124314785, 0.016024822369217873, -0.004604795947670937, -0.004313861019909382, -0.024558911100029945, -0.01379097905009985, 0.04665657877922058, -0.02902659960091114, 0.027608709409832954, 0.01868670992553234, 0.024558911100029945, 0.0044242157600820065, 0.007076069712638855, -0.0341898575425148, -0.02647172287106514, -0.012179133482277393, 0.01023956760764122, 0.038764555007219315, 0.02878582663834095, -0.026097187772393227, -5.0474682211643085e-05, 0.0012122283224016428, 0.003862410318106413, 3.641910370788537e-05, -0.002427800791338086, -0.016479616984725, 0.021616121754050255, 0.003842345904558897, -0.014245773665606976, -0.668173611164093, -0.02066640369594097, 0.014138762839138508, -0.01912812702357769, 0.012520229443907738, 0.028946341946721077, 0.008594281040132046, 0.01226607896387577, -0.004955924116075039, 0.020559392869472504, -0.020198233425617218, 0.016546498984098434, 0.0039627328515052795, 0.013142227195203304, 0.006564425770193338, -0.007504111621528864, -0.011430059559643269, -0.005183321423828602, 0.007758261635899544, 0.02985593117773533, -0.005748470779508352, 0.0336012989282608, 0.027421440929174423, 0.022432077676057816, -0.006708221044391394, 0.01700129359960556, 0.004695085808634758, 0.012232637964189053, -0.035286713391542435, -0.010480341501533985, -0.020465759560465813, 0.006256770342588425, 0.005922362674027681, -0.008099357597529888, 0.06169155612587929, 0.004360678140074015, 0.0019144847756251693, 0.012881389819085598, 0.01815165765583515, 0.038523782044649124, -0.017108304426074028, -0.02227156050503254, 0.01646624132990837, -0.011624015867710114, -0.021575992926955223, -0.018098151311278343, 0.016987917944788933, -0.008487270213663578, -0.006882112938910723, -0.018994364887475967, 0.017108304426074028, 0.007831831462681293, -0.0010675969533622265, 0.020158104598522186, -0.002146898303180933, 0.008988882414996624, 0.022284938022494316, 0.00043222212116234004, 0.005273611284792423, 0.00944367703050375, 0.0004048424889333546, -0.009945289231836796, -0.01436616014689207, -0.01231289654970169, -0.007443918380886316, 0.002802337519824505, -0.015182115137577057, -0.0038456900510936975, 0.02482643723487854, -0.04636229947209358, 0.009764708578586578, 0.011002017185091972, 0.004494441207498312, -0.0014078569365665317, 0.029106857255101204, 0.01400499977171421, 0.009584127925336361, 0.017710238695144653, 0.010252944193780422, -0.0019195008790120482, -0.024170998483896255, 0.0034059437457472086, -0.03598228096961975, 0.008995570242404938, 0.030176961794495583, -0.010433523915708065, -0.05152555927634239, 0.011450123973190784, -0.008480582386255264, 0.009042387828230858, 0.007517487742006779, 0.007136262953281403, -0.003725303104147315, -0.0045813871547579765, 0.010915071703493595, 0.01811152882874012, -0.014245773665606976, 0.024558911100029945, 0.014794202521443367, -0.04189461097121239, -0.015864307060837746, 0.01552989985793829, -0.0009179494809359312, 0.013871236704289913, 0.0024294729810208082, 0.007731508929282427, 0.017937636002898216, -0.011430059559643269, 0.027662215754389763, -0.021950529888272285, 0.015784049406647682, -0.0007812603143975139, 0.011349801905453205, -0.011871477589011192, 0.013777602463960648, -0.027448194101452827, 0.015302502550184727, -0.01835230179131031, 0.02985593117773533, -0.0041968184523284435, 0.011650769039988518, 0.00046942499466240406, 0.009818213991820812, -0.0030782241374254227, 0.019877200946211815, 0.03921934962272644, 0.010232879780232906, -0.025762779638171196, -0.014312654733657837, -0.01361708715558052, 0.0010884974617511034, 0.0021753229666501284, 0.04633554816246033, 0.001239817007444799, 0.001055056694895029, -0.03782821446657181, 0.000818881148006767, 0.0023141021374613047, 0.010948512703180313, -0.012359713204205036, -0.030872531235218048, 0.010079052299261093, 0.0031283851712942123, 0.012426595203578472, -0.010359954088926315, -0.026444971561431885, -0.017522970214486122, 0.010079052299261093, -0.02806350402534008, 0.014232397079467773, -0.0034410564694553614, -0.01361708715558052, -0.0146871916949749, 0.01313553936779499, -0.004367366433143616, -0.020612899214029312, -0.01400499977171421, -0.016640134155750275, -0.008052540943026543, 0.004741902928799391, 0.023248031735420227, 0.03052474558353424, -0.018726838752627373, 0.015422889031469822, -0.0041566891595721245, -0.04012893885374069, -0.013576957397162914, 0.0044141835533082485, -0.008888560347259045, -0.0114701883867383, 0.008386948145925999, -0.04234940558671951, 0.013543517328798771, 0.008681227453052998, -0.02299388311803341, 0.028277525678277016, -0.022980505600571632, -0.008159550838172436, 0.004006205592304468, -0.004922483116388321, -0.015182115137577057, -0.026043681427836418, -0.01077461987733841, 0.0027688967529684305, -0.021816765889525414, 0.006046093534678221, 0.04700436443090439, 0.013777602463960648, -0.017268819734454155, -0.004802096635103226, 0.0004052604781463742, 0.013610398396849632, -0.01574392057955265, -0.019355524331331253, 0.016024822369217873, 0.009062452241778374, 0.017161808907985687, 0.00752417603507638, 0.010908382944762707, 0.017696863040328026, 0.026351336389780045, -0.0005145700415596366, 0.013630462810397148, -0.016198715195059776, 0.028625309467315674, -0.03357454761862755, 0.00411990424618125, -0.019636427983641624, 0.006668092217296362, -0.01207881048321724, -0.012018617242574692, -0.009624257683753967, -0.002093392889946699, -0.032477688044309616, -0.0016452865675091743, 0.025682521983981133, -0.01622546836733818, 0.011062211357057095, 0.013637151569128036, -0.022712979465723038, -0.011262855492532253, -0.020064469426870346, 0.006671436131000519, 0.016492994502186775, 0.0025164189282804728, -0.008514023385941982, 0.0029327566735446453, -0.016626756638288498, 0.013964870944619179, 0.008340131491422653, -0.005541137885302305, 0.03341402858495712, 0.015757296234369278, 0.005367245525121689, -0.011363177560269833, -0.010065675713121891, 0.010767932049930096, -0.0148477079346776, 0.012212573550641537, -0.021669628098607063, -0.013630462810397148, 0.01955617032945156, 0.0020632962696254253, 0.00785189587622881, 0.008152863010764122, -0.0017422648379579186, 0.04711137339472771, -0.021656250581145287, 0.0026852949522435665, 0.015516523271799088, 0.013035217300057411, 0.0018960924353450537, -0.03785496577620506, 0.012714185751974583, 0.029641909524798393, -0.04630879685282707, 0.016345854848623276, 0.017710238695144653, 0.03226366639137268, 0.01864658109843731, -0.0004790392122231424, -0.000991519191302359, 0.007283402606844902, 0.00044643445289693773, -0.012740937992930412, -0.021709756925702095, 0.013148915953934193, 0.007858583703637123, 0.0010241239797323942, 0.007029252592474222, -0.01118259783834219, -0.01248678844422102, -0.00018946293857879937, -0.027849484235048294, 0.011717650108039379, 0.009938600473105907, 0.012834572233259678, 0.03611604496836662, 0.012540293857455254, -0.015088480897247791, 0.009691138751804829, -0.019837072119116783, 0.01892748288810253, 0.01570379175245762, -0.006447382736951113, -0.014927965588867664, -0.010955200530588627, -0.01816503331065178, -0.02776922658085823, 0.012225950136780739, 0.0054441592656075954, 0.02671249769628048, -0.016747143119573593, -0.01241321861743927, -0.009651009924709797, 0.003768776310607791, 0.0235289353877306, -0.010152621194720268, 0.027448194101452827, -0.006648027803748846, 0.002586644608527422, 0.0004974316689185798, -0.0021234897430986166, -0.004628204274922609, 0.018338926136493683, 0.002474617911502719, -0.020024340599775314, -0.02188364788889885, -0.0205326396971941, -0.009249720722436905, -0.010299760848283768, -0.0022505647502839565, -0.01009242795407772, -0.009196215309202671, 0.0026267734356224537, 0.013389689847826958, -0.01787075400352478, -0.019302019849419594, 0.03124706819653511, 0.021482359617948532, 0.011510317213833332, -0.024023858830332756, 0.011637392453849316, -0.004979332443326712, 0.02125496231019497, 0.02752845175564289, -0.021027565002441406, 0.007276714313775301, 0.0021017531398683786, 0.007062693126499653, -0.03830976039171219, -0.012613863684237003, 0.011965111829340458, -0.009758020751178265, -0.020893801003694534, -0.0017907539149746299, 0.017402583733201027, -0.0035112821497023106, 0.016024822369217873, 0.005745126400142908, 0.010359954088926315, -0.019288644194602966, 0.0006128023378551006, -0.027849484235048294, -0.015543275512754917, -0.026592111214995384, -0.01320910919457674, 0.024545535445213318, -0.013804354704916477, 0.0019412374822422862, 0.0017890818417072296, 0.024652544409036636, -0.009784772992134094, -0.016332479193806648, -0.02530798502266407, -0.002762208692729473, -0.019475912675261497, 0.031220315024256706, 0.0031434334814548492, -0.007463982794433832, 0.01028638519346714, -0.006360436789691448, 0.015422889031469822, -0.01733570173382759, 0.016934411600232124, -0.005775223020464182, 0.012132315896451473, -0.024451900273561478, 0.015677038580179214, -0.005230138543993235, -0.02599017694592476, 0.009289849549531937, 0.012038681656122208, -0.007637874688953161, 0.03737341985106468, -0.005126472096890211, -0.016773896291851997, -0.01729557290673256, 0.025856412947177887, 0.00813948642462492, -0.0029277405701577663, 0.01583755388855934, -0.014473170973360538, 0.01082143746316433, -0.025856412947177887, -0.014914589002728462, -0.013857860118150711, 0.002666902495548129, -0.022686226293444633, -0.036731354892253876, -0.03239743039011955, -0.00036910263588652015, -0.015770673751831055, -0.007290090434253216, 0.005377277731895447, -0.0015784049173817039, -0.016921035945415497, -5.332890395948198e-06, 0.020398877561092377, 0.019823696464300156, 0.0021636185701936483, 0.01318235695362091, 0.01193167082965374, 0.03670460358262062, -0.01733570173382759, -0.022672850638628006, -0.03410959988832474, -0.0002790215366985649, 0.0008803285891190171, 0.003725303104147315, -0.02613731659948826, -0.003541379002854228, -0.00941692478954792, 0.012687432579696178, 0.010252944193780422, -0.0020750006660819054, 0.005547825712710619, -0.0035213143564760685, 0.003285556798800826, -0.00575850298628211, -0.0007883664802648127, -0.0020816887263208628, 0.005905642174184322, -0.014927965588867664, 0.012740937992930412, -0.028652062639594078, -0.010854878462851048, -0.014767449349164963, 0.015663662925362587, -0.014219020493328571, 0.014433042146265507, 0.009075828827917576, -0.013530140742659569, -0.0027254237793385983, 0.036972127854824066, -0.015864307060837746, -0.00022886035731062293, -0.005855481140315533, -0.0039627328515052795, 0.021468982100486755, 0.020880425348877907, 0.03978115692734718, -0.011249478906393051, -0.017790496349334717, -0.006333684083074331, -0.01744271256029606, -0.0009580784244462848, 0.016894282773137093, 0.0017924259882420301, 0.004240291193127632, 0.01504835207015276, -0.02830427885055542, -0.04178760200738907, 0.00828662607818842, -0.02066640369594097, 0.03250443935394287, 0.01820516213774681, 0.002327478490769863, -0.042964719235897064, 0.013764225877821445, 0.007651251275092363, -0.005116439890116453, 0.009236344136297703, -0.0054575358517467976, -0.0027053593657910824, -0.006701532751321793, -0.003201954998075962, -0.023836590349674225, 0.0008686243090778589, -0.02477293275296688, -0.01603819988667965, -0.01685415394604206, 0.008875183761119843, -0.01417889166623354, -0.019261891022324562, 0.02375633269548416, -0.01946253515779972, -0.003879130817949772, 0.015596780925989151, -0.04149332270026207, -0.014071881771087646, -0.021188080310821533, 0.04563998058438301, 0.013951494358479977, 0.01318235695362091, 0.0029929501470178366, 0.026645615696907043, 0.02641821838915348, -0.01807139813899994, -0.0032721806783229113, -0.01574392057955265, 0.00900894682854414, -0.024946823716163635, 0.03274521604180336, 0.012573733925819397, 0.02071990817785263, 0.028170514851808548, 0.018365677446126938, 0.006032717414200306, 0.030390983447432518, -0.008754797279834747, -0.026016928255558014, 0.0014212332898750901, -0.012908142060041428, -0.0006746677681803703, -0.0030330789741128683, 0.017362454906105995, -0.004594763740897179, 0.00791877694427967, 0.008407012559473515, -0.007116198539733887, 0.004113216418772936, -0.011269544251263142, -0.0078050787560641766, 0.029829178005456924, -0.0019161568488925695, 0.016439488157629967, -0.0014011687599122524, 0.006855360232293606, -0.01565028540790081, 0.002982917707413435, 0.022284938022494316, 0.003414303995668888, 0.019101375713944435, 0.002125161699950695, 0.011637392453849316, -0.007811767049133778, 0.0028324343729764223, 0.007430541794747114, 0.006948994472622871, -0.02734118327498436, -0.015155362896621227, 0.024813061580061913, -0.018445935100317, -0.003949356265366077, -0.026792755350470543, 0.009142709895968437, -0.03627656027674675, 0.02700677700340748, 0.00011934179201489314, -0.032718461006879807, 0.004802096635103226, -0.01995745860040188, -0.009102581068873405, -0.018472688272595406, -0.009931912645697594, 0.02212442271411419, -0.0035012499429285526, 0.04545271024107933, 0.010560599155724049, -0.01197848841547966, -0.018566323444247246, -0.03290573135018349, -0.008855119347572327, -0.0015399480471387506, -0.007637874688953161, 0.014326031319797039, 0.026538604870438576, 0.004360678140074015, -0.020786790177226067, -0.015784049406647682, -0.019783567637205124, -0.02574940212070942, -0.0013242550194263458, 0.020653028041124344, 0.013516764156520367, -0.010640856809914112, 0.0005124799790792167, -0.009925223886966705, 0.008059228770434856, -0.018766967579722404, -0.01870008558034897, -0.033012740314006805, 0.006343716289848089, -0.0025481877382844687, 0.001447149901650846, -0.029160361737012863, 0.042242396622896194, -0.00850064679980278, -5.674482963513583e-05, 0.008119422011077404, -0.0033725029788911343, -0.006226673722267151, -0.004561322741210461, -0.009630945511162281, 0.03758744150400162, -0.018231915310025215, -0.0021920432336628437, 0.013911365531384945, 0.008326754905283451, -0.004601451568305492, 0.019970836117863655, -0.013102098368108273, 0.021937154233455658, -0.005862169433385134, -0.0030548155773431063, -0.012968335300683975, 0.002225484000518918, 0.029106857255101204, -0.013389689847826958, 0.00443090358749032, -0.04724513739347458, -0.020158104598522186, 0.006253426428884268, -0.00160599360242486, 0.015850931406021118, 0.009316601790487766, 0.003561443416401744, -0.005788599606603384, 0.004333925433456898, -0.005798631813377142, -0.020024340599775314, 0.011376554146409035, 0.016653509810566902, -0.010466964915394783, -0.02627107873558998, 0.01504835207015276, 0.02038550190627575, -0.0018509472720324993, -0.0050261495634913445, -0.008259872905910015, 0.02391684800386429, -0.019435783848166466, 0.01966318115592003, -0.015757296234369278, -0.01219919789582491, -0.0026685744524002075, 0.024599039927124977, 0.005788599606603384, -0.022191302850842476, 0.037186149507761, -0.01169089786708355, -0.018566323444247246, -0.006778446491807699, 0.007249961607158184, 0.0017422648379579186, 0.023595815524458885, -0.01299508847296238, 0.03638357296586037, 0.019235137850046158, 0.01840580627322197, -0.007550928741693497, -0.015757296234369278, 0.009243031963706017, -0.014593557454645634, 0.009396860376000404, 0.016051575541496277, 0.009189527481794357, -0.0071563273668289185, 0.014192268252372742, 0.024090738967061043, -0.016934411600232124, -0.03627656027674675, -0.007457294501364231, -0.0038925071712583303, 0.020224984735250473, 0.019382277503609657, -0.02578953094780445, -0.0031568098347634077, -0.023261409252882004, -0.011791219934821129, -0.0029444608371704817, -0.016586627811193466, -0.010928447358310223, 0.02033199556171894, 0.015155362896621227, -0.015222243964672089, 0.013409754261374474, 0.0002589570649433881, 0.0025983487721532583, 0.007029252592474222, 0.027207421138882637, -0.018659956753253937, -0.0051699448376894, -0.004644924774765968, 0.02256583981215954, 0.014165516011416912, -0.006862048525363207, -0.002263941103592515, -0.0028491546399891376, -0.01821853779256344, -0.00905576441437006, -0.018659956753253937, 0.0077917021699249744, 0.03903208300471306, -0.002874235389754176, -0.001876027905382216, 0.02811701036989689, 0.003614948596805334, -0.011965111829340458, -0.004922483116388321, -0.003588195890188217, 0.012720873579382896, 0.012861325405538082, 0.020305242389440536, 0.00675169425085187, -0.024813061580061913, -0.012573733925819397, 0.011510317213833332, -0.010085740126669407, -0.0007515815668739378, -0.004955924116075039, -0.012975024059414864, 0.0013234189245849848, -0.0032036269549280405, -0.025575511157512665, -0.006203265395015478, 0.0004840553447138518, 0.0058688572607934475, -0.013483323156833649, -0.00799234677106142, -0.006975747179239988, -0.015275749377906322, -0.030738767236471176, 0.004410839173942804, -0.0032103152479976416, 0.002225484000518918, -0.00550435297191143, -0.015998071059584618, -0.008534087799489498, -0.016640134155750275, -0.01831217296421528, -0.001065924996510148, 0.013884613290429115, 0.005200041923671961, 0.027929741889238358, -0.004651613067835569, -0.03279871866106987, -0.021361971274018288, -0.0009355059009976685, -0.02656535804271698, -0.02425125613808632, 0.021482359617948532, -0.01262723933905363, 0.0036283249501138926, -0.01089500728994608, 0.00785189587622881, -0.009831590577960014, 0.00653098477050662, -0.011369866319000721, 0.0044074952602386475, -0.020840296521782875, 0.009758020751178265, 0.011476876214146614, -0.029454641044139862, 0.022084292024374008, 0.0063370284624397755, -0.00154245609883219, -0.008306690491735935, -0.005136504303663969, 0.010915071703493595, -0.04053022712469101, 0.012841260991990566, -0.0022037476301193237, -0.002909348113462329, -0.020372124388813972, 0.0024127524811774492, -0.012112251482903957, -0.022325066849589348, 0.012901454232633114, 0.17667433619499207, -0.016198715195059776, -0.01898098737001419, 0.03076552040874958, -0.021281713619828224, 0.008246497251093388, 0.0034912177361547947, 0.011436747387051582, -0.018285419791936874, 0.017268819734454155, -0.01219919789582491, 0.004892386496067047, 0.0020365435630083084, 0.0069623710587620735, 0.024211127310991287, -0.017014671117067337, -0.024371642619371414, -0.005276955664157867, -0.033494286239147186, -0.03095278888940811, -0.004648268688470125, 0.008768172934651375, -0.009149397723376751, -0.005995932500809431, 0.027715720236301422, 0.007236585486680269, -0.00015163305215537548, -0.007831831462681293, 0.014593557454645634, 0.01825866661965847, -0.03464465215802193, -0.01655987650156021, 0.0019529417622834444, 0.024023858830332756, -0.023007258772850037, 0.003079896094277501, 0.00898219458758831, -0.00027463241713121533, 0.03496568277478218, 0.024986952543258667, 0.01195173617452383, 0.01429927907884121, 0.007985658943653107, -0.005678244866430759, -0.0054441592656075954, 0.009677762165665627, 0.004193474072962999, 0.004688397515565157, 0.012085499241948128, -0.005935738794505596, -0.034216608852148056, -0.012246014550328255, 0.03063175641000271, 0.015864307060837746, -0.009577440097928047, 0.001595961395651102, -0.005517729092389345, 0.013510076329112053, -0.0029160361737012863, 0.01361708715558052, -0.00013376312563195825, 0.027448194101452827, -0.005942427087575197, 0.01966318115592003, -0.00796559453010559, -0.001489786896854639, -0.01783062517642975, 0.004123248625546694, -0.016011446714401245, -0.026070434600114822, 0.008373571559786797, -0.017456088215112686, 0.005618051625788212, -0.010346578434109688, -0.003822281491011381, -0.0191816333681345, 0.021816765889525414, 0.006343716289848089, -0.011744403280317783, 8.156416151905432e-05, 0.007076069712638855, -0.0168006494641304, -0.015489771030843258, -0.022967129945755005, -0.024839812889695168, -0.015436265617609024, 0.029775673523545265, 0.012941583059728146, 0.0013643839629366994, -0.013911365531384945, 0.009918536059558392, -0.018472688272595406, -0.008092669770121574, -0.00821305625140667, -0.0067215971648693085, -0.0033808632288128138, -0.006149759981781244, 0.0211479514837265, -0.006500888150185347, -0.008988882414996624, -0.0235289353877306, 0.029936188831925392, 0.0014137091347947717, -0.0021903712768107653, 0.005842104554176331, 0.007356972433626652, -0.009891783818602562, 0.011202662251889706, -0.0032353957649320364, -0.0214422307908535, -0.012279455550014973, -0.029401136562228203, 0.006082878448069096, -0.005343837197870016, 0.022472206503152847, 0.0020816887263208628, -0.004233602900058031, -0.01613183319568634, -0.001770689501427114, 0.000636210897937417, -0.0039292918518185616, -0.028197268024086952, -0.017790496349334717, 0.01627897284924984, -0.0022756452672183514, -0.010754555463790894, 0.012553669512271881, -0.00763118639588356, -0.015877684578299522, -0.009570752270519733, 0.020880425348877907, -0.012888077646493912, 0.004631548188626766, 0.015717167407274246, 0.005521073006093502, 0.028331032022833824, -0.01657325215637684, -0.02183014340698719, -0.020733285695314407, 0.003976108971983194, 0.0014906228752806783, 0.01985044777393341, 0.004440935794264078, 0.005360557697713375, 0.02680613100528717, -0.014794202521443367, 0.041279301047325134, -0.01038670726120472, -0.0410652793943882, -0.03873780369758606, -0.014192268252372742, 0.0054441592656075954, 0.011062211357057095, 0.0009998794412240386, 0.015864307060837746, -0.016987917944788933, -0.014259149320423603, -0.06575795263051987, 0.016479616984725, 0.027742473408579826, -0.018713461235165596, 0.012031993828713894, 0.01931539550423622, -0.015141986310482025, -2.542022048146464e-05, -0.012286143377423286, -0.17110979557037354, -0.013456570915877819, 0.0020281835459172726, -0.003879130817949772, 0.022766485810279846, -0.008052540943026543, 0.022726355120539665, 0.024170998483896255, -0.003026390913873911, -0.017215315252542496, 0.022592592984437943, -0.020010964944958687, -0.043151985853910446, -0.007624498568475246, 0.006420630495995283, 0.011650769039988518, -0.01074786763638258, 0.006413942202925682, 0.019676556810736656, 0.024478653445839882, 0.026672368869185448, -0.02651185169816017, 0.025976799428462982, 0.017509594559669495, 0.022819990292191505, 0.028625309467315674, -0.015971317887306213, 0.007952217943966389, 3.9893810026114807e-05, -0.003822281491011381, -0.013148915953934193, -0.0021335219498723745, 0.020318619906902313, 0.005019461270421743, 0.016867531463503838, 0.01466043945401907, -0.011276232078671455, 0.0017723614582791924, 0.0030330789741128683, 0.0005016117356717587, 0.015516523271799088, 0.01898098737001419, 0.013242550194263458, -0.0011319705517962575, -0.006487512029707432, 0.017028046771883965, 0.01502159982919693, 0.04133280739188194, 0.016332479193806648, -0.009289849549531937, -0.014232397079467773, -0.036891870200634, -0.00683529581874609, -0.006417286116629839, -0.01583755388855934, 0.023435300216078758, -0.009390171617269516, 0.009858342818915844, -0.022927001118659973, -0.0019211729522794485, 0.0026802788488566875, -0.04563998058438301, 0.01641273684799671, 0.008607657626271248, -0.030685262754559517, -0.013804354704916477, -0.01908799819648266, 0.00803916435688734, -0.03245093673467636, 0.012794443406164646, 0.00021151294640731066, 0.004965956322848797, -0.0018375710351392627, -0.01552989985793829, -0.01436616014689207, 0.010881630703806877, 0.0011353145819157362, 0.009129333309829235, -0.017121680080890656, -0.0007687199977226555, -0.0034644650295376778, 0.044650133699178696, -0.010607416741549969, -0.011537070386111736, 0.012734250165522099, 0.001780721708200872, 0.028411289677023888, -0.0017940979450941086, 0.016867531463503838, 0.002496354514732957, 0.016024822369217873, -0.03076552040874958, 0.008748108521103859, -0.01379097905009985, 0.006009308621287346, 0.02057277038693428, -0.013403065502643585, -0.0085474643856287, -0.0038958510849624872, -0.014700568281114101, -0.0021218175534158945, 0.017736991867423058, -0.004404150880873203, 0.01570379175245762, 0.022137798368930817, -0.006611242890357971, 0.018178408965468407, -0.021950529888272285, 0.04703111574053764, -0.016747143119573593, 0.009858342818915844, -0.014098634012043476, 0.012098874896764755, 0.012794443406164646, 0.02096068300306797, 0.007437230087816715, -0.01074786763638258, 0.006196577101945877, 0.020505888387560844, -0.011523693799972534, 0.048903800547122955, -0.008320067077875137, 0.008025787770748138, 0.0016987917479127645, -0.0018626515520736575, -0.0024094083346426487, -0.12541630864143372, -0.035768263041973114, 0.00977808516472578, 0.010420148260891438, -0.006701532751321793, 0.004461000207811594, 0.006390533410012722, 0.030685262754559517, -0.01718856208026409, 0.022927001118659973, -0.008460517972707748, -0.02071990817785263, -0.0001394062564941123, -0.02375633269548416, 0.0185930747538805, -0.004544602241367102, 0.0035948841832578182, -0.019984211772680283, -0.011684209108352661, 0.02371620386838913, 0.0024211127310991287, -0.009771396405994892, 0.02192377671599388, 6.453025707742199e-05, -0.01212562806904316, 0.01734907738864422, -0.007865272462368011, 0.006875425111502409, 0.0012715858174487948, -0.010687674395740032, 0.000980651006102562, -0.001403676811605692, 0.019328773021697998, -0.0054508475586771965, 0.0013602038379758596, -0.019475912675261497, -0.017549723386764526, -0.003849034197628498, 0.03812249377369881, -0.019783567637205124, 0.005343837197870016, -0.0039794533513486385, -0.007764949928969145, 0.0014672143151983619, -0.001924517098814249, -0.008005723357200623, 0.010881630703806877, 0.022244809195399284, 0.01637260802090168, -0.0008895248174667358, -0.020345373079180717, -0.022712979465723038, -0.01637260802090168, 0.010687674395740032, 0.0431787371635437, -0.006363781169056892, 0.014861083589494228, -0.008045852184295654, -0.012426595203578472, 0.01700129359960556, -0.012975024059414864, -0.011383242905139923, -0.004755279514938593, 0.01946253515779972, 0.020693156868219376, 0.007905401289463043, -0.005985900294035673, -0.008714667521417141, 0.0227932371199131, -0.0005730914417654276, 0.011289608664810658, 0.0092229675501585, 0.0009998794412240386, 0.00926978513598442, -0.02269960381090641, -0.01026631984859705, -0.022619346156716347, -0.012433283030986786, 0.020412253215909004, -0.04087801277637482, -0.011797907762229443, -0.025762779638171196, 0.021816765889525414, -0.009945289231836796, 0.022739732638001442, 0.004277076106518507, 0.015208868309855461, 0.024906694889068604, 0.00944367703050375, -0.003237067721784115, -0.000943030056077987, 0.009858342818915844, 0.013897988945245743, -0.02216455154120922, -0.001134478603489697, 0.00012602994684129953, 0.005420750938355923, 0.0019429094390943646, 0.00821305625140667, 0.010480341501533985, 0.011777843348681927, -0.02116132713854313, -0.015596780925989151, 0.02062627486884594, -0.0030932724475860596, -0.008032475598156452, -0.004042990505695343, 0.004360678140074015, 0.008099357597529888, -0.00818630401045084, -0.011216038838028908, 0.022833365947008133, -0.03392232954502106, 0.030979542061686516, -0.013510076329112053, -0.013603710569441319, -0.008955441415309906, -0.015101857483386993, 0.021562617272138596, -0.014499923214316368, 0.017014671117067337, 0.004370710346847773, 0.011998552829027176, -0.01840580627322197, 0.0038557222578674555, 0.00701587600633502, 0.0054508475586771965, -0.006741661578416824, 0.0011846397537738085, 0.011858101934194565, -0.011349801905453205, -0.013215797021985054, 0.03261145204305649, -0.012687432579696178, -0.026244325563311577, -0.002809025812894106, 0.0012423250591382384, -0.005400686524808407, -0.0005956639652140439, 0.01157051045447588, 0.017469465732574463, 0.050883494317531586, -0.03188912943005562, -0.015677038580179214, 0.017937636002898216, 0.005470911972224712, -0.0030615036375820637, 0.007925465703010559, -0.02921386808156967, 0.018967611715197563, 0.03341402858495712, -0.007082758005708456, -0.015770673751831055, 0.008741420693695545, -0.0032404118683189154, -0.012252702377736568, -0.029829178005456924, -0.027902988716959953, 0.025321360677480698, 0.009457053616642952, -0.013663903810083866, -0.034938931465148926, 0.010393395088613033, -0.00048363732639700174, 0.02449202910065651, 0.0060929106548428535, -0.009891783818602562, 0.0010425164364278316, -0.014205644838511944, 0.008962130174040794, 0.011289608664810658, -0.008714667521417141, -0.011450123973190784, -0.0037353355437517166, -0.0032036269549280405, 0.01835230179131031, 0.00770475622266531, -0.0020632962696254253, -0.00321198720484972, -0.023823212832212448, -0.008781549520790577, 0.007029252592474222, 0.015088480897247791, 0.006226673722267151, -0.018285419791936874, 0.007290090434253216, 0.006758382078260183, 0.0034209920559078455, -0.019529417157173157, 0.0037854965776205063, 0.0003975272993557155, 0.014580180868506432, 0.00573509419336915, 0.007845208048820496, -0.024077363312244415, -0.006490855943411589, -0.026016928255558014, 0.020840296521782875, -0.00941692478954792, 0.014459794387221336, -0.005494320765137672, 0.018606452271342278, -0.00900894682854414, 0.010567286983132362, 0.013804354704916477, -0.0015458001289516687, -0.028331032022833824, 0.0012038681888952851, 0.0035112821497023106, -0.05163256824016571, -0.003725303104147315, 0.007818454876542091, 0.005210074130445719, 0.014205644838511944, -0.02096068300306797, 0.011202662251889706, -0.024451900273561478, 0.033066246658563614, 0.003725303104147315, -0.013423129916191101, -0.034029342234134674, 0.0005676572909578681, 0.017803872004151344, 0.02719404362142086, 0.009075828827917576, -0.01705479994416237, 0.033200010657310486, 0.01540951244533062, 0.006129695568233728, -0.010306449607014656, 0.010767932049930096, -0.009049075655639172, 0.021562617272138596, 0.018526192754507065, -0.011456811800599098, -0.014018376357853413, -0.007925465703010559, -0.012299519963562489, 0.0002175740955863148, 0.036544088274240494, -0.017509594559669495, 0.03488542512059212, -0.006637995596975088, 0.013316120021045208, 0.004965956322848797, -0.006868736818432808, 0.010955200530588627, -0.017402583733201027, 0.0006938962615095079, -0.035768263041973114, -0.021843519061803818, 0.02299388311803341, 0.008005723357200623, 0.039968423545360565, -0.030845778062939644, -0.011450123973190784, 0.009149397723376751, -0.017228690907359123, 0.018673332408070564, -0.011222726665437222, 0.00018329729209654033, 0.04400806874036789, -0.007544240448623896, 0.03202289342880249, -0.0034945618826895952, -0.023930223658680916, -0.003772120224311948, -0.002812369726598263, -0.0005438307416625321, -0.01744271256029606, -0.05091024935245514, 0.00977808516472578, 0.005577922333031893, -0.005698309279978275, -0.031461089849472046, 0.012145692482590675, -0.003282212885096669, -0.011015393771231174, 0.007958906702697277, 0.006741661578416824, -0.003427680116146803, -0.009396860376000404, 0.012653992511332035, -0.025080587714910507, -0.020599521696567535, 0.013951494358479977, -0.008226432837545872, -0.017951011657714844, 0.009744644165039062, -0.03328026831150055};
uint8_t q4(uint8_t a, uint8_t b) {
a &= 0x0F;
b &= 0x0F;
uint8_t result = (a << 4) | b;
return result;
}
int main() {
block_q4_0 bananas_q4[48];
block_q4_0 apples_q4[48];
block_q4_0 nonsequitur_q4[48];
quantize_row_q4_0(bananas, bananas_q4, 1536);
quantize_row_q4_0(apples, apples_q4, 1536);
quantize_row_q4_0(nonsequitur, nonsequitur_q4, 1536);
float d_b_a, d_a_n, d_b_n;
ggml_vec_dot_q4_0(1536, &d_b_a, bananas_q4, apples_q4);
ggml_vec_dot_q4_0(1536, &d_a_n, apples_q4, nonsequitur_q4);
ggml_vec_dot_q4_0(1536, &d_b_n, bananas_q4, nonsequitur_q4);
printf("q4-similarity(bananas, apples): %f\n", d_b_a);
printf("q4-similarity(bananas, nonsequitur): %f\n", d_b_n);
printf("q4-similarity(apples, nonsequitur): %f\n", d_a_n);
size_t input_size = 48 * sizeof(block_q4_0);
size_t output_size;
char * encoded_data = base64_encode((const unsigned char *) bananas_q4, input_size, &output_size);
printf("base64-encoded q4 embedding of 'bananas': %s\n", encoded_data);
/* uint8_t a = q4(1, 2); */
/* uint8_t b = q4(3, 10); */
/* printf("%d\n", dist(a, b)); */
}
static void quantize_row_q4_0(const float * restrict x, void * restrict vy, int k) {
assert(k % QK == 0);
const int nb = k / QK;
block_q4_0 * restrict y = vy;
for (int i = 0; i < nb; i++) {
float32x4_t srcv [8];
float32x4_t asrcv[8];
float32x4_t amaxv[8];
for (int l = 0; l < 8; l++) srcv[l] = vld1q_f32(x + i*32 + 4*l);
for (int l = 0; l < 8; l++) asrcv[l] = vabsq_f32(srcv[l]);
for (int l = 0; l < 4; l++) amaxv[2*l] = vmaxq_f32(asrcv[2*l], asrcv[2*l+1]);
for (int l = 0; l < 2; l++) amaxv[4*l] = vmaxq_f32(amaxv[4*l], amaxv[4*l+2]);
for (int l = 0; l < 1; l++) amaxv[8*l] = vmaxq_f32(amaxv[8*l], amaxv[8*l+4]);
// absolute max
const float amax = MAX(
MAX(vgetq_lane_f32(amaxv[0], 0), vgetq_lane_f32(amaxv[0], 1)),
MAX(vgetq_lane_f32(amaxv[0], 2), vgetq_lane_f32(amaxv[0], 3)));
const float d = amax / ((1 << 3) - 1);
const float id = d ? 1.0f/d : 0.0f;
y[i].d = d;
for (int l = 0; l < 8; l++) {
const float32x4_t v = vmulq_n_f32(srcv[l], id);
const float32x4_t vf = vaddq_f32(v, vdupq_n_f32(8.5f));
const int32x4_t vi = vcvtq_s32_f32(vf);
y[i].qs[2*l + 0] = vgetq_lane_s32(vi, 0) | (vgetq_lane_s32(vi, 1) << 4);
y[i].qs[2*l + 1] = vgetq_lane_s32(vi, 2) | (vgetq_lane_s32(vi, 3) << 4);
}
}
}
static void ggml_vec_dot_q4_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy) {
const int nb = n / QK;
assert(n % QK == 0);
assert(nb % 2 == 0);
const block_q4_0 * restrict x = vx;
const block_q4_0 * restrict y = vy;
float sumf = 0.0;
float sum0 = 0.0f;
float sum1 = 0.0f;
for (int i = 0; i < nb; i += 2) {
const block_q4_0 * restrict x0 = &x[i + 0];
const block_q4_0 * restrict y0 = &y[i + 0];
const block_q4_0 * restrict x1 = &x[i + 1];
const block_q4_0 * restrict y1 = &y[i + 1];
const uint8x16_t m4b = vdupq_n_u8(0xf);
const int8x16_t s8b = vdupq_n_s8(0x8);
const uint8x16_t v0_0 = vld1q_u8(x0->qs);
const uint8x16_t v1_0 = vld1q_u8(y0->qs);
const uint8x16_t v0_1 = vld1q_u8(x1->qs);
const uint8x16_t v1_1 = vld1q_u8(y1->qs);
// 4-bit -> 8-bit
const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8(v0_0, m4b));
const int8x16_t v1_0l = vreinterpretq_s8_u8(vandq_u8(v1_0, m4b));
const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4));
const int8x16_t v1_0h = vreinterpretq_s8_u8(vshrq_n_u8(v1_0, 4));
const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8(v0_1, m4b));
const int8x16_t v1_1l = vreinterpretq_s8_u8(vandq_u8(v1_1, m4b));
const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4));
const int8x16_t v1_1h = vreinterpretq_s8_u8(vshrq_n_u8(v1_1, 4));
// sub 8
const int8x16_t v0_0ls = vsubq_s8(v0_0l, s8b);
const int8x16_t v1_0ls = vsubq_s8(v1_0l, s8b);
const int8x16_t v0_0hs = vsubq_s8(v0_0h, s8b);
const int8x16_t v1_0hs = vsubq_s8(v1_0h, s8b);
const int8x16_t v0_1ls = vsubq_s8(v0_1l, s8b);
const int8x16_t v1_1ls = vsubq_s8(v1_1l, s8b);
const int8x16_t v0_1hs = vsubq_s8(v0_1h, s8b);
const int8x16_t v1_1hs = vsubq_s8(v1_1h, s8b);
#if defined(__ARM_FEATURE_DOTPROD)
// dot product into int16x8_t
int32x4_t p_0 = vdotq_s32(vdupq_n_s32(0), v0_0ls, v1_0ls);
int32x4_t p_1 = vdotq_s32(vdupq_n_s32(0), v0_1ls, v1_1ls);
p_0 = vdotq_s32(p_0, v0_0hs, v1_0hs);
p_1 = vdotq_s32(p_1, v0_1hs, v1_1hs);
// scalar
#if defined(__ARM_FEATURE_QRDMX)
sum0 += x0->d * y0->d * vaddvq_s32(p_0);
sum1 += x1->d * y1->d * vaddvq_s32(p_1);
#else
sum0 += x0->d * y0->d * (vgetq_lane_s32(p_0, 0) + vgetq_lane_s32(p_0, 1) + vgetq_lane_s32(p_0, 2) + vgetq_lane_s32(p_0, 3));
sum1 += x1->d * y1->d * (vgetq_lane_s32(p_1, 0) + vgetq_lane_s32(p_1, 1) + vgetq_lane_s32(p_1, 2) + vgetq_lane_s32(p_1, 3));
#endif
#else
const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0ls), vget_low_s8 (v1_0ls));
const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0ls), vget_high_s8(v1_0ls));
const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0hs), vget_low_s8 (v1_0hs));
const int16x8_t ph0h = vmull_s8(vget_high_s8(v0_0hs), vget_high_s8(v1_0hs));
const int16x8_t pl1l = vmull_s8(vget_low_s8 (v0_1ls), vget_low_s8 (v1_1ls));
const int16x8_t pl1h = vmull_s8(vget_high_s8(v0_1ls), vget_high_s8(v1_1ls));
const int16x8_t ph1l = vmull_s8(vget_low_s8 (v0_1hs), vget_low_s8 (v1_1hs));
const int16x8_t ph1h = vmull_s8(vget_high_s8(v0_1hs), vget_high_s8(v1_1hs));
const int16x8_t pl_0 = vaddq_s16(pl0l, pl0h);
const int16x8_t ph_0 = vaddq_s16(ph0l, ph0h);
const int16x8_t pl_1 = vaddq_s16(pl1l, pl1h);
const int16x8_t ph_1 = vaddq_s16(ph1l, ph1h);
const int16x8_t p_0 = vaddq_s16(pl_0, ph_0);
const int16x8_t p_1 = vaddq_s16(pl_1, ph_1);
// scalar
#if defined(__ARM_FEATURE_QRDMX)
sum0 += x0->d * y0->d * vaddvq_s16(p_0);
sum1 += x1->d * y1->d * vaddvq_s16(p_1);
#else
sum0 += x0->d * y0->d * (vgetq_lane_s16(p_0, 0) + vgetq_lane_s16(p_0, 1) + vgetq_lane_s16(p_0, 2) + vgetq_lane_s16(p_0, 3) + vgetq_lane_s16(p_0, 4) + vgetq_lane_s16(p_0, 5) + vgetq_lane_s16(p_0, 6) + vgetq_lane_s16(p_0, 7));
sum1 += x1->d * y1->d * (vgetq_lane_s16(p_1, 0) + vgetq_lane_s16(p_1, 1) + vgetq_lane_s16(p_1, 2) + vgetq_lane_s16(p_1, 3) + vgetq_lane_s16(p_1, 4) + vgetq_lane_s16(p_1, 5) + vgetq_lane_s16(p_1, 6) + vgetq_lane_s16(p_1, 7));
#endif
#endif
}
sumf = sum0 + sum1;
*s = sumf;
}
OBJS := lol.o b64.o
lol: $(OBJS)
cc -o $@ $(OBJS)
%.o: %.c
cc -c $< -o $@
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment