From 7bba1310d381273fc33cc29f26b03fd5fbd659b0 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Wed, 12 Sep 2018 16:37:18 -0700 Subject: [PATCH 001/101] add example json files --- employees.json | 4 ++++ employees_truncated.json | 2 ++ 2 files changed, 6 insertions(+) create mode 100644 employees.json create mode 100644 employees_truncated.json diff --git a/employees.json b/employees.json new file mode 100644 index 0000000000..8d30ae8ca4 --- /dev/null +++ b/employees.json @@ -0,0 +1,4 @@ +{"name":"Michael", "salary":3000} +{"name":"Andy", "salary":4500} +{"name":"Justin", "salary":3500} +{"name":"Berta", "salary":4000} \ No newline at end of file diff --git a/employees_truncated.json b/employees_truncated.json new file mode 100644 index 0000000000..9faa24b368 --- /dev/null +++ b/employees_truncated.json @@ -0,0 +1,2 @@ +{"name":"Michael", "salary":3000} +{"name":"Andy", "salary":4500} \ No newline at end of file From 9ef3d1a35c4321a761a5f59024f1b83114f445c6 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Thu, 13 Sep 2018 06:45:52 +0000 Subject: [PATCH 002/101] change json --- employees_truncated.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/employees_truncated.json b/employees_truncated.json index 9faa24b368..9cc37235e2 100644 --- a/employees_truncated.json +++ b/employees_truncated.json @@ -1,2 +1,2 @@ -{"name":"Michael", "salary":3000} -{"name":"Andy", "salary":4500} \ No newline at end of file +{"name":"Michael", "family":3} +{"name":"Andy", "family":4} From c6d1447749ef9d7438f2f062bde5af3c743f9666 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Wed, 12 Sep 2018 23:46:32 -0700 Subject: [PATCH 003/101] increase size of dataset --- .tags | 1430 +++++++++++++++++ employees.json | 14 +- employees_truncated.json | 5 + .../cs/rise/opaque/execution/operators.scala | 3 + 4 files changed, 1451 insertions(+), 1 deletion(-) create mode 100644 .tags diff --git a/.tags b/.tags new file mode 100644 index 0000000000..73362fa771 --- /dev/null +++ b/.tags @@ -0,0 +1,1430 @@ +!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ +!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ +!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/ +!_TAG_PROGRAM_NAME Exuberant Ctags // +!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ +!_TAG_PROGRAM_VERSION 5.8 // +AES_BLOCK_SIZE src/enclave/Enclave/sgxaes.h /^const size_t AES_BLOCK_SIZE = 16;$/;" v +AES_MAX_EXP_KEY_SIZE src/enclave/Enclave/sgxaes.h /^const size_t AES_MAX_EXP_KEY_SIZE = 8*15;$/;" v +AGGREGATE_H src/enclave/Enclave/Aggregate.h /^#define AGGREGATE_H$/;" d +Aad src/enclave/Enclave/sgxaes.h /^ Aad,$/;" e enum:State +AadFinal src/enclave/Enclave/sgxaes.h /^ AadFinal,$/;" e enum:State +AesGcm src/enclave/Enclave/sgxaes.cpp /^AesGcm::AesGcm(const AesGcm& other) {$/;" f class:AesGcm +AesGcm src/enclave/Enclave/sgxaes.cpp /^AesGcm::AesGcm(const KeySchedule* ks, const unsigned char* iv, size_t iv_len) {$/;" f class:AesGcm +AesGcm src/enclave/Enclave/sgxaes.h /^struct AesGcm {$/;" s +AggregateExpressionEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ AggregateExpressionEvaluator(const tuix::AggregateExpr *expr) : builder() {$/;" f class:AggregateExpressionEvaluator +AggregateExpressionEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^class AggregateExpressionEvaluator {$/;" c +AllocObject src/enclave/Include/jni.h /^ jobject (JNICALL *AllocObject)$/;" m struct:JNINativeInterface_ +AllocObject src/enclave/Include/jni.h /^ jobject AllocObject(jclass clazz) {$/;" f struct:JNIEnv_ +AttachCurrentThread src/enclave/Include/jni.h /^ jint (JNICALL *AttachCurrentThread)(JavaVM *vm, void **penv, void *args);$/;" m struct:JNIInvokeInterface_ +AttachCurrentThread src/enclave/Include/jni.h /^ jint AttachCurrentThread(void **penv, void *args) {$/;" f struct:JavaVM_ +AttachCurrentThreadAsDaemon src/enclave/Include/jni.h /^ jint (JNICALL *AttachCurrentThreadAsDaemon)(JavaVM *vm, void **penv, void *args);$/;" m struct:JNIInvokeInterface_ +AttachCurrentThreadAsDaemon src/enclave/Include/jni.h /^ jint AttachCurrentThreadAsDaemon(void **penv, void *args) {$/;" f struct:JavaVM_ +CALCULATE_POWERS_OF_H src/enclave/Enclave/sgxaes_asm.S /^CALCULATE_POWERS_OF_H:$/;" l +COMMON_H src/enclave/Common/common.h /^#define COMMON_H$/;" d +CRYPTO_H src/enclave/Enclave/Crypto.h /^#define CRYPTO_H$/;" d +CallBooleanMethod src/enclave/Include/jni.h /^ jboolean (JNICALL *CallBooleanMethod)$/;" m struct:JNINativeInterface_ +CallBooleanMethod src/enclave/Include/jni.h /^ jboolean CallBooleanMethod(jobject obj,$/;" f struct:JNIEnv_ +CallBooleanMethodA src/enclave/Include/jni.h /^ jboolean (JNICALL *CallBooleanMethodA)$/;" m struct:JNINativeInterface_ +CallBooleanMethodA src/enclave/Include/jni.h /^ jboolean CallBooleanMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallBooleanMethodV src/enclave/Include/jni.h /^ jboolean (JNICALL *CallBooleanMethodV)$/;" m struct:JNINativeInterface_ +CallBooleanMethodV src/enclave/Include/jni.h /^ jboolean CallBooleanMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallByteMethod src/enclave/Include/jni.h /^ jbyte (JNICALL *CallByteMethod)$/;" m struct:JNINativeInterface_ +CallByteMethod src/enclave/Include/jni.h /^ jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ +CallByteMethodA src/enclave/Include/jni.h /^ jbyte (JNICALL *CallByteMethodA)$/;" m struct:JNINativeInterface_ +CallByteMethodA src/enclave/Include/jni.h /^ jbyte CallByteMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallByteMethodV src/enclave/Include/jni.h /^ jbyte (JNICALL *CallByteMethodV)$/;" m struct:JNINativeInterface_ +CallByteMethodV src/enclave/Include/jni.h /^ jbyte CallByteMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallCharMethod src/enclave/Include/jni.h /^ jchar (JNICALL *CallCharMethod)$/;" m struct:JNINativeInterface_ +CallCharMethod src/enclave/Include/jni.h /^ jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ +CallCharMethodA src/enclave/Include/jni.h /^ jchar (JNICALL *CallCharMethodA)$/;" m struct:JNINativeInterface_ +CallCharMethodA src/enclave/Include/jni.h /^ jchar CallCharMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallCharMethodV src/enclave/Include/jni.h /^ jchar (JNICALL *CallCharMethodV)$/;" m struct:JNINativeInterface_ +CallCharMethodV src/enclave/Include/jni.h /^ jchar CallCharMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallDoubleMethod src/enclave/Include/jni.h /^ jdouble (JNICALL *CallDoubleMethod)$/;" m struct:JNINativeInterface_ +CallDoubleMethod src/enclave/Include/jni.h /^ jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ +CallDoubleMethodA src/enclave/Include/jni.h /^ jdouble (JNICALL *CallDoubleMethodA)$/;" m struct:JNINativeInterface_ +CallDoubleMethodA src/enclave/Include/jni.h /^ jdouble CallDoubleMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallDoubleMethodV src/enclave/Include/jni.h /^ jdouble (JNICALL *CallDoubleMethodV)$/;" m struct:JNINativeInterface_ +CallDoubleMethodV src/enclave/Include/jni.h /^ jdouble CallDoubleMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallFloatMethod src/enclave/Include/jni.h /^ jfloat (JNICALL *CallFloatMethod)$/;" m struct:JNINativeInterface_ +CallFloatMethod src/enclave/Include/jni.h /^ jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ +CallFloatMethodA src/enclave/Include/jni.h /^ jfloat (JNICALL *CallFloatMethodA)$/;" m struct:JNINativeInterface_ +CallFloatMethodA src/enclave/Include/jni.h /^ jfloat CallFloatMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallFloatMethodV src/enclave/Include/jni.h /^ jfloat (JNICALL *CallFloatMethodV)$/;" m struct:JNINativeInterface_ +CallFloatMethodV src/enclave/Include/jni.h /^ jfloat CallFloatMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallIntMethod src/enclave/Include/jni.h /^ jint (JNICALL *CallIntMethod)$/;" m struct:JNINativeInterface_ +CallIntMethod src/enclave/Include/jni.h /^ jint CallIntMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ +CallIntMethodA src/enclave/Include/jni.h /^ jint (JNICALL *CallIntMethodA)$/;" m struct:JNINativeInterface_ +CallIntMethodA src/enclave/Include/jni.h /^ jint CallIntMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallIntMethodV src/enclave/Include/jni.h /^ jint (JNICALL *CallIntMethodV)$/;" m struct:JNINativeInterface_ +CallIntMethodV src/enclave/Include/jni.h /^ jint CallIntMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallLongMethod src/enclave/Include/jni.h /^ jlong (JNICALL *CallLongMethod)$/;" m struct:JNINativeInterface_ +CallLongMethod src/enclave/Include/jni.h /^ jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ +CallLongMethodA src/enclave/Include/jni.h /^ jlong (JNICALL *CallLongMethodA)$/;" m struct:JNINativeInterface_ +CallLongMethodA src/enclave/Include/jni.h /^ jlong CallLongMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallLongMethodV src/enclave/Include/jni.h /^ jlong (JNICALL *CallLongMethodV)$/;" m struct:JNINativeInterface_ +CallLongMethodV src/enclave/Include/jni.h /^ jlong CallLongMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallNonvirtualBooleanMethod src/enclave/Include/jni.h /^ jboolean (JNICALL *CallNonvirtualBooleanMethod)$/;" m struct:JNINativeInterface_ +CallNonvirtualBooleanMethod src/enclave/Include/jni.h /^ jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualBooleanMethodA src/enclave/Include/jni.h /^ jboolean (JNICALL *CallNonvirtualBooleanMethodA)$/;" m struct:JNINativeInterface_ +CallNonvirtualBooleanMethodA src/enclave/Include/jni.h /^ jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualBooleanMethodV src/enclave/Include/jni.h /^ jboolean (JNICALL *CallNonvirtualBooleanMethodV)$/;" m struct:JNINativeInterface_ +CallNonvirtualBooleanMethodV src/enclave/Include/jni.h /^ jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualByteMethod src/enclave/Include/jni.h /^ jbyte (JNICALL *CallNonvirtualByteMethod)$/;" m struct:JNINativeInterface_ +CallNonvirtualByteMethod src/enclave/Include/jni.h /^ jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualByteMethodA src/enclave/Include/jni.h /^ jbyte (JNICALL *CallNonvirtualByteMethodA)$/;" m struct:JNINativeInterface_ +CallNonvirtualByteMethodA src/enclave/Include/jni.h /^ jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualByteMethodV src/enclave/Include/jni.h /^ jbyte (JNICALL *CallNonvirtualByteMethodV)$/;" m struct:JNINativeInterface_ +CallNonvirtualByteMethodV src/enclave/Include/jni.h /^ jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualCharMethod src/enclave/Include/jni.h /^ jchar (JNICALL *CallNonvirtualCharMethod)$/;" m struct:JNINativeInterface_ +CallNonvirtualCharMethod src/enclave/Include/jni.h /^ jchar CallNonvirtualCharMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualCharMethodA src/enclave/Include/jni.h /^ jchar (JNICALL *CallNonvirtualCharMethodA)$/;" m struct:JNINativeInterface_ +CallNonvirtualCharMethodA src/enclave/Include/jni.h /^ jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualCharMethodV src/enclave/Include/jni.h /^ jchar (JNICALL *CallNonvirtualCharMethodV)$/;" m struct:JNINativeInterface_ +CallNonvirtualCharMethodV src/enclave/Include/jni.h /^ jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualDoubleMethod src/enclave/Include/jni.h /^ jdouble (JNICALL *CallNonvirtualDoubleMethod)$/;" m struct:JNINativeInterface_ +CallNonvirtualDoubleMethod src/enclave/Include/jni.h /^ jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualDoubleMethodA src/enclave/Include/jni.h /^ jdouble (JNICALL *CallNonvirtualDoubleMethodA)$/;" m struct:JNINativeInterface_ +CallNonvirtualDoubleMethodA src/enclave/Include/jni.h /^ jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualDoubleMethodV src/enclave/Include/jni.h /^ jdouble (JNICALL *CallNonvirtualDoubleMethodV)$/;" m struct:JNINativeInterface_ +CallNonvirtualDoubleMethodV src/enclave/Include/jni.h /^ jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualFloatMethod src/enclave/Include/jni.h /^ jfloat (JNICALL *CallNonvirtualFloatMethod)$/;" m struct:JNINativeInterface_ +CallNonvirtualFloatMethod src/enclave/Include/jni.h /^ jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualFloatMethodA src/enclave/Include/jni.h /^ jfloat (JNICALL *CallNonvirtualFloatMethodA)$/;" m struct:JNINativeInterface_ +CallNonvirtualFloatMethodA src/enclave/Include/jni.h /^ jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualFloatMethodV src/enclave/Include/jni.h /^ jfloat (JNICALL *CallNonvirtualFloatMethodV)$/;" m struct:JNINativeInterface_ +CallNonvirtualFloatMethodV src/enclave/Include/jni.h /^ jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualIntMethod src/enclave/Include/jni.h /^ jint (JNICALL *CallNonvirtualIntMethod)$/;" m struct:JNINativeInterface_ +CallNonvirtualIntMethod src/enclave/Include/jni.h /^ jint CallNonvirtualIntMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualIntMethodA src/enclave/Include/jni.h /^ jint (JNICALL *CallNonvirtualIntMethodA)$/;" m struct:JNINativeInterface_ +CallNonvirtualIntMethodA src/enclave/Include/jni.h /^ jint CallNonvirtualIntMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualIntMethodV src/enclave/Include/jni.h /^ jint (JNICALL *CallNonvirtualIntMethodV)$/;" m struct:JNINativeInterface_ +CallNonvirtualIntMethodV src/enclave/Include/jni.h /^ jint CallNonvirtualIntMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualLongMethod src/enclave/Include/jni.h /^ jlong (JNICALL *CallNonvirtualLongMethod)$/;" m struct:JNINativeInterface_ +CallNonvirtualLongMethod src/enclave/Include/jni.h /^ jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualLongMethodA src/enclave/Include/jni.h /^ jlong (JNICALL *CallNonvirtualLongMethodA)$/;" m struct:JNINativeInterface_ +CallNonvirtualLongMethodA src/enclave/Include/jni.h /^ jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualLongMethodV src/enclave/Include/jni.h /^ jlong (JNICALL *CallNonvirtualLongMethodV)$/;" m struct:JNINativeInterface_ +CallNonvirtualLongMethodV src/enclave/Include/jni.h /^ jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualObjectMethod src/enclave/Include/jni.h /^ jobject (JNICALL *CallNonvirtualObjectMethod)$/;" m struct:JNINativeInterface_ +CallNonvirtualObjectMethod src/enclave/Include/jni.h /^ jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualObjectMethodA src/enclave/Include/jni.h /^ jobject (JNICALL *CallNonvirtualObjectMethodA)$/;" m struct:JNINativeInterface_ +CallNonvirtualObjectMethodA src/enclave/Include/jni.h /^ jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualObjectMethodV src/enclave/Include/jni.h /^ jobject (JNICALL *CallNonvirtualObjectMethodV)$/;" m struct:JNINativeInterface_ +CallNonvirtualObjectMethodV src/enclave/Include/jni.h /^ jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualShortMethod src/enclave/Include/jni.h /^ jshort (JNICALL *CallNonvirtualShortMethod)$/;" m struct:JNINativeInterface_ +CallNonvirtualShortMethod src/enclave/Include/jni.h /^ jshort CallNonvirtualShortMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualShortMethodA src/enclave/Include/jni.h /^ jshort (JNICALL *CallNonvirtualShortMethodA)$/;" m struct:JNINativeInterface_ +CallNonvirtualShortMethodA src/enclave/Include/jni.h /^ jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualShortMethodV src/enclave/Include/jni.h /^ jshort (JNICALL *CallNonvirtualShortMethodV)$/;" m struct:JNINativeInterface_ +CallNonvirtualShortMethodV src/enclave/Include/jni.h /^ jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualVoidMethod src/enclave/Include/jni.h /^ void (JNICALL *CallNonvirtualVoidMethod)$/;" m struct:JNINativeInterface_ +CallNonvirtualVoidMethod src/enclave/Include/jni.h /^ void CallNonvirtualVoidMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualVoidMethodA src/enclave/Include/jni.h /^ void (JNICALL *CallNonvirtualVoidMethodA)$/;" m struct:JNINativeInterface_ +CallNonvirtualVoidMethodA src/enclave/Include/jni.h /^ void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallNonvirtualVoidMethodV src/enclave/Include/jni.h /^ void (JNICALL *CallNonvirtualVoidMethodV)$/;" m struct:JNINativeInterface_ +CallNonvirtualVoidMethodV src/enclave/Include/jni.h /^ void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ +CallObjectMethod src/enclave/Include/jni.h /^ jobject (JNICALL *CallObjectMethod)$/;" m struct:JNINativeInterface_ +CallObjectMethod src/enclave/Include/jni.h /^ jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ +CallObjectMethodA src/enclave/Include/jni.h /^ jobject (JNICALL *CallObjectMethodA)$/;" m struct:JNINativeInterface_ +CallObjectMethodA src/enclave/Include/jni.h /^ jobject CallObjectMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallObjectMethodV src/enclave/Include/jni.h /^ jobject (JNICALL *CallObjectMethodV)$/;" m struct:JNINativeInterface_ +CallObjectMethodV src/enclave/Include/jni.h /^ jobject CallObjectMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallShortMethod src/enclave/Include/jni.h /^ jshort (JNICALL *CallShortMethod)$/;" m struct:JNINativeInterface_ +CallShortMethod src/enclave/Include/jni.h /^ jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ +CallShortMethodA src/enclave/Include/jni.h /^ jshort (JNICALL *CallShortMethodA)$/;" m struct:JNINativeInterface_ +CallShortMethodA src/enclave/Include/jni.h /^ jshort CallShortMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallShortMethodV src/enclave/Include/jni.h /^ jshort (JNICALL *CallShortMethodV)$/;" m struct:JNINativeInterface_ +CallShortMethodV src/enclave/Include/jni.h /^ jshort CallShortMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallStaticBooleanMethod src/enclave/Include/jni.h /^ jboolean (JNICALL *CallStaticBooleanMethod)$/;" m struct:JNINativeInterface_ +CallStaticBooleanMethod src/enclave/Include/jni.h /^ jboolean CallStaticBooleanMethod(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticBooleanMethodA src/enclave/Include/jni.h /^ jboolean (JNICALL *CallStaticBooleanMethodA)$/;" m struct:JNINativeInterface_ +CallStaticBooleanMethodA src/enclave/Include/jni.h /^ jboolean CallStaticBooleanMethodA(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticBooleanMethodV src/enclave/Include/jni.h /^ jboolean (JNICALL *CallStaticBooleanMethodV)$/;" m struct:JNINativeInterface_ +CallStaticBooleanMethodV src/enclave/Include/jni.h /^ jboolean CallStaticBooleanMethodV(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticByteMethod src/enclave/Include/jni.h /^ jbyte (JNICALL *CallStaticByteMethod)$/;" m struct:JNINativeInterface_ +CallStaticByteMethod src/enclave/Include/jni.h /^ jbyte CallStaticByteMethod(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticByteMethodA src/enclave/Include/jni.h /^ jbyte (JNICALL *CallStaticByteMethodA)$/;" m struct:JNINativeInterface_ +CallStaticByteMethodA src/enclave/Include/jni.h /^ jbyte CallStaticByteMethodA(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticByteMethodV src/enclave/Include/jni.h /^ jbyte (JNICALL *CallStaticByteMethodV)$/;" m struct:JNINativeInterface_ +CallStaticByteMethodV src/enclave/Include/jni.h /^ jbyte CallStaticByteMethodV(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticCharMethod src/enclave/Include/jni.h /^ jchar (JNICALL *CallStaticCharMethod)$/;" m struct:JNINativeInterface_ +CallStaticCharMethod src/enclave/Include/jni.h /^ jchar CallStaticCharMethod(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticCharMethodA src/enclave/Include/jni.h /^ jchar (JNICALL *CallStaticCharMethodA)$/;" m struct:JNINativeInterface_ +CallStaticCharMethodA src/enclave/Include/jni.h /^ jchar CallStaticCharMethodA(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticCharMethodV src/enclave/Include/jni.h /^ jchar (JNICALL *CallStaticCharMethodV)$/;" m struct:JNINativeInterface_ +CallStaticCharMethodV src/enclave/Include/jni.h /^ jchar CallStaticCharMethodV(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticDoubleMethod src/enclave/Include/jni.h /^ jdouble (JNICALL *CallStaticDoubleMethod)$/;" m struct:JNINativeInterface_ +CallStaticDoubleMethod src/enclave/Include/jni.h /^ jdouble CallStaticDoubleMethod(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticDoubleMethodA src/enclave/Include/jni.h /^ jdouble (JNICALL *CallStaticDoubleMethodA)$/;" m struct:JNINativeInterface_ +CallStaticDoubleMethodA src/enclave/Include/jni.h /^ jdouble CallStaticDoubleMethodA(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticDoubleMethodV src/enclave/Include/jni.h /^ jdouble (JNICALL *CallStaticDoubleMethodV)$/;" m struct:JNINativeInterface_ +CallStaticDoubleMethodV src/enclave/Include/jni.h /^ jdouble CallStaticDoubleMethodV(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticFloatMethod src/enclave/Include/jni.h /^ jfloat (JNICALL *CallStaticFloatMethod)$/;" m struct:JNINativeInterface_ +CallStaticFloatMethod src/enclave/Include/jni.h /^ jfloat CallStaticFloatMethod(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticFloatMethodA src/enclave/Include/jni.h /^ jfloat (JNICALL *CallStaticFloatMethodA)$/;" m struct:JNINativeInterface_ +CallStaticFloatMethodA src/enclave/Include/jni.h /^ jfloat CallStaticFloatMethodA(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticFloatMethodV src/enclave/Include/jni.h /^ jfloat (JNICALL *CallStaticFloatMethodV)$/;" m struct:JNINativeInterface_ +CallStaticFloatMethodV src/enclave/Include/jni.h /^ jfloat CallStaticFloatMethodV(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticIntMethod src/enclave/Include/jni.h /^ jint (JNICALL *CallStaticIntMethod)$/;" m struct:JNINativeInterface_ +CallStaticIntMethod src/enclave/Include/jni.h /^ jint CallStaticIntMethod(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticIntMethodA src/enclave/Include/jni.h /^ jint (JNICALL *CallStaticIntMethodA)$/;" m struct:JNINativeInterface_ +CallStaticIntMethodA src/enclave/Include/jni.h /^ jint CallStaticIntMethodA(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticIntMethodV src/enclave/Include/jni.h /^ jint (JNICALL *CallStaticIntMethodV)$/;" m struct:JNINativeInterface_ +CallStaticIntMethodV src/enclave/Include/jni.h /^ jint CallStaticIntMethodV(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticLongMethod src/enclave/Include/jni.h /^ jlong (JNICALL *CallStaticLongMethod)$/;" m struct:JNINativeInterface_ +CallStaticLongMethod src/enclave/Include/jni.h /^ jlong CallStaticLongMethod(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticLongMethodA src/enclave/Include/jni.h /^ jlong (JNICALL *CallStaticLongMethodA)$/;" m struct:JNINativeInterface_ +CallStaticLongMethodA src/enclave/Include/jni.h /^ jlong CallStaticLongMethodA(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticLongMethodV src/enclave/Include/jni.h /^ jlong (JNICALL *CallStaticLongMethodV)$/;" m struct:JNINativeInterface_ +CallStaticLongMethodV src/enclave/Include/jni.h /^ jlong CallStaticLongMethodV(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticObjectMethod src/enclave/Include/jni.h /^ jobject (JNICALL *CallStaticObjectMethod)$/;" m struct:JNINativeInterface_ +CallStaticObjectMethod src/enclave/Include/jni.h /^ jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID,$/;" f struct:JNIEnv_ +CallStaticObjectMethodA src/enclave/Include/jni.h /^ jobject (JNICALL *CallStaticObjectMethodA)$/;" m struct:JNINativeInterface_ +CallStaticObjectMethodA src/enclave/Include/jni.h /^ jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID,$/;" f struct:JNIEnv_ +CallStaticObjectMethodV src/enclave/Include/jni.h /^ jobject (JNICALL *CallStaticObjectMethodV)$/;" m struct:JNINativeInterface_ +CallStaticObjectMethodV src/enclave/Include/jni.h /^ jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID,$/;" f struct:JNIEnv_ +CallStaticShortMethod src/enclave/Include/jni.h /^ jshort (JNICALL *CallStaticShortMethod)$/;" m struct:JNINativeInterface_ +CallStaticShortMethod src/enclave/Include/jni.h /^ jshort CallStaticShortMethod(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticShortMethodA src/enclave/Include/jni.h /^ jshort (JNICALL *CallStaticShortMethodA)$/;" m struct:JNINativeInterface_ +CallStaticShortMethodA src/enclave/Include/jni.h /^ jshort CallStaticShortMethodA(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticShortMethodV src/enclave/Include/jni.h /^ jshort (JNICALL *CallStaticShortMethodV)$/;" m struct:JNINativeInterface_ +CallStaticShortMethodV src/enclave/Include/jni.h /^ jshort CallStaticShortMethodV(jclass clazz,$/;" f struct:JNIEnv_ +CallStaticVoidMethod src/enclave/Include/jni.h /^ void (JNICALL *CallStaticVoidMethod)$/;" m struct:JNINativeInterface_ +CallStaticVoidMethod src/enclave/Include/jni.h /^ void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ +CallStaticVoidMethodA src/enclave/Include/jni.h /^ void (JNICALL *CallStaticVoidMethodA)$/;" m struct:JNINativeInterface_ +CallStaticVoidMethodA src/enclave/Include/jni.h /^ void CallStaticVoidMethodA(jclass cls, jmethodID methodID,$/;" f struct:JNIEnv_ +CallStaticVoidMethodV src/enclave/Include/jni.h /^ void (JNICALL *CallStaticVoidMethodV)$/;" m struct:JNINativeInterface_ +CallStaticVoidMethodV src/enclave/Include/jni.h /^ void CallStaticVoidMethodV(jclass cls, jmethodID methodID,$/;" f struct:JNIEnv_ +CallVoidMethod src/enclave/Include/jni.h /^ void (JNICALL *CallVoidMethod)$/;" m struct:JNINativeInterface_ +CallVoidMethod src/enclave/Include/jni.h /^ void CallVoidMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ +CallVoidMethodA src/enclave/Include/jni.h /^ void (JNICALL *CallVoidMethodA)$/;" m struct:JNINativeInterface_ +CallVoidMethodA src/enclave/Include/jni.h /^ void CallVoidMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +CallVoidMethodV src/enclave/Include/jni.h /^ void (JNICALL *CallVoidMethodV)$/;" m struct:JNINativeInterface_ +CallVoidMethodV src/enclave/Include/jni.h /^ void CallVoidMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ +DATA_END src/enclave/Enclave/sgxaes_asm.S /^DATA_END:$/;" l +DAYS_PER_100Y src/enclave/Enclave/util.cpp /^#define DAYS_PER_100Y /;" d file: +DAYS_PER_400Y src/enclave/Enclave/util.cpp /^#define DAYS_PER_400Y /;" d file: +DAYS_PER_4Y src/enclave/Enclave/util.cpp /^#define DAYS_PER_4Y /;" d file: +DEFINE_H src/enclave/Include/define.h /^#define DEFINE_H$/;" d +DERIVE_KEY_MK_VK src/enclave/Enclave/isv_enclave.cpp /^ DERIVE_KEY_MK_VK,$/;" e enum:_derive_key_type_t file: +DERIVE_KEY_SMK_SK src/enclave/Enclave/isv_enclave.cpp /^ DERIVE_KEY_SMK_SK = 0,$/;" e enum:_derive_key_type_t file: +Date src/enclave/Enclave/Flatbuffers.h /^ Date(const int32_t &days_since_epoch) : days_since_epoch(days_since_epoch) {}$/;" f class:Date +Date src/enclave/Enclave/Flatbuffers.h /^class Date {$/;" c +Decrypting src/enclave/Enclave/sgxaes.h /^ Decrypting,$/;" e enum:State +DefineClass src/enclave/Include/jni.h /^ jclass (JNICALL *DefineClass)$/;" m struct:JNINativeInterface_ +DefineClass src/enclave/Include/jni.h /^ jclass DefineClass(const char *name, jobject loader, const jbyte *buf,$/;" f struct:JNIEnv_ +DeleteGlobalRef src/enclave/Include/jni.h /^ void (JNICALL *DeleteGlobalRef)$/;" m struct:JNINativeInterface_ +DeleteGlobalRef src/enclave/Include/jni.h /^ void DeleteGlobalRef(jobject gref) {$/;" f struct:JNIEnv_ +DeleteLocalRef src/enclave/Include/jni.h /^ void (JNICALL *DeleteLocalRef)$/;" m struct:JNINativeInterface_ +DeleteLocalRef src/enclave/Include/jni.h /^ void DeleteLocalRef(jobject obj) {$/;" f struct:JNIEnv_ +DeleteWeakGlobalRef src/enclave/Include/jni.h /^ void (JNICALL *DeleteWeakGlobalRef)$/;" m struct:JNINativeInterface_ +DeleteWeakGlobalRef src/enclave/Include/jni.h /^ void DeleteWeakGlobalRef(jweak ref) {$/;" f struct:JNIEnv_ +DestroyJavaVM src/enclave/Include/jni.h /^ jint (JNICALL *DestroyJavaVM)(JavaVM *vm);$/;" m struct:JNIInvokeInterface_ +DestroyJavaVM src/enclave/Include/jni.h /^ jint DestroyJavaVM() {$/;" f struct:JavaVM_ +DetachCurrentThread src/enclave/Include/jni.h /^ jint (JNICALL *DetachCurrentThread)(JavaVM *vm);$/;" m struct:JNIInvokeInterface_ +DetachCurrentThread src/enclave/Include/jni.h /^ jint DetachCurrentThread() {$/;" f struct:JavaVM_ +Done src/enclave/Enclave/sgxaes.h /^ Done,$/;" e enum:State +EC_DERIVATION_BUFFER_SIZE src/enclave/ServiceProvider/ecp.cpp /^#define EC_DERIVATION_BUFFER_SIZE(/;" d file: +ENCLAVE_FILENAME src/enclave/App/App.cpp /^# define ENCLAVE_FILENAME /;" d file: +EXPRESSION_EVALUATION_H src/enclave/Enclave/ExpressionEvaluation.h /^#define EXPRESSION_EVALUATION_H$/;" d +EXTERN_C src/enclave/ServiceProvider/sp_crypto.h /^ #define EXTERN_C /;" d +EXTERN_C src/enclave/ServiceProvider/sp_crypto.h /^ #define EXTERN_C$/;" d +EXTERN_C src/enclave/sample_libcrypto/sample_libcrypto.h /^ #define EXTERN_C /;" d +EncryptedBlockIterator src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Offset>::const_iterator EncryptedBlockIterator;$/;" t class:EncryptedBlocksToRowReader +EncryptedBlockToRowReader src/enclave/Enclave/Flatbuffers.h /^ EncryptedBlockToRowReader() : rows(nullptr), initialized(false) {}$/;" f class:EncryptedBlockToRowReader +EncryptedBlockToRowReader src/enclave/Enclave/Flatbuffers.h /^class EncryptedBlockToRowReader {$/;" c +EncryptedBlocksToEncryptedBlockReader src/enclave/Enclave/Flatbuffers.h /^ EncryptedBlocksToEncryptedBlockReader(uint8_t *buf, size_t len) {$/;" f class:EncryptedBlocksToEncryptedBlockReader +EncryptedBlocksToEncryptedBlockReader src/enclave/Enclave/Flatbuffers.h /^class EncryptedBlocksToEncryptedBlockReader {$/;" c +EncryptedBlocksToRowReader src/enclave/Enclave/Flatbuffers.h /^ EncryptedBlocksToRowReader(const tuix::EncryptedBlocks *encrypted_blocks)$/;" f class:EncryptedBlocksToRowReader +EncryptedBlocksToRowReader src/enclave/Enclave/Flatbuffers.h /^ EncryptedBlocksToRowReader(uint8_t *buf, size_t len)$/;" f class:EncryptedBlocksToRowReader +EncryptedBlocksToRowReader src/enclave/Enclave/Flatbuffers.h /^class EncryptedBlocksToRowReader {$/;" c +Encrypting src/enclave/Enclave/sgxaes.h /^ Encrypting,$/;" e enum:State +EnsureLocalCapacity src/enclave/Include/jni.h /^ jint (JNICALL *EnsureLocalCapacity)$/;" m struct:JNINativeInterface_ +EnsureLocalCapacity src/enclave/Include/jni.h /^ jint EnsureLocalCapacity(jint capacity) {$/;" f struct:JNIEnv_ +ExceptionCheck src/enclave/Include/jni.h /^ jboolean (JNICALL *ExceptionCheck)$/;" m struct:JNINativeInterface_ +ExceptionCheck src/enclave/Include/jni.h /^ jboolean ExceptionCheck() {$/;" f struct:JNIEnv_ +ExceptionClear src/enclave/Include/jni.h /^ void (JNICALL *ExceptionClear)$/;" m struct:JNINativeInterface_ +ExceptionClear src/enclave/Include/jni.h /^ void ExceptionClear() {$/;" f struct:JNIEnv_ +ExceptionDescribe src/enclave/Include/jni.h /^ void (JNICALL *ExceptionDescribe)$/;" m struct:JNINativeInterface_ +ExceptionDescribe src/enclave/Include/jni.h /^ void ExceptionDescribe() {$/;" f struct:JNIEnv_ +ExceptionOccurred src/enclave/Include/jni.h /^ jthrowable (JNICALL *ExceptionOccurred)$/;" m struct:JNINativeInterface_ +ExceptionOccurred src/enclave/Include/jni.h /^ jthrowable ExceptionOccurred() {$/;" f struct:JNIEnv_ +FALSE src/enclave/App/App.cpp /^# define FALSE /;" d file: +FILTER_H src/enclave/Enclave/Filter.h /^#define FILTER_H$/;" d +FLATBUFFERS_H src/enclave/Enclave/Flatbuffers.h /^#define FLATBUFFERS_H$/;" d +FatalError src/enclave/Include/jni.h /^ void (JNICALL *FatalError)$/;" m struct:JNINativeInterface_ +FatalError src/enclave/Include/jni.h /^ void FatalError(const char *msg) {$/;" f struct:JNIEnv_ +FindClass src/enclave/Include/jni.h /^ jclass (JNICALL *FindClass)$/;" m struct:JNINativeInterface_ +FindClass src/enclave/Include/jni.h /^ jclass FindClass(const char *name) {$/;" f struct:JNIEnv_ +FlatbuffersAggOpEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ FlatbuffersAggOpEvaluator(uint8_t *buf, size_t len)$/;" f class:FlatbuffersAggOpEvaluator +FlatbuffersAggOpEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^class FlatbuffersAggOpEvaluator {$/;" c +FlatbuffersExpressionEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ FlatbuffersExpressionEvaluator(const tuix::Expr *expr) : builder(), expr(expr) {}$/;" f class:FlatbuffersExpressionEvaluator +FlatbuffersExpressionEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^class FlatbuffersExpressionEvaluator {$/;" c +FlatbuffersJoinExprEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ FlatbuffersJoinExprEvaluator(uint8_t *buf, size_t len)$/;" f class:FlatbuffersJoinExprEvaluator +FlatbuffersJoinExprEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^class FlatbuffersJoinExprEvaluator {$/;" c +FlatbuffersRowWriter src/enclave/Enclave/Flatbuffers.h /^ FlatbuffersRowWriter()$/;" f class:FlatbuffersRowWriter +FlatbuffersRowWriter src/enclave/Enclave/Flatbuffers.h /^class FlatbuffersRowWriter {$/;" c +FlatbuffersSortOrderEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ FlatbuffersSortOrderEvaluator(const tuix::SortExpr *sort_expr)$/;" f class:FlatbuffersSortOrderEvaluator +FlatbuffersSortOrderEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ FlatbuffersSortOrderEvaluator(uint8_t *buf, size_t len) {$/;" f class:FlatbuffersSortOrderEvaluator +FlatbuffersSortOrderEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^class FlatbuffersSortOrderEvaluator {$/;" c +FlatbuffersTemporaryRow src/enclave/Enclave/Flatbuffers.h /^ FlatbuffersTemporaryRow() : builder(), row(nullptr) {}$/;" f class:FlatbuffersTemporaryRow +FlatbuffersTemporaryRow src/enclave/Enclave/Flatbuffers.h /^ FlatbuffersTemporaryRow(const tuix::Row *row) : FlatbuffersTemporaryRow() {$/;" f class:FlatbuffersTemporaryRow +FlatbuffersTemporaryRow src/enclave/Enclave/Flatbuffers.h /^class FlatbuffersTemporaryRow {$/;" c +FromReflectedField src/enclave/Include/jni.h /^ jfieldID (JNICALL *FromReflectedField)$/;" m struct:JNINativeInterface_ +FromReflectedField src/enclave/Include/jni.h /^ jfieldID FromReflectedField(jobject field) {$/;" f struct:JNIEnv_ +FromReflectedMethod src/enclave/Include/jni.h /^ jmethodID (JNICALL *FromReflectedMethod)$/;" m struct:JNINativeInterface_ +FromReflectedMethod src/enclave/Include/jni.h /^ jmethodID FromReflectedMethod(jobject method) {$/;" f struct:JNIEnv_ +GFMUL src/enclave/Enclave/sgxaes_asm.S /^GFMUL:$/;" l +GID_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define GID_SIZE /;" d +GID_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define GID_SIZE /;" d +GcmContext src/enclave/Enclave/sgxaes.cpp /^GcmContext::GcmContext() {$/;" f class:GcmContext +GcmContext src/enclave/Enclave/sgxaes.h /^ GcmContext(const GcmContext& other) {$/;" f struct:GcmContext +GcmContext src/enclave/Enclave/sgxaes.h /^struct GcmContext {$/;" s +GetArrayLength src/enclave/Include/jni.h /^ jsize (JNICALL *GetArrayLength)$/;" m struct:JNINativeInterface_ +GetArrayLength src/enclave/Include/jni.h /^ jsize GetArrayLength(jarray array) {$/;" f struct:JNIEnv_ +GetBooleanArrayElements src/enclave/Include/jni.h /^ jboolean * (JNICALL *GetBooleanArrayElements)$/;" m struct:JNINativeInterface_ +GetBooleanArrayElements src/enclave/Include/jni.h /^ jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ +GetBooleanArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetBooleanArrayRegion)$/;" m struct:JNINativeInterface_ +GetBooleanArrayRegion src/enclave/Include/jni.h /^ void GetBooleanArrayRegion(jbooleanArray array,$/;" f struct:JNIEnv_ +GetBooleanField src/enclave/Include/jni.h /^ jboolean (JNICALL *GetBooleanField)$/;" m struct:JNINativeInterface_ +GetBooleanField src/enclave/Include/jni.h /^ jboolean GetBooleanField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetByteArrayElements src/enclave/Include/jni.h /^ jbyte * (JNICALL *GetByteArrayElements)$/;" m struct:JNINativeInterface_ +GetByteArrayElements src/enclave/Include/jni.h /^ jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ +GetByteArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetByteArrayRegion)$/;" m struct:JNINativeInterface_ +GetByteArrayRegion src/enclave/Include/jni.h /^ void GetByteArrayRegion(jbyteArray array,$/;" f struct:JNIEnv_ +GetByteField src/enclave/Include/jni.h /^ jbyte (JNICALL *GetByteField)$/;" m struct:JNINativeInterface_ +GetByteField src/enclave/Include/jni.h /^ jbyte GetByteField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetCharArrayElements src/enclave/Include/jni.h /^ jchar * (JNICALL *GetCharArrayElements)$/;" m struct:JNINativeInterface_ +GetCharArrayElements src/enclave/Include/jni.h /^ jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ +GetCharArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetCharArrayRegion)$/;" m struct:JNINativeInterface_ +GetCharArrayRegion src/enclave/Include/jni.h /^ void GetCharArrayRegion(jcharArray array,$/;" f struct:JNIEnv_ +GetCharField src/enclave/Include/jni.h /^ jchar (JNICALL *GetCharField)$/;" m struct:JNINativeInterface_ +GetCharField src/enclave/Include/jni.h /^ jchar GetCharField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetDirectBufferAddress src/enclave/Include/jni.h /^ void* (JNICALL *GetDirectBufferAddress)$/;" m struct:JNINativeInterface_ +GetDirectBufferAddress src/enclave/Include/jni.h /^ void* GetDirectBufferAddress(jobject buf) {$/;" f struct:JNIEnv_ +GetDirectBufferCapacity src/enclave/Include/jni.h /^ jlong (JNICALL *GetDirectBufferCapacity)$/;" m struct:JNINativeInterface_ +GetDirectBufferCapacity src/enclave/Include/jni.h /^ jlong GetDirectBufferCapacity(jobject buf) {$/;" f struct:JNIEnv_ +GetDoubleArrayElements src/enclave/Include/jni.h /^ jdouble * (JNICALL *GetDoubleArrayElements)$/;" m struct:JNINativeInterface_ +GetDoubleArrayElements src/enclave/Include/jni.h /^ jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ +GetDoubleArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetDoubleArrayRegion)$/;" m struct:JNINativeInterface_ +GetDoubleArrayRegion src/enclave/Include/jni.h /^ void GetDoubleArrayRegion(jdoubleArray array,$/;" f struct:JNIEnv_ +GetDoubleField src/enclave/Include/jni.h /^ jdouble (JNICALL *GetDoubleField)$/;" m struct:JNINativeInterface_ +GetDoubleField src/enclave/Include/jni.h /^ jdouble GetDoubleField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetEnv src/enclave/Include/jni.h /^ jint (JNICALL *GetEnv)(JavaVM *vm, void **penv, jint version);$/;" m struct:JNIInvokeInterface_ +GetEnv src/enclave/Include/jni.h /^ jint GetEnv(void **penv, jint version) {$/;" f struct:JavaVM_ +GetFieldID src/enclave/Include/jni.h /^ jfieldID (JNICALL *GetFieldID)$/;" m struct:JNINativeInterface_ +GetFieldID src/enclave/Include/jni.h /^ jfieldID GetFieldID(jclass clazz, const char *name,$/;" f struct:JNIEnv_ +GetFloatArrayElements src/enclave/Include/jni.h /^ jfloat * (JNICALL *GetFloatArrayElements)$/;" m struct:JNINativeInterface_ +GetFloatArrayElements src/enclave/Include/jni.h /^ jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ +GetFloatArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetFloatArrayRegion)$/;" m struct:JNINativeInterface_ +GetFloatArrayRegion src/enclave/Include/jni.h /^ void GetFloatArrayRegion(jfloatArray array,$/;" f struct:JNIEnv_ +GetFloatField src/enclave/Include/jni.h /^ jfloat (JNICALL *GetFloatField)$/;" m struct:JNINativeInterface_ +GetFloatField src/enclave/Include/jni.h /^ jfloat GetFloatField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetIntArrayElements src/enclave/Include/jni.h /^ jint * (JNICALL *GetIntArrayElements)$/;" m struct:JNINativeInterface_ +GetIntArrayElements src/enclave/Include/jni.h /^ jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ +GetIntArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetIntArrayRegion)$/;" m struct:JNINativeInterface_ +GetIntArrayRegion src/enclave/Include/jni.h /^ void GetIntArrayRegion(jintArray array,$/;" f struct:JNIEnv_ +GetIntField src/enclave/Include/jni.h /^ jint (JNICALL *GetIntField)$/;" m struct:JNINativeInterface_ +GetIntField src/enclave/Include/jni.h /^ jint GetIntField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetJavaVM src/enclave/Include/jni.h /^ jint (JNICALL *GetJavaVM)$/;" m struct:JNINativeInterface_ +GetJavaVM src/enclave/Include/jni.h /^ jint GetJavaVM(JavaVM **vm) {$/;" f struct:JNIEnv_ +GetLongArrayElements src/enclave/Include/jni.h /^ jlong * (JNICALL *GetLongArrayElements)$/;" m struct:JNINativeInterface_ +GetLongArrayElements src/enclave/Include/jni.h /^ jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ +GetLongArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetLongArrayRegion)$/;" m struct:JNINativeInterface_ +GetLongArrayRegion src/enclave/Include/jni.h /^ void GetLongArrayRegion(jlongArray array,$/;" f struct:JNIEnv_ +GetLongField src/enclave/Include/jni.h /^ jlong (JNICALL *GetLongField)$/;" m struct:JNINativeInterface_ +GetLongField src/enclave/Include/jni.h /^ jlong GetLongField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetMethodID src/enclave/Include/jni.h /^ jmethodID (JNICALL *GetMethodID)$/;" m struct:JNINativeInterface_ +GetMethodID src/enclave/Include/jni.h /^ jmethodID GetMethodID(jclass clazz, const char *name,$/;" f struct:JNIEnv_ +GetObjectArrayElement src/enclave/Include/jni.h /^ jobject (JNICALL *GetObjectArrayElement)$/;" m struct:JNINativeInterface_ +GetObjectArrayElement src/enclave/Include/jni.h /^ jobject GetObjectArrayElement(jobjectArray array, jsize index) {$/;" f struct:JNIEnv_ +GetObjectClass src/enclave/Include/jni.h /^ jclass (JNICALL *GetObjectClass)$/;" m struct:JNINativeInterface_ +GetObjectClass src/enclave/Include/jni.h /^ jclass GetObjectClass(jobject obj) {$/;" f struct:JNIEnv_ +GetObjectField src/enclave/Include/jni.h /^ jobject (JNICALL *GetObjectField)$/;" m struct:JNINativeInterface_ +GetObjectField src/enclave/Include/jni.h /^ jobject GetObjectField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetObjectRefType src/enclave/Include/jni.h /^ jobjectRefType (JNICALL *GetObjectRefType)$/;" m struct:JNINativeInterface_ +GetObjectRefType src/enclave/Include/jni.h /^ jobjectRefType GetObjectRefType(jobject obj) {$/;" f struct:JNIEnv_ +GetOffset src/enclave/Enclave/Flatbuffers.h /^template flatbuffers::Offset GetOffset($/;" f +GetPrimitiveArrayCritical src/enclave/Include/jni.h /^ void * (JNICALL *GetPrimitiveArrayCritical)$/;" m struct:JNINativeInterface_ +GetPrimitiveArrayCritical src/enclave/Include/jni.h /^ void * GetPrimitiveArrayCritical(jarray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ +GetShortArrayElements src/enclave/Include/jni.h /^ jshort * (JNICALL *GetShortArrayElements)$/;" m struct:JNINativeInterface_ +GetShortArrayElements src/enclave/Include/jni.h /^ jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ +GetShortArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetShortArrayRegion)$/;" m struct:JNINativeInterface_ +GetShortArrayRegion src/enclave/Include/jni.h /^ void GetShortArrayRegion(jshortArray array,$/;" f struct:JNIEnv_ +GetShortField src/enclave/Include/jni.h /^ jshort (JNICALL *GetShortField)$/;" m struct:JNINativeInterface_ +GetShortField src/enclave/Include/jni.h /^ jshort GetShortField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetStaticBooleanField src/enclave/Include/jni.h /^ jboolean (JNICALL *GetStaticBooleanField)$/;" m struct:JNINativeInterface_ +GetStaticBooleanField src/enclave/Include/jni.h /^ jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetStaticByteField src/enclave/Include/jni.h /^ jbyte (JNICALL *GetStaticByteField)$/;" m struct:JNINativeInterface_ +GetStaticByteField src/enclave/Include/jni.h /^ jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetStaticCharField src/enclave/Include/jni.h /^ jchar (JNICALL *GetStaticCharField)$/;" m struct:JNINativeInterface_ +GetStaticCharField src/enclave/Include/jni.h /^ jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetStaticDoubleField src/enclave/Include/jni.h /^ jdouble (JNICALL *GetStaticDoubleField)$/;" m struct:JNINativeInterface_ +GetStaticDoubleField src/enclave/Include/jni.h /^ jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetStaticFieldID src/enclave/Include/jni.h /^ jfieldID (JNICALL *GetStaticFieldID)$/;" m struct:JNINativeInterface_ +GetStaticFieldID src/enclave/Include/jni.h /^ jfieldID GetStaticFieldID(jclass clazz, const char *name,$/;" f struct:JNIEnv_ +GetStaticFloatField src/enclave/Include/jni.h /^ jfloat (JNICALL *GetStaticFloatField)$/;" m struct:JNINativeInterface_ +GetStaticFloatField src/enclave/Include/jni.h /^ jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetStaticIntField src/enclave/Include/jni.h /^ jint (JNICALL *GetStaticIntField)$/;" m struct:JNINativeInterface_ +GetStaticIntField src/enclave/Include/jni.h /^ jint GetStaticIntField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetStaticLongField src/enclave/Include/jni.h /^ jlong (JNICALL *GetStaticLongField)$/;" m struct:JNINativeInterface_ +GetStaticLongField src/enclave/Include/jni.h /^ jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetStaticMethodID src/enclave/Include/jni.h /^ jmethodID (JNICALL *GetStaticMethodID)$/;" m struct:JNINativeInterface_ +GetStaticMethodID src/enclave/Include/jni.h /^ jmethodID GetStaticMethodID(jclass clazz, const char *name,$/;" f struct:JNIEnv_ +GetStaticObjectField src/enclave/Include/jni.h /^ jobject (JNICALL *GetStaticObjectField)$/;" m struct:JNINativeInterface_ +GetStaticObjectField src/enclave/Include/jni.h /^ jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetStaticShortField src/enclave/Include/jni.h /^ jshort (JNICALL *GetStaticShortField)$/;" m struct:JNINativeInterface_ +GetStaticShortField src/enclave/Include/jni.h /^ jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ +GetStringChars src/enclave/Include/jni.h /^ const jchar *(JNICALL *GetStringChars)$/;" m struct:JNINativeInterface_ +GetStringChars src/enclave/Include/jni.h /^ const jchar *GetStringChars(jstring str, jboolean *isCopy) {$/;" f struct:JNIEnv_ +GetStringCritical src/enclave/Include/jni.h /^ const jchar * (JNICALL *GetStringCritical)$/;" m struct:JNINativeInterface_ +GetStringCritical src/enclave/Include/jni.h /^ const jchar * GetStringCritical(jstring string, jboolean *isCopy) {$/;" f struct:JNIEnv_ +GetStringLength src/enclave/Include/jni.h /^ jsize (JNICALL *GetStringLength)$/;" m struct:JNINativeInterface_ +GetStringLength src/enclave/Include/jni.h /^ jsize GetStringLength(jstring str) {$/;" f struct:JNIEnv_ +GetStringRegion src/enclave/Include/jni.h /^ void (JNICALL *GetStringRegion)$/;" m struct:JNINativeInterface_ +GetStringRegion src/enclave/Include/jni.h /^ void GetStringRegion(jstring str, jsize start, jsize len, jchar *buf) {$/;" f struct:JNIEnv_ +GetStringUTFChars src/enclave/Include/jni.h /^ const char* (JNICALL *GetStringUTFChars)$/;" m struct:JNINativeInterface_ +GetStringUTFChars src/enclave/Include/jni.h /^ const char* GetStringUTFChars(jstring str, jboolean *isCopy) {$/;" f struct:JNIEnv_ +GetStringUTFLength src/enclave/Include/jni.h /^ jsize (JNICALL *GetStringUTFLength)$/;" m struct:JNINativeInterface_ +GetStringUTFLength src/enclave/Include/jni.h /^ jsize GetStringUTFLength(jstring str) {$/;" f struct:JNIEnv_ +GetStringUTFRegion src/enclave/Include/jni.h /^ void (JNICALL *GetStringUTFRegion)$/;" m struct:JNINativeInterface_ +GetStringUTFRegion src/enclave/Include/jni.h /^ void GetStringUTFRegion(jstring str, jsize start, jsize len, char *buf) {$/;" f struct:JNIEnv_ +GetSuperclass src/enclave/Include/jni.h /^ jclass (JNICALL *GetSuperclass)$/;" m struct:JNINativeInterface_ +GetSuperclass src/enclave/Include/jni.h /^ jclass GetSuperclass(jclass sub) {$/;" f struct:JNIEnv_ +GetVersion src/enclave/Include/jni.h /^ jint (JNICALL *GetVersion)(JNIEnv *env);$/;" m struct:JNINativeInterface_ +GetVersion src/enclave/Include/jni.h /^ jint GetVersion() {$/;" f struct:JNIEnv_ +IAS_EPID_GROUP_STATUS_REKEY_AVAILABLE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_EPID_GROUP_STATUS_REKEY_AVAILABLE_BIT_POS /;" d +IAS_EPID_GROUP_STATUS_REVOKED_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_EPID_GROUP_STATUS_REVOKED_BIT_POS /;" d +IAS_PSE_ATTRIBUTES_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_ATTRIBUTES_INVALID,$/;" e enum:__anon3 +IAS_PSE_DESC_TYPE_NOT_SUPPORTED src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_DESC_TYPE_NOT_SUPPORTED,$/;" e enum:__anon3 +IAS_PSE_EVAL_STATUS_EPID_GROUP_REVOKED_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_PSE_EVAL_STATUS_EPID_GROUP_REVOKED_BIT_POS /;" d +IAS_PSE_EVAL_STATUS_ISVSVN_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_PSE_EVAL_STATUS_ISVSVN_OUT_OF_DATE_BIT_POS /;" d +IAS_PSE_EVAL_STATUS_PRIVRL_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_PSE_EVAL_STATUS_PRIVRL_OUT_OF_DATE_BIT_POS /;" d +IAS_PSE_EVAL_STATUS_PSDASVN_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_PSE_EVAL_STATUS_PSDASVN_OUT_OF_DATE_BIT_POS /;" d +IAS_PSE_EVAL_STATUS_SIGRL_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_PSE_EVAL_STATUS_SIGRL_OUT_OF_DATE_BIT_POS /;" d +IAS_PSE_ISVSVN_OUT_OF_DATE src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_ISVSVN_OUT_OF_DATE,$/;" e enum:__anon3 +IAS_PSE_MISCSELECT_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_MISCSELECT_INVALID,$/;" e enum:__anon3 +IAS_PSE_MRSIGNER_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_MRSIGNER_INVALID,$/;" e enum:__anon3 +IAS_PSE_OK src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_OK,$/;" e enum:__anon3 +IAS_PS_HW_CA_ID_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_CA_ID_INVALID,$/;" e enum:__anon3 +IAS_PS_HW_GID_REVOKED src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_GID_REVOKED,$/;" e enum:__anon3 +IAS_PS_HW_PRIVKEY_RLVER_MISMATCH src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_PRIVKEY_RLVER_MISMATCH,$/;" e enum:__anon3 +IAS_PS_HW_PSDA_SVN_OUT_OF_DATE src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_PSDA_SVN_OUT_OF_DATE,$/;" e enum:__anon3 +IAS_PS_HW_SEC_INFO_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_SEC_INFO_INVALID,$/;" e enum:__anon3 +IAS_PS_HW_SIG_RLVER_MISMATCH src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_SIG_RLVER_MISMATCH,$/;" e enum:__anon3 +IAS_QUOTE_GROUP_OUT_OF_DATE src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_GROUP_OUT_OF_DATE,$/;" e enum:__anon2 +IAS_QUOTE_GROUP_REVOKED src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_GROUP_REVOKED,$/;" e enum:__anon2 +IAS_QUOTE_KEY_REVOKED src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_KEY_REVOKED,$/;" e enum:__anon2 +IAS_QUOTE_OK src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_OK,$/;" e enum:__anon2 +IAS_QUOTE_SIGNATURE_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_SIGNATURE_INVALID,$/;" e enum:__anon2 +IAS_QUOTE_SIGNATURE_REVOKED src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_SIGNATURE_REVOKED,$/;" e enum:__anon2 +IAS_QUOTE_SIGRL_VERSION_MISMATCH src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_SIGRL_VERSION_MISMATCH,$/;" e enum:__anon2 +IAS_REVOC_REASON_AA_COMPROMISE src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_AA_COMPROMISE,$/;" e enum:__anon4 +IAS_REVOC_REASON_CA_COMPROMISED src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_CA_COMPROMISED,$/;" e enum:__anon4 +IAS_REVOC_REASON_CERTIFICATE_HOLD src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_CERTIFICATE_HOLD,$/;" e enum:__anon4 +IAS_REVOC_REASON_CESSATION_OF_OPERATION src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_CESSATION_OF_OPERATION,$/;" e enum:__anon4 +IAS_REVOC_REASON_KEY_COMPROMISE src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_KEY_COMPROMISE,$/;" e enum:__anon4 +IAS_REVOC_REASON_NONE src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_NONE,$/;" e enum:__anon4 +IAS_REVOC_REASON_PRIVILEGE_WITHDRAWN src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_PRIVILEGE_WITHDRAWN,$/;" e enum:__anon4 +IAS_REVOC_REASON_SUPERCEDED src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_SUPERCEDED,$/;" e enum:__anon4 +IAS_TCB_EVAL_STATUS_CPUSVN_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_TCB_EVAL_STATUS_CPUSVN_OUT_OF_DATE_BIT_POS /;" d +IAS_TCB_EVAL_STATUS_ISVSVN_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_TCB_EVAL_STATUS_ISVSVN_OUT_OF_DATE_BIT_POS /;" d +ID_U src/enclave/Enclave/isv_enclave.cpp /^const char ID_U[] = "SGXRAENCLAVE";$/;" v +ID_U src/enclave/ServiceProvider/ecp.cpp /^const char ID_U[] = "SGXRAENCLAVE";$/;" v +ID_V src/enclave/Enclave/isv_enclave.cpp /^const char ID_V[] = "SGXRASERVER";$/;" v +ID_V src/enclave/ServiceProvider/ecp.cpp /^const char ID_V[] = "SGXRASERVER";$/;" v +ISVSVN_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define ISVSVN_SIZE /;" d +ISVSVN_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define ISVSVN_SIZE /;" d +ISV_KDF_ID src/enclave/Enclave/isv_enclave.cpp /^#define ISV_KDF_ID /;" d file: +ISV_KDF_ID src/enclave/ServiceProvider/service_provider.cpp /^#define ISV_KDF_ID /;" d file: +IsAssignableFrom src/enclave/Include/jni.h /^ jboolean (JNICALL *IsAssignableFrom)$/;" m struct:JNINativeInterface_ +IsAssignableFrom src/enclave/Include/jni.h /^ jboolean IsAssignableFrom(jclass sub, jclass sup) {$/;" f struct:JNIEnv_ +IsInstanceOf src/enclave/Include/jni.h /^ jboolean (JNICALL *IsInstanceOf)$/;" m struct:JNINativeInterface_ +IsInstanceOf src/enclave/Include/jni.h /^ jboolean IsInstanceOf(jobject obj, jclass clazz) {$/;" f struct:JNIEnv_ +IsSameObject src/enclave/Include/jni.h /^ jboolean (JNICALL *IsSameObject)$/;" m struct:JNINativeInterface_ +IsSameObject src/enclave/Include/jni.h /^ jboolean IsSameObject(jobject obj1, jobject obj2) {$/;" f struct:JNIEnv_ +JDK1_2 src/enclave/Include/jni.h /^#define JDK1_2$/;" d +JDK1_4 src/enclave/Include/jni.h /^#define JDK1_4$/;" d +JNICALL src/enclave/Include/jni_md.h /^#define JNICALL$/;" d +JNIEXPORT src/enclave/Include/jni_md.h /^ #define JNIEXPORT /;" d +JNIEXPORT src/enclave/Include/jni_md.h /^ #define JNIEXPORT$/;" d +JNIEnv src/enclave/Include/jni.h /^typedef JNIEnv_ JNIEnv;$/;" t +JNIEnv src/enclave/Include/jni.h /^typedef const struct JNINativeInterface_ *JNIEnv;$/;" t typeref:struct:JNINativeInterface_ +JNIEnv_ src/enclave/Include/jni.h /^struct JNIEnv_ {$/;" s +JNIGlobalRefType src/enclave/Include/jni.h /^ JNIGlobalRefType = 2,$/;" e enum:_jobjectType +JNIIMPORT src/enclave/Include/jni_md.h /^ #define JNIIMPORT /;" d +JNIIMPORT src/enclave/Include/jni_md.h /^ #define JNIIMPORT$/;" d +JNIInvalidRefType src/enclave/Include/jni.h /^ JNIInvalidRefType = 0,$/;" e enum:_jobjectType +JNIInvokeInterface_ src/enclave/Include/jni.h /^struct JNIInvokeInterface_ {$/;" s +JNILocalRefType src/enclave/Include/jni.h /^ JNILocalRefType = 1,$/;" e enum:_jobjectType +JNINativeInterface_ src/enclave/Include/jni.h /^struct JNINativeInterface_ {$/;" s +JNINativeMethod src/enclave/Include/jni.h /^} JNINativeMethod;$/;" t typeref:struct:__anon1 +JNIWeakGlobalRefType src/enclave/Include/jni.h /^ JNIWeakGlobalRefType = 3$/;" e enum:_jobjectType +JNI_ABORT src/enclave/Include/jni.h /^#define JNI_ABORT /;" d +JNI_COMMIT src/enclave/Include/jni.h /^#define JNI_COMMIT /;" d +JNI_EDETACHED src/enclave/Include/jni.h /^#define JNI_EDETACHED /;" d +JNI_EEXIST src/enclave/Include/jni.h /^#define JNI_EEXIST /;" d +JNI_EINVAL src/enclave/Include/jni.h /^#define JNI_EINVAL /;" d +JNI_ENOMEM src/enclave/Include/jni.h /^#define JNI_ENOMEM /;" d +JNI_ERR src/enclave/Include/jni.h /^#define JNI_ERR /;" d +JNI_EVERSION src/enclave/Include/jni.h /^#define JNI_EVERSION /;" d +JNI_FALSE src/enclave/Include/jni.h /^#define JNI_FALSE /;" d +JNI_OK src/enclave/Include/jni.h /^#define JNI_OK /;" d +JNI_TRUE src/enclave/Include/jni.h /^#define JNI_TRUE /;" d +JNI_VERSION_1_1 src/enclave/Include/jni.h /^#define JNI_VERSION_1_1 /;" d +JNI_VERSION_1_2 src/enclave/Include/jni.h /^#define JNI_VERSION_1_2 /;" d +JNI_VERSION_1_4 src/enclave/Include/jni.h /^#define JNI_VERSION_1_4 /;" d +JNI_VERSION_1_6 src/enclave/Include/jni.h /^#define JNI_VERSION_1_6 /;" d +JOIN_H src/enclave/Enclave/Join.h /^#define JOIN_H$/;" d +JavaVM src/enclave/Include/jni.h /^typedef JavaVM_ JavaVM;$/;" t +JavaVM src/enclave/Include/jni.h /^typedef const struct JNIInvokeInterface_ *JavaVM;$/;" t typeref:struct:JNIInvokeInterface_ +JavaVMAttachArgs src/enclave/Include/jni.h /^typedef struct JavaVMAttachArgs {$/;" s +JavaVMAttachArgs src/enclave/Include/jni.h /^} JavaVMAttachArgs;$/;" t typeref:struct:JavaVMAttachArgs +JavaVMInitArgs src/enclave/Include/jni.h /^typedef struct JavaVMInitArgs {$/;" s +JavaVMInitArgs src/enclave/Include/jni.h /^} JavaVMInitArgs;$/;" t typeref:struct:JavaVMInitArgs +JavaVMOption src/enclave/Include/jni.h /^typedef struct JavaVMOption {$/;" s +JavaVMOption src/enclave/Include/jni.h /^} JavaVMOption;$/;" t typeref:struct:JavaVMOption +JavaVM_ src/enclave/Include/jni.h /^struct JavaVM_ {$/;" s +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Decrypt src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Decrypt($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Encrypt src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Encrypt($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_ExternalSort src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_ExternalSort($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Filter src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Filter($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_FindRangeBounds src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_FindRangeBounds($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep1 src/enclave/App/App.cpp /^Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep1($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep2 src/enclave/App/App.cpp /^Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep2($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousSortMergeJoin src/enclave/App/App.cpp /^Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousSortMergeJoin($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_PartitionForSort src/enclave/App/App.cpp /^Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_PartitionForSort($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Project src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Project($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation0 src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation0($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation1 src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation1($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation2 src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation2($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation3 src/enclave/App/App.cpp /^JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation3($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Sample src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Sample($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_ScanCollectLastPrimary src/enclave/App/App.cpp /^Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_ScanCollectLastPrimary($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_StartEnclave src/enclave/App/App.cpp /^JNIEXPORT jlong JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_StartEnclave($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_StopEnclave src/enclave/App/App.cpp /^JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_StopEnclave($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SP_LoadKeys src/enclave/ServiceProvider/Main.cpp /^JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_LoadKeys($/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg0 src/enclave/ServiceProvider/Main.cpp /^JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg0(JNIEnv *env, jobject obj, jbyteArray msg0_input) {$/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg1 src/enclave/ServiceProvider/Main.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg1(JNIEnv *env, jobject obj, jbyteArray msg1_input) {$/;" f +Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg3 src/enclave/ServiceProvider/Main.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg3(JNIEnv *env, jobject obj, jbyteArray msg3_input) {$/;" f +KeySchedule src/enclave/Enclave/sgxaes.cpp /^KeySchedule::KeySchedule(const unsigned char* k, size_t k_len) {$/;" f class:KeySchedule +KeySchedule src/enclave/Enclave/sgxaes.h /^ KeySchedule(const KeySchedule& other) {$/;" f struct:KeySchedule +KeySchedule src/enclave/Enclave/sgxaes.h /^struct KeySchedule {$/;" s +LC_AESCTR_KEY_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_AESCTR_KEY_SIZE /;" d +LC_AESGCM_IV_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_AESGCM_IV_SIZE /;" d +LC_AESGCM_KEY_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_AESGCM_KEY_SIZE /;" d +LC_AESGCM_MAC_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_AESGCM_MAC_SIZE /;" d +LC_CMAC_KEY_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_CMAC_KEY_SIZE /;" d +LC_CMAC_MAC_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_CMAC_MAC_SIZE /;" d +LC_ECP256_KEY_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_ECP256_KEY_SIZE /;" d +LC_ERROR_INVALID_PARAMETER src/enclave/ServiceProvider/sp_crypto.h /^ LC_ERROR_INVALID_PARAMETER , \/\/ The parameter is incorrect$/;" e enum:lc_status_t +LC_ERROR_OUT_OF_MEMORY src/enclave/ServiceProvider/sp_crypto.h /^ LC_ERROR_OUT_OF_MEMORY , \/\/ Not enough memory is available to complete this operation$/;" e enum:lc_status_t +LC_ERROR_UNEXPECTED src/enclave/ServiceProvider/sp_crypto.h /^ LC_ERROR_UNEXPECTED , \/\/ Unexpected error$/;" e enum:lc_status_t +LC_LIBCRYPTO_API src/enclave/ServiceProvider/sp_crypto.h /^ #define LC_LIBCRYPTO_API /;" d +LC_LIBCRYPTO_API src/enclave/ServiceProvider/sp_crypto.h /^ #define LC_LIBCRYPTO_API /;" d +LC_NISTP_ECP256_KEY_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_NISTP_ECP256_KEY_SIZE /;" d +LC_SHA256_HASH_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_SHA256_HASH_SIZE /;" d +LC_SUCCESS src/enclave/ServiceProvider/sp_crypto.h /^ LC_SUCCESS = 0,$/;" e enum:lc_status_t +LEAPOCH src/enclave/Enclave/util.cpp /^#define LEAPOCH /;" d file: +MAC src/enclave/Enclave/Crypto.h /^ MAC() {$/;" f class:MAC +MAC src/enclave/Enclave/Crypto.h /^class MAC {$/;" c +MAC_KEY_SIZE src/enclave/ServiceProvider/ecp.cpp /^#define MAC_KEY_SIZE /;" d file: +MAX_BLOCK_SIZE src/enclave/Include/define.h /^#define MAX_BLOCK_SIZE /;" d +MAX_NUM_STREAMS src/enclave/Include/define.h /^#define MAX_NUM_STREAMS /;" d +MAX_PATH src/enclave/App/App.cpp /^# define MAX_PATH /;" d file: +MSG3_BODY_SIZE src/enclave/ServiceProvider/sample_messages.h /^#define MSG3_BODY_SIZE /;" d +MergeItem src/enclave/Enclave/Sort.cpp /^class MergeItem {$/;" c file: +MonitorEnter src/enclave/Include/jni.h /^ jint (JNICALL *MonitorEnter)$/;" m struct:JNINativeInterface_ +MonitorEnter src/enclave/Include/jni.h /^ jint MonitorEnter(jobject obj) {$/;" f struct:JNIEnv_ +MonitorExit src/enclave/Include/jni.h /^ jint (JNICALL *MonitorExit)$/;" m struct:JNINativeInterface_ +MonitorExit src/enclave/Include/jni.h /^ jint MonitorExit(jobject obj) {$/;" f struct:JNIEnv_ +New src/enclave/Enclave/sgxaes.h /^ New,$/;" e enum:State +NewBooleanArray src/enclave/Include/jni.h /^ jbooleanArray (JNICALL *NewBooleanArray)$/;" m struct:JNINativeInterface_ +NewBooleanArray src/enclave/Include/jni.h /^ jbooleanArray NewBooleanArray(jsize len) {$/;" f struct:JNIEnv_ +NewByteArray src/enclave/Include/jni.h /^ jbyteArray (JNICALL *NewByteArray)$/;" m struct:JNINativeInterface_ +NewByteArray src/enclave/Include/jni.h /^ jbyteArray NewByteArray(jsize len) {$/;" f struct:JNIEnv_ +NewCharArray src/enclave/Include/jni.h /^ jcharArray (JNICALL *NewCharArray)$/;" m struct:JNINativeInterface_ +NewCharArray src/enclave/Include/jni.h /^ jcharArray NewCharArray(jsize len) {$/;" f struct:JNIEnv_ +NewDirectByteBuffer src/enclave/Include/jni.h /^ jobject (JNICALL *NewDirectByteBuffer)$/;" m struct:JNINativeInterface_ +NewDirectByteBuffer src/enclave/Include/jni.h /^ jobject NewDirectByteBuffer(void* address, jlong capacity) {$/;" f struct:JNIEnv_ +NewDoubleArray src/enclave/Include/jni.h /^ jdoubleArray (JNICALL *NewDoubleArray)$/;" m struct:JNINativeInterface_ +NewDoubleArray src/enclave/Include/jni.h /^ jdoubleArray NewDoubleArray(jsize len) {$/;" f struct:JNIEnv_ +NewFloatArray src/enclave/Include/jni.h /^ jfloatArray (JNICALL *NewFloatArray)$/;" m struct:JNINativeInterface_ +NewFloatArray src/enclave/Include/jni.h /^ jfloatArray NewFloatArray(jsize len) {$/;" f struct:JNIEnv_ +NewGlobalRef src/enclave/Include/jni.h /^ jobject (JNICALL *NewGlobalRef)$/;" m struct:JNINativeInterface_ +NewGlobalRef src/enclave/Include/jni.h /^ jobject NewGlobalRef(jobject lobj) {$/;" f struct:JNIEnv_ +NewIntArray src/enclave/Include/jni.h /^ jintArray (JNICALL *NewIntArray)$/;" m struct:JNINativeInterface_ +NewIntArray src/enclave/Include/jni.h /^ jintArray NewIntArray(jsize len) {$/;" f struct:JNIEnv_ +NewLocalRef src/enclave/Include/jni.h /^ jobject (JNICALL *NewLocalRef)$/;" m struct:JNINativeInterface_ +NewLocalRef src/enclave/Include/jni.h /^ jobject NewLocalRef(jobject ref) {$/;" f struct:JNIEnv_ +NewLongArray src/enclave/Include/jni.h /^ jlongArray (JNICALL *NewLongArray)$/;" m struct:JNINativeInterface_ +NewLongArray src/enclave/Include/jni.h /^ jlongArray NewLongArray(jsize len) {$/;" f struct:JNIEnv_ +NewObject src/enclave/Include/jni.h /^ jobject (JNICALL *NewObject)$/;" m struct:JNINativeInterface_ +NewObject src/enclave/Include/jni.h /^ jobject NewObject(jclass clazz, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ +NewObjectA src/enclave/Include/jni.h /^ jobject (JNICALL *NewObjectA)$/;" m struct:JNINativeInterface_ +NewObjectA src/enclave/Include/jni.h /^ jobject NewObjectA(jclass clazz, jmethodID methodID,$/;" f struct:JNIEnv_ +NewObjectArray src/enclave/Include/jni.h /^ jobjectArray (JNICALL *NewObjectArray)$/;" m struct:JNINativeInterface_ +NewObjectArray src/enclave/Include/jni.h /^ jobjectArray NewObjectArray(jsize len, jclass clazz,$/;" f struct:JNIEnv_ +NewObjectV src/enclave/Include/jni.h /^ jobject (JNICALL *NewObjectV)$/;" m struct:JNINativeInterface_ +NewObjectV src/enclave/Include/jni.h /^ jobject NewObjectV(jclass clazz, jmethodID methodID,$/;" f struct:JNIEnv_ +NewShortArray src/enclave/Include/jni.h /^ jshortArray (JNICALL *NewShortArray)$/;" m struct:JNINativeInterface_ +NewShortArray src/enclave/Include/jni.h /^ jshortArray NewShortArray(jsize len) {$/;" f struct:JNIEnv_ +NewString src/enclave/Include/jni.h /^ jstring (JNICALL *NewString)$/;" m struct:JNINativeInterface_ +NewString src/enclave/Include/jni.h /^ jstring NewString(const jchar *unicode, jsize len) {$/;" f struct:JNIEnv_ +NewStringUTF src/enclave/Include/jni.h /^ jstring (JNICALL *NewStringUTF)$/;" m struct:JNINativeInterface_ +NewStringUTF src/enclave/Include/jni.h /^ jstring NewStringUTF(const char *utf) {$/;" f struct:JNIEnv_ +NewWeakGlobalRef src/enclave/Include/jni.h /^ jweak (JNICALL *NewWeakGlobalRef)$/;" m struct:JNINativeInterface_ +NewWeakGlobalRef src/enclave/Include/jni.h /^ jweak NewWeakGlobalRef(jobject obj) {$/;" f struct:JNIEnv_ +PRINT_BYTE_ARRAY src/enclave/Common/common.h /^inline void PRINT_BYTE_ARRAY(void *file, void *mem, uint32_t len)$/;" f +PROJECT_H src/enclave/Enclave/Project.h /^#define PROJECT_H$/;" d +PSDA_SVN_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define PSDA_SVN_SIZE /;" d +PSDA_SVN_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define PSDA_SVN_SIZE /;" d +PSVN_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define PSVN_SIZE /;" d +PSVN_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define PSVN_SIZE /;" d +PopLocalFrame src/enclave/Include/jni.h /^ jobject (JNICALL *PopLocalFrame)$/;" m struct:JNINativeInterface_ +PopLocalFrame src/enclave/Include/jni.h /^ jobject PopLocalFrame(jobject result) {$/;" f struct:JNIEnv_ +PushLocalFrame src/enclave/Include/jni.h /^ jint (JNICALL *PushLocalFrame)$/;" m struct:JNINativeInterface_ +PushLocalFrame src/enclave/Include/jni.h /^ jint PushLocalFrame(jint capacity) {$/;" f struct:JNIEnv_ +RA_KEY_H src/enclave/Enclave/key.h /^#define RA_KEY_H$/;" d +REMOTE_ATTESTATION_H src/enclave/Enclave/isv_enclave.h /^#define REMOTE_ATTESTATION_H$/;" d +RegisterNatives src/enclave/Include/jni.h /^ jint (JNICALL *RegisterNatives)$/;" m struct:JNINativeInterface_ +RegisterNatives src/enclave/Include/jni.h /^ jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,$/;" f struct:JNIEnv_ +ReleaseBooleanArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseBooleanArrayElements)$/;" m struct:JNINativeInterface_ +ReleaseBooleanArrayElements src/enclave/Include/jni.h /^ void ReleaseBooleanArrayElements(jbooleanArray array,$/;" f struct:JNIEnv_ +ReleaseByteArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseByteArrayElements)$/;" m struct:JNINativeInterface_ +ReleaseByteArrayElements src/enclave/Include/jni.h /^ void ReleaseByteArrayElements(jbyteArray array,$/;" f struct:JNIEnv_ +ReleaseCharArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseCharArrayElements)$/;" m struct:JNINativeInterface_ +ReleaseCharArrayElements src/enclave/Include/jni.h /^ void ReleaseCharArrayElements(jcharArray array,$/;" f struct:JNIEnv_ +ReleaseDoubleArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseDoubleArrayElements)$/;" m struct:JNINativeInterface_ +ReleaseDoubleArrayElements src/enclave/Include/jni.h /^ void ReleaseDoubleArrayElements(jdoubleArray array,$/;" f struct:JNIEnv_ +ReleaseFloatArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseFloatArrayElements)$/;" m struct:JNINativeInterface_ +ReleaseFloatArrayElements src/enclave/Include/jni.h /^ void ReleaseFloatArrayElements(jfloatArray array,$/;" f struct:JNIEnv_ +ReleaseIntArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseIntArrayElements)$/;" m struct:JNINativeInterface_ +ReleaseIntArrayElements src/enclave/Include/jni.h /^ void ReleaseIntArrayElements(jintArray array,$/;" f struct:JNIEnv_ +ReleaseLongArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseLongArrayElements)$/;" m struct:JNINativeInterface_ +ReleaseLongArrayElements src/enclave/Include/jni.h /^ void ReleaseLongArrayElements(jlongArray array,$/;" f struct:JNIEnv_ +ReleasePrimitiveArrayCritical src/enclave/Include/jni.h /^ void (JNICALL *ReleasePrimitiveArrayCritical)$/;" m struct:JNINativeInterface_ +ReleasePrimitiveArrayCritical src/enclave/Include/jni.h /^ void ReleasePrimitiveArrayCritical(jarray array, void *carray, jint mode) {$/;" f struct:JNIEnv_ +ReleaseShortArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseShortArrayElements)$/;" m struct:JNINativeInterface_ +ReleaseShortArrayElements src/enclave/Include/jni.h /^ void ReleaseShortArrayElements(jshortArray array,$/;" f struct:JNIEnv_ +ReleaseStringChars src/enclave/Include/jni.h /^ void (JNICALL *ReleaseStringChars)$/;" m struct:JNINativeInterface_ +ReleaseStringChars src/enclave/Include/jni.h /^ void ReleaseStringChars(jstring str, const jchar *chars) {$/;" f struct:JNIEnv_ +ReleaseStringCritical src/enclave/Include/jni.h /^ void (JNICALL *ReleaseStringCritical)$/;" m struct:JNINativeInterface_ +ReleaseStringCritical src/enclave/Include/jni.h /^ void ReleaseStringCritical(jstring string, const jchar *cstring) {$/;" f struct:JNIEnv_ +ReleaseStringUTFChars src/enclave/Include/jni.h /^ void (JNICALL *ReleaseStringUTFChars)$/;" m struct:JNINativeInterface_ +ReleaseStringUTFChars src/enclave/Include/jni.h /^ void ReleaseStringUTFChars(jstring str, const char* chars) {$/;" f struct:JNIEnv_ +RowIterator src/enclave/Enclave/Flatbuffers.h /^ typedef flatbuffers::Vector>::const_iterator RowIterator;$/;" t class:EncryptedBlocksToRowReader +SAFE_FREE src/enclave/ServiceProvider/service_provider.cpp /^#define SAFE_FREE(/;" d file: +SAMPLE_AESCTR_KEY_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_AESCTR_KEY_SIZE /;" d +SAMPLE_AESGCM_IV_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_AESGCM_IV_SIZE /;" d +SAMPLE_AESGCM_KEY_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_AESGCM_KEY_SIZE /;" d +SAMPLE_AESGCM_MAC_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_AESGCM_MAC_SIZE /;" d +SAMPLE_AES_CMAC_KDF_ID src/enclave/ServiceProvider/service_provider.h /^const uint16_t SAMPLE_AES_CMAC_KDF_ID = 0x0001;$/;" v +SAMPLE_CMAC_KEY_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_CMAC_KEY_SIZE /;" d +SAMPLE_CMAC_MAC_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_CMAC_MAC_SIZE /;" d +SAMPLE_CPUSVN_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_CPUSVN_SIZE /;" d +SAMPLE_DERIVE_KEY_MK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_MK,$/;" e enum:_sample_derive_key_type_t +SAMPLE_DERIVE_KEY_MK_VK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_MK_VK,$/;" e enum:_sample_derive_key_type_t +SAMPLE_DERIVE_KEY_SK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_SK,$/;" e enum:_sample_derive_key_type_t +SAMPLE_DERIVE_KEY_SMK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_SMK = 0,$/;" e enum:_sample_derive_key_type_t +SAMPLE_DERIVE_KEY_SMK_SK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_SMK_SK = 0,$/;" e enum:_sample_derive_key_type_t +SAMPLE_DERIVE_KEY_VK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_VK,$/;" e enum:_sample_derive_key_type_t +SAMPLE_ECP256_KEY_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_ECP256_KEY_SIZE /;" d +SAMPLE_ECP_KEY_SIZE src/enclave/ServiceProvider/ecp.h /^#define SAMPLE_ECP_KEY_SIZE /;" d +SAMPLE_EC_MAC_SIZE src/enclave/ServiceProvider/ecp.h /^#define SAMPLE_EC_MAC_SIZE /;" d +SAMPLE_ERROR_INVALID_PARAMETER src/enclave/sample_libcrypto/sample_libcrypto.h /^ SAMPLE_ERROR_INVALID_PARAMETER , \/\/ The parameter is incorrect$/;" e enum:sample_status_t +SAMPLE_ERROR_OUT_OF_MEMORY src/enclave/sample_libcrypto/sample_libcrypto.h /^ SAMPLE_ERROR_OUT_OF_MEMORY , \/\/ Not enough memory is available to complete this operation$/;" e enum:sample_status_t +SAMPLE_ERROR_UNEXPECTED src/enclave/sample_libcrypto/sample_libcrypto.h /^ SAMPLE_ERROR_UNEXPECTED , \/\/ Unexpected error$/;" e enum:sample_status_t +SAMPLE_FEBITSIZE src/enclave/ServiceProvider/ecp.h /^ #define SAMPLE_FEBITSIZE /;" d +SAMPLE_FEBITSIZE src/enclave/ServiceProvider/remote_attestation_result.h /^ #define SAMPLE_FEBITSIZE /;" d +SAMPLE_HASH_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_HASH_SIZE /;" d +SAMPLE_LIBCRYPTO_API src/enclave/sample_libcrypto/sample_libcrypto.h /^ #define SAMPLE_LIBCRYPTO_API /;" d +SAMPLE_LIBCRYPTO_API src/enclave/sample_libcrypto/sample_libcrypto.h /^ #define SAMPLE_LIBCRYPTO_API /;" d +SAMPLE_MAC_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_MAC_SIZE /;" d +SAMPLE_MAC_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define SAMPLE_MAC_SIZE /;" d +SAMPLE_NISTP256_KEY_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define SAMPLE_NISTP256_KEY_SIZE /;" d +SAMPLE_NISTP_ECP256_KEY_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_NISTP_ECP256_KEY_SIZE /;" d +SAMPLE_QUOTE_LINKABLE_SIGNATURE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_QUOTE_LINKABLE_SIGNATURE /;" d +SAMPLE_QUOTE_UNLINKABLE_SIGNATURE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_QUOTE_UNLINKABLE_SIGNATURE /;" d +SAMPLE_REPORT_DATA_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_REPORT_DATA_SIZE /;" d +SAMPLE_SHA256_HASH_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_SHA256_HASH_SIZE /;" d +SAMPLE_SP_IV_SIZE src/enclave/ServiceProvider/service_provider.h /^#define SAMPLE_SP_IV_SIZE /;" d +SAMPLE_SP_TAG_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define SAMPLE_SP_TAG_SIZE /;" d +SAMPLE_SP_TAG_SIZE src/enclave/ServiceProvider/service_provider.h /^#define SAMPLE_SP_TAG_SIZE /;" d +SAMPLE_SUCCESS src/enclave/sample_libcrypto/sample_libcrypto.h /^ SAMPLE_SUCCESS = 0,$/;" e enum:sample_status_t +SGX_AES_H src/enclave/Enclave/sgxaes.h /^#define SGX_AES_H$/;" d +SP_IAS_FAILED src/enclave/ServiceProvider/service_provider.h /^ SP_IAS_FAILED,$/;" e enum:__anon5 +SP_INTEGRITY_FAILED src/enclave/ServiceProvider/service_provider.h /^ SP_INTEGRITY_FAILED,$/;" e enum:__anon5 +SP_INTERNAL_ERROR src/enclave/ServiceProvider/service_provider.h /^ SP_INTERNAL_ERROR,$/;" e enum:__anon5 +SP_OK src/enclave/ServiceProvider/service_provider.h /^ SP_OK,$/;" e enum:__anon5 +SP_PROTOCOL_ERROR src/enclave/ServiceProvider/service_provider.h /^ SP_PROTOCOL_ERROR,$/;" e enum:__anon5 +SP_QUOTE_VERIFICATION_FAILED src/enclave/ServiceProvider/service_provider.h /^ SP_QUOTE_VERIFICATION_FAILED,$/;" e enum:__anon5 +SP_QUOTE_VERSION_ERROR src/enclave/ServiceProvider/service_provider.h /^ SP_QUOTE_VERSION_ERROR,$/;" e enum:__anon5 +SP_UNSUPPORTED_EXTENDED_EPID_GROUP src/enclave/ServiceProvider/service_provider.h /^ SP_UNSUPPORTED_EXTENDED_EPID_GROUP,$/;" e enum:__anon5 +SWAP_ENDIAN_32B src/enclave/ServiceProvider/ias_ra.cpp /^ #define SWAP_ENDIAN_32B(/;" d file: +SWAP_ENDIAN_DW src/enclave/ServiceProvider/ias_ra.cpp /^ #define SWAP_ENDIAN_DW(/;" d file: +SetBooleanArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetBooleanArrayRegion)$/;" m struct:JNINativeInterface_ +SetBooleanArrayRegion src/enclave/Include/jni.h /^ void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ +SetBooleanField src/enclave/Include/jni.h /^ void (JNICALL *SetBooleanField)$/;" m struct:JNINativeInterface_ +SetBooleanField src/enclave/Include/jni.h /^ void SetBooleanField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ +SetByteArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetByteArrayRegion)$/;" m struct:JNINativeInterface_ +SetByteArrayRegion src/enclave/Include/jni.h /^ void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ +SetByteField src/enclave/Include/jni.h /^ void (JNICALL *SetByteField)$/;" m struct:JNINativeInterface_ +SetByteField src/enclave/Include/jni.h /^ void SetByteField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ +SetCharArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetCharArrayRegion)$/;" m struct:JNINativeInterface_ +SetCharArrayRegion src/enclave/Include/jni.h /^ void SetCharArrayRegion(jcharArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ +SetCharField src/enclave/Include/jni.h /^ void (JNICALL *SetCharField)$/;" m struct:JNINativeInterface_ +SetCharField src/enclave/Include/jni.h /^ void SetCharField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ +SetDoubleArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetDoubleArrayRegion)$/;" m struct:JNINativeInterface_ +SetDoubleArrayRegion src/enclave/Include/jni.h /^ void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ +SetDoubleField src/enclave/Include/jni.h /^ void (JNICALL *SetDoubleField)$/;" m struct:JNINativeInterface_ +SetDoubleField src/enclave/Include/jni.h /^ void SetDoubleField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ +SetFloatArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetFloatArrayRegion)$/;" m struct:JNINativeInterface_ +SetFloatArrayRegion src/enclave/Include/jni.h /^ void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ +SetFloatField src/enclave/Include/jni.h /^ void (JNICALL *SetFloatField)$/;" m struct:JNINativeInterface_ +SetFloatField src/enclave/Include/jni.h /^ void SetFloatField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ +SetIntArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetIntArrayRegion)$/;" m struct:JNINativeInterface_ +SetIntArrayRegion src/enclave/Include/jni.h /^ void SetIntArrayRegion(jintArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ +SetIntField src/enclave/Include/jni.h /^ void (JNICALL *SetIntField)$/;" m struct:JNINativeInterface_ +SetIntField src/enclave/Include/jni.h /^ void SetIntField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ +SetLongArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetLongArrayRegion)$/;" m struct:JNINativeInterface_ +SetLongArrayRegion src/enclave/Include/jni.h /^ void SetLongArrayRegion(jlongArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ +SetLongField src/enclave/Include/jni.h /^ void (JNICALL *SetLongField)$/;" m struct:JNINativeInterface_ +SetLongField src/enclave/Include/jni.h /^ void SetLongField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ +SetObjectArrayElement src/enclave/Include/jni.h /^ void (JNICALL *SetObjectArrayElement)$/;" m struct:JNINativeInterface_ +SetObjectArrayElement src/enclave/Include/jni.h /^ void SetObjectArrayElement(jobjectArray array, jsize index,$/;" f struct:JNIEnv_ +SetObjectField src/enclave/Include/jni.h /^ void (JNICALL *SetObjectField)$/;" m struct:JNINativeInterface_ +SetObjectField src/enclave/Include/jni.h /^ void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {$/;" f struct:JNIEnv_ +SetShortArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetShortArrayRegion)$/;" m struct:JNINativeInterface_ +SetShortArrayRegion src/enclave/Include/jni.h /^ void SetShortArrayRegion(jshortArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ +SetShortField src/enclave/Include/jni.h /^ void (JNICALL *SetShortField)$/;" m struct:JNINativeInterface_ +SetShortField src/enclave/Include/jni.h /^ void SetShortField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ +SetStaticBooleanField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticBooleanField)$/;" m struct:JNINativeInterface_ +SetStaticBooleanField src/enclave/Include/jni.h /^ void SetStaticBooleanField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ +SetStaticByteField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticByteField)$/;" m struct:JNINativeInterface_ +SetStaticByteField src/enclave/Include/jni.h /^ void SetStaticByteField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ +SetStaticCharField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticCharField)$/;" m struct:JNINativeInterface_ +SetStaticCharField src/enclave/Include/jni.h /^ void SetStaticCharField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ +SetStaticDoubleField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticDoubleField)$/;" m struct:JNINativeInterface_ +SetStaticDoubleField src/enclave/Include/jni.h /^ void SetStaticDoubleField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ +SetStaticFloatField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticFloatField)$/;" m struct:JNINativeInterface_ +SetStaticFloatField src/enclave/Include/jni.h /^ void SetStaticFloatField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ +SetStaticIntField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticIntField)$/;" m struct:JNINativeInterface_ +SetStaticIntField src/enclave/Include/jni.h /^ void SetStaticIntField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ +SetStaticLongField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticLongField)$/;" m struct:JNINativeInterface_ +SetStaticLongField src/enclave/Include/jni.h /^ void SetStaticLongField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ +SetStaticObjectField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticObjectField)$/;" m struct:JNINativeInterface_ +SetStaticObjectField src/enclave/Include/jni.h /^ void SetStaticObjectField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ +SetStaticShortField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticShortField)$/;" m struct:JNINativeInterface_ +SetStaticShortField src/enclave/Include/jni.h /^ void SetStaticShortField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ +SortedRunsReader src/enclave/Enclave/Flatbuffers.h /^ SortedRunsReader(uint8_t *buf, size_t len)$/;" f class:SortedRunsReader +SortedRunsReader src/enclave/Enclave/Flatbuffers.h /^class SortedRunsReader {$/;" c +State src/enclave/Enclave/sgxaes.h /^enum State {$/;" g +StreamCipher src/enclave/Enclave/Crypto.cpp /^StreamCipher::StreamCipher(uint8_t *ciphertext_ptr) {$/;" f class:StreamCipher +StreamCipher src/enclave/Enclave/Crypto.h /^class StreamCipher {$/;" c +StreamDecipher src/enclave/Enclave/Crypto.cpp /^StreamDecipher::StreamDecipher(uint8_t *ciphertext_ptr, uint32_t enc_size) {$/;" f class:StreamDecipher +StreamDecipher src/enclave/Enclave/Crypto.h /^class StreamDecipher {$/;" c +TOKEN_FILENAME src/enclave/App/App.cpp /^# define TOKEN_FILENAME /;" d file: +TRUE src/enclave/App/App.cpp /^# define TRUE /;" d file: +TYPE_IAS_ATT_EVIDENCE src/enclave/ServiceProvider/service_provider.h /^ TYPE_IAS_ATT_EVIDENCE,$/;" e enum:_ias_msg_type_t +TYPE_IAS_ATT_RESULT src/enclave/ServiceProvider/service_provider.h /^ TYPE_IAS_ATT_RESULT,$/;" e enum:_ias_msg_type_t +TYPE_IAS_ENROLL src/enclave/ServiceProvider/service_provider.h /^ TYPE_IAS_ENROLL,$/;" e enum:_ias_msg_type_t +TYPE_IAS_GET_SIGRL src/enclave/ServiceProvider/service_provider.h /^ TYPE_IAS_GET_SIGRL,$/;" e enum:_ias_msg_type_t +TYPE_IAS_SIGRL src/enclave/ServiceProvider/service_provider.h /^ TYPE_IAS_SIGRL,$/;" e enum:_ias_msg_type_t +TYPE_RA_ATT_RESULT src/enclave/ServiceProvider/service_provider.h /^ TYPE_RA_ATT_RESULT,$/;" e enum:_ra_msg_type_t +TYPE_RA_MSG0 src/enclave/ServiceProvider/service_provider.h /^ TYPE_RA_MSG0,$/;" e enum:_ra_msg_type_t +TYPE_RA_MSG1 src/enclave/ServiceProvider/service_provider.h /^ TYPE_RA_MSG1,$/;" e enum:_ra_msg_type_t +TYPE_RA_MSG2 src/enclave/ServiceProvider/service_provider.h /^ TYPE_RA_MSG2,$/;" e enum:_ra_msg_type_t +TYPE_RA_MSG3 src/enclave/ServiceProvider/service_provider.h /^ TYPE_RA_MSG3,$/;" e enum:_ra_msg_type_t +Tag src/enclave/Enclave/sgxaes.h /^struct Tag {$/;" s +Throw src/enclave/Include/jni.h /^ jint (JNICALL *Throw)$/;" m struct:JNINativeInterface_ +Throw src/enclave/Include/jni.h /^ jint Throw(jthrowable obj) {$/;" f struct:JNIEnv_ +ThrowNew src/enclave/Include/jni.h /^ jint (JNICALL *ThrowNew)$/;" m struct:JNINativeInterface_ +ThrowNew src/enclave/Include/jni.h /^ jint ThrowNew(jclass clazz, const char *msg) {$/;" f struct:JNIEnv_ +ToReflectedField src/enclave/Include/jni.h /^ jobject (JNICALL *ToReflectedField)$/;" m struct:JNINativeInterface_ +ToReflectedField src/enclave/Include/jni.h /^ jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic) {$/;" f struct:JNIEnv_ +ToReflectedMethod src/enclave/Include/jni.h /^ jobject (JNICALL *ToReflectedMethod)$/;" m struct:JNINativeInterface_ +ToReflectedMethod src/enclave/Include/jni.h /^ jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic) {$/;" f struct:JNIEnv_ +UNUSED src/enclave/ServiceProvider/ias_ra.cpp /^#define UNUSED(/;" d file: +UTIL_H src/enclave/Enclave/util.h /^#define UTIL_H$/;" d +UnregisterNatives src/enclave/Include/jni.h /^ jint (JNICALL *UnregisterNatives)$/;" m struct:JNINativeInterface_ +UnregisterNatives src/enclave/Include/jni.h /^ jint UnregisterNatives(jclass clazz) {$/;" f struct:JNIEnv_ +UntrustedMemoryAllocator src/enclave/Enclave/Flatbuffers.h /^class UntrustedMemoryAllocator : public flatbuffers::simple_allocator {$/;" c +_ECP_H src/enclave/ServiceProvider/ecp.h /^#define _ECP_H$/;" d +_ERRNO_T_DEFINED src/enclave/ServiceProvider/ecp.h /^#define _ERRNO_T_DEFINED$/;" d +_IAS_RA_H src/enclave/ServiceProvider/ias_ra.h /^#define _IAS_RA_H$/;" d +_Included_SGXEnclave src/enclave/App/SGXEnclave.h /^#define _Included_SGXEnclave$/;" d +_Included_SP src/enclave/ServiceProvider/SP.h /^#define _Included_SP$/;" d +_JAVASOFT_JNI_H_ src/enclave/Include/jni.h /^#define _JAVASOFT_JNI_H_$/;" d +_JAVASOFT_JNI_MD_H_ src/enclave/Include/jni_md.h /^#define _JAVASOFT_JNI_MD_H_$/;" d +_JNI_IMPORT_OR_EXPORT_ src/enclave/Include/jni.h /^#define _JNI_IMPORT_OR_EXPORT_ /;" d +_REMOTE_ATTESTATION_RESULT_H_ src/enclave/ServiceProvider/remote_attestation_result.h /^#define _REMOTE_ATTESTATION_RESULT_H_$/;" d +_SERVICE_PROVIDER_H src/enclave/ServiceProvider/service_provider.h /^#define _SERVICE_PROVIDER_H$/;" d +_SORT_H_ src/enclave/Enclave/Sort.h /^#define _SORT_H_$/;" d +__has_attribute src/enclave/Include/jni_md.h /^ #define __has_attribute(/;" d +_derive_key_type_t src/enclave/Enclave/isv_enclave.cpp /^typedef enum _derive_key_type_t$/;" g file: +_hash_buffer_t src/enclave/Enclave/isv_enclave.cpp /^typedef struct _hash_buffer_t$/;" s file: +_hash_buffer_t src/enclave/ServiceProvider/ecp.cpp /^typedef struct _hash_buffer_t$/;" s file: +_ias_att_report_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct _ias_att_report_t$/;" s +_ias_msg_type_t src/enclave/ServiceProvider/service_provider.h /^typedef enum _ias_msg_type_t$/;" g +_jarray src/enclave/Include/jni.h /^class _jarray : public _jobject {};$/;" c +_jbooleanArray src/enclave/Include/jni.h /^class _jbooleanArray : public _jarray {};$/;" c +_jbyteArray src/enclave/Include/jni.h /^class _jbyteArray : public _jarray {};$/;" c +_jcharArray src/enclave/Include/jni.h /^class _jcharArray : public _jarray {};$/;" c +_jclass src/enclave/Include/jni.h /^class _jclass : public _jobject {};$/;" c +_jdoubleArray src/enclave/Include/jni.h /^class _jdoubleArray : public _jarray {};$/;" c +_jfloatArray src/enclave/Include/jni.h /^class _jfloatArray : public _jarray {};$/;" c +_jintArray src/enclave/Include/jni.h /^class _jintArray : public _jarray {};$/;" c +_jlongArray src/enclave/Include/jni.h /^class _jlongArray : public _jarray {};$/;" c +_jobject src/enclave/Include/jni.h /^class _jobject {};$/;" c +_jobjectArray src/enclave/Include/jni.h /^class _jobjectArray : public _jarray {};$/;" c +_jobjectType src/enclave/Include/jni.h /^typedef enum _jobjectType {$/;" g +_jshortArray src/enclave/Include/jni.h /^class _jshortArray : public _jarray {};$/;" c +_jstring src/enclave/Include/jni.h /^class _jstring : public _jobject {};$/;" c +_jthrowable src/enclave/Include/jni.h /^class _jthrowable : public _jobject {};$/;" c +_ra_msg_type_t src/enclave/ServiceProvider/service_provider.h /^typedef enum _ra_msg_type_t$/;" g +_ra_samp_request_header_t src/enclave/ServiceProvider/service_provider.h /^typedef struct _ra_samp_request_header_t {$/;" s +_ra_samp_response_header_t src/enclave/ServiceProvider/service_provider.h /^typedef struct _ra_samp_response_header_t {$/;" s +_sample_derive_key_type_t src/enclave/ServiceProvider/ecp.h /^typedef enum _sample_derive_key_type_t$/;" g +_sgx_errlist_t src/enclave/App/App.cpp /^typedef struct _sgx_errlist_t {$/;" s file: +_sp_db_item_t src/enclave/ServiceProvider/service_provider.cpp /^typedef struct _sp_db_item_t$/;" s file: +a src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Row *a;$/;" m class:FlatbuffersAggOpEvaluator +a_len src/enclave/Enclave/sgxaes.h /^ size_t a_len;$/;" m struct:AesGcm +aad src/enclave/Enclave/sgxaes.cpp /^void AesGcm::aad(const unsigned char* data, size_t data_len) {$/;" f class:AesGcm +acquire_sbt_jar build/sbt /^acquire_sbt_jar () {$/;" f +addDebugger build/sbt /^addDebugger () { addJava "-Xdebug" ; addJava "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1"; }$/;" f +addJava build/sbt /^addJava () { vlog "[addJava] arg = '$1'" ; java_args+=("$1"); }$/;" f +addResidual build/sbt /^addResidual () { vlog "[residual] arg = '$1'" ; residual_args+=("$1"); }$/;" f +addResolver build/sbt /^addResolver () { addSbt "set resolvers += $1"; }$/;" f +addSbt build/sbt /^addSbt () { vlog "[addSbt] arg = '$1'" ; sbt_commands+=("$1"); }$/;" f +addScalac build/sbt /^addScalac () { vlog "[addScalac] arg = '$1'" ; scalac_args+=("$1"); }$/;" f +aggregate src/enclave/Enclave/ExpressionEvaluation.h /^ void aggregate(const tuix::Row *row) {$/;" f class:FlatbuffersAggOpEvaluator +aggregate_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> aggregate_evaluators;$/;" m class:FlatbuffersAggOpEvaluator +algorithm_id src/enclave/Enclave/isv_enclave.cpp /^ uint8_t algorithm_id[4];$/;" m struct:_hash_buffer_t file: +algorithm_id src/enclave/ServiceProvider/ecp.cpp /^ uint8_t algorithm_id[4];$/;" m struct:_hash_buffer_t file: +align src/enclave/ServiceProvider/service_provider.h /^ uint8_t align[1];$/;" m struct:_ra_samp_response_header_t +align src/enclave/ServiceProvider/service_provider.h /^ uint8_t align[3];$/;" m struct:_ra_samp_request_header_t +allocate src/enclave/Enclave/Flatbuffers.h /^ virtual uint8_t *allocate(size_t size) const {$/;" f class:UntrustedMemoryAllocator +attestation_msg_sample1 src/enclave/ServiceProvider/sample_messages.h /^uint8_t attestation_msg_sample1[] =$/;" v +attestation_msg_sample2 src/enclave/ServiceProvider/sample_messages.h /^uint8_t attestation_msg_sample2[] =$/;" v +attributes src/enclave/ServiceProvider/ias_ra.h /^ sample_attributes_t attributes; \/\/ ( 48) Any special Capabilities$/;" m struct:sample_report_body_t +b src/enclave/Include/jni.h /^ jbyte b;$/;" m union:jvalue +b src/enclave/ServiceProvider/service_provider.cpp /^ lc_ec256_private_t b;$/;" m struct:_sp_db_item_t file: +basename src/enclave/ServiceProvider/ias_ra.h /^ sample_basename_t basename; \/\/ 16$/;" m struct:sample_quote_t +begin src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Vector>::const_iterator begin() {$/;" f class:EncryptedBlocksToEncryptedBlockReader +begin src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Vector>::const_iterator begin() {$/;" f class:EncryptedBlockToRowReader +block_idx src/enclave/Enclave/Flatbuffers.h /^ uint32_t block_idx;$/;" m class:EncryptedBlocksToRowReader +body src/enclave/ServiceProvider/service_provider.h /^ uint8_t body[];$/;" m struct:_ra_samp_response_header_t +body src/enclave/ServiceProvider/service_provider.h /^ uint8_t body[];$/;" m struct:_ra_samp_request_header_t +buf src/enclave/Enclave/Flatbuffers.h /^ uint8_t *buf;$/;" m class:SortedRunsReader +build_props_sbt build/sbt /^build_props_sbt () {$/;" f +build_props_scala build/sbt /^build_props_scala () {$/;" f +builder src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:AggregateExpressionEvaluator +builder src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersAggOpEvaluator +builder src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersExpressionEvaluator +builder src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersJoinExprEvaluator +builder src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersSortOrderEvaluator +builder src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersRowWriter +builder src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersTemporaryRow +builder2 src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder2;$/;" m class:FlatbuffersAggOpEvaluator +bytes_written src/enclave/Enclave/Crypto.cpp /^uint32_t StreamCipher::bytes_written() {$/;" f class:StreamCipher +c src/enclave/Include/jni.h /^ jchar c;$/;" m union:jvalue +check src/enclave/Common/common.h /^#define check(/;" d +check src/enclave/Enclave/ExpressionEvaluation.h /^#define check(/;" d +checkJava build/sbt /^checkJava() {$/;" f +cipher src/enclave/Enclave/Crypto.h /^ AesGcm *cipher;$/;" m class:StreamCipher +cipher src/enclave/Enclave/Crypto.h /^ AesGcm *cipher;$/;" m class:StreamDecipher +cipher_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *cipher_ptr;$/;" m class:StreamCipher +cipher_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *cipher_ptr;$/;" m class:StreamDecipher +ciphertext_size src/enclave/Enclave/Crypto.h /^ uint32_t ciphertext_size;$/;" m class:StreamCipher +clear src/enclave/Enclave/Flatbuffers.h /^ void clear() {$/;" f class:FlatbuffersRowWriter +clear src/enclave/Enclave/util.cpp /^void clear(uint8_t *dest, uint32_t len) {$/;" f +cmp src/enclave/Enclave/util.cpp /^int cmp(const uint8_t *value1, const uint8_t *value2, uint32_t len) {$/;" f +context src/enclave/App/App.cpp /^static sgx_ra_context_t context = INT_MAX;$/;" v file: +counter src/enclave/Enclave/isv_enclave.cpp /^ uint8_t counter[4];$/;" m struct:_hash_buffer_t file: +counter src/enclave/ServiceProvider/ecp.cpp /^ uint8_t counter[4];$/;" m struct:_hash_buffer_t file: +cpu_svn src/enclave/ServiceProvider/ias_ra.h /^ sample_cpu_svn_t cpu_svn; \/\/ ( 0) Security Version of the CPU$/;" m struct:sample_report_body_t +csv data/disease/synth_disease_data.py /^import csv$/;" i +ctr src/enclave/Enclave/sgxaes.h /^ unsigned char ctr[AES_BLOCK_SIZE];$/;" m struct:GcmContext +current_cipher_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *current_cipher_ptr;$/;" m class:StreamCipher +current_cipher_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *current_cipher_ptr;$/;" m class:StreamDecipher +d src/enclave/Include/jni.h /^ jdouble d;$/;" m union:jvalue +days_since_epoch src/enclave/Enclave/Flatbuffers.h /^ int32_t days_since_epoch;$/;" m class:Date +deallocate src/enclave/Enclave/Flatbuffers.h /^ virtual void deallocate(uint8_t *p) const {$/;" f class:UntrustedMemoryAllocator +debug src/enclave/Common/common.h /^#define debug(/;" d +dec_size src/enclave/Enclave/Crypto.cpp /^uint32_t dec_size(uint32_t ciphertext_size) {$/;" f +decrypt src/enclave/Enclave/Crypto.cpp /^void StreamDecipher::decrypt(uint8_t *plaintext_ptr, uint32_t size) {$/;" f class:StreamDecipher +decrypt src/enclave/Enclave/Crypto.cpp /^void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length,$/;" f +decrypt src/enclave/Enclave/sgxaes.cpp /^void AesGcm::decrypt(const unsigned char* ciphertext, size_t ciphertext_len, unsigned char* plaintext, size_t plaintext_len) {$/;" f class:AesGcm +decrypt src/enclave/ServiceProvider/sp_crypto.cpp /^void decrypt(lc_aes_gcm_128bit_key_t *key,$/;" f +decrypt_with_aad src/enclave/Enclave/Crypto.cpp /^void decrypt_with_aad(const uint8_t *ciphertext, uint32_t ciphertext_length,$/;" f +default_jvm_opts build/sbt /^default_jvm_opts () {$/;" f +derive_key src/enclave/Enclave/isv_enclave.cpp /^bool derive_key($/;" f +derive_key src/enclave/ServiceProvider/ecp.cpp /^bool derive_key(const lc_ec256_dh_shared_t *p_shared_key,$/;" f +derive_key src/enclave/ServiceProvider/ecp.cpp /^bool derive_key(const sample_ec256_dh_shared_t *p_shared_key,$/;" f +derive_key_type_t src/enclave/Enclave/isv_enclave.cpp /^} derive_key_type_t;$/;" t typeref:enum:_derive_key_type_t file: +die build/sbt /^die () { echo "Aborting: $@" ; exit 1; }$/;" f +download_url build/sbt /^download_url () {$/;" f +ecall_decrypt src/enclave/Enclave/Enclave.cpp /^void ecall_decrypt(uint8_t *ciphertext,$/;" f +ecall_enclave_init_ra src/enclave/Enclave/Enclave.cpp /^sgx_status_t ecall_enclave_init_ra(int b_pse, sgx_ra_context_t *p_context) {$/;" f +ecall_enclave_ra_close src/enclave/Enclave/Enclave.cpp /^void ecall_enclave_ra_close(sgx_ra_context_t context) {$/;" f +ecall_encrypt src/enclave/Enclave/Enclave.cpp /^void ecall_encrypt(uint8_t *plaintext, uint32_t plaintext_length,$/;" f +ecall_external_sort src/enclave/Enclave/Enclave.cpp /^void ecall_external_sort(uint8_t *sort_order, size_t sort_order_length,$/;" f +ecall_filter src/enclave/Enclave/Enclave.cpp /^void ecall_filter(uint8_t *condition, size_t condition_length,$/;" f +ecall_find_range_bounds src/enclave/Enclave/Enclave.cpp /^void ecall_find_range_bounds(uint8_t *sort_order, size_t sort_order_length,$/;" f +ecall_non_oblivious_aggregate_step1 src/enclave/Enclave/Enclave.cpp /^void ecall_non_oblivious_aggregate_step1($/;" f +ecall_non_oblivious_aggregate_step2 src/enclave/Enclave/Enclave.cpp /^void ecall_non_oblivious_aggregate_step2($/;" f +ecall_non_oblivious_sort_merge_join src/enclave/Enclave/Enclave.cpp /^void ecall_non_oblivious_sort_merge_join(uint8_t *join_expr, size_t join_expr_length,$/;" f +ecall_partition_for_sort src/enclave/Enclave/Enclave.cpp /^void ecall_partition_for_sort(uint8_t *sort_order, size_t sort_order_length,$/;" f +ecall_project src/enclave/Enclave/Enclave.cpp /^void ecall_project(uint8_t *condition, size_t condition_length,$/;" f +ecall_put_secret_data src/enclave/Enclave/Enclave.cpp /^sgx_status_t ecall_put_secret_data(sgx_ra_context_t context,$/;" f +ecall_sample src/enclave/Enclave/Enclave.cpp /^void ecall_sample(uint8_t *input_rows, size_t input_rows_length,$/;" f +ecall_scan_collect_last_primary src/enclave/Enclave/Enclave.cpp /^void ecall_scan_collect_last_primary(uint8_t *join_expr, size_t join_expr_length,$/;" f +ecall_verify_att_result_mac src/enclave/Enclave/Enclave.cpp /^sgx_status_t ecall_verify_att_result_mac(sgx_ra_context_t context, uint8_t* message,$/;" f +echoLine build/sbt /^ echoLine () {$/;" f +echoerr build/sbt /^echoerr () { echo >&2 "$@"; }$/;" f +enc_block_builder src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::FlatBufferBuilder enc_block_builder;$/;" m class:FlatbuffersRowWriter +enc_block_vector src/enclave/Enclave/Flatbuffers.h /^ std::vector> enc_block_vector;$/;" m class:FlatbuffersRowWriter +enc_size src/enclave/Enclave/Crypto.cpp /^uint32_t enc_size(uint32_t plaintext_size) {$/;" f +enclave_init_ra src/enclave/Enclave/isv_enclave.cpp /^sgx_status_t enclave_init_ra(int b_pse,$/;" f +enclave_ra_close src/enclave/Enclave/isv_enclave.cpp /^sgx_status_t SGXAPI enclave_ra_close(sgx_ra_context_t context) {$/;" f +encrypt src/enclave/Enclave/Crypto.cpp /^void StreamCipher::encrypt(uint8_t *plaintext, uint32_t size) {$/;" f class:StreamCipher +encrypt src/enclave/Enclave/Crypto.cpp /^void encrypt(uint8_t *plaintext, uint32_t plaintext_length,$/;" f +encrypt src/enclave/Enclave/sgxaes.cpp /^void AesGcm::encrypt(const unsigned char* plaintext, size_t plaintext_len, unsigned char* ciphertext, size_t ciphertext_len) {$/;" f class:AesGcm +encrypt src/enclave/ServiceProvider/sp_crypto.cpp /^void encrypt(lc_aes_gcm_128bit_key_t *key,$/;" f +encrypt_with_aad src/enclave/Enclave/Crypto.cpp /^void encrypt_with_aad(uint8_t *plaintext, uint32_t plaintext_length,$/;" f +encrypted_blocks src/enclave/Enclave/Flatbuffers.h /^ const tuix::EncryptedBlocks *encrypted_blocks;$/;" m class:EncryptedBlocksToEncryptedBlockReader +encrypted_blocks src/enclave/Enclave/Flatbuffers.h /^ const tuix::EncryptedBlocks *encrypted_blocks;$/;" m class:EncryptedBlocksToRowReader +end src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Vector>::const_iterator end() {$/;" f class:EncryptedBlocksToEncryptedBlockReader +end src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Vector>::const_iterator end() {$/;" f class:EncryptedBlockToRowReader +enroll src/enclave/ServiceProvider/service_provider.h /^ sample_enroll enroll;$/;" m struct:sample_extended_epid_group +epid_group_id src/enclave/ServiceProvider/ias_ra.h /^ sample_epid_group_id_t epid_group_id; \/\/ 4$/;" m struct:sample_quote_t +err src/enclave/App/App.cpp /^ sgx_status_t err;$/;" m struct:_sgx_errlist_t file: +errno_t src/enclave/ServiceProvider/ecp.h /^typedef int errno_t;$/;" t +eval src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Field *eval(const tuix::Row *row) {$/;" f class:FlatbuffersExpressionEvaluator +eval_binary_arithmetic_op src/enclave/Enclave/ExpressionEvaluation.h /^flatbuffers::Offset eval_binary_arithmetic_op($/;" f +eval_binary_comparison src/enclave/Enclave/ExpressionEvaluation.h /^flatbuffers::Offset eval_binary_comparison($/;" f +eval_helper src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::Offset eval_helper(const tuix::Row *row, const tuix::Expr *expr) {$/;" f class:FlatbuffersExpressionEvaluator +evaluate src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Field *evaluate(const tuix::Row *agg) {$/;" f class:AggregateExpressionEvaluator +evaluate src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Row *evaluate() {$/;" f class:FlatbuffersAggOpEvaluator +evaluate_evaluator src/enclave/Enclave/ExpressionEvaluation.h /^ std::unique_ptr evaluate_evaluator;$/;" m class:AggregateExpressionEvaluator +execRunner build/sbt /^execRunner () {$/;" f +exit src/enclave/Enclave/util.cpp /^void exit(int exit_code) {$/;" f +expr src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Expr *expr;$/;" m class:FlatbuffersExpressionEvaluator +extended_epid_group_id src/enclave/ServiceProvider/service_provider.h /^ uint32_t extended_epid_group_id;$/;" m struct:sample_ra_msg0_t +extended_epid_group_id src/enclave/ServiceProvider/service_provider.h /^ uint32_t extended_epid_group_id;$/;" m struct:sample_extended_epid_group +external_merge src/enclave/Enclave/Sort.cpp /^flatbuffers::Offset external_merge($/;" f +external_sort src/enclave/Enclave/Sort.cpp /^void external_sort(uint8_t *sort_order, size_t sort_order_length,$/;" f +extraInfo src/enclave/Include/jni.h /^ void *extraInfo;$/;" m struct:JavaVMOption +f src/enclave/Include/jni.h /^ jfloat f;$/;" m union:jvalue +filter src/enclave/Enclave/Filter.cpp /^void filter(uint8_t *condition, size_t condition_length,$/;" f +find_range_bounds src/enclave/Enclave/Sort.cpp /^void find_range_bounds(uint8_t *sort_order, size_t sort_order_length,$/;" f +finish src/enclave/Enclave/Crypto.cpp /^void StreamCipher::finish() {$/;" f class:StreamCipher +finish src/enclave/Enclave/Flatbuffers.h /^ void finish(flatbuffers::Offset root) {$/;" f class:FlatbuffersRowWriter +flags src/enclave/ServiceProvider/ias_ra.h /^ uint64_t flags;$/;" m struct:sample_attributes_t +flatbuffers_cast src/enclave/Enclave/Flatbuffers.h /^flatbuffers::Offset flatbuffers_cast($/;" f +flatbuffers_copy src/enclave/Enclave/Flatbuffers.cpp /^flatbuffers::Offset flatbuffers_copy($/;" f +flatbuffers_copy src/enclave/Enclave/Flatbuffers.cpp /^flatbuffers::Offset flatbuffers_copy($/;" f +fnPtr src/enclave/Include/jni.h /^ void *fnPtr;$/;" m struct:__anon1 +freebl_cipher_func src/enclave/Enclave/sgxaes.h /^ const void* freebl_cipher_func;$/;" m struct:KeySchedule +functions src/enclave/Include/jni.h /^ const struct JNIInvokeInterface_ *functions;$/;" m struct:JavaVM_ typeref:struct:JavaVM_::JNIInvokeInterface_ +functions src/enclave/Include/jni.h /^ const struct JNINativeInterface_ *functions;$/;" m struct:JNIEnv_ typeref:struct:JNIEnv_::JNINativeInterface_ +g_a src/enclave/ServiceProvider/service_provider.cpp /^ lc_ec256_public_t g_a;$/;" m struct:_sp_db_item_t file: +g_a src/enclave/ServiceProvider/service_provider.h /^ sample_ec_pub_t g_a; \/* the Endian-ness of Ga is$/;" m struct:sample_ra_msg1_t +g_a src/enclave/ServiceProvider/service_provider.h /^ sample_ec_pub_t g_a; \/* the Endian-ness of Ga is*\/$/;" m struct:sample_ra_msg3_t +g_authentication_token src/enclave/ServiceProvider/service_provider.cpp /^static int g_authentication_token = 0;$/;" v file: +g_b src/enclave/ServiceProvider/service_provider.cpp /^ lc_ec256_public_t g_b;$/;" m struct:_sp_db_item_t file: +g_b src/enclave/ServiceProvider/service_provider.h /^ sample_ec_pub_t g_b; \/* the Endian-ness of Gb is$/;" m struct:sample_ra_msg2_t +g_extended_epid_groups src/enclave/ServiceProvider/service_provider.cpp /^static const sample_extended_epid_group g_extended_epid_groups[] = {$/;" v file: +g_is_sp_registered src/enclave/ServiceProvider/service_provider.cpp /^static bool g_is_sp_registered = false;$/;" v file: +g_rk_priv_key src/enclave/ServiceProvider/ias_ra.cpp /^static const lc_ec256_private_t g_rk_priv_key =$/;" v file: +g_secret src/enclave/Enclave/isv_enclave.cpp /^uint8_t g_secret[8] = {0};$/;" v +g_secret src/enclave/ServiceProvider/service_provider.cpp /^uint8_t g_secret[8] = {0,1,2,3,4,5,6,7};$/;" v +g_sim_spid src/enclave/ServiceProvider/ias_ra.cpp /^static sample_spid_t g_sim_spid = {"Service X"};$/;" v file: +g_sp_credentials src/enclave/ServiceProvider/service_provider.cpp /^static int g_sp_credentials = 0;$/;" v file: +g_sp_db src/enclave/ServiceProvider/service_provider.cpp /^static sp_db_item_t g_sp_db;$/;" v file: +g_sp_extended_epid_group_id src/enclave/ServiceProvider/service_provider.cpp /^static const sample_extended_epid_group* g_sp_extended_epid_group_id= NULL;$/;" v file: +g_sp_priv_key src/enclave/ServiceProvider/service_provider.cpp /^sgx_ec256_private_t g_sp_priv_key = {{0}};$/;" v +g_sp_pub_key src/enclave/ServiceProvider/service_provider.cpp /^sgx_ec256_public_t g_sp_pub_key = {{0}, {0}};$/;" v +g_spid src/enclave/ServiceProvider/service_provider.cpp /^sample_spid_t g_spid;$/;" v +gcKeySchedule src/enclave/Enclave/Crypto.cpp /^void gcKeySchedule() {$/;" f +gctx src/enclave/Enclave/sgxaes.h /^ GcmContext gctx;$/;" m struct:AesGcm +get src/enclave/Enclave/Flatbuffers.h /^ const tuix::Row *get() {$/;" f class:FlatbuffersTemporaryRow +getJavaVersion build/sbt /^getJavaVersion() { "$1" -version 2>&1 | grep -E -e '(java|openjdk) version' | awk '{ print $3 }' | tr -d \\"; }$/;" f +get_ec_point src/enclave/ServiceProvider/sp_crypto.cpp /^EC_POINT *get_ec_point(lc_ec256_public_t *p_public) {$/;" f +get_partial_agg src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Row *get_partial_agg() {$/;" f class:FlatbuffersAggOpEvaluator +get_priv_key src/enclave/ServiceProvider/sp_crypto.cpp /^EC_KEY *get_priv_key(lc_ec256_private_t *p_private) {$/;" f +get_script_path build/sbt /^get_script_path () {$/;" f +get_sigrl src/enclave/ServiceProvider/service_provider.h /^ sample_get_sigrl get_sigrl;$/;" m struct:sample_extended_epid_group +gid src/enclave/ServiceProvider/service_provider.h /^ sample_epid_group_id_t gid; \/* the Endian-ness of GID is$/;" m struct:sample_ra_msg1_t +global_eid src/enclave/App/App.cpp /^sgx_enclave_id_t global_eid = 0;$/;" v +group src/enclave/Include/jni.h /^ jobject group;$/;" m struct:JavaVMAttachArgs +grouping_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> grouping_evaluators;$/;" m class:FlatbuffersAggOpEvaluator +gx src/enclave/ServiceProvider/service_provider.h /^ uint8_t gx[SAMPLE_ECP_KEY_SIZE];$/;" m struct:sample_ec_pub_t +gx src/enclave/ServiceProvider/sp_crypto.h /^ uint8_t gx[LC_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_public_t +gx src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint8_t gx[SAMPLE_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_public_t +gy src/enclave/ServiceProvider/service_provider.h /^ uint8_t gy[SAMPLE_ECP_KEY_SIZE];$/;" m struct:sample_ec_pub_t +gy src/enclave/ServiceProvider/sp_crypto.h /^ uint8_t gy[LC_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_public_t +gy src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint8_t gy[SAMPLE_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_public_t +has_next src/enclave/Enclave/Flatbuffers.h /^ bool has_next() {$/;" f class:EncryptedBlockToRowReader +has_next src/enclave/Enclave/Flatbuffers.h /^ bool has_next() {$/;" f class:EncryptedBlocksToRowReader +hash_buffer_t src/enclave/Enclave/isv_enclave.cpp /^} hash_buffer_t;$/;" t typeref:struct:_hash_buffer_t file: +hash_buffer_t src/enclave/ServiceProvider/ecp.cpp /^} hash_buffer_t;$/;" t typeref:struct:_hash_buffer_t file: +htbl src/enclave/Enclave/sgxaes.h /^ unsigned char htbl[16*AES_BLOCK_SIZE];$/;" m struct:GcmContext +i src/enclave/Include/jni.h /^ jint i;$/;" m union:jvalue +ias_att_report_t src/enclave/ServiceProvider/ias_ra.h /^} ias_att_report_t;$/;" t typeref:struct:_ias_att_report_t +ias_enroll src/enclave/ServiceProvider/ias_ra.cpp /^int ias_enroll($/;" f +ias_get_sigrl src/enclave/ServiceProvider/ias_ra.cpp /^int ias_get_sigrl($/;" f +ias_msg_type_t src/enclave/ServiceProvider/service_provider.h /^} ias_msg_type_t;$/;" t typeref:enum:_ias_msg_type_t +ias_platform_info_blob_t src/enclave/ServiceProvider/remote_attestation_result.h /^typedef struct ias_platform_info_blob_t$/;" s +ias_platform_info_blob_t src/enclave/ServiceProvider/remote_attestation_result.h /^} ias_platform_info_blob_t;$/;" t typeref:struct:ias_platform_info_blob_t +ias_pse_status_t src/enclave/ServiceProvider/ias_ra.h /^} ias_pse_status_t;$/;" t typeref:enum:__anon3 +ias_quote_status_t src/enclave/ServiceProvider/ias_ra.h /^} ias_quote_status_t;$/;" t typeref:enum:__anon2 +ias_revoc_reason_t src/enclave/ServiceProvider/ias_ra.h /^} ias_revoc_reason_t;$/;" t typeref:enum:__anon4 +ias_verify_attestation_evidence src/enclave/ServiceProvider/ias_ra.cpp /^int ias_verify_attestation_evidence($/;" f +id src/enclave/ServiceProvider/ias_ra.h /^ uint32_t id;$/;" m struct:_ias_att_report_t +id src/enclave/ServiceProvider/ias_ra.h /^ uint8_t id[16];$/;" m struct:sample_spid_t +ignoreUnrecognized src/enclave/Include/jni.h /^ jboolean ignoreUnrecognized;$/;" m struct:JavaVMInitArgs +info_blob src/enclave/ServiceProvider/ias_ra.h /^ ias_platform_info_blob_t info_blob;$/;" m struct:_ias_att_report_t +init src/enclave/Enclave/Flatbuffers.h /^ void init(const tuix::EncryptedBlock *encrypted_block) {$/;" f class:EncryptedBlockToRowReader +initKeySchedule src/enclave/Enclave/Crypto.cpp /^void initKeySchedule() {$/;" f +init_default_option_file build/sbt /^init_default_option_file () {$/;" f +init_row_reader src/enclave/Enclave/Flatbuffers.h /^ void init_row_reader() {$/;" f class:EncryptedBlocksToRowReader +initial_value_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> initial_value_evaluators;$/;" m class:AggregateExpressionEvaluator +initial_values src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector initial_values(const tuix::Row *unused) {$/;" f class:AggregateExpressionEvaluator +initialize_enclave src/enclave/App/App.cpp /^int initialize_enclave(void)$/;" f +initialized src/enclave/Enclave/Flatbuffers.h /^ bool initialized;$/;" m class:EncryptedBlockToRowReader +intel_aes_encrypt_init_128 src/enclave/Enclave/sgxaes_asm.S /^intel_aes_encrypt_init_128:$/;" l +intel_aes_encrypt_init_192 src/enclave/Enclave/sgxaes_asm.S /^intel_aes_encrypt_init_192:$/;" l +intel_aes_encrypt_init_256 src/enclave/Enclave/sgxaes_asm.S /^intel_aes_encrypt_init_256:$/;" l +intel_aes_gcmAAD src/enclave/Enclave/sgxaes_asm.S /^intel_aes_gcmAAD:$/;" l +intel_aes_gcmDEC src/enclave/Enclave/sgxaes_asm.S /^intel_aes_gcmDEC:$/;" l +intel_aes_gcmENC src/enclave/Enclave/sgxaes_asm.S /^intel_aes_gcmENC:$/;" l +intel_aes_gcmINIT src/enclave/Enclave/sgxaes_asm.S /^intel_aes_gcmINIT:$/;" l +intel_aes_gcmTAG src/enclave/Enclave/sgxaes_asm.S /^intel_aes_gcmTAG:$/;" l +is_cygwin build/sbt /^is_cygwin () [[ "$(uname -a)" == "CYGWIN"* ]]$/;" f +is_primary src/enclave/Enclave/ExpressionEvaluation.h /^ bool is_primary(const tuix::Row *row) {$/;" f class:FlatbuffersJoinExprEvaluator +is_same_group src/enclave/Enclave/ExpressionEvaluation.h /^ bool is_same_group(const tuix::Row *row1, const tuix::Row *row2) {$/;" f class:FlatbuffersAggOpEvaluator +is_same_group src/enclave/Enclave/ExpressionEvaluation.h /^ bool is_same_group(const tuix::Row *row1, const tuix::Row *row2) {$/;" f class:FlatbuffersJoinExprEvaluator +isv_prod_id src/enclave/ServiceProvider/ias_ra.h /^ sample_prod_id_t isv_prod_id; \/\/ (256) Product ID of the Enclave$/;" m struct:sample_report_body_t +isv_svn src/enclave/ServiceProvider/ias_ra.h /^ sample_isv_svn_t isv_svn; \/\/ (258) Security Version of the$/;" m struct:sample_report_body_t +iv src/enclave/Enclave/sgxaes.h /^ unsigned char iv[AES_BLOCK_SIZE*2];$/;" m struct:KeySchedule +iv_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *iv_ptr;$/;" m class:StreamCipher +iv_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *iv_ptr;$/;" m class:StreamDecipher +j src/enclave/Include/jni.h /^ jlong j;$/;" m union:jvalue +jar_file build/sbt /^jar_file () {$/;" f +jar_url build/sbt /^jar_url () { make_url "$1"; }$/;" f +jarray src/enclave/Include/jni.h /^typedef _jarray *jarray;$/;" t +jarray src/enclave/Include/jni.h /^typedef jobject jarray;$/;" t +java_version build/sbt /^java_version () {$/;" f +jboolean src/enclave/Include/jni.h /^typedef unsigned char jboolean;$/;" t +jbooleanArray src/enclave/Include/jni.h /^typedef _jbooleanArray *jbooleanArray;$/;" t +jbooleanArray src/enclave/Include/jni.h /^typedef jarray jbooleanArray;$/;" t +jbyte src/enclave/Include/jni_md.h /^typedef signed char jbyte;$/;" t +jbyteArray src/enclave/Include/jni.h /^typedef _jbyteArray *jbyteArray;$/;" t +jbyteArray src/enclave/Include/jni.h /^typedef jarray jbyteArray;$/;" t +jchar src/enclave/Include/jni.h /^typedef unsigned short jchar;$/;" t +jcharArray src/enclave/Include/jni.h /^typedef _jcharArray *jcharArray;$/;" t +jcharArray src/enclave/Include/jni.h /^typedef jarray jcharArray;$/;" t +jclass src/enclave/Include/jni.h /^typedef _jclass *jclass;$/;" t +jclass src/enclave/Include/jni.h /^typedef jobject jclass;$/;" t +jdouble src/enclave/Include/jni.h /^typedef double jdouble;$/;" t +jdoubleArray src/enclave/Include/jni.h /^typedef _jdoubleArray *jdoubleArray;$/;" t +jdoubleArray src/enclave/Include/jni.h /^typedef jarray jdoubleArray;$/;" t +jfieldID src/enclave/Include/jni.h /^typedef struct _jfieldID *jfieldID;$/;" t typeref:struct:_jfieldID +jfloat src/enclave/Include/jni.h /^typedef float jfloat;$/;" t +jfloatArray src/enclave/Include/jni.h /^typedef _jfloatArray *jfloatArray;$/;" t +jfloatArray src/enclave/Include/jni.h /^typedef jarray jfloatArray;$/;" t +jint src/enclave/Include/jni_md.h /^typedef int jint;$/;" t +jintArray src/enclave/Include/jni.h /^typedef _jintArray *jintArray;$/;" t +jintArray src/enclave/Include/jni.h /^typedef jarray jintArray;$/;" t +jlong src/enclave/Include/jni_md.h /^typedef long jlong;$/;" t +jlong src/enclave/Include/jni_md.h /^typedef long long jlong;$/;" t +jlongArray src/enclave/Include/jni.h /^typedef _jlongArray *jlongArray;$/;" t +jlongArray src/enclave/Include/jni.h /^typedef jarray jlongArray;$/;" t +jmethodID src/enclave/Include/jni.h /^typedef struct _jmethodID *jmethodID;$/;" t typeref:struct:_jmethodID +jobject src/enclave/Include/jni.h /^typedef _jobject *jobject;$/;" t +jobject src/enclave/Include/jni.h /^typedef struct _jobject *jobject;$/;" t typeref:struct:_jobject +jobjectArray src/enclave/Include/jni.h /^typedef _jobjectArray *jobjectArray;$/;" t +jobjectArray src/enclave/Include/jni.h /^typedef jarray jobjectArray;$/;" t +jobjectRefType src/enclave/Include/jni.h /^} jobjectRefType;$/;" t typeref:enum:_jobjectType +jshort src/enclave/Include/jni.h /^typedef short jshort;$/;" t +jshortArray src/enclave/Include/jni.h /^typedef _jshortArray *jshortArray;$/;" t +jshortArray src/enclave/Include/jni.h /^typedef jarray jshortArray;$/;" t +jsize src/enclave/Include/jni.h /^typedef jint jsize;$/;" t +jstring src/enclave/Include/jni.h /^typedef _jstring *jstring;$/;" t +jstring src/enclave/Include/jni.h /^typedef jobject jstring;$/;" t +jthrowable src/enclave/Include/jni.h /^typedef _jthrowable *jthrowable;$/;" t +jthrowable src/enclave/Include/jni.h /^typedef jobject jthrowable;$/;" t +jvalue src/enclave/Include/jni.h /^typedef union jvalue {$/;" u +jvalue src/enclave/Include/jni.h /^} jvalue;$/;" t typeref:union:jvalue +jweak src/enclave/Include/jni.h /^typedef jobject jweak;$/;" t +kdf_id src/enclave/ServiceProvider/service_provider.h /^ uint16_t kdf_id; \/* key derivation function id in little endian. $/;" m struct:sample_ra_msg2_t +key src/enclave/Enclave/Crypto.cpp /^sgx_aes_gcm_128bit_key_t *key = &key_data;$/;" v +key src/enclave/ServiceProvider/Main.cpp /^lc_aes_gcm_128bit_key_t key = "helloworld12312";$/;" v +key_data src/enclave/Enclave/Crypto.cpp /^sgx_aes_gcm_128bit_key_t key_data = {0};$/;" v +key_derivation src/enclave/Enclave/isv_enclave.cpp /^sgx_status_t key_derivation(const sgx_ec256_dh_shared_t* shared_key,$/;" f +key_expansion128 src/enclave/Enclave/sgxaes_asm.S /^key_expansion128:$/;" l +key_expansion192 src/enclave/Enclave/sgxaes_asm.S /^key_expansion192:$/;" l +key_expansion256 src/enclave/Enclave/sgxaes_asm.S /^key_expansion256:$/;" l +key_str src/enclave/ServiceProvider/service_provider.cpp /^const char *key_str = "helloworld123123";$/;" v +ks src/enclave/Enclave/Crypto.cpp /^KeySchedule *ks = (KeySchedule *) &ks_backup;$/;" v +ks src/enclave/Enclave/sgxaes.h /^ const KeySchedule* ks;$/;" m struct:GcmContext +ks src/enclave/Enclave/sgxaes.h /^ uint32_t ks[AES_MAX_EXP_KEY_SIZE];$/;" m struct:KeySchedule +ks_backup src/enclave/Enclave/Crypto.cpp /^const KeySchedule ks_backup = KeySchedule((unsigned char *) key_data, SGX_AESGCM_KEY_SIZE);$/;" v +l src/enclave/Include/jni.h /^ jobject l;$/;" m union:jvalue +latest_equivalent_tcb_psvn src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t latest_equivalent_tcb_psvn[PSVN_SIZE];$/;" m struct:ias_platform_info_blob_t +latest_psda_svn src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t latest_psda_svn[PSDA_SVN_SIZE];$/;" m struct:ias_platform_info_blob_t +latest_pse_isvsvn src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t latest_pse_isvsvn[ISVSVN_SIZE];$/;" m struct:ias_platform_info_blob_t +lc_aes_ctr_128bit_key_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_aes_ctr_128bit_key_t[LC_AESCTR_KEY_SIZE];$/;" t +lc_aes_gcm_128bit_key_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_aes_gcm_128bit_key_t[LC_AESGCM_KEY_SIZE];$/;" t +lc_aes_gcm_128bit_tag_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_aes_gcm_128bit_tag_t[LC_AESGCM_MAC_SIZE];$/;" t +lc_cmac_128bit_key_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_cmac_128bit_key_t[LC_CMAC_KEY_SIZE];$/;" t +lc_cmac_128bit_tag_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_cmac_128bit_tag_t[LC_CMAC_MAC_SIZE];$/;" t +lc_cmac_state_handle_t src/enclave/ServiceProvider/sp_crypto.h /^typedef void* lc_cmac_state_handle_t;$/;" t +lc_ec256_dh_shared_t src/enclave/ServiceProvider/sp_crypto.h /^typedef struct lc_ec256_dh_shared_t$/;" s +lc_ec256_dh_shared_t src/enclave/ServiceProvider/sp_crypto.h /^} lc_ec256_dh_shared_t;$/;" t typeref:struct:lc_ec256_dh_shared_t +lc_ec256_private_t src/enclave/ServiceProvider/sp_crypto.h /^typedef struct lc_ec256_private_t$/;" s +lc_ec256_private_t src/enclave/ServiceProvider/sp_crypto.h /^} lc_ec256_private_t;$/;" t typeref:struct:lc_ec256_private_t +lc_ec256_public_t src/enclave/ServiceProvider/sp_crypto.h /^typedef struct lc_ec256_public_t$/;" s +lc_ec256_public_t src/enclave/ServiceProvider/sp_crypto.h /^} lc_ec256_public_t;$/;" t typeref:struct:lc_ec256_public_t +lc_ec256_signature_t src/enclave/ServiceProvider/sp_crypto.h /^typedef struct lc_ec256_signature_t$/;" s +lc_ec256_signature_t src/enclave/ServiceProvider/sp_crypto.h /^} lc_ec256_signature_t;$/;" t typeref:struct:lc_ec256_signature_t +lc_ec_dh_shared_t src/enclave/ServiceProvider/ecp.h /^} lc_ec_dh_shared_t;$/;" t typeref:struct:sample_ec_dh_shared_t +lc_ecc256_close_context src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ecc256_close_context(lc_ecc_state_handle_t ecc_handle) {$/;" f +lc_ecc256_compute_shared_dhkey src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ecc256_compute_shared_dhkey(lc_ec256_private_t *p_private_b,$/;" f +lc_ecc256_create_key_pair src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ecc256_create_key_pair(lc_ec256_private_t *p_private,$/;" f +lc_ecc256_open_context src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ecc256_open_context(lc_ecc_state_handle_t* ecc_handle) {$/;" f +lc_ecc_state_handle_t src/enclave/ServiceProvider/sp_crypto.h /^typedef void* lc_ecc_state_handle_t;$/;" t +lc_ecdsa_sign src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ecdsa_sign(const uint8_t *p_data,$/;" f +lc_rijndael128GCM_decrypt src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_rijndael128GCM_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *aad,$/;" f +lc_rijndael128GCM_encrypt src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_rijndael128GCM_encrypt(const lc_aes_gcm_128bit_key_t *p_key,$/;" f +lc_rijndael128_cmac_msg src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_rijndael128_cmac_msg(const lc_cmac_128bit_key_t *p_key,$/;" f +lc_sha256_close src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_sha256_close(lc_sha_state_handle_t sha_handle) {$/;" f +lc_sha256_get_hash src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_sha256_get_hash(lc_sha_state_handle_t sha_handle, lc_sha256_hash_t *p_hash) {$/;" f +lc_sha256_hash_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_sha256_hash_t[LC_SHA256_HASH_SIZE];$/;" t +lc_sha256_init src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_sha256_init(lc_sha_state_handle_t* p_sha_handle) {$/;" f +lc_sha256_update src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_sha256_update(const uint8_t *p_src, uint32_t src_len, lc_sha_state_handle_t sha_handle) {$/;" f +lc_sha_state_handle_t src/enclave/ServiceProvider/sp_crypto.h /^typedef SHA256_CTX* lc_sha_state_handle_t;$/;" t +lc_ssl2sgx src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ssl2sgx(EC_KEY *ssl_key,$/;" f +lc_status_t src/enclave/ServiceProvider/sp_crypto.h /^typedef enum lc_status_t {$/;" g +lc_status_t src/enclave/ServiceProvider/sp_crypto.h /^} lc_status_t;$/;" t typeref:enum:lc_status_t +left_key_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> left_key_evaluators;$/;" m class:FlatbuffersJoinExprEvaluator +leftover_plaintext src/enclave/Enclave/Crypto.h /^ uint8_t leftover_plaintext[AES_BLOCK_SIZE];$/;" m class:StreamCipher +leftover_plaintext src/enclave/Enclave/Crypto.h /^ uint8_t leftover_plaintext[AES_BLOCK_SIZE];$/;" m class:StreamDecipher +leftover_plaintext_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *leftover_plaintext_ptr;$/;" m class:StreamDecipher +leftover_plaintext_size src/enclave/Enclave/Crypto.h /^ uint32_t leftover_plaintext_size;$/;" m class:StreamCipher +leftover_plaintext_size src/enclave/Enclave/Crypto.h /^ uint32_t leftover_plaintext_size;$/;" m class:StreamDecipher +less_than src/enclave/Enclave/ExpressionEvaluation.h /^ bool less_than(const tuix::Row *row1, const tuix::Row *row2) {$/;" f class:FlatbuffersSortOrderEvaluator +m_len src/enclave/Enclave/sgxaes.h /^ size_t m_len;$/;" m struct:AesGcm +mac src/enclave/Enclave/Crypto.cpp /^void MAC::mac(uint8_t *mac_ptr, uint32_t len) {$/;" f class:MAC +mac src/enclave/ServiceProvider/remote_attestation_result.h /^ lc_cmac_128bit_tag_t mac; \/* mac_smk(attestation_status)*\/$/;" m struct:sample_ra_att_result_msg_t +mac src/enclave/ServiceProvider/service_provider.h /^ sample_mac_t mac; \/* mac_smk(g_b||spid||quote_type||$/;" m struct:sample_ra_msg2_t +mac src/enclave/ServiceProvider/service_provider.h /^ sample_mac_t mac; \/* mac_smk(g_a||ps_sec_prop||quote)*\/$/;" m struct:sample_ra_msg3_t +mac_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *mac_ptr;$/;" m class:StreamCipher +mac_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *mac_ptr;$/;" m class:StreamDecipher +main build/sbt /^main () {$/;" f +main data/disease/synth_disease_data.py /^def main():$/;" f +main src/enclave/App/App.cpp /^int SGX_CDECL main(int argc, char *argv[])$/;" f +main src/enclave/ServiceProvider/Main.cpp /^int main(int argc, char **argv) {$/;" f +mainFiltered build/sbt /^mainFiltered () {$/;" f +make_url build/sbt /^make_url () {$/;" f +maybe_finish_block src/enclave/Enclave/Flatbuffers.h /^ void maybe_finish_block() {$/;" f class:FlatbuffersRowWriter +memcpy_s src/enclave/Common/common.h /^inline int memcpy_s(void *dest,$/;" f +mk_key src/enclave/ServiceProvider/service_provider.cpp /^ lc_aes_gcm_128bit_key_t mk_key; \/\/ Shared secret key for generating MAC's$/;" m struct:_sp_db_item_t file: +mr_enclave src/enclave/ServiceProvider/ias_ra.h /^ sample_measurement_t mr_enclave; \/\/ ( 64) The value of the enclave's$/;" m struct:sample_report_body_t +mr_reserved1 src/enclave/ServiceProvider/ias_ra.h /^ sample_measurement_t mr_reserved1; \/\/ (192)$/;" m struct:sample_report_body_t +mr_reserved2 src/enclave/ServiceProvider/ias_ra.h /^ sample_measurement_t mr_reserved2; \/\/ (224)$/;" m struct:sample_report_body_t +mr_signer src/enclave/ServiceProvider/ias_ra.h /^ sample_measurement_t mr_signer; \/\/ (128) The value of the enclave's$/;" m struct:sample_report_body_t +msg src/enclave/App/App.cpp /^ const char *msg;$/;" m struct:_sgx_errlist_t file: +msg1_sample1 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg1_sample1[] =$/;" v +msg1_sample2 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg1_sample2[] =$/;" v +msg2_sample1 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg2_sample1[] =$/;" v +msg2_sample2 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg2_sample2[] =$/;" v +msg3_sample1 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg3_sample1[MSG3_BODY_SIZE] = $/;" v +msg3_sample2 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg3_sample2[MSG3_BODY_SIZE] = $/;" v +nOptions src/enclave/Include/jni.h /^ jint nOptions;$/;" m struct:JavaVMInitArgs +name src/enclave/Include/jni.h /^ char *name;$/;" m struct:JavaVMAttachArgs +name src/enclave/Include/jni.h /^ char *name;$/;" m struct:__anon1 +name src/enclave/ServiceProvider/ias_ra.h /^ uint8_t name[32];$/;" m struct:sample_basename_t +name_max_length data/disease/synth_disease_data.py /^name_max_length = 16$/;" v +name_min_length data/disease/synth_disease_data.py /^name_min_length = 3$/;" v +nb src/enclave/Enclave/sgxaes.h /^ uint32_t nb;$/;" m struct:KeySchedule +next src/enclave/Enclave/Flatbuffers.h /^ const tuix::Row *next() {$/;" f class:EncryptedBlockToRowReader +next src/enclave/Enclave/Flatbuffers.h /^ const tuix::Row *next() {$/;" f class:EncryptedBlocksToRowReader +next_from_run src/enclave/Enclave/Flatbuffers.h /^ const tuix::Row *next_from_run(uint32_t run_idx) {$/;" f class:SortedRunsReader +non_oblivious_aggregate_step1 src/enclave/Enclave/Aggregate.cpp /^void non_oblivious_aggregate_step1($/;" f +non_oblivious_aggregate_step2 src/enclave/Enclave/Aggregate.cpp /^void non_oblivious_aggregate_step2($/;" f +non_oblivious_sort_merge_join src/enclave/Enclave/Join.cpp /^void non_oblivious_sort_merge_join($/;" f +nr src/enclave/Enclave/sgxaes.h /^ uint32_t nr;$/;" m struct:KeySchedule +num_rows src/enclave/Enclave/Flatbuffers.h /^ uint32_t num_rows() {$/;" f class:EncryptedBlocksToRowReader +num_runs src/enclave/Enclave/Flatbuffers.h /^ uint32_t num_runs() {$/;" f class:SortedRunsReader +ocall_exit src/enclave/App/App.cpp /^void ocall_exit(int exit_code) {$/;" f +ocall_free src/enclave/App/App.cpp /^void ocall_free(uint8_t *buf) {$/;" f +ocall_malloc src/enclave/App/App.cpp /^void ocall_malloc(size_t size, uint8_t **ret) {$/;" f +ocall_print_string src/enclave/App/App.cpp /^void ocall_print_string(const char *str)$/;" f +onSbtRunnerExit build/sbt /^onSbtRunnerExit() {$/;" f +operator double src/enclave/Enclave/Flatbuffers.h /^ explicit operator double() const { return days_since_epoch; }$/;" f class:Date +operator float src/enclave/Enclave/Flatbuffers.h /^ explicit operator float() const { return days_since_epoch; }$/;" f class:Date +operator int32_t src/enclave/Enclave/Flatbuffers.h /^ explicit operator int32_t() const { return days_since_epoch; }$/;" f class:Date +operator int64_t src/enclave/Enclave/Flatbuffers.h /^ explicit operator int64_t() const { return days_since_epoch; }$/;" f class:Date +optionString src/enclave/Include/jni.h /^ char *optionString;$/;" m struct:JavaVMOption +options src/enclave/Include/jni.h /^ JavaVMOption *options;$/;" m struct:JavaVMInitArgs +output_buffer src/enclave/Enclave/Flatbuffers.h /^ std::unique_ptr output_buffer() {$/;" f class:FlatbuffersRowWriter +output_num_rows src/enclave/Enclave/Flatbuffers.h /^ uint32_t output_num_rows() {$/;" f class:FlatbuffersRowWriter +output_size src/enclave/Enclave/Flatbuffers.h /^ size_t output_size() {$/;" f class:FlatbuffersRowWriter +partition_for_sort src/enclave/Enclave/Sort.cpp /^void partition_for_sort(uint8_t *sort_order, size_t sort_order_length,$/;" f +payload src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t payload[32]; \/* 32: Ciphertext of the payload; this should be the secret key*\/$/;" m struct:sp_aes_gcm_data_t +payload_size src/enclave/ServiceProvider/remote_attestation_result.h /^ uint32_t payload_size; \/* 0: Size of the payload which is*\/$/;" m struct:sp_aes_gcm_data_t +payload_tag src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t payload_tag[SAMPLE_SP_TAG_SIZE]; \/* 16: AES-GMAC of the plain text, payload, and the sizes*\/$/;" m struct:sp_aes_gcm_data_t +perf src/enclave/Common/common.h /^#define perf(/;" d +performance_rekey_gid src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t performance_rekey_gid[GID_SIZE];$/;" m struct:ias_platform_info_blob_t +platform_info_blob src/enclave/ServiceProvider/remote_attestation_result.h /^ ias_platform_info_blob_t platform_info_blob;$/;" m struct:sample_ra_att_result_msg_t +policy_report src/enclave/ServiceProvider/ias_ra.h /^ uint8_t policy_report[];\/\/ IAS_Q: Why does it specify a$/;" m struct:_ias_att_report_t +policy_report_size src/enclave/ServiceProvider/ias_ra.h /^ uint32_t policy_report_size;$/;" m struct:_ias_att_report_t +print src/enclave/Enclave/Flatbuffers.cpp /^void print(const tuix::Field *field) {$/;" f +print src/enclave/Enclave/Flatbuffers.cpp /^void print(const tuix::Row *in) {$/;" f +print_bytes src/enclave/Enclave/util.cpp /^void print_bytes(uint8_t *ptr, uint32_t len) {$/;" f +print_ec_key src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t print_ec_key(EC_KEY *ec_key) {$/;" f +print_error_message src/enclave/App/App.cpp /^void print_error_message(sgx_status_t ret)$/;" f +print_hex src/enclave/Common/common.h /^inline void print_hex(unsigned char *mem, uint32_t len) {$/;" f +print_priv_key src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t print_priv_key(lc_ec256_private_t p_private) {$/;" f +print_pub_key src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t print_pub_key(lc_ec256_public_t p_public) {$/;" f +printf src/enclave/Enclave/util.cpp /^int printf(const char *fmt, ...) {$/;" f +process_args build/sbt /^process_args () {$/;" f +project src/enclave/Enclave/Project.cpp /^void project(uint8_t *project_list, size_t project_list_length,$/;" f +ps_sec_prop src/enclave/ServiceProvider/service_provider.cpp /^ sample_ps_sec_prop_desc_t ps_sec_prop;$/;" m struct:_sp_db_item_t file: +ps_sec_prop src/enclave/ServiceProvider/service_provider.h /^ sample_ps_sec_prop_desc_t ps_sec_prop;$/;" m struct:sample_ra_msg3_t +pse_evaluation_status src/enclave/ServiceProvider/remote_attestation_result.h /^ uint16_t pse_evaluation_status;$/;" m struct:ias_platform_info_blob_t +pse_status src/enclave/ServiceProvider/ias_ra.h /^ ias_pse_status_t pse_status;$/;" m struct:_ias_att_report_t +put_secret_data src/enclave/Enclave/isv_enclave.cpp /^sgx_status_t put_secret_data($/;" f +qe_svn src/enclave/ServiceProvider/ias_ra.h /^ sample_isv_svn_t qe_svn; \/\/ 8$/;" m struct:sample_quote_t +query_sgx_status src/enclave/App/App.cpp /^int query_sgx_status()$/;" f +quote src/enclave/ServiceProvider/service_provider.h /^ uint8_t quote[];$/;" m struct:sample_ra_msg3_t +quote_type src/enclave/ServiceProvider/service_provider.h /^ uint16_t quote_type; \/* unlinkable Quote(0) or linkable Quote(0) in little endian*\/$/;" m struct:sample_ra_msg2_t +r src/enclave/Enclave/Flatbuffers.h /^ EncryptedBlockToRowReader r;$/;" m class:EncryptedBlocksToRowReader +r src/enclave/ServiceProvider/ecp.h /^ uint8_t r[SAMPLE_ECP_KEY_SIZE];$/;" m struct:sample_ec_priv_t +r src/enclave/ServiceProvider/sp_crypto.h /^ uint8_t r[LC_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_private_t +r src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint8_t r[SAMPLE_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_private_t +ra_msg_type_t src/enclave/ServiceProvider/service_provider.h /^} ra_msg_type_t;$/;" t typeref:enum:_ra_msg_type_t +ra_samp_request_header_t src/enclave/ServiceProvider/service_provider.h /^} ra_samp_request_header_t;$/;" t typeref:struct:_ra_samp_request_header_t +ra_samp_response_header_t src/enclave/ServiceProvider/service_provider.h /^} ra_samp_response_header_t;$/;" t typeref:struct:_ra_samp_response_header_t +rand src/enclave/ServiceProvider/ias_ra.h /^ uint8_t rand[16];$/;" m struct:sample_quote_nonce_t +random data/disease/synth_disease_data.py /^import random$/;" i +randomword data/disease/synth_disease_data.py /^def randomword():$/;" f +readConfigFile build/sbt /^readConfigFile() {$/;" f +read_secret_key src/enclave/ServiceProvider/service_provider.cpp /^int read_secret_key(const char *filename,$/;" f +report_body src/enclave/ServiceProvider/ias_ra.h /^ sample_report_body_t report_body; \/\/ 48$/;" m struct:sample_quote_t +report_data src/enclave/ServiceProvider/ias_ra.h /^ sample_report_data_t report_data; \/\/ (320) Data provided by the user$/;" m struct:sample_report_body_t +require_arg build/sbt /^ require_arg () {$/;" f +reserved src/enclave/ServiceProvider/ias_ra.h /^ uint8_t reserved[6]; \/\/ 10$/;" m struct:sample_quote_t +reserved src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t reserved[12]; \/* 4: Reserved bits*\/$/;" m struct:sp_aes_gcm_data_t +reserved0 src/enclave/Include/jni.h /^ void *reserved0;$/;" m struct:JNIInvokeInterface_ +reserved0 src/enclave/Include/jni.h /^ void *reserved0;$/;" m struct:JNINativeInterface_ +reserved1 src/enclave/Include/jni.h /^ void *reserved1;$/;" m struct:JNIInvokeInterface_ +reserved1 src/enclave/Include/jni.h /^ void *reserved1;$/;" m struct:JNINativeInterface_ +reserved1 src/enclave/ServiceProvider/ias_ra.h /^ uint8_t reserved1[32]; \/\/ ( 16)$/;" m struct:sample_report_body_t +reserved2 src/enclave/Include/jni.h /^ void *reserved2;$/;" m struct:JNIInvokeInterface_ +reserved2 src/enclave/Include/jni.h /^ void *reserved2;$/;" m struct:JNINativeInterface_ +reserved2 src/enclave/ServiceProvider/ias_ra.h /^ uint8_t reserved2[32]; \/\/ ( 96)$/;" m struct:sample_report_body_t +reserved3 src/enclave/Include/jni.h /^ void *reserved3;$/;" m struct:JNINativeInterface_ +reserved3 src/enclave/ServiceProvider/ias_ra.h /^ uint8_t reserved3[32]; \/\/ (160)$/;" m struct:sample_report_body_t +reserved4 src/enclave/ServiceProvider/ias_ra.h /^ uint8_t reserved4[60]; \/\/ (260)$/;" m struct:sample_report_body_t +reset src/enclave/Enclave/Crypto.cpp /^void StreamCipher::reset(uint8_t *new_ciphertext_ptr) {$/;" f class:StreamCipher +reset src/enclave/Enclave/Crypto.cpp /^void StreamDecipher::reset(uint8_t *new_ciphertext_ptr, uint32_t enc_size) {$/;" f class:StreamDecipher +reset src/enclave/Enclave/Flatbuffers.h /^ void reset(const tuix::EncryptedBlock *encrypted_block) {$/;" f class:EncryptedBlockToRowReader +reset src/enclave/Enclave/Flatbuffers.h /^ void reset(uint8_t *buf, size_t len) {$/;" f class:EncryptedBlockToRowReader +reset src/enclave/Enclave/Flatbuffers.h /^ void reset(uint8_t *buf, size_t len) {$/;" f class:SortedRunsReader +reset_group src/enclave/Enclave/ExpressionEvaluation.h /^ void reset_group() {$/;" f class:FlatbuffersAggOpEvaluator +ret src/enclave/Enclave/sgxaes_asm.S /^ret$/;" l +reverse_endian src/enclave/ServiceProvider/sp_crypto.cpp /^void reverse_endian(uint8_t *input, uint8_t *output, uint32_t len) {$/;" f +reverse_endian_by_32 src/enclave/ServiceProvider/sp_crypto.cpp /^void reverse_endian_by_32(uint8_t *input, uint8_t *output, uint32_t len) {$/;" f +revocation_reason src/enclave/ServiceProvider/ias_ra.h /^ uint32_t revocation_reason;$/;" m struct:_ias_att_report_t +right_key_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> right_key_evaluators;$/;" m class:FlatbuffersJoinExprEvaluator +row src/enclave/Enclave/Flatbuffers.h /^ const tuix::Row *row;$/;" m class:FlatbuffersTemporaryRow +row_idx src/enclave/Enclave/Flatbuffers.h /^ uint32_t row_idx;$/;" m class:EncryptedBlockToRowReader +rows src/enclave/Enclave/Flatbuffers.h /^ const tuix::Rows *rows;$/;" m class:EncryptedBlockToRowReader +rows_buf src/enclave/Enclave/Flatbuffers.h /^ std::unique_ptr rows_buf;$/;" m class:EncryptedBlockToRowReader +rows_vector src/enclave/Enclave/Flatbuffers.h /^ std::vector> rows_vector;$/;" m class:FlatbuffersRowWriter +run_has_next src/enclave/Enclave/Flatbuffers.h /^ bool run_has_next(uint32_t run_idx) {$/;" f class:SortedRunsReader +run_idx src/enclave/Enclave/Sort.cpp /^ uint32_t run_idx;$/;" m class:MergeItem file: +run_readers src/enclave/Enclave/Flatbuffers.h /^ std::vector run_readers;$/;" m class:SortedRunsReader +s src/enclave/Include/jni.h /^ jshort s;$/;" m union:jvalue +s src/enclave/ServiceProvider/ecp.h /^ uint8_t s[SAMPLE_ECP_KEY_SIZE];$/;" m struct:sample_ec_dh_shared_t +s src/enclave/ServiceProvider/sp_crypto.h /^ uint8_t s[LC_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_dh_shared_t +s src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint8_t s[SAMPLE_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_dh_shared_t +sample src/enclave/Enclave/Sort.cpp /^void sample(uint8_t *input_rows, size_t input_rows_length,$/;" f +sample_aes_ctr_128bit_key_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_aes_ctr_128bit_key_t[SAMPLE_AESCTR_KEY_SIZE];$/;" t +sample_aes_gcm_128bit_key_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_aes_gcm_128bit_key_t[SAMPLE_AESGCM_KEY_SIZE];$/;" t +sample_aes_gcm_128bit_tag_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_aes_gcm_128bit_tag_t[SAMPLE_AESGCM_MAC_SIZE];$/;" t +sample_attributes_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_attributes_t$/;" s +sample_attributes_t src/enclave/ServiceProvider/ias_ra.h /^} sample_attributes_t;$/;" t typeref:struct:sample_attributes_t +sample_basename_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_basename_t$/;" s +sample_basename_t src/enclave/ServiceProvider/ias_ra.h /^} sample_basename_t;$/;" t typeref:struct:sample_basename_t +sample_cmac_128bit_key_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_cmac_128bit_key_t[SAMPLE_CMAC_KEY_SIZE];$/;" t +sample_cmac_128bit_tag_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_cmac_128bit_tag_t[SAMPLE_CMAC_MAC_SIZE];$/;" t +sample_cmac_state_handle_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef void* sample_cmac_state_handle_t;$/;" t +sample_cpu_svn_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint8_t sample_cpu_svn_t[SAMPLE_CPUSVN_SIZE];$/;" t +sample_derive_key_type_t src/enclave/ServiceProvider/ecp.h /^} sample_derive_key_type_t;$/;" t typeref:enum:_sample_derive_key_type_t +sample_ec256_dh_shared_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef struct sample_ec256_dh_shared_t$/;" s +sample_ec256_dh_shared_t src/enclave/sample_libcrypto/sample_libcrypto.h /^} sample_ec256_dh_shared_t;$/;" t typeref:struct:sample_ec256_dh_shared_t +sample_ec256_private_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef struct sample_ec256_private_t$/;" s +sample_ec256_private_t src/enclave/sample_libcrypto/sample_libcrypto.h /^} sample_ec256_private_t;$/;" t typeref:struct:sample_ec256_private_t +sample_ec256_public_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef struct sample_ec256_public_t$/;" s +sample_ec256_public_t src/enclave/sample_libcrypto/sample_libcrypto.h /^} sample_ec256_public_t;$/;" t typeref:struct:sample_ec256_public_t +sample_ec256_signature_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef struct sample_ec256_signature_t$/;" s +sample_ec256_signature_t src/enclave/sample_libcrypto/sample_libcrypto.h /^} sample_ec256_signature_t;$/;" t typeref:struct:sample_ec256_signature_t +sample_ec_dh_shared_t src/enclave/ServiceProvider/ecp.h /^typedef struct sample_ec_dh_shared_t$/;" s +sample_ec_key_128bit_t src/enclave/ServiceProvider/ecp.h /^typedef uint8_t sample_ec_key_128bit_t[16];$/;" t +sample_ec_priv_t src/enclave/ServiceProvider/ecp.h /^typedef struct sample_ec_priv_t$/;" s +sample_ec_priv_t src/enclave/ServiceProvider/ecp.h /^} sample_ec_priv_t;$/;" t typeref:struct:sample_ec_priv_t +sample_ec_pub_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ec_pub_t$/;" s +sample_ec_pub_t src/enclave/ServiceProvider/service_provider.h /^} sample_ec_pub_t;$/;" t typeref:struct:sample_ec_pub_t +sample_ec_sign256_t src/enclave/ServiceProvider/remote_attestation_result.h /^typedef struct sample_ec_sign256_t$/;" s +sample_ec_sign256_t src/enclave/ServiceProvider/remote_attestation_result.h /^} sample_ec_sign256_t;$/;" t typeref:struct:sample_ec_sign256_t +sample_ecc_state_handle_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef void* sample_ecc_state_handle_t;$/;" t +sample_enroll src/enclave/ServiceProvider/service_provider.h /^ typedef int (*sample_enroll)(int sp_credentials, sample_spid_t* spid,$/;" t +sample_epid_group_id_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint8_t sample_epid_group_id_t[4];$/;" t +sample_epid_group_status src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t sample_epid_group_status;$/;" m struct:ias_platform_info_blob_t +sample_extended_epid_group src/enclave/ServiceProvider/service_provider.h /^ typedef struct sample_extended_epid_group$/;" s +sample_extended_epid_group src/enclave/ServiceProvider/service_provider.h /^ } sample_extended_epid_group;$/;" t typeref:struct:sample_extended_epid_group +sample_get_sigrl src/enclave/ServiceProvider/service_provider.h /^ typedef int(*sample_get_sigrl)(const sample_epid_group_id_t gid, uint32_t* p_sig_rl_size,$/;" t +sample_isv_svn_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint16_t sample_isv_svn_t;$/;" t +sample_key_128bit_t src/enclave/ServiceProvider/service_provider.h /^typedef uint8_t sample_key_128bit_t[16];$/;" t +sample_mac_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint8_t sample_mac_t[SAMPLE_MAC_SIZE];$/;" t +sample_mac_t src/enclave/ServiceProvider/remote_attestation_result.h /^typedef uint8_t sample_mac_t[SAMPLE_MAC_SIZE];$/;" t +sample_measurement_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint8_t sample_measurement_t[SAMPLE_HASH_SIZE];$/;" t +sample_prod_id_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint16_t sample_prod_id_t;$/;" t +sample_ps_sec_prop_desc src/enclave/ServiceProvider/service_provider.h /^ uint8_t sample_ps_sec_prop_desc[256];$/;" m struct:sample_ps_sec_prop_desc_t +sample_ps_sec_prop_desc_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ps_sec_prop_desc_t$/;" s +sample_ps_sec_prop_desc_t src/enclave/ServiceProvider/service_provider.h /^} sample_ps_sec_prop_desc_t;$/;" t typeref:struct:sample_ps_sec_prop_desc_t +sample_quote_nonce_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_quote_nonce_t$/;" s +sample_quote_nonce_t src/enclave/ServiceProvider/ias_ra.h /^} sample_quote_nonce_t;$/;" t typeref:struct:sample_quote_nonce_t +sample_quote_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_quote_t {$/;" s +sample_quote_t src/enclave/ServiceProvider/ias_ra.h /^} sample_quote_t;$/;" t typeref:struct:sample_quote_t +sample_ra_att_result_msg_t src/enclave/ServiceProvider/remote_attestation_result.h /^typedef struct sample_ra_att_result_msg_t {$/;" s +sample_ra_att_result_msg_t src/enclave/ServiceProvider/remote_attestation_result.h /^} sample_ra_att_result_msg_t;$/;" t typeref:struct:sample_ra_att_result_msg_t +sample_ra_context_t src/enclave/ServiceProvider/service_provider.h /^typedef uint32_t sample_ra_context_t;$/;" t +sample_ra_key_128_t src/enclave/ServiceProvider/service_provider.h /^typedef sample_key_128bit_t sample_ra_key_128_t;$/;" t +sample_ra_msg0_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ra_msg0_t$/;" s +sample_ra_msg0_t src/enclave/ServiceProvider/service_provider.h /^} sample_ra_msg0_t;$/;" t typeref:struct:sample_ra_msg0_t +sample_ra_msg1_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ra_msg1_t$/;" s +sample_ra_msg1_t src/enclave/ServiceProvider/service_provider.h /^} sample_ra_msg1_t;$/;" t typeref:struct:sample_ra_msg1_t +sample_ra_msg2_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ra_msg2_t$/;" s +sample_ra_msg2_t src/enclave/ServiceProvider/service_provider.h /^} sample_ra_msg2_t;$/;" t typeref:struct:sample_ra_msg2_t +sample_ra_msg3_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ra_msg3_t$/;" s +sample_ra_msg3_t src/enclave/ServiceProvider/service_provider.h /^} sample_ra_msg3_t;$/;" t typeref:struct:sample_ra_msg3_t +sample_report_body_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_report_body_t {$/;" s +sample_report_body_t src/enclave/ServiceProvider/ias_ra.h /^} sample_report_body_t;$/;" t typeref:struct:sample_report_body_t +sample_report_data_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint8_t sample_report_data_t[SAMPLE_REPORT_DATA_SIZE];$/;" t +sample_sha256_hash_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_sha256_hash_t[SAMPLE_SHA256_HASH_SIZE];$/;" t +sample_sha_state_handle_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef void* sample_sha_state_handle_t;$/;" t +sample_spid_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_spid_t$/;" s +sample_spid_t src/enclave/ServiceProvider/ias_ra.h /^} sample_spid_t;$/;" t typeref:struct:sample_spid_t +sample_status_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef enum sample_status_t$/;" g +sample_status_t src/enclave/sample_libcrypto/sample_libcrypto.h /^} sample_status_t;$/;" t typeref:enum:sample_status_t +sample_tcb_evaluation_status src/enclave/ServiceProvider/remote_attestation_result.h /^ uint16_t sample_tcb_evaluation_status;$/;" m struct:ias_platform_info_blob_t +sample_verify_attestation_evidence src/enclave/ServiceProvider/service_provider.h /^ typedef int(*sample_verify_attestation_evidence)(sample_quote_t* p_isv_quote,$/;" t +scan_collect_last_primary src/enclave/Enclave/Join.cpp /^void scan_collect_last_primary($/;" f +scoped_timer src/enclave/App/App.cpp /^ scoped_timer(uint64_t *total_time) {$/;" f class:scoped_timer +scoped_timer src/enclave/App/App.cpp /^class scoped_timer {$/;" c file: +secret src/enclave/ServiceProvider/remote_attestation_result.h /^ sp_aes_gcm_data_t secret;$/;" m struct:sample_ra_att_result_msg_t +secs_to_tm src/enclave/Enclave/util.cpp /^int secs_to_tm(long long t, struct tm *tm) {$/;" f +set src/enclave/Enclave/ExpressionEvaluation.h /^ void set(const tuix::Row *agg_row) {$/;" f class:FlatbuffersAggOpEvaluator +set src/enclave/Enclave/Flatbuffers.h /^ void set(const tuix::Row *row) {$/;" f class:FlatbuffersTemporaryRow +setJavaHome build/sbt /^setJavaHome () {$/;" f +setScalaVersion build/sbt /^setScalaVersion () {$/;" f +setThisBuild build/sbt /^setThisBuild () {$/;" f +setTraceLevel build/sbt /^setTraceLevel() {$/;" f +set_sbt_version build/sbt /^set_sbt_version () {$/;" f +sgx_check src/enclave/App/App.cpp /^#define sgx_check(/;" d file: +sgx_check_quiet src/enclave/App/App.cpp /^void sgx_check_quiet(const char* message, sgx_status_t ret)$/;" f +sgx_errlist src/enclave/App/App.cpp /^static sgx_errlist_t sgx_errlist[] = {$/;" v file: +sgx_errlist_t src/enclave/App/App.cpp /^} sgx_errlist_t;$/;" t typeref:struct:_sgx_errlist_t file: +shared_secret src/enclave/Enclave/isv_enclave.cpp /^ sgx_ec256_dh_shared_t shared_secret;$/;" m struct:_hash_buffer_t file: +shared_secret src/enclave/ServiceProvider/ecp.cpp /^ sgx_ec_dh_shared_t shared_secret;$/;" m struct:_hash_buffer_t file: +shouldFilter build/sbt /^shouldFilter () { [[ -f ~\/.sbtignore ]] && ! egrep -q '\\b(shell|console|consoleProject)\\b' <<<"${residual_args[@]}"; }$/;" f +sig_rl src/enclave/ServiceProvider/service_provider.h /^ uint8_t sig_rl[];$/;" m struct:sample_ra_msg2_t +sig_rl_size src/enclave/ServiceProvider/service_provider.h /^ uint32_t sig_rl_size;$/;" m struct:sample_ra_msg2_t +sign_gb_ga src/enclave/ServiceProvider/service_provider.h /^ sample_ec_sign256_t sign_gb_ga; \/* In little endian*\/$/;" m struct:sample_ra_msg2_t +sign_type src/enclave/ServiceProvider/ias_ra.h /^ uint16_t sign_type; \/\/ 2$/;" m struct:sample_quote_t +signature src/enclave/Include/jni.h /^ char *signature;$/;" m struct:__anon1 +signature src/enclave/ServiceProvider/ias_ra.h /^ uint8_t signature[]; \/\/ 436$/;" m struct:sample_quote_t +signature src/enclave/ServiceProvider/remote_attestation_result.h /^ sample_ec_sign256_t signature;$/;" m struct:ias_platform_info_blob_t +signature_len src/enclave/ServiceProvider/ias_ra.h /^ uint32_t signature_len; \/\/ 432$/;" m struct:sample_quote_t +size src/enclave/ServiceProvider/service_provider.h /^ uint32_t size; \/*size of the response body*\/$/;" m struct:_ra_samp_response_header_t +size src/enclave/ServiceProvider/service_provider.h /^ uint32_t size; \/*size of request body*\/$/;" m struct:_ra_samp_request_header_t +sk_key src/enclave/ServiceProvider/service_provider.cpp /^ lc_aes_gcm_128bit_key_t sk_key; \/\/ Shared secret key for encryption$/;" m struct:_sp_db_item_t file: +smk_key src/enclave/ServiceProvider/service_provider.cpp /^ lc_aes_gcm_128bit_key_t smk_key; \/\/ Used only for SIGMA protocol$/;" m struct:_sp_db_item_t file: +sort_expr src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::SortExpr *sort_expr;$/;" m class:FlatbuffersSortOrderEvaluator +sort_order_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> sort_order_evaluators;$/;" m class:FlatbuffersSortOrderEvaluator +sort_single_encrypted_block src/enclave/Enclave/Sort.cpp /^flatbuffers::Offset sort_single_encrypted_block($/;" f +sorted_runs src/enclave/Enclave/Flatbuffers.h /^ const tuix::SortedRuns *sorted_runs;$/;" m class:SortedRunsReader +sp_aes_gcm_data_t src/enclave/ServiceProvider/remote_attestation_result.h /^typedef struct sp_aes_gcm_data_t {$/;" s +sp_aes_gcm_data_t src/enclave/ServiceProvider/remote_attestation_result.h /^} sp_aes_gcm_data_t;$/;" t typeref:struct:sp_aes_gcm_data_t +sp_db_item_t src/enclave/ServiceProvider/service_provider.cpp /^} sp_db_item_t;$/;" t typeref:struct:_sp_db_item_t file: +sp_ra_msg_status_t src/enclave/ServiceProvider/service_provider.h /^} sp_ra_msg_status_t;$/;" t typeref:enum:__anon5 +sp_ra_proc_msg0_req src/enclave/ServiceProvider/service_provider.cpp /^int sp_ra_proc_msg0_req(uint32_t extended_epid_group_id) {$/;" f +sp_ra_proc_msg1_req src/enclave/ServiceProvider/service_provider.cpp /^int sp_ra_proc_msg1_req(sgx_ra_msg1_t *p_msg1,$/;" f +sp_ra_proc_msg3_req src/enclave/ServiceProvider/service_provider.cpp /^int sp_ra_proc_msg3_req(sgx_ra_msg3_t *p_msg3,$/;" f +spid src/enclave/ServiceProvider/service_provider.h /^ sample_spid_t spid; \/* In little endian*\/$/;" m struct:sample_ra_msg2_t +state src/enclave/Enclave/sgxaes.h /^ State state;$/;" m struct:AesGcm +status src/enclave/ServiceProvider/ias_ra.h /^ ias_quote_status_t status;$/;" m struct:_ias_att_report_t +status src/enclave/ServiceProvider/service_provider.h /^ uint8_t status[2];$/;" m struct:_ra_samp_response_header_t +std src/enclave/Common/common.h /^namespace std {$/;" n +std src/enclave/Enclave/util.h /^namespace std {$/;" n +str_MK src/enclave/ServiceProvider/ecp.cpp /^const char str_MK[] = "MK";$/;" v +str_SK src/enclave/ServiceProvider/ecp.cpp /^const char str_SK[] = "SK";$/;" v +str_SMK src/enclave/ServiceProvider/ecp.cpp /^const char str_SMK[] = "SMK";$/;" v +str_VK src/enclave/ServiceProvider/ecp.cpp /^const char str_VK[] = "VK";$/;" v +string data/disease/synth_disease_data.py /^import string$/;" i +sug src/enclave/App/App.cpp /^ const char *sug; \/* Suggestion *\/$/;" m struct:_sgx_errlist_t file: +sys data/disease/synth_disease_data.py /^import sys$/;" i +t src/enclave/Enclave/sgxaes.h /^ unsigned char t[16];$/;" m struct:Tag +t src/enclave/Enclave/sgxaes.h /^ unsigned char t[AES_BLOCK_SIZE];$/;" m struct:GcmContext +tag src/enclave/Enclave/sgxaes.cpp /^Tag AesGcm::tag() const {$/;" f class:AesGcm +time_end src/enclave/App/App.cpp /^ uint64_t time_start, time_end;$/;" m class:scoped_timer file: +time_start src/enclave/App/App.cpp /^ uint64_t time_start, time_end;$/;" m class:scoped_timer file: +to_string src/enclave/Enclave/Flatbuffers.cpp /^std::string to_string(const Date &date) {$/;" f +total_cipher_size src/enclave/Enclave/Crypto.h /^ uint32_t total_cipher_size;$/;" m class:StreamDecipher +total_num_rows src/enclave/Enclave/Flatbuffers.h /^ uint32_t total_num_rows;$/;" m class:FlatbuffersRowWriter +total_time src/enclave/App/App.cpp /^ uint64_t * total_time;$/;" m class:scoped_timer file: +type src/enclave/ServiceProvider/service_provider.h /^ uint8_t type; \/* set to one of ra_msg_type_t*\/$/;" m struct:_ra_samp_response_header_t +type src/enclave/ServiceProvider/service_provider.h /^ uint8_t type; \/* set to one of ra_msg_type_t*\/$/;" m struct:_ra_samp_request_header_t +untrusted_alloc src/enclave/Enclave/Flatbuffers.h /^ UntrustedMemoryAllocator untrusted_alloc;$/;" m class:FlatbuffersRowWriter +update src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector update(const tuix::Row *concat) {$/;" f class:AggregateExpressionEvaluator +update_build_props_sbt build/sbt /^update_build_props_sbt () {$/;" f +update_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> update_evaluators;$/;" m class:AggregateExpressionEvaluator +url_base build/sbt /^url_base () {$/;" f +usage build/sbt /^usage () {$/;" f +v src/enclave/Enclave/Sort.cpp /^ const tuix::Row *v;$/;" m class:MergeItem file: +verify_att_result_mac src/enclave/Enclave/isv_enclave.cpp /^sgx_status_t verify_att_result_mac(sgx_ra_context_t context,$/;" f +verify_attestation_evidence src/enclave/ServiceProvider/service_provider.h /^ sample_verify_attestation_evidence verify_attestation_evidence;$/;" m struct:sample_extended_epid_group +verify_cmac128 src/enclave/ServiceProvider/ecp.cpp /^bool verify_cmac128(lc_cmac_128bit_key_t mac_key,$/;" f +version src/enclave/Include/jni.h /^ jint version;$/;" m struct:JavaVMAttachArgs +version src/enclave/Include/jni.h /^ jint version;$/;" m struct:JavaVMInitArgs +version src/enclave/ServiceProvider/ias_ra.h /^ uint16_t version; \/\/ 0$/;" m struct:sample_quote_t +vk_key src/enclave/ServiceProvider/service_provider.cpp /^ lc_aes_gcm_128bit_key_t vk_key; \/\/ Shared secret key for the REPORT_DATA$/;" m struct:_sp_db_item_t file: +vlog build/sbt /^vlog () { [[ -n "$verbose" ]] && echoerr "$@"; }$/;" f +write src/enclave/Enclave/Flatbuffers.h /^ void write(const std::vector &row_fields) {$/;" f class:FlatbuffersRowWriter +write src/enclave/Enclave/Flatbuffers.h /^ void write(const tuix::Row *row) {$/;" f class:FlatbuffersRowWriter +write src/enclave/Enclave/Flatbuffers.h /^ void write(const tuix::Row *row1, const tuix::Row *row2) {$/;" f class:FlatbuffersRowWriter +write_encrypted_block src/enclave/Enclave/Flatbuffers.h /^ void write_encrypted_block() {$/;" f class:FlatbuffersRowWriter +write_encrypted_blocks src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Offset write_encrypted_blocks() {$/;" f class:FlatbuffersRowWriter +write_pubkey src/enclave/ServiceProvider/service_provider.cpp /^void write_pubkey(const char *filename,$/;" f +write_sorted_runs src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Offset write_sorted_runs($/;" f class:FlatbuffersRowWriter +x src/enclave/ServiceProvider/remote_attestation_result.h /^ uint32_t x[SAMPLE_NISTP256_KEY_SIZE];$/;" m struct:sample_ec_sign256_t +x src/enclave/ServiceProvider/sp_crypto.h /^ uint32_t x[LC_NISTP_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_signature_t +x src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint32_t x[SAMPLE_NISTP_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_signature_t +x0 src/enclave/Enclave/sgxaes.h /^ unsigned char x0[AES_BLOCK_SIZE];$/;" m struct:GcmContext +xfrm src/enclave/ServiceProvider/ias_ra.h /^ uint64_t xfrm;$/;" m struct:sample_attributes_t +y src/enclave/ServiceProvider/remote_attestation_result.h /^ uint32_t y[SAMPLE_NISTP256_KEY_SIZE];$/;" m struct:sample_ec_sign256_t +y src/enclave/ServiceProvider/sp_crypto.h /^ uint32_t y[LC_NISTP_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_signature_t +y src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint32_t y[SAMPLE_NISTP_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_signature_t +z src/enclave/Include/jni.h /^ jboolean z;$/;" m union:jvalue +~MAC src/enclave/Enclave/Crypto.h /^ ~MAC() {$/;" f class:MAC +~StreamCipher src/enclave/Enclave/Crypto.cpp /^StreamCipher::~StreamCipher() {$/;" f class:StreamCipher +~StreamDecipher src/enclave/Enclave/Crypto.cpp /^StreamDecipher::~StreamDecipher() {$/;" f class:StreamDecipher +~scoped_timer src/enclave/App/App.cpp /^ ~scoped_timer() {$/;" f class:scoped_timer diff --git a/employees.json b/employees.json index 8d30ae8ca4..7235820d7e 100644 --- a/employees.json +++ b/employees.json @@ -1,4 +1,16 @@ {"name":"Michael", "salary":3000} {"name":"Andy", "salary":4500} {"name":"Justin", "salary":3500} -{"name":"Berta", "salary":4000} \ No newline at end of file +{"name":"Berta", "salary":4000} +{"name":"Michae", "salary":3000} +{"name":"And", "salary":4500} +{"name":"Justi", "salary":3500} +{"name":"Bert", "salary":4000} +{"name":"ichael", "salary":3000} +{"name":"ndy", "salary":4500} +{"name":"ustin", "salary":3500} +{"name":"erta", "salary":4000} +{"name":"ichae", "salary":3000} +{"name":"nd", "salary":4500} +{"name":"usti", "salary":3500} +{"name":"ert", "salary":4000} \ No newline at end of file diff --git a/employees_truncated.json b/employees_truncated.json index 9cc37235e2..aab8171b6e 100644 --- a/employees_truncated.json +++ b/employees_truncated.json @@ -1,2 +1,7 @@ {"name":"Michael", "family":3} {"name":"Andy", "family":4} +{"name":"erta", "family":4} +{"name":"ichae", "family":4} +{"name":"nd", "family":4} +{"name":"usti", "family":4} +{"name":"ert", "family":4} \ No newline at end of file diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index fd29ef442a..2ad4ae219b 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -263,6 +263,7 @@ case class EncryptedAggregateExec( assert(shifted.size == childRDD.partitions.length) val shiftedRDD = sparkContext.parallelize(shifted, childRDD.partitions.length) + // TODO: fix this childRDD.zipPartitions(shiftedRDD) { (blockIter, boundaryIter) => (blockIter.toSeq, boundaryIter.toSeq) match { case (Seq(block), Seq(Tuple3( @@ -305,6 +306,7 @@ case class EncryptedSortMergeJoinExec( val processedJoinRowsRDD = sparkContext.parallelize(shifted, childRDD.partitions.length) + // TODO: Fix this zipPartitions childRDD.zipPartitions(processedJoinRowsRDD) { (blockIter, joinRowIter) => (blockIter.toSeq, joinRowIter.toSeq) match { case (Seq(block), Seq(joinRow)) => @@ -336,6 +338,7 @@ case class ObliviousUnionExec( // RA.initRA(leftRDD) + // fix this zipPartitions val unioned = leftRDD.zipPartitions(rightRDD) { (leftBlockIter, rightBlockIter) => (leftBlockIter.toSeq ++ rightBlockIter.toSeq) match { case Seq(leftBlock, rightBlock) => From db35a36e0c009a17c14662692f9008d8ea0eb783 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Thu, 13 Sep 2018 17:04:26 -0700 Subject: [PATCH 004/101] new json files --- idlist.json | 64 ++++ person.json | 998 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1062 insertions(+) create mode 100644 idlist.json create mode 100644 person.json diff --git a/idlist.json b/idlist.json new file mode 100644 index 0000000000..fd4958c9b2 --- /dev/null +++ b/idlist.json @@ -0,0 +1,64 @@ +{"PersonId":2}, +{"PersonId":3}, +{"PersonId":4}, +{"PersonId":7}, +{"PersonId":9}, +{"PersonId":10}, +{"PersonId":11}, +{"PersonId":12}, +{"PersonId":13}, +{"PersonId":14}, +{"PersonId":15}, +{"PersonId":16}, +{"PersonId":17}, +{"PersonId":18}, +{"PersonId":19}, +{"PersonId":20}, +{"PersonId":23}, +{"PersonId":24}, +{"PersonId":26}, +{"PersonId":28}, +{"PersonId":29}, +{"PersonId":31}, +{"PersonId":32}, +{"PersonId":33}, +{"PersonId":35}, +{"PersonId":39}, +{"PersonId":42}, +{"PersonId":43}, +{"PersonId":45}, +{"PersonId":48}, +{"PersonId":49}, +{"PersonId":50}, +{"PersonId":55}, +{"PersonId":56}, +{"PersonId":57}, +{"PersonId":58}, +{"PersonId":60}, +{"PersonId":62}, +{"PersonId":63}, +{"PersonId":64}, +{"PersonId":65}, +{"PersonId":69}, +{"PersonId":70}, +{"PersonId":72}, +{"PersonId":73}, +{"PersonId":74}, +{"PersonId":76}, +{"PersonId":79}, +{"PersonId":82}, +{"PersonId":83}, +{"PersonId":84}, +{"PersonId":87}, +{"PersonId":88}, +{"PersonId":89}, +{"PersonId":91}, +{"PersonId":92}, +{"PersonId":93}, +{"PersonId":94}, +{"PersonId":97}, +{"PersonId":100}, +{"PersonId":135}, +{"PersonId":138}, +{"PersonId":140} + diff --git a/person.json b/person.json new file mode 100644 index 0000000000..6f1e73f978 --- /dev/null +++ b/person.json @@ -0,0 +1,998 @@ + {"Gender":"Female","FullName":"Agrita Abele","PersonID":1,"FaxNumber":"(415) 555-0103","DateOfBirth":"1957-12-19 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"agrita@example.com","PreferredName":"Agrita"}, + {"Gender":"Female","FullName":"Kayla Woodcock","PersonID":2,"FaxNumber":"(415) 555-0103","DateOfBirth":"1989-01-25 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"kaylaw@wideworldimporters.com","PreferredName":"Kayla"}, + {"Gender":"Male","FullName":"Hudson Onslow","PersonID":3,"FaxNumber":"(415) 555-0103","DateOfBirth":"1995-11-09 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"hudsono@wideworldimporters.com","PreferredName":"Hudson"}, + {"Gender":"Female","FullName":"Isabella Rupp","PersonID":4,"FaxNumber":"(415) 555-0103","DateOfBirth":"1983-06-09 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"isabellar@wideworldimporters.com","PreferredName":"Isabella"}, + {"Gender":"Female","FullName":"Eva Muirden","PersonID":5,"FaxNumber":"(415) 555-0103","DateOfBirth":"1991-05-23 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"evam@wideworldimporters.com","PreferredName":"Eva"}, + {"Gender":"Female","FullName":"Sophia Hinton","PersonID":6,"FaxNumber":"(415) 555-0103","DateOfBirth":"1993-02-03 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"sophiah@wideworldimporters.com","PreferredName":"Sophia"}, + {"Gender":"Female","FullName":"Amy Trefl","PersonID":7,"FaxNumber":"(415) 555-0103","DateOfBirth":"1990-05-20 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"amyt@wideworldimporters.com","PreferredName":"Amy"}, + {"Gender":"Female","FullName":"Anthony Grosse","PersonID":8,"FaxNumber":"(415) 555-0103","DateOfBirth":"1961-02-14 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"anthonyg@wideworldimporters.com","PreferredName":"Anthony"}, + {"Gender":"Female","FullName":"Alica Fatnowna","PersonID":9,"FaxNumber":"(415) 555-0103","DateOfBirth":"1993-06-14 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"alicaf@wideworldimporters.com","PreferredName":"Alica"}, + {"Gender":"Female","FullName":"Stella Rosenhain","PersonID":10,"FaxNumber":"(415) 555-0103","DateOfBirth":"1988-09-29 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"stellar@wideworldimporters.com","PreferredName":"Stella"}, + {"Gender":"Male","FullName":"Ethan Onslow","PersonID":11,"FaxNumber":"(415) 555-0103","DateOfBirth":"1997-03-18 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"ethano@wideworldimporters.com","PreferredName":"Ethan"}, + {"Gender":"Male","FullName":"Henry Forlonge","PersonID":12,"FaxNumber":"(415) 555-0103","DateOfBirth":"1950-03-11 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"henryf@wideworldimporters.com","PreferredName":"Henry"}, + {"Gender":"Male","FullName":"Hudson Hollinworth","PersonID":13,"FaxNumber":"(415) 555-0103","DateOfBirth":"1972-06-15 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"hudsonh@wideworldimporters.com","PreferredName":"Hudson"}, + {"Gender":"Female","FullName":"Lily Code","PersonID":14,"FaxNumber":"(415) 555-0103","DateOfBirth":"1957-05-17 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"lilyc@wideworldimporters.com","PreferredName":"Lily"}, + {"Gender":"Male","FullName":"Taj Shand","PersonID":15,"FaxNumber":"(415) 555-0103","DateOfBirth":"1978-10-24 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"tajs@wideworldimporters.com","PreferredName":"Taj"}, + {"Gender":"Male","FullName":"Archer Lamble","PersonID":16,"FaxNumber":"(415) 555-0103","DateOfBirth":"1969-12-12 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"archerl@wideworldimporters.com","PreferredName":"Archer"}, + {"Gender":"Male","FullName":"Piper Koch","PersonID":17,"FaxNumber":"(415) 555-0103","DateOfBirth":"1954-11-08 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"piperk@wideworldimporters.com","PreferredName":"Piper"}, + {"Gender":"Female","FullName":"Katie Darwin","PersonID":18,"FaxNumber":"(415) 555-0103","DateOfBirth":"1960-06-16 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"katied@wideworldimporters.com","PreferredName":"Katie"}, + {"Gender":"Female","FullName":"Jai Shand","PersonID":19,"FaxNumber":"(415) 555-0103","DateOfBirth":"1981-05-02 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"jais@wideworldimporters.com","PreferredName":"Jai"}, + {"Gender":"Male","FullName":"Jack Potter","PersonID":20,"FaxNumber":"(415) 555-0103","DateOfBirth":"1955-12-27 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"jackp@wideworldimporters.com","PreferredName":"Jack"}, + {"Gender":"Male","FullName":"Reio Kabin","PersonID":21,"FaxNumber":"(847) 555-0101","DateOfBirth":"1958-08-15 00:00:00","PhoneNumber":"(847) 555-0100","EmailAddress":"reio@adatum.com","PreferredName":"Reio"}, + {"Gender":"Male","FullName":"Oliver Kivi","PersonID":22,"FaxNumber":"(847) 555-0101","DateOfBirth":"1987-01-10 00:00:00","PhoneNumber":"(847) 555-0100","EmailAddress":"olly@adatum.com","PreferredName":"Olly"}, + {"Gender":"Female","FullName":"Hanna Mihhailov","PersonID":23,"FaxNumber":"(360) 555-0101","DateOfBirth":"1967-03-08 00:00:00","PhoneNumber":"(360) 555-0100","EmailAddress":"hannam@Contoso Motors.com","PreferredName":"Hanna"}, + {"Gender":"Female","FullName":"Paulus Lippmaa","PersonID":24,"FaxNumber":"(360) 555-0101","DateOfBirth":"1993-07-29 00:00:00","PhoneNumber":"(360) 555-0100","EmailAddress":"paulusl@Contoso Motors.com","PreferredName":"Paulus"}, + {"Gender":"Female","FullName":"Kerstin Parn","PersonID":25,"FaxNumber":"(415) 555-0101","DateOfBirth":"1981-03-29 00:00:00","PhoneNumber":"(415) 555-0100","EmailAddress":"kerstin@consolidatedmessenger.com","PreferredName":"Kerstin"}, + {"Gender":"Female","FullName":"Helen Ahven","PersonID":26,"FaxNumber":"(415) 555-0101","DateOfBirth":"1980-02-28 00:00:00","PhoneNumber":"(415) 555-0100","EmailAddress":"helen@consolidatedmessenger.com","PreferredName":"Helen"}, + {"Gender":"Female","FullName":"Bill Lawson","PersonID":27,"FaxNumber":"(203) 555-0107","DateOfBirth":"1980-04-27 00:00:00","PhoneNumber":"(203) 555-0107","EmailAddress":"billl@fabrikam.com","PreferredName":"Bill"}, + {"Gender":"Female","FullName":"Helen Moore","PersonID":28,"FaxNumber":"(203) 555-0107","DateOfBirth":"1991-12-05 00:00:00","PhoneNumber":"(203) 555-0104","EmailAddress":"helenm@fabrikam.com","PreferredName":"Helen"}, + {"Gender":"Female","FullName":"Penny Buck","PersonID":29,"FaxNumber":"(406) 555-0109","DateOfBirth":"1961-10-09 00:00:00","PhoneNumber":"(406) 555-0107","EmailAddress":"pennyb@graphicdesigninstitute.com","PreferredName":"Penny"}, + {"Gender":"Female","FullName":"Donna Smith","PersonID":30,"FaxNumber":"(406) 555-0109","DateOfBirth":"1979-01-18 00:00:00","PhoneNumber":"(406) 555-0101","EmailAddress":"donnas@graphicdesigninstitute.com","PreferredName":"Donna"}, + {"Gender":"Female","FullName":"Annette Talon","PersonID":32,"FaxNumber":"(423) 555-0100","DateOfBirth":"1973-09-03 00:00:00","PhoneNumber":"(423) 555-0106","EmailAddress":"annettet@humongousinsurance.com","PreferredName":"Annette"}, + {"Gender":"Female","FullName":"Elias Myllari","PersonID":33,"FaxNumber":"(209) 555-0106","DateOfBirth":"1992-09-24 00:00:00","PhoneNumber":"(209) 555-0101","EmailAddress":"eliasm@litwareinc.com","PreferredName":"Elias"}, + {"Gender":"Female","FullName":"Vilma Niva","PersonID":34,"FaxNumber":"(209) 555-0106","DateOfBirth":"1963-03-31 00:00:00","PhoneNumber":"(209) 555-0103","EmailAddress":"vilman@litwareinc.com","PreferredName":"Vilma"}, + {"Gender":"Female","FullName":"Prem Prabhu","PersonID":35,"FaxNumber":"(423) 555-0108","DateOfBirth":"1965-05-19 00:00:00","PhoneNumber":"(423) 555-0102","EmailAddress":"premp@lucernepublishing.com","PreferredName":"Prem"}, + {"Gender":"Female","FullName":"Sunita Jadhav","PersonID":36,"FaxNumber":"(423) 555-0108","DateOfBirth":"1990-01-19 00:00:00","PhoneNumber":"(423) 555-0101","EmailAddress":"sunitaj@lucernepublishing.com","PreferredName":"Sunita"}, + {"Gender":"Female","FullName":"Marcos Costa","PersonID":37,"FaxNumber":"(252) 555-0101","DateOfBirth":"1960-12-13 00:00:00","PhoneNumber":"(252) 555-0106","EmailAddress":"marcosc@nodpublishers.com","PreferredName":"Marcos"}, + {"Gender":"Female","FullName":"Matheus Oliveira","PersonID":38,"FaxNumber":"(252) 555-0101","DateOfBirth":"1951-06-22 00:00:00","PhoneNumber":"(252) 555-0107","EmailAddress":"matheuso@nodpublishers.com","PreferredName":"Matheus"}, + {"Gender":"Female","FullName":"Eliza Soderberg","PersonID":39,"FaxNumber":"(201) 555-0106","DateOfBirth":"1973-04-11 00:00:00","PhoneNumber":"(201) 555-0101","EmailAddress":"elizas@northwindelectriccars.com","PreferredName":"Eliza"}, + {"Gender":"Female","FullName":"Sara Karlsson","PersonID":40,"FaxNumber":"(201) 555-0106","DateOfBirth":"1961-04-07 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"sarak@northwindelectriccars.com","PreferredName":"Sara"}, + {"Gender":"Female","FullName":"Donald Jones","PersonID":41,"FaxNumber":"(605) 555-0101","DateOfBirth":"1990-03-05 00:00:00","PhoneNumber":"(605) 555-0101","EmailAddress":"donaldj@treyresearch.net","PreferredName":"Donald"}, + {"Gender":"Female","FullName":"Sharon Graham","PersonID":42,"FaxNumber":"(605) 555-0101","DateOfBirth":"1978-08-18 00:00:00","PhoneNumber":"(605) 555-0106","EmailAddress":"sharong@treyresearch.net","PreferredName":"Sharon"}, + {"Gender":"Female","FullName":"Hai Dam","PersonID":43,"FaxNumber":"(218) 555-0108","DateOfBirth":"1964-08-10 00:00:00","PhoneNumber":"(218) 555-0101","EmailAddress":"haid@thephone-company.com","PreferredName":"Hai"}, + {"Gender":"Female","FullName":"Thanh Dinh","PersonID":44,"FaxNumber":"(218) 555-0108","DateOfBirth":"1959-06-11 00:00:00","PhoneNumber":"(218) 555-0104","EmailAddress":"thanhd@thephone-company.com","PreferredName":"Thanh"}, + {"Gender":"Female","FullName":"Hubert Helms","PersonID":45,"FaxNumber":"(415) 555-0104","DateOfBirth":"1964-08-19 00:00:00","PhoneNumber":"(415) 555-0103","EmailAddress":"huberth@woodgrovebank.com","PreferredName":"Hubert"}, + {"Gender":"Female","FullName":"Donald Small","PersonID":46,"FaxNumber":"(415) 555-0104","DateOfBirth":"1998-02-08 00:00:00","PhoneNumber":"(415) 555-0105","EmailAddress":"donalds@woodgrovebank.com","PreferredName":"Donald"}, + {"Gender":"Female","FullName":"Waldemar Fisar","PersonID":47,"FaxNumber":"(308) 555-0101","DateOfBirth":"1952-01-23 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"waldemar@tailspintoys.com","PreferredName":"Waldemar"}, + {"Gender":"Female","FullName":"Laimonis Berzins","PersonID":48,"FaxNumber":"(308) 555-0101","DateOfBirth":"1964-03-26 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"laimonis@tailspintoys.com","PreferredName":"Laimonis"}, + {"Gender":"Female","FullName":"Lorena Cindric","PersonID":49,"FaxNumber":"(406) 555-0101","DateOfBirth":"1960-12-10 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"lorena@tailspintoys.com","PreferredName":"Lorena"}, + {"Gender":"Female","FullName":"Hung Van Groesen","PersonID":50,"FaxNumber":"(406) 555-0101","DateOfBirth":"1976-05-16 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"hung@tailspintoys.com","PreferredName":"Hung"}, + {"Gender":"Female","FullName":"Bhaargav Rambhatla","PersonID":51,"FaxNumber":"(480) 555-0101","DateOfBirth":"1983-03-18 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"bhaargav@tailspintoys.com","PreferredName":"Bhaargav"}, + {"Gender":"Female","FullName":"Mudar Jevtic","PersonID":52,"FaxNumber":"(480) 555-0101","DateOfBirth":"1997-10-27 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"mudar@tailspintoys.com","PreferredName":"Mudar"}, + {"Gender":"Female","FullName":"Daniel Roman","PersonID":53,"FaxNumber":"(316) 555-0101","DateOfBirth":"1989-03-17 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"daniel@tailspintoys.com","PreferredName":"Daniel"}, + {"Gender":"Female","FullName":"Leyla Radnia","PersonID":54,"FaxNumber":"(316) 555-0101","DateOfBirth":"1974-05-12 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"leyla@tailspintoys.com","PreferredName":"Leyla"}, + {"Gender":"Female","FullName":"Johanna Huiting","PersonID":55,"FaxNumber":"(212) 555-0101","DateOfBirth":"1995-06-27 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"johanna@tailspintoys.com","PreferredName":"Johanna"}, + {"Gender":"Female","FullName":"Robert Ruutli","PersonID":56,"FaxNumber":"(212) 555-0101","DateOfBirth":"1972-08-22 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"robert@tailspintoys.com","PreferredName":"Robert"}, + {"Gender":"Female","FullName":"Biswajeet Thakur","PersonID":57,"FaxNumber":"(701) 555-0101","DateOfBirth":"1982-04-29 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"biswajeet@tailspintoys.com","PreferredName":"Biswajeet"}, + {"Gender":"Female","FullName":"Radha Shah","PersonID":58,"FaxNumber":"(701) 555-0101","DateOfBirth":"1980-07-31 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"radha@tailspintoys.com","PreferredName":"Radha"}, + {"Gender":"Female","FullName":"Kalidas Nadar","PersonID":59,"FaxNumber":"(423) 555-0101","DateOfBirth":"1978-12-13 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"kalidas@tailspintoys.com","PreferredName":"Kalidas"}, + {"Gender":"Female","FullName":"Filip Nedvidek","PersonID":60,"FaxNumber":"(423) 555-0101","DateOfBirth":"1979-10-30 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"filip@tailspintoys.com","PreferredName":"Filip"}, + {"Gender":"Female","FullName":"Kanti Kotadia","PersonID":61,"FaxNumber":"(303) 555-0101","DateOfBirth":"1967-05-23 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"kanti@tailspintoys.com","PreferredName":"Kanti"}, + {"Gender":"Female","FullName":"Hoa Cu","PersonID":62,"FaxNumber":"(303) 555-0101","DateOfBirth":"1976-04-29 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"hoa@tailspintoys.com","PreferredName":"Hoa"}, + {"Gender":"Female","FullName":"Sointu Aalto","PersonID":63,"FaxNumber":"(201) 555-0101","DateOfBirth":"1991-03-26 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"sointu@tailspintoys.com","PreferredName":"Sointu"}, + {"Gender":"Female","FullName":"Jae-Gon Min","PersonID":64,"FaxNumber":"(201) 555-0101","DateOfBirth":"1977-07-21 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"jae-gon@tailspintoys.com","PreferredName":"Jae-Gon"}, + {"Gender":"Female","FullName":"Paula Matos","PersonID":66,"FaxNumber":"(701) 555-0101","DateOfBirth":"1977-01-23 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"paula@tailspintoys.com","PreferredName":"Paula"}, + {"Gender":"Female","FullName":"Elnaz Javan","PersonID":67,"FaxNumber":"(215) 555-0101","DateOfBirth":"1974-06-06 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"elnaz@tailspintoys.com","PreferredName":"Elnaz"}, + {"Gender":"Female","FullName":"Jayashish Ghatak","PersonID":68,"FaxNumber":"(215) 555-0101","DateOfBirth":"1972-11-09 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jayashish@tailspintoys.com","PreferredName":"Jayashish"}, + {"Gender":"Female","FullName":"Heloisa Fernandes","PersonID":69,"FaxNumber":"(218) 555-0101","DateOfBirth":"1956-01-02 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"heloisa@tailspintoys.com","PreferredName":"Heloisa"}, + {"Gender":"Female","FullName":"Amornrat Rattanaporn","PersonID":70,"FaxNumber":"(218) 555-0101","DateOfBirth":"1988-07-17 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"amornrat@tailspintoys.com","PreferredName":"Amornrat"}, + {"Gender":"Female","FullName":"Razeena Hosseini","PersonID":71,"FaxNumber":"(217) 555-0101","DateOfBirth":"1955-12-02 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"razeena@tailspintoys.com","PreferredName":"Razeena"}, + {"Gender":"Female","FullName":"Leticia Ribeiro","PersonID":72,"FaxNumber":"(217) 555-0101","DateOfBirth":"1997-09-20 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"leticia@tailspintoys.com","PreferredName":"Leticia"}, + {"Gender":"Female","FullName":"Tereza Valentova","PersonID":73,"FaxNumber":"(240) 555-0101","DateOfBirth":"1984-03-14 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"tereza@tailspintoys.com","PreferredName":"Tereza"}, + {"Gender":"Female","FullName":"Brijesh Ganguly","PersonID":74,"FaxNumber":"(240) 555-0101","DateOfBirth":"1986-08-02 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"brijesh@tailspintoys.com","PreferredName":"Brijesh"}, + {"Gender":"Female","FullName":"Filips Jaunzems","PersonID":75,"FaxNumber":"(210) 555-0101","DateOfBirth":"1959-09-06 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"filips@tailspintoys.com","PreferredName":"Filips"}, + {"Gender":"Female","FullName":"Bharati Bhowmick","PersonID":76,"FaxNumber":"(210) 555-0101","DateOfBirth":"1956-11-10 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"bharati@tailspintoys.com","PreferredName":"Bharati"}, + {"Gender":"Female","FullName":"Nitin Matondkar","PersonID":77,"FaxNumber":"(314) 555-0101","DateOfBirth":"1953-08-14 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"nitin@tailspintoys.com","PreferredName":"Nitin"}, + {"Gender":"Female","FullName":"Joy Dutta","PersonID":78,"FaxNumber":"(314) 555-0101","DateOfBirth":"1976-05-04 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"joy@tailspintoys.com","PreferredName":"Joy"}, + {"Gender":"Female","FullName":"Adam Kubat","PersonID":79,"FaxNumber":"(216) 555-0101","DateOfBirth":"1986-09-18 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"adam@tailspintoys.com","PreferredName":"Adam"}, + {"Gender":"Female","FullName":"Gulzar Naidu","PersonID":80,"FaxNumber":"(216) 555-0101","DateOfBirth":"1976-03-04 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"gulzar@tailspintoys.com","PreferredName":"Gulzar"}, + {"Gender":"Female","FullName":"Rohan Kumar","PersonID":81,"FaxNumber":"(603) 555-0101","DateOfBirth":"1979-03-03 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"rohank@contosomotors.com","PreferredName":"Rohan"}, + {"Gender":"Female","FullName":"Prakash Sarma","PersonID":82,"FaxNumber":"(603) 555-0101","DateOfBirth":"1975-11-30 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"prakash@tailspintoys.com","PreferredName":"Prakash"}, + {"Gender":"Female","FullName":"Mithun Bhattacharya","PersonID":83,"FaxNumber":"(907) 555-0101","DateOfBirth":"1976-05-01 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"mithun@tailspintoys.com","PreferredName":"Mithun"}, + {"Gender":"Female","FullName":"Sandhya Raju","PersonID":84,"FaxNumber":"(907) 555-0101","DateOfBirth":"1969-01-17 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"sandhya@tailspintoys.com","PreferredName":"Sandhya"}, + {"Gender":"Female","FullName":"Shreya Verma","PersonID":85,"FaxNumber":"(206) 555-0101","DateOfBirth":"1983-02-14 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"shreyav@contosomotors.com","PreferredName":"Shreya"}, + {"Gender":"Female","FullName":"Ravindra Parkar","PersonID":86,"FaxNumber":"(206) 555-0101","DateOfBirth":"1977-03-23 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"ravindra@tailspintoys.com","PreferredName":"Ravindra"}, + {"Gender":"Female","FullName":"Duleep Raju","PersonID":87,"FaxNumber":"(215) 555-0101","DateOfBirth":"1993-10-18 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"duleep@tailspintoys.com","PreferredName":"Duleep"}, + {"Gender":"Female","FullName":"Vlatka Duvnjak","PersonID":88,"FaxNumber":"(215) 555-0101","DateOfBirth":"1978-12-21 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"vlatka@tailspintoys.com","PreferredName":"Vlatka"}, + {"Gender":"Female","FullName":"Cristina Longo","PersonID":89,"FaxNumber":"(239) 555-0101","DateOfBirth":"1950-07-21 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"cristina@tailspintoys.com","PreferredName":"Cristina"}, + {"Gender":"Female","FullName":"Antonio Lucchese","PersonID":90,"FaxNumber":"(239) 555-0101","DateOfBirth":"1958-06-29 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"antonio@tailspintoys.com","PreferredName":"Antonio"}, + {"Gender":"Female","FullName":"Hang Tang","PersonID":91,"FaxNumber":"(907) 555-0101","DateOfBirth":"1991-11-23 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"hang@tailspintoys.com","PreferredName":"Hang"}, + {"Gender":"Female","FullName":"Hong Ang","PersonID":92,"FaxNumber":"(907) 555-0101","DateOfBirth":"1966-09-15 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"hong@tailspintoys.com","PreferredName":"Hong"}, + {"Gender":"Female","FullName":"Intira Mookjai","PersonID":93,"FaxNumber":"(252) 555-0101","DateOfBirth":"1962-12-25 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"intira@tailspintoys.com","PreferredName":"Intira"}, + {"Gender":"Female","FullName":"Young-Tae Kim","PersonID":94,"FaxNumber":"(252) 555-0101","DateOfBirth":"1965-03-14 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"young-tae@tailspintoys.com","PreferredName":"Young-Tae"}, + {"Gender":"Female","FullName":"Sulabha Khalsa","PersonID":95,"FaxNumber":"(209) 555-0101","DateOfBirth":"1950-09-24 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"sulabha@tailspintoys.com","PreferredName":"Sulabha"}, + {"Gender":"Female","FullName":"Alessandro Milano","PersonID":96,"FaxNumber":"(209) 555-0101","DateOfBirth":"1952-02-17 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"alessandro@tailspintoys.com","PreferredName":"Alessandro"}, + {"Gender":"Female","FullName":"Dhanishta Majji","PersonID":97,"FaxNumber":"(319) 555-0101","DateOfBirth":"1962-04-28 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"dhanishta@tailspintoys.com","PreferredName":"Dhanishta"}, + {"Gender":"Female","FullName":"Nils Podnieks","PersonID":98,"FaxNumber":"(319) 555-0101","DateOfBirth":"1979-01-06 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"nils@tailspintoys.com","PreferredName":"Nils"}, + {"Gender":"Female","FullName":"Paula Gonzales","PersonID":99,"FaxNumber":"(218) 555-0101","DateOfBirth":"1981-08-17 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"paula@tailspintoys.com","PreferredName":"Paula"}, + {"Gender":"Female","FullName":"Chetana Dewangan","PersonID":100,"FaxNumber":"(218) 555-0101","DateOfBirth":"1987-01-11 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"chetana@tailspintoys.com","PreferredName":"Chetana"}, + {"Gender":"Female","FullName":"Tatjana Utjesenovic","PersonID":101,"FaxNumber":"(212) 555-0101","DateOfBirth":"1976-05-09 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"tatjana@tailspintoys.com","PreferredName":"Tatjana"}, + {"Gender":"Female","FullName":"Theresa Boose","PersonID":102,"FaxNumber":"(212) 555-0101","DateOfBirth":"1995-08-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"theresa@tailspintoys.com","PreferredName":"Theresa"}, + {"Gender":"Female","FullName":"Karel Hanak","PersonID":103,"FaxNumber":"(205) 555-0101","DateOfBirth":"1958-05-23 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"karel@tailspintoys.com","PreferredName":"Karel"}, + {"Gender":"Female","FullName":"Fernanda Fierro","PersonID":104,"FaxNumber":"(205) 555-0101","DateOfBirth":"1986-02-01 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"fernanda@tailspintoys.com","PreferredName":"Fernanda"}, + {"Gender":"Female","FullName":"Odessa Schneider","PersonID":105,"FaxNumber":"(206) 555-0101","DateOfBirth":"1987-11-01 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"odessa@tailspintoys.com","PreferredName":"Odessa"}, + {"Gender":"Female","FullName":"Konrads Sprogis","PersonID":106,"FaxNumber":"(206) 555-0101","DateOfBirth":"1978-05-08 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"konrads@tailspintoys.com","PreferredName":"Konrads"}, + {"Gender":"Female","FullName":"Kimberly Pace","PersonID":107,"FaxNumber":"(206) 555-0101","DateOfBirth":"1969-03-23 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"kimberly@tailspintoys.com","PreferredName":"Kimberly"}, + {"Gender":"Female","FullName":"Shobha Gupta","PersonID":108,"FaxNumber":"(206) 555-0101","DateOfBirth":"1993-05-13 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"shobha@tailspintoys.com","PreferredName":"Shobha"}, + {"Gender":"Female","FullName":"Nikolajs Kalejs","PersonID":109,"FaxNumber":"(210) 555-0101","DateOfBirth":"1987-07-24 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"nikolajs@tailspintoys.com","PreferredName":"Nikolajs"}, + {"Gender":"Female","FullName":"Philippe Lamy","PersonID":110,"FaxNumber":"(210) 555-0101","DateOfBirth":"1951-05-11 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"philippe@tailspintoys.com","PreferredName":"Philippe"}, + {"Gender":"Female","FullName":"Haasini Rai","PersonID":111,"FaxNumber":"(803) 555-0101","DateOfBirth":"1991-04-26 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"haasini@tailspintoys.com","PreferredName":"Haasini"}, + {"Gender":"Female","FullName":"Viktorie Melicharova","PersonID":112,"FaxNumber":"(803) 555-0101","DateOfBirth":"1992-08-22 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"viktorie@tailspintoys.com","PreferredName":"Viktorie"}, + {"Gender":"Female","FullName":"Anjali Asthana","PersonID":113,"FaxNumber":"(210) 555-0101","DateOfBirth":"1975-04-11 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"anjali@tailspintoys.com","PreferredName":"Anjali"}, + {"Gender":"Female","FullName":"Hanuman Negi","PersonID":114,"FaxNumber":"(210) 555-0101","DateOfBirth":"1950-03-07 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"hanuman@tailspintoys.com","PreferredName":"Hanuman"}, + {"Gender":"Female","FullName":"Shah Omidi","PersonID":115,"FaxNumber":"(304) 555-0101","DateOfBirth":"1975-11-20 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"shah@tailspintoys.com","PreferredName":"Shah"}, + {"Gender":"Female","FullName":"Chandra Mittal","PersonID":116,"FaxNumber":"(304) 555-0101","DateOfBirth":"1995-05-20 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"chandra@tailspintoys.com","PreferredName":"Chandra"}, + {"Gender":"Female","FullName":"Ferhat Celik","PersonID":117,"FaxNumber":"(270) 555-0101","DateOfBirth":"1985-11-30 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"ferhat@tailspintoys.com","PreferredName":"Ferhat"}, + {"Gender":"Female","FullName":"Leyla Celik","PersonID":118,"FaxNumber":"(270) 555-0101","DateOfBirth":"1996-05-03 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"leyla@tailspintoys.com","PreferredName":"Leyla"}, + {"Gender":"Female","FullName":"Dayarama Kamei","PersonID":119,"FaxNumber":"(458) 555-0101","DateOfBirth":"1993-04-07 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"dayarama@tailspintoys.com","PreferredName":"Dayarama"}, + {"Gender":"Female","FullName":"Elisabeth Flamand","PersonID":120,"FaxNumber":"(458) 555-0101","DateOfBirth":"1959-01-27 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"elisabeth@tailspintoys.com","PreferredName":"Elisabeth"}, + {"Gender":"Female","FullName":"Nils Kalnins","PersonID":121,"FaxNumber":"(314) 555-0101","DateOfBirth":"1988-12-06 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"nils@tailspintoys.com","PreferredName":"Nils"}, + {"Gender":"Female","FullName":"Rajiv Kotadia","PersonID":122,"FaxNumber":"(314) 555-0101","DateOfBirth":"1976-12-30 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"rajiv@tailspintoys.com","PreferredName":"Rajiv"}, + {"Gender":"Female","FullName":"Ashish Acharya","PersonID":123,"FaxNumber":"(270) 555-0101","DateOfBirth":"1995-07-11 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"ashish@tailspintoys.com","PreferredName":"Ashish"}, + {"Gender":"Female","FullName":"Filip Sedlar","PersonID":124,"FaxNumber":"(270) 555-0101","DateOfBirth":"1963-05-20 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"filip@tailspintoys.com","PreferredName":"Filip"}, + {"Gender":"Female","FullName":"Alena Prikrylova","PersonID":125,"FaxNumber":"(210) 555-0101","DateOfBirth":"1971-12-16 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"alena@tailspintoys.com","PreferredName":"Alena"}, + {"Gender":"Female","FullName":"Catina Bojin","PersonID":126,"FaxNumber":"(210) 555-0101","DateOfBirth":"1955-12-05 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"catina@tailspintoys.com","PreferredName":"Catina"}, + {"Gender":"Female","FullName":"Lana Rozej","PersonID":127,"FaxNumber":"(314) 555-0101","DateOfBirth":"1963-05-22 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"lana@tailspintoys.com","PreferredName":"Lana"}, + {"Gender":"Female","FullName":"Kalpana Mukherjee","PersonID":128,"FaxNumber":"(314) 555-0101","DateOfBirth":"1980-10-25 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"kalpana@tailspintoys.com","PreferredName":"Kalpana"}, + {"Gender":"Female","FullName":"Chandrakanta Raut","PersonID":129,"FaxNumber":"(212) 555-0101","DateOfBirth":"1993-03-10 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"chandrakanta@tailspintoys.com","PreferredName":"Chandrakanta"}, + {"Gender":"Female","FullName":"Ivan Castellanos","PersonID":130,"FaxNumber":"(212) 555-0101","DateOfBirth":"1975-02-02 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"ivan@tailspintoys.com","PreferredName":"Ivan"}, + {"Gender":"Female","FullName":"Ganapati Gadiyaram","PersonID":131,"FaxNumber":"(206) 555-0101","DateOfBirth":"1988-09-16 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"ganapati@tailspintoys.com","PreferredName":"Ganapati"}, + {"Gender":"Female","FullName":"Parsa Blijleven","PersonID":132,"FaxNumber":"(206) 555-0101","DateOfBirth":"1979-03-02 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"parsa@tailspintoys.com","PreferredName":"Parsa"}, + {"Gender":"Female","FullName":"Adrijana Blagojevic","PersonID":133,"FaxNumber":"(206) 555-0101","DateOfBirth":"1959-01-08 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"adrijana@tailspintoys.com","PreferredName":"Adrijana"}, + {"Gender":"Female","FullName":"Lina Martins","PersonID":134,"FaxNumber":"(206) 555-0101","DateOfBirth":"1984-05-26 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"lina@tailspintoys.com","PreferredName":"Lina"}, + {"Gender":"Female","FullName":"Lap Dinh","PersonID":135,"FaxNumber":"(240) 555-0101","DateOfBirth":"1956-11-08 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"lap@tailspintoys.com","PreferredName":"Lap"}, + {"Gender":"Female","FullName":"August Astrom","PersonID":136,"FaxNumber":"(240) 555-0101","DateOfBirth":"1989-06-28 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"august@tailspintoys.com","PreferredName":"August"}, + {"Gender":"Female","FullName":"Didem ozCelik","PersonID":137,"FaxNumber":"(205) 555-0101","DateOfBirth":"1996-01-12 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"didem@tailspintoys.com","PreferredName":"Didem"}, + {"Gender":"Female","FullName":"Krista Andrejev","PersonID":138,"FaxNumber":"(205) 555-0101","DateOfBirth":"1965-07-06 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"krista@tailspintoys.com","PreferredName":"Krista"}, + {"Gender":"Female","FullName":"Serhat Akbulut","PersonID":139,"FaxNumber":"(209) 555-0101","DateOfBirth":"1985-06-23 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"serhat@tailspintoys.com","PreferredName":"Serhat"}, + {"Gender":"Female","FullName":"Nadja Johansson","PersonID":140,"FaxNumber":"(209) 555-0101","DateOfBirth":"1972-04-06 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"nadja@tailspintoys.com","PreferredName":"Nadja"}, + {"Gender":"Female","FullName":"Daniela Barrios","PersonID":141,"FaxNumber":"(206) 555-0101","DateOfBirth":"1987-04-28 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"daniela@tailspintoys.com","PreferredName":"Daniela"}, + {"Gender":"Female","FullName":"Daina Celma","PersonID":142,"FaxNumber":"(206) 555-0101","DateOfBirth":"1984-08-18 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"daina@tailspintoys.com","PreferredName":"Daina"}, + {"Gender":"Female","FullName":"Julia Slobodova","PersonID":143,"FaxNumber":"(231) 555-0101","DateOfBirth":"1987-10-09 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"julia@tailspintoys.com","PreferredName":"Julia"}, + {"Gender":"Female","FullName":"Raimonds Kalnins","PersonID":144,"FaxNumber":"(231) 555-0101","DateOfBirth":"1952-09-17 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"raimonds@tailspintoys.com","PreferredName":"Raimonds"}, + {"Gender":"Female","FullName":"Marcela Jankova","PersonID":145,"FaxNumber":"(304) 555-0101","DateOfBirth":"1980-04-09 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"marcela@tailspintoys.com","PreferredName":"Marcela"}, + {"Gender":"Female","FullName":"Predrag Stojanovic","PersonID":146,"FaxNumber":"(304) 555-0101","DateOfBirth":"1979-12-31 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"predrag@tailspintoys.com","PreferredName":"Predrag"}, + {"Gender":"Female","FullName":"Dipali Sonkar","PersonID":147,"FaxNumber":"(201) 555-0101","DateOfBirth":"1978-01-11 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"dipali@tailspintoys.com","PreferredName":"Dipali"}, + {"Gender":"Female","FullName":"Mariana Apodaca","PersonID":148,"FaxNumber":"(201) 555-0101","DateOfBirth":"1963-07-19 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"mariana@tailspintoys.com","PreferredName":"Mariana"}, + {"Gender":"Female","FullName":"Bansidhar Mitra","PersonID":149,"FaxNumber":"(209) 555-0101","DateOfBirth":"1958-10-20 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bansidhar@tailspintoys.com","PreferredName":"Bansidhar"}, + {"Gender":"Female","FullName":"Liia Mae","PersonID":150,"FaxNumber":"(209) 555-0101","DateOfBirth":"1997-12-20 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"liia@tailspintoys.com","PreferredName":"Liia"}, + {"Gender":"Female","FullName":"Gunnar Persson","PersonID":151,"FaxNumber":"(205) 555-0101","DateOfBirth":"1985-10-05 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"gunnar@tailspintoys.com","PreferredName":"Gunnar"}, + {"Gender":"Female","FullName":"Parvati Modi","PersonID":152,"FaxNumber":"(205) 555-0101","DateOfBirth":"1965-06-13 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"parvati@tailspintoys.com","PreferredName":"Parvati"}, + {"Gender":"Female","FullName":"Vitezslav Rehak","PersonID":153,"FaxNumber":"(215) 555-0101","DateOfBirth":"1963-06-04 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"vitezslav@tailspintoys.com","PreferredName":"Vitezslav"}, + {"Gender":"Female","FullName":"Parsa Van Vossen","PersonID":154,"FaxNumber":"(215) 555-0101","DateOfBirth":"1962-05-16 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"parsa@tailspintoys.com","PreferredName":"Parsa"}, + {"Gender":"Female","FullName":"Bharat Sikdar","PersonID":155,"FaxNumber":"(229) 555-0101","DateOfBirth":"1990-05-08 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"bharat@tailspintoys.com","PreferredName":"Bharat"}, + {"Gender":"Female","FullName":"Alain Aupry","PersonID":156,"FaxNumber":"(229) 555-0101","DateOfBirth":"1970-08-06 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"alain@tailspintoys.com","PreferredName":"Alain"}, + {"Gender":"Female","FullName":"Juan Bezanson","PersonID":157,"FaxNumber":"(206) 555-0101","DateOfBirth":"1964-07-19 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"juan@tailspintoys.com","PreferredName":"Juan"}, + {"Gender":"Female","FullName":"Ruby Charlton","PersonID":158,"FaxNumber":"(206) 555-0101","DateOfBirth":"1960-09-05 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"ruby@tailspintoys.com","PreferredName":"Ruby"}, + {"Gender":"Female","FullName":"Aile Mae","PersonID":159,"FaxNumber":"(216) 555-0101","DateOfBirth":"1972-09-07 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"aile@tailspintoys.com","PreferredName":"Aile"}, + {"Gender":"Female","FullName":"Margherita Lucchesi","PersonID":160,"FaxNumber":"(216) 555-0101","DateOfBirth":"1963-03-05 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"margherita@tailspintoys.com","PreferredName":"Margherita"}, + {"Gender":"Female","FullName":"Pratap Varghese","PersonID":161,"FaxNumber":"(276) 555-0101","DateOfBirth":"1994-11-03 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"pratap@tailspintoys.com","PreferredName":"Pratap"}, + {"Gender":"Female","FullName":"Marcel Marquis","PersonID":162,"FaxNumber":"(276) 555-0101","DateOfBirth":"1972-04-02 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"marcel@tailspintoys.com","PreferredName":"Marcel"}, + {"Gender":"Female","FullName":"Margita Kopecka","PersonID":163,"FaxNumber":"(339) 555-0101","DateOfBirth":"1996-03-14 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"margita@tailspintoys.com","PreferredName":"Margita"}, + {"Gender":"Female","FullName":"Mirjam Johansson","PersonID":164,"FaxNumber":"(339) 555-0101","DateOfBirth":"1989-12-19 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"mirjam@tailspintoys.com","PreferredName":"Mirjam"}, + {"Gender":"Female","FullName":"Lekha Mitra","PersonID":165,"FaxNumber":"(304) 555-0101","DateOfBirth":"1982-01-11 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"lekha@tailspintoys.com","PreferredName":"Lekha"}, + {"Gender":"Female","FullName":"Seeta Bose","PersonID":166,"FaxNumber":"(304) 555-0101","DateOfBirth":"1985-09-08 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"seeta@tailspintoys.com","PreferredName":"Seeta"}, + {"Gender":"Female","FullName":"Abhoy PrabhupÄda","PersonID":167,"FaxNumber":"(423) 555-0101","DateOfBirth":"1957-09-04 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"abhoy@tailspintoys.com","PreferredName":"Abhoy"}, + {"Gender":"Female","FullName":"Seok-Ho Jeon","PersonID":168,"FaxNumber":"(423) 555-0101","DateOfBirth":"1997-10-04 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"seok-ho@tailspintoys.com","PreferredName":"Seok-Ho"}, + {"Gender":"Female","FullName":"Alida Caune","PersonID":169,"FaxNumber":"(212) 555-0101","DateOfBirth":"1971-01-24 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"alida@tailspintoys.com","PreferredName":"Alida"}, + {"Gender":"Female","FullName":"Indiana Fritzsche","PersonID":170,"FaxNumber":"(212) 555-0101","DateOfBirth":"1985-12-01 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"indiana@tailspintoys.com","PreferredName":"Indiana"}, + {"Gender":"Female","FullName":"Agnes Szolosy","PersonID":171,"FaxNumber":"(209) 555-0101","DateOfBirth":"1956-08-28 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"agnes@tailspintoys.com","PreferredName":"Agnes"}, + {"Gender":"Female","FullName":"Yu-jin Jee","PersonID":172,"FaxNumber":"(209) 555-0101","DateOfBirth":"1978-07-28 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"yu-jin@tailspintoys.com","PreferredName":"Yu-jin"}, + {"Gender":"Female","FullName":"Rohana Kaskar","PersonID":173,"FaxNumber":"(207) 555-0101","DateOfBirth":"1965-09-15 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"rohana@tailspintoys.com","PreferredName":"Rohana"}, + {"Gender":"Female","FullName":"Grieta Kalnina","PersonID":174,"FaxNumber":"(207) 555-0101","DateOfBirth":"1966-12-13 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"grieta@tailspintoys.com","PreferredName":"Grieta"}, + {"Gender":"Female","FullName":"Hanuman Dubey","PersonID":175,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-11-06 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"hanuman@tailspintoys.com","PreferredName":"Hanuman"}, + {"Gender":"Female","FullName":"Paola Loggia","PersonID":176,"FaxNumber":"(210) 555-0101","DateOfBirth":"1995-01-17 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"paola@tailspintoys.com","PreferredName":"Paola"}, + {"Gender":"Female","FullName":"Bao Dao","PersonID":177,"FaxNumber":"(339) 555-0101","DateOfBirth":"1986-07-30 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"bao@tailspintoys.com","PreferredName":"Bao"}, + {"Gender":"Female","FullName":"Viljo Lampsa","PersonID":178,"FaxNumber":"(339) 555-0101","DateOfBirth":"1990-05-22 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"viljo@tailspintoys.com","PreferredName":"Viljo"}, + {"Gender":"Female","FullName":"Preyakshna Aluri","PersonID":179,"FaxNumber":"(701) 555-0101","DateOfBirth":"1997-01-01 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"preyakshna@tailspintoys.com","PreferredName":"Preyakshna"}, + {"Gender":"Female","FullName":"Chandan Raut","PersonID":180,"FaxNumber":"(701) 555-0101","DateOfBirth":"1969-09-05 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"chandan@tailspintoys.com","PreferredName":"Chandan"}, + {"Gender":"Female","FullName":"Valentina Conti","PersonID":181,"FaxNumber":"(225) 555-0101","DateOfBirth":"1984-05-31 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"valentina@tailspintoys.com","PreferredName":"Valentina"}, + {"Gender":"Female","FullName":"Narayan Mukherjee","PersonID":182,"FaxNumber":"(225) 555-0101","DateOfBirth":"1964-07-02 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"narayan@tailspintoys.com","PreferredName":"Narayan"}, + {"Gender":"Female","FullName":"Theodore Saucier","PersonID":183,"FaxNumber":"(209) 555-0101","DateOfBirth":"1974-09-17 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"theodore@tailspintoys.com","PreferredName":"Theodore"}, + {"Gender":"Female","FullName":"Chaowalit Pornpipatpong","PersonID":184,"FaxNumber":"(209) 555-0101","DateOfBirth":"1990-11-21 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"chaowalit@tailspintoys.com","PreferredName":"Chaowalit"}, + {"Gender":"Female","FullName":"Mariana Fierro","PersonID":185,"FaxNumber":"(217) 555-0101","DateOfBirth":"1983-02-18 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"mariana@tailspintoys.com","PreferredName":"Mariana"}, + {"Gender":"Female","FullName":"Ivana Kozakova","PersonID":186,"FaxNumber":"(217) 555-0101","DateOfBirth":"1994-03-03 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"ivana@tailspintoys.com","PreferredName":"Ivana"}, + {"Gender":"Female","FullName":"Afshin Djalili","PersonID":187,"FaxNumber":"(231) 555-0101","DateOfBirth":"1984-06-30 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"afshin@tailspintoys.com","PreferredName":"Afshin"}, + {"Gender":"Female","FullName":"Vaclav Holy","PersonID":188,"FaxNumber":"(231) 555-0101","DateOfBirth":"1992-01-09 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"vaclav@tailspintoys.com","PreferredName":"Vaclav"}, + {"Gender":"Female","FullName":"Bianh Phan","PersonID":189,"FaxNumber":"(480) 555-0101","DateOfBirth":"1970-10-24 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"bianh@tailspintoys.com","PreferredName":"Bianh"}, + {"Gender":"Female","FullName":"Kanti Pipalia","PersonID":190,"FaxNumber":"(480) 555-0101","DateOfBirth":"1995-12-16 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"kanti@tailspintoys.com","PreferredName":"Kanti"}, + {"Gender":"Female","FullName":"Koknesis Vitols","PersonID":191,"FaxNumber":"(218) 555-0101","DateOfBirth":"1961-07-21 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"koknesis@tailspintoys.com","PreferredName":"Koknesis"}, + {"Gender":"Female","FullName":"Malle Sepp","PersonID":192,"FaxNumber":"(218) 555-0101","DateOfBirth":"1992-01-01 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"malle@tailspintoys.com","PreferredName":"Malle"}, + {"Gender":"Female","FullName":"Roxane Rastgu","PersonID":193,"FaxNumber":"(787) 555-0101","DateOfBirth":"1961-01-07 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"roxane@tailspintoys.com","PreferredName":"Roxane"}, + {"Gender":"Female","FullName":"Hue Chu","PersonID":194,"FaxNumber":"(787) 555-0101","DateOfBirth":"1955-09-27 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"hue@tailspintoys.com","PreferredName":"Hue"}, + {"Gender":"Female","FullName":"Vlasta Srbova","PersonID":195,"FaxNumber":"(203) 555-0101","DateOfBirth":"1959-04-22 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"vlasta@tailspintoys.com","PreferredName":"Vlasta"}, + {"Gender":"Female","FullName":"Gadhar Ghosh","PersonID":196,"FaxNumber":"(203) 555-0101","DateOfBirth":"1961-10-18 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"gadhar@tailspintoys.com","PreferredName":"Gadhar"}, + {"Gender":"Female","FullName":"Lata Babu","PersonID":197,"FaxNumber":"(405) 555-0101","DateOfBirth":"1972-12-08 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"lata@tailspintoys.com","PreferredName":"Lata"}, + {"Gender":"Female","FullName":"Chandra De","PersonID":198,"FaxNumber":"(405) 555-0101","DateOfBirth":"1980-07-12 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"chandra@tailspintoys.com","PreferredName":"Chandra"}, + {"Gender":"Female","FullName":"Airi Vassiljev","PersonID":199,"FaxNumber":"(229) 555-0101","DateOfBirth":"1995-04-29 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"airi@tailspintoys.com","PreferredName":"Airi"}, + {"Gender":"Female","FullName":"Hoang La","PersonID":200,"FaxNumber":"(229) 555-0101","DateOfBirth":"1995-09-01 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"hoang@tailspintoys.com","PreferredName":"Hoang"}, + {"Gender":"Female","FullName":"Duleep Walia","PersonID":201,"FaxNumber":"(206) 555-0101","DateOfBirth":"1959-11-07 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"duleep@tailspintoys.com","PreferredName":"Duleep"}, + {"Gender":"Female","FullName":"Satish Gill","PersonID":202,"FaxNumber":"(206) 555-0101","DateOfBirth":"1982-11-17 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"satish@tailspintoys.com","PreferredName":"Satish"}, + {"Gender":"Female","FullName":"Matyas Macek","PersonID":203,"FaxNumber":"(316) 555-0101","DateOfBirth":"1997-10-01 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"matyas@tailspintoys.com","PreferredName":"Matyas"}, + {"Gender":"Female","FullName":"Ethan Hopkins","PersonID":204,"FaxNumber":"(316) 555-0101","DateOfBirth":"1970-05-03 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"ethan@tailspintoys.com","PreferredName":"Ethan"}, + {"Gender":"Female","FullName":"Bharat Ankitham","PersonID":205,"FaxNumber":"(252) 555-0101","DateOfBirth":"1991-02-22 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"bharat@tailspintoys.com","PreferredName":"Bharat"}, + {"Gender":"Female","FullName":"Be Phan","PersonID":206,"FaxNumber":"(252) 555-0101","DateOfBirth":"1975-12-15 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"be@tailspintoys.com","PreferredName":"Be"}, + {"Gender":"Female","FullName":"Vera Kubatova","PersonID":207,"FaxNumber":"(212) 555-0101","DateOfBirth":"1978-03-09 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"vera@tailspintoys.com","PreferredName":"Vera"}, + {"Gender":"Female","FullName":"Diego Almeida","PersonID":208,"FaxNumber":"(212) 555-0101","DateOfBirth":"1950-12-27 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"diego@tailspintoys.com","PreferredName":"Diego"}, + {"Gender":"Female","FullName":"Rakesh Nishad","PersonID":209,"FaxNumber":"(505) 555-0101","DateOfBirth":"1973-01-08 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"rakesh@tailspintoys.com","PreferredName":"Rakesh"}, + {"Gender":"Female","FullName":"Huu Hoa","PersonID":210,"FaxNumber":"(505) 555-0101","DateOfBirth":"1978-05-11 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"huu@tailspintoys.com","PreferredName":"Huu"}, + {"Gender":"Female","FullName":"Sang Tran","PersonID":211,"FaxNumber":"(201) 555-0101","DateOfBirth":"1993-04-07 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"sang@tailspintoys.com","PreferredName":"Sang"}, + {"Gender":"Female","FullName":"Bela Nemeth","PersonID":212,"FaxNumber":"(201) 555-0101","DateOfBirth":"1989-10-28 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"bela@tailspintoys.com","PreferredName":"Bela"}, + {"Gender":"Female","FullName":"Eekalabya Bose","PersonID":213,"FaxNumber":"(787) 555-0101","DateOfBirth":"1980-12-14 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"eekalabya@tailspintoys.com","PreferredName":"Eekalabya"}, + {"Gender":"Female","FullName":"Margherita Bucco","PersonID":214,"FaxNumber":"(787) 555-0101","DateOfBirth":"1966-08-24 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"margherita@tailspintoys.com","PreferredName":"Margherita"}, + {"Gender":"Female","FullName":"Tommy Kilpi","PersonID":215,"FaxNumber":"(303) 555-0101","DateOfBirth":"1964-10-23 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"tommy@tailspintoys.com","PreferredName":"Tommy"}, + {"Gender":"Female","FullName":"Giri Bhamidipati","PersonID":216,"FaxNumber":"(303) 555-0101","DateOfBirth":"1971-10-10 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"giri@tailspintoys.com","PreferredName":"Giri"}, + {"Gender":"Female","FullName":"Andrea Ricci","PersonID":217,"FaxNumber":"(216) 555-0101","DateOfBirth":"1969-05-18 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"andrea@tailspintoys.com","PreferredName":"Andrea"}, + {"Gender":"Female","FullName":"Chung-Ho Han","PersonID":218,"FaxNumber":"(216) 555-0101","DateOfBirth":"1992-10-31 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"chung-ho@tailspintoys.com","PreferredName":"Chung-Ho"}, + {"Gender":"Female","FullName":"Isabell Duperre","PersonID":219,"FaxNumber":"(212) 555-0101","DateOfBirth":"1970-07-26 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"isabell @tailspintoys.com","PreferredName":"Isabell "}, + {"Gender":"Female","FullName":"Jasna Vujica","PersonID":220,"FaxNumber":"(212) 555-0101","DateOfBirth":"1960-01-21 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"jasna@tailspintoys.com","PreferredName":"Jasna"}, + {"Gender":"Female","FullName":"Amarendra Ankitham","PersonID":221,"FaxNumber":"(339) 555-0101","DateOfBirth":"1969-12-28 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"amarendra@tailspintoys.com","PreferredName":"Amarendra"}, + {"Gender":"Female","FullName":"Isak Berggren","PersonID":222,"FaxNumber":"(339) 555-0101","DateOfBirth":"1992-05-18 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"isak@tailspintoys.com","PreferredName":"Isak"}, + {"Gender":"Female","FullName":"Aakarsha Nookala","PersonID":223,"FaxNumber":"(201) 555-0101","DateOfBirth":"1992-09-27 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"aakarsha@tailspintoys.com","PreferredName":"Aakarsha"}, + {"Gender":"Female","FullName":"Ilgonis Rozitis","PersonID":224,"FaxNumber":"(201) 555-0101","DateOfBirth":"1992-01-31 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"ilgonis@tailspintoys.com","PreferredName":"Ilgonis"}, + {"Gender":"Female","FullName":"Stanislav Sedlar","PersonID":225,"FaxNumber":"(701) 555-0101","DateOfBirth":"1971-01-04 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"stanislav@tailspintoys.com","PreferredName":"Stanislav"}, + {"Gender":"Female","FullName":"Telma Arvidsson","PersonID":226,"FaxNumber":"(701) 555-0101","DateOfBirth":"1996-12-15 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"telma@tailspintoys.com","PreferredName":"Telma"}, + {"Gender":"Female","FullName":"GokCe Karaca","PersonID":227,"FaxNumber":"(603) 555-0101","DateOfBirth":"1996-07-02 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"gokce@tailspintoys.com","PreferredName":"GokCe"}, + {"Gender":"Female","FullName":"Maria Munteanu","PersonID":228,"FaxNumber":"(603) 555-0101","DateOfBirth":"1991-07-07 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"maria@tailspintoys.com","PreferredName":"Maria"}, + {"Gender":"Female","FullName":"Coralie Emond","PersonID":229,"FaxNumber":"(803) 555-0101","DateOfBirth":"1988-06-19 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"coralie@tailspintoys.com","PreferredName":"Coralie"}, + {"Gender":"Female","FullName":"Cong Trung","PersonID":230,"FaxNumber":"(803) 555-0101","DateOfBirth":"1957-12-23 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"cong@tailspintoys.com","PreferredName":"Cong"}, + {"Gender":"Female","FullName":"Karina Celmina","PersonID":231,"FaxNumber":"(239) 555-0101","DateOfBirth":"1977-05-26 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"karina@tailspintoys.com","PreferredName":"Karina"}, + {"Gender":"Female","FullName":"Nik Stoimenova","PersonID":232,"FaxNumber":"(239) 555-0101","DateOfBirth":"1968-07-26 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"nik@tailspintoys.com","PreferredName":"Nik"}, + {"Gender":"Female","FullName":"Teresa Pisani","PersonID":233,"FaxNumber":"(303) 555-0101","DateOfBirth":"1965-03-05 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"teresa@tailspintoys.com","PreferredName":"Teresa"}, + {"Gender":"Female","FullName":"Murugan Thakur","PersonID":234,"FaxNumber":"(303) 555-0101","DateOfBirth":"1974-02-22 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"murugan@tailspintoys.com","PreferredName":"Murugan"}, + {"Gender":"Female","FullName":"Alba Ponce","PersonID":235,"FaxNumber":"(210) 555-0101","DateOfBirth":"1962-07-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"alba@tailspintoys.com","PreferredName":"Alba"}, + {"Gender":"Female","FullName":"Antra Dzene","PersonID":236,"FaxNumber":"(210) 555-0101","DateOfBirth":"1956-02-28 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"antra@tailspintoys.com","PreferredName":"Antra"}, + {"Gender":"Female","FullName":"Piper Leigh","PersonID":237,"FaxNumber":"(210) 555-0101","DateOfBirth":"1950-04-02 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"piper@tailspintoys.com","PreferredName":"Piper"}, + {"Gender":"Female","FullName":"Jautrite Krievina","PersonID":238,"FaxNumber":"(210) 555-0101","DateOfBirth":"1996-12-31 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"jautrite@tailspintoys.com","PreferredName":"Jautrite"}, + {"Gender":"Female","FullName":"Karie Seymour","PersonID":239,"FaxNumber":"(802) 555-0101","DateOfBirth":"1978-12-16 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"karie@tailspintoys.com","PreferredName":"Karie"}, + {"Gender":"Female","FullName":"Lorenzo Lee","PersonID":240,"FaxNumber":"(802) 555-0101","DateOfBirth":"1956-08-18 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"lorenzo@tailspintoys.com","PreferredName":"Lorenzo"}, + {"Gender":"Female","FullName":"Timea Peto","PersonID":241,"FaxNumber":"(209) 555-0101","DateOfBirth":"1950-05-17 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"timea@tailspintoys.com","PreferredName":"Timea"}, + {"Gender":"Female","FullName":"Amanat Shaker Doust","PersonID":242,"FaxNumber":"(209) 555-0101","DateOfBirth":"1953-09-07 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"amanat@tailspintoys.com","PreferredName":"Amanat"}, + {"Gender":"Female","FullName":"Victoria Ene","PersonID":243,"FaxNumber":"(205) 555-0101","DateOfBirth":"1959-03-20 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"victoria@tailspintoys.com","PreferredName":"Victoria"}, + {"Gender":"Female","FullName":"Panit Meesang","PersonID":244,"FaxNumber":"(205) 555-0101","DateOfBirth":"1964-02-22 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"panit@tailspintoys.com","PreferredName":"Panit"}, + {"Gender":"Female","FullName":"Bhavani Bhowmick","PersonID":245,"FaxNumber":"(215) 555-0101","DateOfBirth":"1959-05-28 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"bhavani@tailspintoys.com","PreferredName":"Bhavani"}, + {"Gender":"Female","FullName":"Ivica Debeljak","PersonID":246,"FaxNumber":"(215) 555-0101","DateOfBirth":"1978-11-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ivica@tailspintoys.com","PreferredName":"Ivica"}, + {"Gender":"Female","FullName":"Yasmine Berggren","PersonID":247,"FaxNumber":"(505) 555-0101","DateOfBirth":"1972-01-21 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"yasmine@tailspintoys.com","PreferredName":"Yasmine"}, + {"Gender":"Female","FullName":"Anima Bagchi","PersonID":248,"FaxNumber":"(505) 555-0101","DateOfBirth":"1998-01-11 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"anima@tailspintoys.com","PreferredName":"Anima"}, + {"Gender":"Female","FullName":"Tea Koppel","PersonID":249,"FaxNumber":"(209) 555-0101","DateOfBirth":"1960-05-17 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"tea@tailspintoys.com","PreferredName":"Tea"}, + {"Gender":"Female","FullName":"Bozena Palatova","PersonID":250,"FaxNumber":"(209) 555-0101","DateOfBirth":"1967-09-14 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bozena@tailspintoys.com","PreferredName":"Bozena"}, + {"Gender":"Female","FullName":"Naseem Radan","PersonID":251,"FaxNumber":"(316) 555-0101","DateOfBirth":"1974-11-16 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"naseem@tailspintoys.com","PreferredName":"Naseem"}, + {"Gender":"Female","FullName":"Geza Olteanu","PersonID":252,"FaxNumber":"(316) 555-0101","DateOfBirth":"1980-04-08 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"geza@tailspintoys.com","PreferredName":"Geza"}, + {"Gender":"Female","FullName":"Laboni Deb","PersonID":253,"FaxNumber":"(207) 555-0101","DateOfBirth":"1978-03-15 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"laboni@tailspintoys.com","PreferredName":"Laboni"}, + {"Gender":"Female","FullName":"Antonin Klaus","PersonID":254,"FaxNumber":"(207) 555-0101","DateOfBirth":"1977-12-18 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"antonin@tailspintoys.com","PreferredName":"Antonin"}, + {"Gender":"Female","FullName":"Sung-Hwan Hwang","PersonID":255,"FaxNumber":"(228) 555-0101","DateOfBirth":"1980-07-21 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"sung-hwan@tailspintoys.com","PreferredName":"Sung-Hwan"}, + {"Gender":"Female","FullName":"Reigo Rebane","PersonID":256,"FaxNumber":"(228) 555-0101","DateOfBirth":"1990-07-27 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"reigo@tailspintoys.com","PreferredName":"Reigo"}, + {"Gender":"Female","FullName":"Shiva Pipalia","PersonID":257,"FaxNumber":"(480) 555-0101","DateOfBirth":"1978-12-05 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"shiva@tailspintoys.com","PreferredName":"Shiva"}, + {"Gender":"Female","FullName":"Aishwarya Beniwal","PersonID":258,"FaxNumber":"(480) 555-0101","DateOfBirth":"1976-12-15 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"aishwarya@tailspintoys.com","PreferredName":"Aishwarya"}, + {"Gender":"Female","FullName":"Karie Mercier","PersonID":259,"FaxNumber":"(209) 555-0101","DateOfBirth":"1989-08-10 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"karie@tailspintoys.com","PreferredName":"Karie"}, + {"Gender":"Female","FullName":"Milada Buresova","PersonID":260,"FaxNumber":"(209) 555-0101","DateOfBirth":"1974-02-05 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"milada@tailspintoys.com","PreferredName":"Milada"}, + {"Gender":"Female","FullName":"Bhanu Thota","PersonID":261,"FaxNumber":"(314) 555-0101","DateOfBirth":"1963-10-26 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"bhanu@tailspintoys.com","PreferredName":"Bhanu"}, + {"Gender":"Female","FullName":"Cyrus Poursokh","PersonID":262,"FaxNumber":"(314) 555-0101","DateOfBirth":"1979-09-24 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"cyrus@tailspintoys.com","PreferredName":"Cyrus"}, + {"Gender":"Female","FullName":"Ae-Cha Joo","PersonID":263,"FaxNumber":"(209) 555-0101","DateOfBirth":"1993-12-23 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"ae-cha@tailspintoys.com","PreferredName":"Ae-Cha"}, + {"Gender":"Female","FullName":"Jawid Pourali","PersonID":264,"FaxNumber":"(209) 555-0101","DateOfBirth":"1964-06-26 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"jawid@tailspintoys.com","PreferredName":"Jawid"}, + {"Gender":"Female","FullName":"Dinara Saparkyzy","PersonID":265,"FaxNumber":"(219) 555-0101","DateOfBirth":"1957-03-06 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"dinara@tailspintoys.com","PreferredName":"Dinara"}, + {"Gender":"Female","FullName":"Karel Sedlar","PersonID":266,"FaxNumber":"(219) 555-0101","DateOfBirth":"1952-06-13 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"karel@tailspintoys.com","PreferredName":"Karel"}, + {"Gender":"Female","FullName":"Adam Dvorak","PersonID":267,"FaxNumber":"(239) 555-0101","DateOfBirth":"1966-07-21 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"adam@tailspintoys.com","PreferredName":"Adam"}, + {"Gender":"Female","FullName":"Dhanishta Vankayala","PersonID":268,"FaxNumber":"(239) 555-0101","DateOfBirth":"1955-03-20 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"dhanishta@tailspintoys.com","PreferredName":"Dhanishta"}, + {"Gender":"Female","FullName":"Ingrida Celmina","PersonID":269,"FaxNumber":"(316) 555-0101","DateOfBirth":"1973-12-23 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"ingrida@tailspintoys.com","PreferredName":"Ingrida"}, + {"Gender":"Female","FullName":"Be Dang","PersonID":270,"FaxNumber":"(316) 555-0101","DateOfBirth":"1997-09-10 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"be@tailspintoys.com","PreferredName":"Be"}, + {"Gender":"Female","FullName":"Jae-Hwa Jang","PersonID":271,"FaxNumber":"(505) 555-0101","DateOfBirth":"1969-07-13 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"jae-hwa@tailspintoys.com","PreferredName":"Jae-Hwa"}, + {"Gender":"Female","FullName":"Clara Cunha","PersonID":272,"FaxNumber":"(505) 555-0101","DateOfBirth":"1984-10-07 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"clara@tailspintoys.com","PreferredName":"Clara"}, + {"Gender":"Female","FullName":"Duck-Hwan Bae","PersonID":273,"FaxNumber":"(803) 555-0101","DateOfBirth":"1962-07-03 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"duck-hwan@tailspintoys.com","PreferredName":"Duck-Hwan"}, + {"Gender":"Female","FullName":"Surya Mishra","PersonID":274,"FaxNumber":"(803) 555-0101","DateOfBirth":"1959-06-15 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"surya@tailspintoys.com","PreferredName":"Surya"}, + {"Gender":"Female","FullName":"Jagoda Vasiljevic","PersonID":275,"FaxNumber":"(252) 555-0101","DateOfBirth":"1953-04-27 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"jagoda@tailspintoys.com","PreferredName":"Jagoda"}, + {"Gender":"Female","FullName":"Eero Raud","PersonID":276,"FaxNumber":"(252) 555-0101","DateOfBirth":"1962-06-29 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"eero@tailspintoys.com","PreferredName":"Eero"}, + {"Gender":"Female","FullName":"Toma Nastase","PersonID":277,"FaxNumber":"(787) 555-0101","DateOfBirth":"1960-12-08 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"toma@tailspintoys.com","PreferredName":"Toma"}, + {"Gender":"Female","FullName":"Arjuna Haldar","PersonID":278,"FaxNumber":"(787) 555-0101","DateOfBirth":"1992-01-12 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"arjuna@tailspintoys.com","PreferredName":"Arjuna"}, + {"Gender":"Female","FullName":"Valerio Cardoso","PersonID":279,"FaxNumber":"(385) 555-0101","DateOfBirth":"1995-02-18 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"valerio@tailspintoys.com","PreferredName":"Valerio"}, + {"Gender":"Female","FullName":"Zac Wintle","PersonID":280,"FaxNumber":"(385) 555-0101","DateOfBirth":"1988-12-02 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"zac@tailspintoys.com","PreferredName":"Zac"}, + {"Gender":"Female","FullName":"Ileana Aguilar","PersonID":281,"FaxNumber":"(207) 555-0101","DateOfBirth":"1975-11-11 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"ileana@tailspintoys.com","PreferredName":"Ileana"}, + {"Gender":"Female","FullName":"Cai Nguyen","PersonID":282,"FaxNumber":"(207) 555-0101","DateOfBirth":"1971-03-20 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"cai@tailspintoys.com","PreferredName":"Cai"}, + {"Gender":"Female","FullName":"Tjasa Weitzer","PersonID":283,"FaxNumber":"(229) 555-0101","DateOfBirth":"1990-08-30 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"tjasa@tailspintoys.com","PreferredName":"Tjasa"}, + {"Gender":"Female","FullName":"Shefali Bose","PersonID":284,"FaxNumber":"(229) 555-0101","DateOfBirth":"1997-02-23 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"shefali@tailspintoys.com","PreferredName":"Shefali"}, + {"Gender":"Female","FullName":"Lucas Van Veenen","PersonID":285,"FaxNumber":"(216) 555-0101","DateOfBirth":"1995-07-02 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"lucas@tailspintoys.com","PreferredName":"Lucas"}, + {"Gender":"Female","FullName":"Farzana Saidi","PersonID":286,"FaxNumber":"(216) 555-0101","DateOfBirth":"1965-07-23 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"farzana@tailspintoys.com","PreferredName":"Farzana"}, + {"Gender":"Female","FullName":"Steven Frasier","PersonID":287,"FaxNumber":"(218) 555-0101","DateOfBirth":"1955-02-24 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"steven@tailspintoys.com","PreferredName":"Steven"}, + {"Gender":"Female","FullName":"Amaranaath Muppavarapu","PersonID":288,"FaxNumber":"(218) 555-0101","DateOfBirth":"1979-03-08 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"amaranaath@tailspintoys.com","PreferredName":"Amaranaath"}, + {"Gender":"Female","FullName":"Mauri Enestam","PersonID":289,"FaxNumber":"(303) 555-0101","DateOfBirth":"1983-01-12 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"mauri@tailspintoys.com","PreferredName":"Mauri"}, + {"Gender":"Female","FullName":"Lakshmi Nair","PersonID":290,"FaxNumber":"(303) 555-0101","DateOfBirth":"1969-04-14 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"lakshmi@tailspintoys.com","PreferredName":"Lakshmi"}, + {"Gender":"Female","FullName":"Ella Zvirbule","PersonID":291,"FaxNumber":"(212) 555-0101","DateOfBirth":"1966-12-06 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"ella@tailspintoys.com","PreferredName":"Ella"}, + {"Gender":"Female","FullName":"Vicente Chávez","PersonID":292,"FaxNumber":"(212) 555-0101","DateOfBirth":"1983-05-06 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"vicente@tailspintoys.com","PreferredName":"Vicente"}, + {"Gender":"Female","FullName":"Sevim Aydın","PersonID":293,"FaxNumber":"(216) 555-0101","DateOfBirth":"1980-12-04 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"sevim@tailspintoys.com","PreferredName":"Sevim"}, + {"Gender":"Female","FullName":"Tamer Ayhan","PersonID":294,"FaxNumber":"(216) 555-0101","DateOfBirth":"1965-01-01 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"tamer@tailspintoys.com","PreferredName":"Tamer"}, + {"Gender":"Female","FullName":"Blanka Stavinohova","PersonID":295,"FaxNumber":"(304) 555-0101","DateOfBirth":"1976-08-15 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"blanka@tailspintoys.com","PreferredName":"Blanka"}, + {"Gender":"Female","FullName":"Josefa Diaz","PersonID":296,"FaxNumber":"(304) 555-0101","DateOfBirth":"1996-05-19 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"josefa@tailspintoys.com","PreferredName":"Josefa"}, + {"Gender":"Female","FullName":"Akanksha Iyengar","PersonID":297,"FaxNumber":"(201) 555-0101","DateOfBirth":"1986-05-30 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"akanksha@tailspintoys.com","PreferredName":"Akanksha"}, + {"Gender":"Female","FullName":"Markus Kantee","PersonID":298,"FaxNumber":"(201) 555-0101","DateOfBirth":"1972-11-09 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"markus@tailspintoys.com","PreferredName":"Markus"}, + {"Gender":"Female","FullName":"Kertu Smirnov","PersonID":299,"FaxNumber":"(206) 555-0101","DateOfBirth":"1958-08-20 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"kertu@tailspintoys.com","PreferredName":"Kertu"}, + {"Gender":"Female","FullName":"Lovro Kulaga","PersonID":300,"FaxNumber":"(206) 555-0101","DateOfBirth":"1969-09-28 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"lovro@tailspintoys.com","PreferredName":"Lovro"}, + {"Gender":"Female","FullName":"Jure Grabensek","PersonID":301,"FaxNumber":"(303) 555-0101","DateOfBirth":"1964-07-31 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"jure@tailspintoys.com","PreferredName":"Jure"}, + {"Gender":"Female","FullName":"Chompunut Jetjirawat","PersonID":302,"FaxNumber":"(303) 555-0101","DateOfBirth":"1966-04-26 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"chompunut@tailspintoys.com","PreferredName":"Chompunut"}, + {"Gender":"Female","FullName":"Javiera Madera","PersonID":303,"FaxNumber":"(231) 555-0101","DateOfBirth":"1965-08-27 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"javiera@tailspintoys.com","PreferredName":"Javiera"}, + {"Gender":"Female","FullName":"Geetanjali Bagchi","PersonID":304,"FaxNumber":"(231) 555-0101","DateOfBirth":"1957-05-07 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"geetanjali@tailspintoys.com","PreferredName":"Geetanjali"}, + {"Gender":"Female","FullName":"Aija Mottola","PersonID":305,"FaxNumber":"(201) 555-0101","DateOfBirth":"1975-10-30 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"aija@tailspintoys.com","PreferredName":"Aija"}, + {"Gender":"Female","FullName":"Elli Berg","PersonID":306,"FaxNumber":"(201) 555-0101","DateOfBirth":"1974-11-19 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"elli@tailspintoys.com","PreferredName":"Elli"}, + {"Gender":"Female","FullName":"Darshan Gupta","PersonID":307,"FaxNumber":"(907) 555-0101","DateOfBirth":"1974-05-12 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"darshan@tailspintoys.com","PreferredName":"Darshan"}, + {"Gender":"Female","FullName":"Prem Reddy","PersonID":308,"FaxNumber":"(907) 555-0101","DateOfBirth":"1997-08-01 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"prem@tailspintoys.com","PreferredName":"Prem"}, + {"Gender":"Female","FullName":"Akanksha Sarma","PersonID":309,"FaxNumber":"(208) 555-0101","DateOfBirth":"1950-10-11 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"akanksha@tailspintoys.com","PreferredName":"Akanksha"}, + {"Gender":"Female","FullName":"Edward Alfred","PersonID":310,"FaxNumber":"(208) 555-0101","DateOfBirth":"1978-07-23 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"edward@tailspintoys.com","PreferredName":"Edward"}, + {"Gender":"Female","FullName":"Aino Kallas","PersonID":311,"FaxNumber":"(212) 555-0101","DateOfBirth":"1976-12-10 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"aino@tailspintoys.com","PreferredName":"Aino"}, + {"Gender":"Female","FullName":"Dhaaruni Vinjamuri","PersonID":312,"FaxNumber":"(212) 555-0101","DateOfBirth":"1977-12-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"dhaaruni@tailspintoys.com","PreferredName":"Dhaaruni"}, + {"Gender":"Female","FullName":"An Dung Phung","PersonID":313,"FaxNumber":"(239) 555-0101","DateOfBirth":"1996-08-05 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"an dung@tailspintoys.com","PreferredName":"An Dung"}, + {"Gender":"Female","FullName":"Ioana Ibanescu","PersonID":314,"FaxNumber":"(239) 555-0101","DateOfBirth":"1966-12-23 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"ioana@tailspintoys.com","PreferredName":"Ioana"}, + {"Gender":"Female","FullName":"Gaurav Sikdar","PersonID":315,"FaxNumber":"(314) 555-0101","DateOfBirth":"1954-08-07 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"gaurav@tailspintoys.com","PreferredName":"Gaurav"}, + {"Gender":"Female","FullName":"Christian Berggren","PersonID":316,"FaxNumber":"(314) 555-0101","DateOfBirth":"1975-08-21 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"christian@tailspintoys.com","PreferredName":"Christian"}, + {"Gender":"Female","FullName":"Anirban Sen","PersonID":317,"FaxNumber":"(702) 555-0101","DateOfBirth":"1991-12-31 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"anirban@tailspintoys.com","PreferredName":"Anirban"}, + {"Gender":"Female","FullName":"Joel Koivisto","PersonID":318,"FaxNumber":"(702) 555-0101","DateOfBirth":"1969-06-04 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"joel@tailspintoys.com","PreferredName":"Joel"}, + {"Gender":"Female","FullName":"Chandrakanta Benjaree","PersonID":319,"FaxNumber":"(385) 555-0101","DateOfBirth":"1966-04-04 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"chandrakanta@tailspintoys.com","PreferredName":"Chandrakanta"}, + {"Gender":"Female","FullName":"Joy Das","PersonID":320,"FaxNumber":"(385) 555-0101","DateOfBirth":"1990-09-15 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"joy@tailspintoys.com","PreferredName":"Joy"}, + {"Gender":"Female","FullName":"Badari Chadalavada","PersonID":321,"FaxNumber":"(252) 555-0101","DateOfBirth":"1981-05-15 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"badari@tailspintoys.com","PreferredName":"Badari"}, + {"Gender":"Female","FullName":"Zala Ude","PersonID":322,"FaxNumber":"(252) 555-0101","DateOfBirth":"1970-12-03 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"zala@tailspintoys.com","PreferredName":"Zala"}, + {"Gender":"Female","FullName":"Gabriele Udinesi","PersonID":323,"FaxNumber":"(803) 555-0101","DateOfBirth":"1994-02-03 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"gabriele@tailspintoys.com","PreferredName":"Gabriele"}, + {"Gender":"Female","FullName":"Murugan Dewangan","PersonID":324,"FaxNumber":"(803) 555-0101","DateOfBirth":"1996-02-10 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"murugan@tailspintoys.com","PreferredName":"Murugan"}, + {"Gender":"Female","FullName":"Malay PrabhupÄda","PersonID":325,"FaxNumber":"(316) 555-0101","DateOfBirth":"1994-06-21 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"malay@tailspintoys.com","PreferredName":"Malay"}, + {"Gender":"Female","FullName":"Nghi Ly","PersonID":326,"FaxNumber":"(316) 555-0101","DateOfBirth":"1981-03-22 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"nghi@tailspintoys.com","PreferredName":"Nghi"}, + {"Gender":"Female","FullName":"Hedi Koppel","PersonID":327,"FaxNumber":"(314) 555-0101","DateOfBirth":"1961-03-18 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"hedi@tailspintoys.com","PreferredName":"Hedi"}, + {"Gender":"Female","FullName":"Teodors Klavins","PersonID":328,"FaxNumber":"(314) 555-0101","DateOfBirth":"1981-03-06 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"teodors@tailspintoys.com","PreferredName":"Teodors"}, + {"Gender":"Female","FullName":"Denisa Ioveanu","PersonID":329,"FaxNumber":"(907) 555-0101","DateOfBirth":"1992-07-11 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"denisa@tailspintoys.com","PreferredName":"Denisa"}, + {"Gender":"Female","FullName":"Cosmin Nutiu","PersonID":330,"FaxNumber":"(907) 555-0101","DateOfBirth":"1992-06-20 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"cosmin@tailspintoys.com","PreferredName":"Cosmin"}, + {"Gender":"Female","FullName":"Vaclav Polaskova","PersonID":331,"FaxNumber":"(216) 555-0101","DateOfBirth":"1952-09-03 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"vaclav@tailspintoys.com","PreferredName":"Vaclav"}, + {"Gender":"Female","FullName":"Georg Valbe","PersonID":332,"FaxNumber":"(216) 555-0101","DateOfBirth":"1970-07-06 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"georg@tailspintoys.com","PreferredName":"Georg"}, + {"Gender":"Female","FullName":"Pramod Nishad","PersonID":333,"FaxNumber":"(225) 555-0101","DateOfBirth":"1951-09-26 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"pramod@tailspintoys.com","PreferredName":"Pramod"}, + {"Gender":"Female","FullName":"Avani Aggarwal","PersonID":334,"FaxNumber":"(225) 555-0101","DateOfBirth":"1973-03-02 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"avani@tailspintoys.com","PreferredName":"Avani"}, + {"Gender":"Female","FullName":"Prasong Tuntayakul","PersonID":335,"FaxNumber":"(201) 555-0101","DateOfBirth":"1996-10-20 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"prasong@tailspintoys.com","PreferredName":"Prasong"}, + {"Gender":"Female","FullName":"Mariela Pasek","PersonID":336,"FaxNumber":"(201) 555-0101","DateOfBirth":"1969-02-13 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"mariela@tailspintoys.com","PreferredName":"Mariela"}, + {"Gender":"Female","FullName":"Aija Zvaigzne","PersonID":337,"FaxNumber":"(205) 555-0101","DateOfBirth":"1950-02-22 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"aija@tailspintoys.com","PreferredName":"Aija"}, + {"Gender":"Female","FullName":"Dharanikumaar Sonti","PersonID":338,"FaxNumber":"(205) 555-0101","DateOfBirth":"1962-08-01 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"dharanikumaar@tailspintoys.com","PreferredName":"Dharanikumaar"}, + {"Gender":"Female","FullName":"Gilbert Pelland","PersonID":339,"FaxNumber":"(406) 555-0101","DateOfBirth":"1960-10-08 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"gilbert@tailspintoys.com","PreferredName":"Gilbert"}, + {"Gender":"Female","FullName":"Ngoc Cao","PersonID":340,"FaxNumber":"(406) 555-0101","DateOfBirth":"1992-11-25 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"ngoc@tailspintoys.com","PreferredName":"Ngoc"}, + {"Gender":"Female","FullName":"Marcella Napolitani","PersonID":341,"FaxNumber":"(262) 555-0101","DateOfBirth":"1966-11-22 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"marcella@tailspintoys.com","PreferredName":"Marcella"}, + {"Gender":"Female","FullName":"Pavol Oravec","PersonID":342,"FaxNumber":"(262) 555-0101","DateOfBirth":"1987-12-17 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"pavol@tailspintoys.com","PreferredName":"Pavol"}, + {"Gender":"Female","FullName":"Femke Hollenberg","PersonID":343,"FaxNumber":"(218) 555-0101","DateOfBirth":"1996-05-25 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"femke@tailspintoys.com","PreferredName":"Femke"}, + {"Gender":"Female","FullName":"Roman Kubat","PersonID":344,"FaxNumber":"(218) 555-0101","DateOfBirth":"1981-12-28 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"roman@tailspintoys.com","PreferredName":"Roman"}, + {"Gender":"Female","FullName":"Brita Jarvi","PersonID":345,"FaxNumber":"(212) 555-0101","DateOfBirth":"1980-11-05 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"brita@tailspintoys.com","PreferredName":"Brita"}, + {"Gender":"Female","FullName":"Lucie Hrdlickova","PersonID":346,"FaxNumber":"(212) 555-0101","DateOfBirth":"1956-04-30 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"lucie@tailspintoys.com","PreferredName":"Lucie"}, + {"Gender":"Female","FullName":"Donato Araujo","PersonID":347,"FaxNumber":"(480) 555-0101","DateOfBirth":"1984-12-28 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"donato@tailspintoys.com","PreferredName":"Donato"}, + {"Gender":"Female","FullName":"Alaine Berthelette","PersonID":348,"FaxNumber":"(480) 555-0101","DateOfBirth":"1964-01-02 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"alaine@tailspintoys.com","PreferredName":"Alaine"}, + {"Gender":"Female","FullName":"Aleksander Jarvi","PersonID":349,"FaxNumber":"(406) 555-0101","DateOfBirth":"1958-03-16 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"aleksander@tailspintoys.com","PreferredName":"Aleksander"}, + {"Gender":"Female","FullName":"Kurt Konecny","PersonID":350,"FaxNumber":"(406) 555-0101","DateOfBirth":"1960-01-02 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"kurt@tailspintoys.com","PreferredName":"Kurt"}, + {"Gender":"Female","FullName":"Malati Shenoy","PersonID":351,"FaxNumber":"(218) 555-0101","DateOfBirth":"1951-06-08 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"malati@tailspintoys.com","PreferredName":"Malati"}, + {"Gender":"Female","FullName":"Duong Duong","PersonID":352,"FaxNumber":"(218) 555-0101","DateOfBirth":"1985-04-28 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"duong@tailspintoys.com","PreferredName":"Duong"}, + {"Gender":"Female","FullName":"Gui-Hyun Ji","PersonID":353,"FaxNumber":"(218) 555-0101","DateOfBirth":"1966-12-23 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"gui-hyun@tailspintoys.com","PreferredName":"Gui-Hyun"}, + {"Gender":"Female","FullName":"Karl Kangur","PersonID":354,"FaxNumber":"(218) 555-0101","DateOfBirth":"1979-03-19 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"karl@tailspintoys.com","PreferredName":"Karl"}, + {"Gender":"Female","FullName":"Michal Polaskova","PersonID":355,"FaxNumber":"(262) 555-0101","DateOfBirth":"1982-08-07 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"michal@tailspintoys.com","PreferredName":"Michal"}, + {"Gender":"Female","FullName":"Debendra Chakraborty","PersonID":356,"FaxNumber":"(262) 555-0101","DateOfBirth":"1972-08-10 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"debendra@tailspintoys.com","PreferredName":"Debendra"}, + {"Gender":"Female","FullName":"Dilara Ayhan","PersonID":357,"FaxNumber":"(210) 555-0101","DateOfBirth":"1963-12-25 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"dilara@tailspintoys.com","PreferredName":"Dilara"}, + {"Gender":"Female","FullName":"Virgiliu Vladu","PersonID":358,"FaxNumber":"(210) 555-0101","DateOfBirth":"1961-07-24 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"virgiliu@tailspintoys.com","PreferredName":"Virgiliu"}, + {"Gender":"Female","FullName":"Peter Macias","PersonID":359,"FaxNumber":"(205) 555-0101","DateOfBirth":"1993-03-23 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"peter@tailspintoys.com","PreferredName":"Peter"}, + {"Gender":"Female","FullName":"Nasrin Fard","PersonID":360,"FaxNumber":"(205) 555-0101","DateOfBirth":"1958-08-19 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"nasrin@tailspintoys.com","PreferredName":"Nasrin"}, + {"Gender":"Female","FullName":"Kurt Lukes","PersonID":361,"FaxNumber":"(225) 555-0101","DateOfBirth":"1974-06-15 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"kurt@tailspintoys.com","PreferredName":"Kurt"}, + {"Gender":"Female","FullName":"Daman Devulapalli","PersonID":362,"FaxNumber":"(225) 555-0101","DateOfBirth":"1975-02-10 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"daman@tailspintoys.com","PreferredName":"Daman"}, + {"Gender":"Female","FullName":"Beatrise Bite","PersonID":363,"FaxNumber":"(218) 555-0101","DateOfBirth":"1954-08-25 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"beatrise@tailspintoys.com","PreferredName":"Beatrise"}, + {"Gender":"Female","FullName":"Hele Semjonov","PersonID":364,"FaxNumber":"(218) 555-0101","DateOfBirth":"1953-11-30 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"hele@tailspintoys.com","PreferredName":"Hele"}, + {"Gender":"Female","FullName":"Bishwanath Ghosh","PersonID":365,"FaxNumber":"(701) 555-0101","DateOfBirth":"1968-09-26 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"bishwanath@tailspintoys.com","PreferredName":"Bishwanath"}, + {"Gender":"Female","FullName":"Gasper Jovicevic","PersonID":366,"FaxNumber":"(701) 555-0101","DateOfBirth":"1972-02-04 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"gasper@tailspintoys.com","PreferredName":"Gasper"}, + {"Gender":"Female","FullName":"Gianguido Lucchesi","PersonID":367,"FaxNumber":"(303) 555-0101","DateOfBirth":"1961-02-04 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"gianguido@tailspintoys.com","PreferredName":"Gianguido"}, + {"Gender":"Female","FullName":"Harihar Chatterjee","PersonID":368,"FaxNumber":"(303) 555-0101","DateOfBirth":"1967-11-01 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"harihar@tailspintoys.com","PreferredName":"Harihar"}, + {"Gender":"Female","FullName":"Nu Bach","PersonID":369,"FaxNumber":"(212) 555-0101","DateOfBirth":"1965-03-25 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"nu@tailspintoys.com","PreferredName":"Nu"}, + {"Gender":"Female","FullName":"Gautama Reddy","PersonID":370,"FaxNumber":"(212) 555-0101","DateOfBirth":"1996-10-20 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"gautama@tailspintoys.com","PreferredName":"Gautama"}, + {"Gender":"Female","FullName":"Ivonna Ene","PersonID":371,"FaxNumber":"(702) 555-0101","DateOfBirth":"1982-12-26 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"ivonna@tailspintoys.com","PreferredName":"Ivonna"}, + {"Gender":"Female","FullName":"Girish Banerjee","PersonID":372,"FaxNumber":"(702) 555-0101","DateOfBirth":"1982-06-08 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"girish@tailspintoys.com","PreferredName":"Girish"}, + {"Gender":"Female","FullName":"Ceyhun sahin","PersonID":373,"FaxNumber":"(215) 555-0101","DateOfBirth":"1989-11-25 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ceyhun@tailspintoys.com","PreferredName":"Ceyhun"}, + {"Gender":"Female","FullName":"Dhir Bhattacharya","PersonID":374,"FaxNumber":"(215) 555-0101","DateOfBirth":"1955-08-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"dhir@tailspintoys.com","PreferredName":"Dhir"}, + {"Gender":"Female","FullName":"Tian Peng","PersonID":375,"FaxNumber":"(203) 555-0101","DateOfBirth":"1953-09-24 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"tian@tailspintoys.com","PreferredName":"Tian"}, + {"Gender":"Female","FullName":"Mariano Costa","PersonID":376,"FaxNumber":"(203) 555-0101","DateOfBirth":"1957-03-20 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"mariano@tailspintoys.com","PreferredName":"Mariano"}, + {"Gender":"Female","FullName":"Vlastimil Bohuslav","PersonID":377,"FaxNumber":"(210) 555-0101","DateOfBirth":"1994-09-16 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"vlastimil@tailspintoys.com","PreferredName":"Vlastimil"}, + {"Gender":"Female","FullName":"Beau Boule","PersonID":378,"FaxNumber":"(210) 555-0101","DateOfBirth":"1975-01-13 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"beau @tailspintoys.com","PreferredName":"Beau "}, + {"Gender":"Female","FullName":"Nejc Vosnik","PersonID":379,"FaxNumber":"(210) 555-0101","DateOfBirth":"1976-08-18 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"nejc@tailspintoys.com","PreferredName":"Nejc"}, + {"Gender":"Female","FullName":"Amalendu Veturi","PersonID":380,"FaxNumber":"(210) 555-0101","DateOfBirth":"1955-12-22 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"amalendu@tailspintoys.com","PreferredName":"Amalendu"}, + {"Gender":"Female","FullName":"Anindo Mazumdar","PersonID":381,"FaxNumber":"(210) 555-0101","DateOfBirth":"1979-01-13 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"anindo@tailspintoys.com","PreferredName":"Anindo"}, + {"Gender":"Female","FullName":"Tarja Saikkonen","PersonID":382,"FaxNumber":"(210) 555-0101","DateOfBirth":"1974-05-13 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"tarja@tailspintoys.com","PreferredName":"Tarja"}, + {"Gender":"Female","FullName":"Nils Balodis","PersonID":383,"FaxNumber":"(307) 555-0101","DateOfBirth":"1972-04-16 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"nils@tailspintoys.com","PreferredName":"Nils"}, + {"Gender":"Female","FullName":"Bernadette Potvin","PersonID":384,"FaxNumber":"(307) 555-0101","DateOfBirth":"1974-10-26 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"bernadette @tailspintoys.com","PreferredName":"Bernadette "}, + {"Gender":"Female","FullName":"Daniella Barbosa","PersonID":385,"FaxNumber":"(212) 555-0101","DateOfBirth":"1974-11-27 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"daniella@tailspintoys.com","PreferredName":"Daniella"}, + {"Gender":"Female","FullName":"Nancy Hansson","PersonID":386,"FaxNumber":"(212) 555-0101","DateOfBirth":"1979-07-15 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"nancy@tailspintoys.com","PreferredName":"Nancy"}, + {"Gender":"Female","FullName":"Raymond Levesque","PersonID":387,"FaxNumber":"(201) 555-0101","DateOfBirth":"1982-09-24 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"raymond@tailspintoys.com","PreferredName":"Raymond"}, + {"Gender":"Female","FullName":"Linda Fisher","PersonID":388,"FaxNumber":"(201) 555-0101","DateOfBirth":"1981-08-26 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"linda@tailspintoys.com","PreferredName":"Linda"}, + {"Gender":"Female","FullName":"Raymond Desforges","PersonID":389,"FaxNumber":"(505) 555-0101","DateOfBirth":"1978-09-27 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"raymond@tailspintoys.com","PreferredName":"Raymond"}, + {"Gender":"Female","FullName":"Stern Neumann","PersonID":390,"FaxNumber":"(505) 555-0101","DateOfBirth":"1950-08-17 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"stern@tailspintoys.com","PreferredName":"Stern"}, + {"Gender":"Female","FullName":"Raju Atluri","PersonID":391,"FaxNumber":"(212) 555-0101","DateOfBirth":"1980-05-19 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"raju@tailspintoys.com","PreferredName":"Raju"}, + {"Gender":"Female","FullName":"Cezar Preda","PersonID":392,"FaxNumber":"(212) 555-0101","DateOfBirth":"1989-01-07 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"cezar@tailspintoys.com","PreferredName":"Cezar"}, + {"Gender":"Female","FullName":"Matyas Bohuslav","PersonID":393,"FaxNumber":"(239) 555-0101","DateOfBirth":"1997-11-27 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"matyas@tailspintoys.com","PreferredName":"Matyas"}, + {"Gender":"Female","FullName":"Ambaajeeraav Ghattamaneni","PersonID":394,"FaxNumber":"(239) 555-0101","DateOfBirth":"1963-07-13 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"ambaajeeraav@tailspintoys.com","PreferredName":"Ambaajeeraav"}, + {"Gender":"Female","FullName":"Julio Correa","PersonID":395,"FaxNumber":"(505) 555-0101","DateOfBirth":"1951-03-28 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"julio@tailspintoys.com","PreferredName":"Julio"}, + {"Gender":"Female","FullName":"Hamsapriya Nandamuri","PersonID":396,"FaxNumber":"(505) 555-0101","DateOfBirth":"1994-12-01 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"hamsapriya@tailspintoys.com","PreferredName":"Hamsapriya"}, + {"Gender":"Female","FullName":"Banshari De","PersonID":397,"FaxNumber":"(206) 555-0101","DateOfBirth":"1955-04-28 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"banshari@tailspintoys.com","PreferredName":"Banshari"}, + {"Gender":"Female","FullName":"Sudhir Yadav","PersonID":398,"FaxNumber":"(206) 555-0101","DateOfBirth":"1959-11-18 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"sudhir@tailspintoys.com","PreferredName":"Sudhir"}, + {"Gender":"Female","FullName":"Ngai Lam","PersonID":399,"FaxNumber":"(215) 555-0101","DateOfBirth":"1952-10-30 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ngai@tailspintoys.com","PreferredName":"Ngai"}, + {"Gender":"Female","FullName":"Camille Hetu","PersonID":400,"FaxNumber":"(215) 555-0101","DateOfBirth":"1951-06-26 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"camille@tailspintoys.com","PreferredName":"Camille"}, + {"Gender":"Female","FullName":"Hyun-Doo Song","PersonID":401,"FaxNumber":"(262) 555-0101","DateOfBirth":"1957-07-21 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"hyun-doo@tailspintoys.com","PreferredName":"Hyun-Doo"}, + {"Gender":"Female","FullName":"Bahadır Korkmaz","PersonID":402,"FaxNumber":"(262) 555-0101","DateOfBirth":"1987-11-04 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"bahad@tailspintoys.com","PreferredName":"Bahadır"}, + {"Gender":"Female","FullName":"Gabriela Srbova","PersonID":403,"FaxNumber":"(319) 555-0101","DateOfBirth":"1960-03-19 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"gabriela@tailspintoys.com","PreferredName":"Gabriela"}, + {"Gender":"Female","FullName":"Priya kaushal","PersonID":404,"FaxNumber":"(319) 555-0101","DateOfBirth":"1994-08-12 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"priya@tailspintoys.com","PreferredName":"Priya"}, + {"Gender":"Female","FullName":"Serkan senturk","PersonID":405,"FaxNumber":"(702) 555-0101","DateOfBirth":"1975-06-21 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"serkan@tailspintoys.com","PreferredName":"Serkan"}, + {"Gender":"Female","FullName":"Fatemeh Javan","PersonID":406,"FaxNumber":"(702) 555-0101","DateOfBirth":"1962-12-20 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"fatemeh@tailspintoys.com","PreferredName":"Fatemeh"}, + {"Gender":"Female","FullName":"Aahlada Thota","PersonID":407,"FaxNumber":"(215) 555-0101","DateOfBirth":"1959-02-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"aahlada@tailspintoys.com","PreferredName":"Aahlada"}, + {"Gender":"Female","FullName":"Marten Keskkula","PersonID":408,"FaxNumber":"(215) 555-0101","DateOfBirth":"1983-06-09 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"marten@tailspintoys.com","PreferredName":"Marten"}, + {"Gender":"Female","FullName":"Ayberk sahin","PersonID":409,"FaxNumber":"(308) 555-0101","DateOfBirth":"1991-07-25 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"ayberk@tailspintoys.com","PreferredName":"Ayberk"}, + {"Gender":"Female","FullName":"Magda Ciora","PersonID":410,"FaxNumber":"(308) 555-0101","DateOfBirth":"1981-08-24 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"magda@tailspintoys.com","PreferredName":"Magda"}, + {"Gender":"Female","FullName":"Kaan Tekin","PersonID":411,"FaxNumber":"(239) 555-0101","DateOfBirth":"1954-04-18 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"kaan@tailspintoys.com","PreferredName":"Kaan"}, + {"Gender":"Female","FullName":"Harshini Kommineni","PersonID":412,"FaxNumber":"(239) 555-0101","DateOfBirth":"1981-08-30 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"harshini@tailspintoys.com","PreferredName":"Harshini"}, + {"Gender":"Female","FullName":"Lata Khandke","PersonID":413,"FaxNumber":"(216) 555-0101","DateOfBirth":"1981-12-01 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"lata@tailspintoys.com","PreferredName":"Lata"}, + {"Gender":"Female","FullName":"Emil Nutiu","PersonID":414,"FaxNumber":"(216) 555-0101","DateOfBirth":"1950-11-05 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"emil@tailspintoys.com","PreferredName":"Emil"}, + {"Gender":"Female","FullName":"Truman Eder","PersonID":415,"FaxNumber":"(225) 555-0101","DateOfBirth":"1966-09-04 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"truman@tailspintoys.com","PreferredName":"Truman"}, + {"Gender":"Female","FullName":"Lale Javan","PersonID":416,"FaxNumber":"(225) 555-0101","DateOfBirth":"1983-03-14 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"lale@tailspintoys.com","PreferredName":"Lale"}, + {"Gender":"Female","FullName":"Lorraine Paulet","PersonID":417,"FaxNumber":"(458) 555-0101","DateOfBirth":"1957-06-10 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"lorraine@tailspintoys.com","PreferredName":"Lorraine"}, + {"Gender":"Female","FullName":"Yusuf Johansson","PersonID":418,"FaxNumber":"(458) 555-0101","DateOfBirth":"1959-10-27 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"yusuf@tailspintoys.com","PreferredName":"Yusuf"}, + {"Gender":"Female","FullName":"Biplab De","PersonID":419,"FaxNumber":"(231) 555-0101","DateOfBirth":"1956-09-30 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"biplab@tailspintoys.com","PreferredName":"Biplab"}, + {"Gender":"Female","FullName":"Dhanishta Kidambi","PersonID":420,"FaxNumber":"(231) 555-0101","DateOfBirth":"1964-06-09 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"dhanishta@tailspintoys.com","PreferredName":"Dhanishta"}, + {"Gender":"Female","FullName":"Rachelle Brasseur","PersonID":421,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-08-03 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"rachelle@tailspintoys.com","PreferredName":"Rachelle"}, + {"Gender":"Female","FullName":"Bholanath Das","PersonID":422,"FaxNumber":"(210) 555-0101","DateOfBirth":"1974-01-10 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"bholanath@tailspintoys.com","PreferredName":"Bholanath"}, + {"Gender":"Female","FullName":"Sara Charlton","PersonID":423,"FaxNumber":"(215) 555-0101","DateOfBirth":"1960-10-31 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"sara@tailspintoys.com","PreferredName":"Sara"}, + {"Gender":"Female","FullName":"Libor safranek","PersonID":424,"FaxNumber":"(215) 555-0101","DateOfBirth":"1975-07-21 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"libor@tailspintoys.com","PreferredName":"Libor"}, + {"Gender":"Female","FullName":"Ramesh Mukherjee","PersonID":425,"FaxNumber":"(217) 555-0101","DateOfBirth":"1991-01-02 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"ramesh@tailspintoys.com","PreferredName":"Ramesh"}, + {"Gender":"Female","FullName":"Byung-Hyun Gwak","PersonID":426,"FaxNumber":"(217) 555-0101","DateOfBirth":"1958-07-08 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"byung-hyun@tailspintoys.com","PreferredName":"Byung-Hyun"}, + {"Gender":"Female","FullName":"Ester Ahmadian","PersonID":427,"FaxNumber":"(229) 555-0101","DateOfBirth":"1986-03-10 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"ester@tailspintoys.com","PreferredName":"Ester"}, + {"Gender":"Female","FullName":"Kanika Mazumdar","PersonID":428,"FaxNumber":"(229) 555-0101","DateOfBirth":"1990-05-19 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"kanika@tailspintoys.com","PreferredName":"Kanika"}, + {"Gender":"Female","FullName":"Daniel Magnusson","PersonID":429,"FaxNumber":"(505) 555-0101","DateOfBirth":"1972-04-05 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"daniel@tailspintoys.com","PreferredName":"Daniel"}, + {"Gender":"Female","FullName":"Cemal Dogan","PersonID":430,"FaxNumber":"(505) 555-0101","DateOfBirth":"1991-11-24 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"cemal@tailspintoys.com","PreferredName":"Cemal"}, + {"Gender":"Female","FullName":"Jack Carpenter","PersonID":431,"FaxNumber":"(270) 555-0101","DateOfBirth":"1987-10-18 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"jack@tailspintoys.com","PreferredName":"Jack"}, + {"Gender":"Female","FullName":"Am Lieu","PersonID":432,"FaxNumber":"(270) 555-0101","DateOfBirth":"1979-03-11 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"am@tailspintoys.com","PreferredName":"Am"}, + {"Gender":"Female","FullName":"Thomas Fischer","PersonID":433,"FaxNumber":"(239) 555-0101","DateOfBirth":"1990-01-30 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"thomas@tailspintoys.com","PreferredName":"Thomas"}, + {"Gender":"Female","FullName":"Neil Logan","PersonID":434,"FaxNumber":"(239) 555-0101","DateOfBirth":"1985-10-26 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"neil@tailspintoys.com","PreferredName":"Neil"}, + {"Gender":"Female","FullName":"Viollette Monty","PersonID":435,"FaxNumber":"(803) 555-0101","DateOfBirth":"1977-09-14 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"viollette@tailspintoys.com","PreferredName":"Viollette"}, + {"Gender":"Female","FullName":"Gita Dutta","PersonID":436,"FaxNumber":"(803) 555-0101","DateOfBirth":"1957-07-04 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"gita@tailspintoys.com","PreferredName":"Gita"}, + {"Gender":"Female","FullName":"Alinne Cardoso","PersonID":437,"FaxNumber":"(308) 555-0101","DateOfBirth":"1975-03-13 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"alinne@tailspintoys.com","PreferredName":"Alinne"}, + {"Gender":"Female","FullName":"Uma Pandit","PersonID":438,"FaxNumber":"(308) 555-0101","DateOfBirth":"1976-04-10 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"uma@tailspintoys.com","PreferredName":"Uma"}, + {"Gender":"Female","FullName":"Mani Poddar","PersonID":439,"FaxNumber":"(209) 555-0101","DateOfBirth":"1967-08-07 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"mani@tailspintoys.com","PreferredName":"Mani"}, + {"Gender":"Female","FullName":"Rama Mukaddam","PersonID":440,"FaxNumber":"(209) 555-0101","DateOfBirth":"1987-10-23 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"rama@tailspintoys.com","PreferredName":"Rama"}, + {"Gender":"Female","FullName":"Deakshitulu Mokkapati","PersonID":441,"FaxNumber":"(314) 555-0101","DateOfBirth":"1985-05-01 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"deakshitulu@tailspintoys.com","PreferredName":"Deakshitulu"}, + {"Gender":"Female","FullName":"Tereza PinÄakova","PersonID":442,"FaxNumber":"(314) 555-0101","DateOfBirth":"1987-04-18 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"tereza@tailspintoys.com","PreferredName":"Tereza"}, + {"Gender":"Female","FullName":"Cezar Pavel","PersonID":443,"FaxNumber":"(303) 555-0101","DateOfBirth":"1959-01-27 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"cezar@tailspintoys.com","PreferredName":"Cezar"}, + {"Gender":"Female","FullName":"Bahaar Yekta","PersonID":444,"FaxNumber":"(303) 555-0101","DateOfBirth":"1966-03-23 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"bahaar@tailspintoys.com","PreferredName":"Bahaar"}, + {"Gender":"Female","FullName":"Fanni Benko","PersonID":445,"FaxNumber":"(385) 555-0101","DateOfBirth":"1974-09-18 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"fanni@tailspintoys.com","PreferredName":"Fanni"}, + {"Gender":"Female","FullName":"Amar Dutta","PersonID":446,"FaxNumber":"(385) 555-0101","DateOfBirth":"1968-10-15 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"amar@tailspintoys.com","PreferredName":"Amar"}, + {"Gender":"Female","FullName":"Brenda Morgan","PersonID":447,"FaxNumber":"(206) 555-0101","DateOfBirth":"1954-01-02 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"brenda@tailspintoys.com","PreferredName":"Brenda"}, + {"Gender":"Female","FullName":"Kamal Nakhtare","PersonID":448,"FaxNumber":"(206) 555-0101","DateOfBirth":"1991-12-01 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"kamal@tailspintoys.com","PreferredName":"Kamal"}, + {"Gender":"Female","FullName":"Olga Alexandrova","PersonID":449,"FaxNumber":"(303) 555-0101","DateOfBirth":"1955-11-24 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"olga@wingtiptoys.com","PreferredName":"Olga"}, + {"Gender":"Female","FullName":"Bibi Javan","PersonID":450,"FaxNumber":"(303) 555-0101","DateOfBirth":"1973-04-16 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"bibi@wingtiptoys.com","PreferredName":"Bibi"}, + {"Gender":"Female","FullName":"Maris Baltins","PersonID":451,"FaxNumber":"(215) 555-0101","DateOfBirth":"1975-05-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"maris@wingtiptoys.com","PreferredName":"Maris"}, + {"Gender":"Female","FullName":"Taneli Hahl","PersonID":452,"FaxNumber":"(215) 555-0101","DateOfBirth":"1987-10-11 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"taneli@wingtiptoys.com","PreferredName":"Taneli"}, + {"Gender":"Female","FullName":"Parsa Reuser","PersonID":453,"FaxNumber":"(480) 555-0101","DateOfBirth":"1969-09-06 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"parsa@wingtiptoys.com","PreferredName":"Parsa"}, + {"Gender":"Female","FullName":"Da-eun Kwak","PersonID":454,"FaxNumber":"(480) 555-0101","DateOfBirth":"1953-04-05 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"da-eun@wingtiptoys.com","PreferredName":"Da-eun"}, + {"Gender":"Female","FullName":"Duleep Srivastava","PersonID":455,"FaxNumber":"(215) 555-0101","DateOfBirth":"1977-11-21 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"duleep@wingtiptoys.com","PreferredName":"Duleep"}, + {"Gender":"Female","FullName":"Kurt Balog","PersonID":456,"FaxNumber":"(215) 555-0101","DateOfBirth":"1996-09-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"kurt@wingtiptoys.com","PreferredName":"Kurt"}, + {"Gender":"Female","FullName":"Miran Nikolic","PersonID":457,"FaxNumber":"(217) 555-0101","DateOfBirth":"1981-10-06 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"miran@wingtiptoys.com","PreferredName":"Miran"}, + {"Gender":"Female","FullName":"Indra Mudaliyar","PersonID":458,"FaxNumber":"(217) 555-0101","DateOfBirth":"1991-05-17 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"indra@wingtiptoys.com","PreferredName":"Indra"}, + {"Gender":"Female","FullName":"Calin Bojin","PersonID":459,"FaxNumber":"(205) 555-0101","DateOfBirth":"1969-10-08 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"calin@wingtiptoys.com","PreferredName":"Calin"}, + {"Gender":"Female","FullName":"Maxime Westerink","PersonID":460,"FaxNumber":"(205) 555-0101","DateOfBirth":"1967-06-25 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"maxime@wingtiptoys.com","PreferredName":"Maxime"}, + {"Gender":"Female","FullName":"Lang Le","PersonID":461,"FaxNumber":"(225) 555-0101","DateOfBirth":"1993-12-09 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"lang@wingtiptoys.com","PreferredName":"Lang"}, + {"Gender":"Female","FullName":"Bozena Divisova","PersonID":462,"FaxNumber":"(225) 555-0101","DateOfBirth":"1984-01-05 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"bozena@wingtiptoys.com","PreferredName":"Bozena"}, + {"Gender":"Female","FullName":"Bhaagyalakshmi Muppavarapu","PersonID":463,"FaxNumber":"(210) 555-0101","DateOfBirth":"1990-02-17 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"bhaagyalakshmi@wingtiptoys.com","PreferredName":"Bhaagyalakshmi"}, + {"Gender":"Female","FullName":"Durjoy Bose","PersonID":464,"FaxNumber":"(210) 555-0101","DateOfBirth":"1982-08-12 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"durjoy@wingtiptoys.com","PreferredName":"Durjoy"}, + {"Gender":"Female","FullName":"Dimitry Nechita","PersonID":465,"FaxNumber":"(209) 555-0101","DateOfBirth":"1976-07-09 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"dimitry@wingtiptoys.com","PreferredName":"Dimitry"}, + {"Gender":"Female","FullName":"Meredith Padilla","PersonID":466,"FaxNumber":"(209) 555-0101","DateOfBirth":"1977-07-06 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"meredith@wingtiptoys.com","PreferredName":"Meredith"}, + {"Gender":"Female","FullName":"Miroslav Kohout","PersonID":467,"FaxNumber":"(210) 555-0101","DateOfBirth":"1979-06-02 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"miroslav@wingtiptoys.com","PreferredName":"Miroslav"}, + {"Gender":"Female","FullName":"Teresa Torres","PersonID":468,"FaxNumber":"(210) 555-0101","DateOfBirth":"1993-01-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"teresa@wingtiptoys.com","PreferredName":"Teresa"}, + {"Gender":"Female","FullName":"Fransje Mutlu","PersonID":469,"FaxNumber":"(262) 555-0101","DateOfBirth":"1977-02-23 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"fransje@wingtiptoys.com","PreferredName":"Fransje"}, + {"Gender":"Female","FullName":"Karel Hybl","PersonID":470,"FaxNumber":"(262) 555-0101","DateOfBirth":"1980-01-10 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"karel@wingtiptoys.com","PreferredName":"Karel"}, + {"Gender":"Female","FullName":"Chati Ornlamai","PersonID":471,"FaxNumber":"(406) 555-0101","DateOfBirth":"1952-06-30 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"chati@wingtiptoys.com","PreferredName":"Chati"}, + {"Gender":"Female","FullName":"Tajana Lovric","PersonID":472,"FaxNumber":"(406) 555-0101","DateOfBirth":"1971-07-03 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"tajana@wingtiptoys.com","PreferredName":"Tajana"}, + {"Gender":"Female","FullName":"Raine Knihtila","PersonID":473,"FaxNumber":"(210) 555-0101","DateOfBirth":"1981-12-19 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"raine@wingtiptoys.com","PreferredName":"Raine"}, + {"Gender":"Female","FullName":"Dhir Mazumdar","PersonID":474,"FaxNumber":"(210) 555-0101","DateOfBirth":"1958-09-27 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"dhir@wingtiptoys.com","PreferredName":"Dhir"}, + {"Gender":"Female","FullName":"Lan Chu","PersonID":475,"FaxNumber":"(215) 555-0101","DateOfBirth":"1962-07-20 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"lan@wingtiptoys.com","PreferredName":"Lan"}, + {"Gender":"Female","FullName":"Tereza Prikrylova","PersonID":476,"FaxNumber":"(215) 555-0101","DateOfBirth":"1957-04-24 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"tereza@wingtiptoys.com","PreferredName":"Tereza"}, + {"Gender":"Female","FullName":"Maurice English","PersonID":477,"FaxNumber":"(229) 555-0101","DateOfBirth":"1952-10-11 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"maurice@wingtiptoys.com","PreferredName":"Maurice"}, + {"Gender":"Female","FullName":"Daniella Ribeiro","PersonID":478,"FaxNumber":"(229) 555-0101","DateOfBirth":"1975-11-22 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"daniella@wingtiptoys.com","PreferredName":"Daniella"}, + {"Gender":"Female","FullName":"Irene Sepp","PersonID":479,"FaxNumber":"(262) 555-0101","DateOfBirth":"1963-04-11 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"irene@wingtiptoys.com","PreferredName":"Irene"}, + {"Gender":"Female","FullName":"Hubert Fields","PersonID":480,"FaxNumber":"(262) 555-0101","DateOfBirth":"1973-02-01 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"hubert@wingtiptoys.com","PreferredName":"Hubert"}, + {"Gender":"Female","FullName":"Chandranath Bose","PersonID":481,"FaxNumber":"(262) 555-0101","DateOfBirth":"1995-08-27 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"chandranath@wingtiptoys.com","PreferredName":"Chandranath"}, + {"Gender":"Female","FullName":"Gaurav Acharya","PersonID":482,"FaxNumber":"(262) 555-0101","DateOfBirth":"1982-01-18 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"gaurav@wingtiptoys.com","PreferredName":"Gaurav"}, + {"Gender":"Female","FullName":"Ana Julijana Isa","PersonID":483,"FaxNumber":"(406) 555-0101","DateOfBirth":"1978-11-02 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"ana julijana@wingtiptoys.com","PreferredName":"Ana Julijana"}, + {"Gender":"Female","FullName":"Libor Klaus","PersonID":484,"FaxNumber":"(406) 555-0101","DateOfBirth":"1970-06-28 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"libor@wingtiptoys.com","PreferredName":"Libor"}, + {"Gender":"Female","FullName":"Gireesh Bhogireddy","PersonID":485,"FaxNumber":"(239) 555-0101","DateOfBirth":"1951-07-24 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"gireesh@wingtiptoys.com","PreferredName":"Gireesh"}, + {"Gender":"Female","FullName":"Stanislav Zeman","PersonID":486,"FaxNumber":"(239) 555-0101","DateOfBirth":"1968-06-06 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"stanislav@wingtiptoys.com","PreferredName":"Stanislav"}, + {"Gender":"Female","FullName":"Premwadee Atitarn","PersonID":487,"FaxNumber":"(209) 555-0101","DateOfBirth":"1988-04-29 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"premwadee@wingtiptoys.com","PreferredName":"Premwadee"}, + {"Gender":"Female","FullName":"Deeptendu Das","PersonID":488,"FaxNumber":"(209) 555-0101","DateOfBirth":"1955-05-10 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"deeptendu@wingtiptoys.com","PreferredName":"Deeptendu"}, + {"Gender":"Female","FullName":"Nishant Patil","PersonID":489,"FaxNumber":"(205) 555-0101","DateOfBirth":"1964-07-05 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"nishant@wingtiptoys.com","PreferredName":"Nishant"}, + {"Gender":"Female","FullName":"Bhaagyalakshmi Rajanala","PersonID":490,"FaxNumber":"(205) 555-0101","DateOfBirth":"1966-09-20 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"bhaagyalakshmi@wingtiptoys.com","PreferredName":"Bhaagyalakshmi"}, + {"Gender":"Female","FullName":"Rohan Das","PersonID":491,"FaxNumber":"(206) 555-0101","DateOfBirth":"1950-04-13 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"rohan@wingtiptoys.com","PreferredName":"Rohan"}, + {"Gender":"Female","FullName":"Bhaanusree Ankitham","PersonID":492,"FaxNumber":"(206) 555-0101","DateOfBirth":"1994-05-04 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"bhaanusree@wingtiptoys.com","PreferredName":"Bhaanusree"}, + {"Gender":"Female","FullName":"Aamdaal Kamasamudram","PersonID":493,"FaxNumber":"(316) 555-0101","DateOfBirth":"1981-04-05 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"aamdaal@wingtiptoys.com","PreferredName":"Aamdaal"}, + {"Gender":"Female","FullName":"Karita Rosberg","PersonID":494,"FaxNumber":"(316) 555-0101","DateOfBirth":"1955-11-02 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"karita@wingtiptoys.com","PreferredName":"Karita"}, + {"Gender":"Female","FullName":"Baebeesarasvati Kamasamudram","PersonID":495,"FaxNumber":"(308) 555-0101","DateOfBirth":"1979-01-29 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"baebeesarasvati@wingtiptoys.com","PreferredName":"Baebeesarasvati"}, + {"Gender":"Female","FullName":"Hana Palatova","PersonID":496,"FaxNumber":"(308) 555-0101","DateOfBirth":"1957-07-10 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"hana@wingtiptoys.com","PreferredName":"Hana"}, + {"Gender":"Female","FullName":"Marcello Dellucci","PersonID":497,"FaxNumber":"(405) 555-0101","DateOfBirth":"1980-11-04 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"marcello@wingtiptoys.com","PreferredName":"Marcello"}, + {"Gender":"Female","FullName":"Shobha Raju","PersonID":498,"FaxNumber":"(405) 555-0101","DateOfBirth":"1964-05-25 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"shobha@wingtiptoys.com","PreferredName":"Shobha"}, + {"Gender":"Female","FullName":"Mee-Kyong Sin","PersonID":499,"FaxNumber":"(480) 555-0101","DateOfBirth":"1953-10-09 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"mee-kyong@wingtiptoys.com","PreferredName":"Mee-Kyong"}, + {"Gender":"Female","FullName":"VÄ›ra Kopecka","PersonID":500,"FaxNumber":"(480) 555-0101","DateOfBirth":"1950-12-10 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"vacra@wingtiptoys.com","PreferredName":"VÄ›ra"}, + {"Gender":"Female","FullName":"Ivica LuÄic","PersonID":501,"FaxNumber":"(212) 555-0101","DateOfBirth":"1984-11-08 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"ivica@wingtiptoys.com","PreferredName":"Ivica"}, + {"Gender":"Female","FullName":"David Svoboda","PersonID":502,"FaxNumber":"(212) 555-0101","DateOfBirth":"1977-01-02 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"david@wingtiptoys.com","PreferredName":"David"}, + {"Gender":"Female","FullName":"Vinicius Correa","PersonID":503,"FaxNumber":"(231) 555-0101","DateOfBirth":"1961-12-17 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"vinicius@wingtiptoys.com","PreferredName":"Vinicius"}, + {"Gender":"Female","FullName":"Surat Pornpipatpong","PersonID":504,"FaxNumber":"(231) 555-0101","DateOfBirth":"1964-11-25 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"surat@wingtiptoys.com","PreferredName":"Surat"}, + {"Gender":"Female","FullName":"Fabio Pena","PersonID":505,"FaxNumber":"(314) 555-0101","DateOfBirth":"1966-03-09 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"fabio@wingtiptoys.com","PreferredName":"Fabio"}, + {"Gender":"Female","FullName":"Kauan Gomes","PersonID":506,"FaxNumber":"(314) 555-0101","DateOfBirth":"1982-04-01 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"kauan@wingtiptoys.com","PreferredName":"Kauan"}, + {"Gender":"Female","FullName":"Lakshmi Roy","PersonID":507,"FaxNumber":"(208) 555-0101","DateOfBirth":"1955-08-21 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"lakshmi@wingtiptoys.com","PreferredName":"Lakshmi"}, + {"Gender":"Female","FullName":"Kersti Mihhailov","PersonID":508,"FaxNumber":"(208) 555-0101","DateOfBirth":"1967-11-15 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"kersti@wingtiptoys.com","PreferredName":"Kersti"}, + {"Gender":"Female","FullName":"Selma Seppanen","PersonID":509,"FaxNumber":"(787) 555-0101","DateOfBirth":"1995-12-21 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"selma@wingtiptoys.com","PreferredName":"Selma"}, + {"Gender":"Female","FullName":"Danielle Brasseur","PersonID":510,"FaxNumber":"(787) 555-0101","DateOfBirth":"1991-10-11 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"danielle @wingtiptoys.com","PreferredName":"Danielle "}, + {"Gender":"Female","FullName":"Bay Ly","PersonID":511,"FaxNumber":"(239) 555-0101","DateOfBirth":"1990-03-29 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"bay@wingtiptoys.com","PreferredName":"Bay"}, + {"Gender":"Female","FullName":"Sanjiv Raina","PersonID":512,"FaxNumber":"(239) 555-0101","DateOfBirth":"1989-08-12 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"sanjiv@wingtiptoys.com","PreferredName":"Sanjiv"}, + {"Gender":"Female","FullName":"Adirake Saenamuang","PersonID":513,"FaxNumber":"(405) 555-0101","DateOfBirth":"1953-04-06 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"adirake@wingtiptoys.com","PreferredName":"Adirake"}, + {"Gender":"Female","FullName":"Leena De","PersonID":514,"FaxNumber":"(405) 555-0101","DateOfBirth":"1988-04-01 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"leena@wingtiptoys.com","PreferredName":"Leena"}, + {"Gender":"Female","FullName":"Tarja Penttila","PersonID":515,"FaxNumber":"(212) 555-0101","DateOfBirth":"1976-06-21 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"tarja@wingtiptoys.com","PreferredName":"Tarja"}, + {"Gender":"Female","FullName":"Gunnar Larsson","PersonID":516,"FaxNumber":"(212) 555-0101","DateOfBirth":"1982-05-08 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"gunnar@wingtiptoys.com","PreferredName":"Gunnar"}, + {"Gender":"Female","FullName":"Devendranath Huq","PersonID":517,"FaxNumber":"(217) 555-0101","DateOfBirth":"1979-09-27 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"devendranath@wingtiptoys.com","PreferredName":"Devendranath"}, + {"Gender":"Female","FullName":"Vicente Cabrera","PersonID":518,"FaxNumber":"(217) 555-0101","DateOfBirth":"1964-02-22 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"vicente@wingtiptoys.com","PreferredName":"Vicente"}, + {"Gender":"Female","FullName":"Enes Olsson","PersonID":519,"FaxNumber":"(276) 555-0101","DateOfBirth":"1953-10-25 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"enes@wingtiptoys.com","PreferredName":"Enes"}, + {"Gender":"Female","FullName":"Milada Kubatova","PersonID":520,"FaxNumber":"(276) 555-0101","DateOfBirth":"1951-10-19 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"milada@wingtiptoys.com","PreferredName":"Milada"}, + {"Gender":"Female","FullName":"Vanja Grgic","PersonID":521,"FaxNumber":"(215) 555-0101","DateOfBirth":"1952-11-17 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"vanja@wingtiptoys.com","PreferredName":"Vanja"}, + {"Gender":"Female","FullName":"Daniela Omelkova","PersonID":522,"FaxNumber":"(215) 555-0101","DateOfBirth":"1971-08-23 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"daniela@wingtiptoys.com","PreferredName":"Daniela"}, + {"Gender":"Female","FullName":"Dayaram Mishra","PersonID":523,"FaxNumber":"(216) 555-0101","DateOfBirth":"1988-02-15 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"dayaram@wingtiptoys.com","PreferredName":"Dayaram"}, + {"Gender":"Female","FullName":"Gal Kokeza","PersonID":524,"FaxNumber":"(216) 555-0101","DateOfBirth":"1951-06-11 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"gal@wingtiptoys.com","PreferredName":"Gal"}, + {"Gender":"Female","FullName":"Mina Omidzadeh","PersonID":525,"FaxNumber":"(262) 555-0101","DateOfBirth":"1963-02-07 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"mina@wingtiptoys.com","PreferredName":"Mina"}, + {"Gender":"Female","FullName":"Adrian Bengtsson","PersonID":526,"FaxNumber":"(262) 555-0101","DateOfBirth":"1985-08-13 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"adrian@wingtiptoys.com","PreferredName":"Adrian"}, + {"Gender":"Female","FullName":"Kadir Usenuly","PersonID":527,"FaxNumber":"(405) 555-0101","DateOfBirth":"1982-07-03 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"kadir@wingtiptoys.com","PreferredName":"Kadir"}, + {"Gender":"Female","FullName":"Rajiv Shasthri","PersonID":528,"FaxNumber":"(405) 555-0101","DateOfBirth":"1988-06-24 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"rajiv@wingtiptoys.com","PreferredName":"Rajiv"}, + {"Gender":"Female","FullName":"Kajsa Jakobsson","PersonID":529,"FaxNumber":"(319) 555-0101","DateOfBirth":"1986-07-21 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"kajsa@wingtiptoys.com","PreferredName":"Kajsa"}, + {"Gender":"Female","FullName":"Elnaz Rahimi","PersonID":530,"FaxNumber":"(319) 555-0101","DateOfBirth":"1987-06-08 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"elnaz@wingtiptoys.com","PreferredName":"Elnaz"}, + {"Gender":"Female","FullName":"Rahul Ghate","PersonID":531,"FaxNumber":"(215) 555-0101","DateOfBirth":"1985-08-19 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"rahul@wingtiptoys.com","PreferredName":"Rahul"}, + {"Gender":"Female","FullName":"Chuan Wongsawat","PersonID":532,"FaxNumber":"(215) 555-0101","DateOfBirth":"1985-05-08 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"chuan@wingtiptoys.com","PreferredName":"Chuan"}, + {"Gender":"Female","FullName":"Lien Banh","PersonID":533,"FaxNumber":"(231) 555-0101","DateOfBirth":"1962-08-15 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"lien@wingtiptoys.com","PreferredName":"Lien"}, + {"Gender":"Female","FullName":"Anshula Mitra","PersonID":534,"FaxNumber":"(231) 555-0101","DateOfBirth":"1984-08-28 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"anshula@wingtiptoys.com","PreferredName":"Anshula"}, + {"Gender":"Female","FullName":"Divyendu Chakraborty","PersonID":535,"FaxNumber":"(605) 555-0101","DateOfBirth":"1983-03-17 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"divyendu@wingtiptoys.com","PreferredName":"Divyendu"}, + {"Gender":"Female","FullName":"Rita Kauppi","PersonID":536,"FaxNumber":"(605) 555-0101","DateOfBirth":"1997-10-01 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"rita@wingtiptoys.com","PreferredName":"Rita"}, + {"Gender":"Female","FullName":"An Dung Ngo","PersonID":537,"FaxNumber":"(303) 555-0101","DateOfBirth":"1954-12-26 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"an dung@wingtiptoys.com","PreferredName":"An Dung"}, + {"Gender":"Female","FullName":"Pranav Yadav","PersonID":538,"FaxNumber":"(303) 555-0101","DateOfBirth":"1993-06-29 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"pranav@wingtiptoys.com","PreferredName":"Pranav"}, + {"Gender":"Female","FullName":"Chetana Kamath","PersonID":539,"FaxNumber":"(225) 555-0101","DateOfBirth":"1997-03-07 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"chetana@wingtiptoys.com","PreferredName":"Chetana"}, + {"Gender":"Female","FullName":"Isabelina Flores","PersonID":540,"FaxNumber":"(225) 555-0101","DateOfBirth":"1978-02-24 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"isabelina@wingtiptoys.com","PreferredName":"Isabelina"}, + {"Gender":"Female","FullName":"Premwadee Saowaluk","PersonID":541,"FaxNumber":"(319) 555-0101","DateOfBirth":"1980-12-11 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"premwadee@wingtiptoys.com","PreferredName":"Premwadee"}, + {"Gender":"Female","FullName":"Adam Balaz","PersonID":542,"FaxNumber":"(319) 555-0101","DateOfBirth":"1988-01-23 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"adam@wingtiptoys.com","PreferredName":"Adam"}, + {"Gender":"Female","FullName":"Jae-Hwa Min","PersonID":543,"FaxNumber":"(702) 555-0101","DateOfBirth":"1992-03-04 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"jae-hwa@wingtiptoys.com","PreferredName":"Jae-Hwa"}, + {"Gender":"Female","FullName":"Rafael Pena","PersonID":544,"FaxNumber":"(702) 555-0101","DateOfBirth":"1950-01-06 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"rafael@wingtiptoys.com","PreferredName":"Rafael"}, + {"Gender":"Female","FullName":"Catalina Nechita","PersonID":545,"FaxNumber":"(304) 555-0101","DateOfBirth":"1993-02-07 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"catalina@wingtiptoys.com","PreferredName":"Catalina"}, + {"Gender":"Female","FullName":"Robert Cosic","PersonID":546,"FaxNumber":"(304) 555-0101","DateOfBirth":"1956-11-17 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"robert@wingtiptoys.com","PreferredName":"Robert"}, + {"Gender":"Female","FullName":"Constanza Laureano","PersonID":547,"FaxNumber":"(219) 555-0101","DateOfBirth":"1996-07-27 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"constanza@wingtiptoys.com","PreferredName":"Constanza"}, + {"Gender":"Female","FullName":"Sunil Nakhtare","PersonID":548,"FaxNumber":"(219) 555-0101","DateOfBirth":"1964-06-01 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"sunil@wingtiptoys.com","PreferredName":"Sunil"}, + {"Gender":"Female","FullName":"Aakriti Bhamidipati","PersonID":549,"FaxNumber":"(307) 555-0101","DateOfBirth":"1987-09-26 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"aakriti@wingtiptoys.com","PreferredName":"Aakriti"}, + {"Gender":"Female","FullName":"Sakchai Supitayaporn","PersonID":550,"FaxNumber":"(307) 555-0101","DateOfBirth":"1957-02-10 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"sakchai@wingtiptoys.com","PreferredName":"Sakchai"}, + {"Gender":"Female","FullName":"Himadri PrabhupÄda","PersonID":551,"FaxNumber":"(209) 555-0101","DateOfBirth":"1966-04-08 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"himadri@wingtiptoys.com","PreferredName":"Himadri"}, + {"Gender":"Female","FullName":"Lukas Kohout","PersonID":552,"FaxNumber":"(209) 555-0101","DateOfBirth":"1984-01-12 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"lukas@wingtiptoys.com","PreferredName":"Lukas"}, + {"Gender":"Female","FullName":"Bryan Helms","PersonID":553,"FaxNumber":"(276) 555-0101","DateOfBirth":"1980-03-22 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"bryan@wingtiptoys.com","PreferredName":"Bryan"}, + {"Gender":"Female","FullName":"Julianna Makay","PersonID":554,"FaxNumber":"(276) 555-0101","DateOfBirth":"1972-06-23 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"julianna@wingtiptoys.com","PreferredName":"Julianna"}, + {"Gender":"Female","FullName":"Harri Kask","PersonID":555,"FaxNumber":"(787) 555-0101","DateOfBirth":"1975-06-17 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"harri@wingtiptoys.com","PreferredName":"Harri"}, + {"Gender":"Female","FullName":"Rakhshinda Mansouri","PersonID":556,"FaxNumber":"(787) 555-0101","DateOfBirth":"1994-11-07 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"rakhshinda@wingtiptoys.com","PreferredName":"Rakhshinda"}, + {"Gender":"Female","FullName":"Ilse Sandell","PersonID":557,"FaxNumber":"(209) 555-0101","DateOfBirth":"1968-05-20 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"ilse@wingtiptoys.com","PreferredName":"Ilse"}, + {"Gender":"Female","FullName":"Tibor Harsanyi","PersonID":558,"FaxNumber":"(209) 555-0101","DateOfBirth":"1981-01-05 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"tibor@wingtiptoys.com","PreferredName":"Tibor"}, + {"Gender":"Female","FullName":"Subhash Matondkar","PersonID":559,"FaxNumber":"(212) 555-0101","DateOfBirth":"1954-05-17 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"subhash@wingtiptoys.com","PreferredName":"Subhash"}, + {"Gender":"Female","FullName":"Gurudas De","PersonID":560,"FaxNumber":"(212) 555-0101","DateOfBirth":"1972-04-08 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"gurudas@wingtiptoys.com","PreferredName":"Gurudas"}, + {"Gender":"Female","FullName":"Eesvaraavu Ankitham","PersonID":561,"FaxNumber":"(505) 555-0101","DateOfBirth":"1956-02-19 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"eesvaraavu@wingtiptoys.com","PreferredName":"Eesvaraavu"}, + {"Gender":"Female","FullName":"Angelina Karlsson","PersonID":562,"FaxNumber":"(505) 555-0101","DateOfBirth":"1992-01-22 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"angelina@wingtiptoys.com","PreferredName":"Angelina"}, + {"Gender":"Female","FullName":"Miguel Paez","PersonID":563,"FaxNumber":"(205) 555-0101","DateOfBirth":"1952-12-18 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"miguel@wingtiptoys.com","PreferredName":"Miguel"}, + {"Gender":"Female","FullName":"Anukul Dey","PersonID":564,"FaxNumber":"(205) 555-0101","DateOfBirth":"1951-03-01 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"anukul@wingtiptoys.com","PreferredName":"Anukul"}, + {"Gender":"Female","FullName":"Tobias Gruber","PersonID":565,"FaxNumber":"(216) 555-0101","DateOfBirth":"1967-10-15 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"tobias@wingtiptoys.com","PreferredName":"Tobias"}, + {"Gender":"Female","FullName":"Jitka Stastna","PersonID":566,"FaxNumber":"(216) 555-0101","DateOfBirth":"1959-08-17 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"jitka@wingtiptoys.com","PreferredName":"Jitka"}, + {"Gender":"Female","FullName":"Daniela Dumina","PersonID":567,"FaxNumber":"(505) 555-0101","DateOfBirth":"1969-10-15 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"daniela@wingtiptoys.com","PreferredName":"Daniela"}, + {"Gender":"Female","FullName":"Fahmidah Fallahi","PersonID":568,"FaxNumber":"(505) 555-0101","DateOfBirth":"1984-01-07 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"fahmidah@wingtiptoys.com","PreferredName":"Fahmidah"}, + {"Gender":"Female","FullName":"Ganesh Mukherjee","PersonID":569,"FaxNumber":"(210) 555-0101","DateOfBirth":"1968-07-17 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"ganesh@wingtiptoys.com","PreferredName":"Ganesh"}, + {"Gender":"Female","FullName":"Hector Parra","PersonID":570,"FaxNumber":"(210) 555-0101","DateOfBirth":"1965-08-22 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"hector@wingtiptoys.com","PreferredName":"Hector"}, + {"Gender":"Female","FullName":"Avanti Nishad","PersonID":571,"FaxNumber":"(505) 555-0101","DateOfBirth":"1997-03-26 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"avanti@wingtiptoys.com","PreferredName":"Avanti"}, + {"Gender":"Female","FullName":"Gino Sal","PersonID":572,"FaxNumber":"(505) 555-0101","DateOfBirth":"1995-12-10 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"gino@wingtiptoys.com","PreferredName":"Gino"}, + {"Gender":"Female","FullName":"Daedeepya Thota","PersonID":573,"FaxNumber":"(405) 555-0101","DateOfBirth":"1961-09-26 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"daedeepya@wingtiptoys.com","PreferredName":"Daedeepya"}, + {"Gender":"Female","FullName":"Lekha Sen","PersonID":574,"FaxNumber":"(405) 555-0101","DateOfBirth":"1968-03-05 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"lekha@wingtiptoys.com","PreferredName":"Lekha"}, + {"Gender":"Female","FullName":"Gabriela Chirila","PersonID":575,"FaxNumber":"(701) 555-0101","DateOfBirth":"1955-02-04 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"gabriela@wingtiptoys.com","PreferredName":"Gabriela"}, + {"Gender":"Female","FullName":"Elina Bite","PersonID":576,"FaxNumber":"(701) 555-0101","DateOfBirth":"1971-11-28 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"elina@wingtiptoys.com","PreferredName":"Elina"}, + {"Gender":"Female","FullName":"Nagur Atluri","PersonID":577,"FaxNumber":"(405) 555-0101","DateOfBirth":"1951-02-04 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"nagur@wingtiptoys.com","PreferredName":"Nagur"}, + {"Gender":"Female","FullName":"Hanita Kamasamudram","PersonID":578,"FaxNumber":"(405) 555-0101","DateOfBirth":"1966-09-13 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"hanita@wingtiptoys.com","PreferredName":"Hanita"}, + {"Gender":"Female","FullName":"Sintja Buecek","PersonID":579,"FaxNumber":"(210) 555-0101","DateOfBirth":"1989-07-26 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"sintja@wingtiptoys.com","PreferredName":"Sintja"}, + {"Gender":"Female","FullName":"Esha Singh","PersonID":580,"FaxNumber":"(210) 555-0101","DateOfBirth":"1995-04-23 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"esha@wingtiptoys.com","PreferredName":"Esha"}, + {"Gender":"Female","FullName":"Pongrit Srisati","PersonID":581,"FaxNumber":"(215) 555-0101","DateOfBirth":"1968-01-19 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"pongrit@wingtiptoys.com","PreferredName":"Pongrit"}, + {"Gender":"Female","FullName":"Hanna Piip","PersonID":582,"FaxNumber":"(215) 555-0101","DateOfBirth":"1958-10-23 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"hanna@wingtiptoys.com","PreferredName":"Hanna"}, + {"Gender":"Female","FullName":"Linda Green","PersonID":583,"FaxNumber":"(218) 555-0101","DateOfBirth":"1990-05-02 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"linda@wingtiptoys.com","PreferredName":"Linda"}, + {"Gender":"Female","FullName":"Baalamurali Kommineni","PersonID":584,"FaxNumber":"(218) 555-0101","DateOfBirth":"1998-01-02 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"baalamurali@wingtiptoys.com","PreferredName":"Baalamurali"}, + {"Gender":"Female","FullName":"Sarmis Skujins","PersonID":585,"FaxNumber":"(270) 555-0101","DateOfBirth":"1987-12-16 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"sarmis@wingtiptoys.com","PreferredName":"Sarmis"}, + {"Gender":"Female","FullName":"Amporn Jetjirawat","PersonID":586,"FaxNumber":"(270) 555-0101","DateOfBirth":"1969-07-23 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"amporn@wingtiptoys.com","PreferredName":"Amporn"}, + {"Gender":"Female","FullName":"Libuse Srbova","PersonID":587,"FaxNumber":"(210) 555-0101","DateOfBirth":"1974-12-07 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"libuse@wingtiptoys.com","PreferredName":"Libuse"}, + {"Gender":"Female","FullName":"Jimme Harmsen","PersonID":588,"FaxNumber":"(210) 555-0101","DateOfBirth":"1960-08-30 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"jimme@wingtiptoys.com","PreferredName":"Jimme"}, + {"Gender":"Female","FullName":"Viktorie Stejskalova","PersonID":589,"FaxNumber":"(209) 555-0101","DateOfBirth":"1990-11-22 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"viktorie@wingtiptoys.com","PreferredName":"Viktorie"}, + {"Gender":"Female","FullName":"Bishnu Bandopadhyay","PersonID":590,"FaxNumber":"(209) 555-0101","DateOfBirth":"1995-11-02 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bishnu@wingtiptoys.com","PreferredName":"Bishnu"}, + {"Gender":"Female","FullName":"Slavko Pavlovic","PersonID":591,"FaxNumber":"(209) 555-0101","DateOfBirth":"1977-06-02 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"slavko@wingtiptoys.com","PreferredName":"Slavko"}, + {"Gender":"Female","FullName":"Malorie Dupuy","PersonID":592,"FaxNumber":"(209) 555-0101","DateOfBirth":"1977-05-18 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"malorie@wingtiptoys.com","PreferredName":"Malorie"}, + {"Gender":"Female","FullName":"Doru Munteanu","PersonID":593,"FaxNumber":"(209) 555-0101","DateOfBirth":"1965-01-15 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"doru@wingtiptoys.com","PreferredName":"Doru"}, + {"Gender":"Female","FullName":"Ankita Mittal","PersonID":594,"FaxNumber":"(209) 555-0101","DateOfBirth":"1963-09-19 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"ankita@wingtiptoys.com","PreferredName":"Ankita"}, + {"Gender":"Female","FullName":"Aile Aasmae","PersonID":595,"FaxNumber":"(239) 555-0101","DateOfBirth":"1988-09-05 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"aile@wingtiptoys.com","PreferredName":"Aile"}, + {"Gender":"Female","FullName":"Ezgi Kaya","PersonID":596,"FaxNumber":"(239) 555-0101","DateOfBirth":"1989-10-18 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"ezgi@wingtiptoys.com","PreferredName":"Ezgi"}, + {"Gender":"Female","FullName":"Ava Edden","PersonID":597,"FaxNumber":"(479) 555-0101","DateOfBirth":"1956-03-25 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"ava@wingtiptoys.com","PreferredName":"Ava"}, + {"Gender":"Female","FullName":"Adirake Narkbunnum","PersonID":598,"FaxNumber":"(479) 555-0101","DateOfBirth":"1968-12-02 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"adirake@wingtiptoys.com","PreferredName":"Adirake"}, + {"Gender":"Female","FullName":"Manali Bose","PersonID":599,"FaxNumber":"(215) 555-0101","DateOfBirth":"1989-04-16 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"manali@wingtiptoys.com","PreferredName":"Manali"}, + {"Gender":"Female","FullName":"Ji-min Jun","PersonID":600,"FaxNumber":"(215) 555-0101","DateOfBirth":"1950-11-06 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ji-min@wingtiptoys.com","PreferredName":"Ji-min"}, + {"Gender":"Female","FullName":"Astrid Poisson","PersonID":601,"FaxNumber":"(228) 555-0101","DateOfBirth":"1974-03-25 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"astrid@wingtiptoys.com","PreferredName":"Astrid"}, + {"Gender":"Female","FullName":"Timotej stakne","PersonID":602,"FaxNumber":"(228) 555-0101","DateOfBirth":"1995-01-11 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"timotej@wingtiptoys.com","PreferredName":"Timotej"}, + {"Gender":"Female","FullName":"Gi-Suk Heo","PersonID":603,"FaxNumber":"(215) 555-0101","DateOfBirth":"1977-11-01 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"gi-suk@wingtiptoys.com","PreferredName":"Gi-Suk"}, + {"Gender":"Female","FullName":"Roman Tomek","PersonID":604,"FaxNumber":"(215) 555-0101","DateOfBirth":"1980-07-23 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"roman@wingtiptoys.com","PreferredName":"Roman"}, + {"Gender":"Female","FullName":"Irma Kruze","PersonID":605,"FaxNumber":"(219) 555-0101","DateOfBirth":"1980-10-06 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"irma@wingtiptoys.com","PreferredName":"Irma"}, + {"Gender":"Female","FullName":"VÄ›ra Stejskalova","PersonID":606,"FaxNumber":"(219) 555-0101","DateOfBirth":"1965-11-10 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"vicra@wingtiptoys.com","PreferredName":"VÄ›ra"}, + {"Gender":"Female","FullName":"Dhaeraemdranaadh Pamulaparthi","PersonID":607,"FaxNumber":"(458) 555-0101","DateOfBirth":"1965-02-02 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"dhaeraemdranaadh@wingtiptoys.com","PreferredName":"Dhaeraemdranaadh"}, + {"Gender":"Female","FullName":"Victoria Brezeanu","PersonID":608,"FaxNumber":"(458) 555-0101","DateOfBirth":"1994-01-03 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"victoria@wingtiptoys.com","PreferredName":"Victoria"}, + {"Gender":"Female","FullName":"Agrita Kalnina","PersonID":609,"FaxNumber":"(314) 555-0101","DateOfBirth":"1968-02-26 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"agrita@wingtiptoys.com","PreferredName":"Agrita"}, + {"Gender":"Female","FullName":"Burak ozden","PersonID":610,"FaxNumber":"(314) 555-0101","DateOfBirth":"1954-02-16 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"burak@wingtiptoys.com","PreferredName":"Burak"}, + {"Gender":"Female","FullName":"Ravindra Sandhu","PersonID":611,"FaxNumber":"(212) 555-0101","DateOfBirth":"1992-11-30 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"ravindra@wingtiptoys.com","PreferredName":"Ravindra"}, + {"Gender":"Female","FullName":"Iulia Nechita","PersonID":612,"FaxNumber":"(212) 555-0101","DateOfBirth":"1980-08-14 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"iulia@wingtiptoys.com","PreferredName":"Iulia"}, + {"Gender":"Female","FullName":"Klara Rakus","PersonID":613,"FaxNumber":"(803) 555-0101","DateOfBirth":"1968-11-18 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"klara@wingtiptoys.com","PreferredName":"Klara"}, + {"Gender":"Female","FullName":"Razeena Rezaei","PersonID":614,"FaxNumber":"(803) 555-0101","DateOfBirth":"1970-09-29 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"razeena@wingtiptoys.com","PreferredName":"Razeena"}, + {"Gender":"Female","FullName":"Am Lo","PersonID":615,"FaxNumber":"(803) 555-0101","DateOfBirth":"1978-08-14 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"am@wingtiptoys.com","PreferredName":"Am"}, + {"Gender":"Female","FullName":"Edmee Schol","PersonID":616,"FaxNumber":"(803) 555-0101","DateOfBirth":"1977-06-28 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"edmee@wingtiptoys.com","PreferredName":"Edmee"}, + {"Gender":"Female","FullName":"Sophie Van Lier","PersonID":617,"FaxNumber":"(316) 555-0101","DateOfBirth":"1952-08-12 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"sophie@wingtiptoys.com","PreferredName":"Sophie"}, + {"Gender":"Female","FullName":"Shiva Nair","PersonID":618,"FaxNumber":"(316) 555-0101","DateOfBirth":"1976-07-01 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"shiva@wingtiptoys.com","PreferredName":"Shiva"}, + {"Gender":"Female","FullName":"Dimitry Profis","PersonID":619,"FaxNumber":"(216) 555-0101","DateOfBirth":"1993-12-30 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"dimitry@wingtiptoys.com","PreferredName":"Dimitry"}, + {"Gender":"Female","FullName":"Manindra Desai","PersonID":620,"FaxNumber":"(216) 555-0101","DateOfBirth":"1962-02-06 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"manindra@wingtiptoys.com","PreferredName":"Manindra"}, + {"Gender":"Female","FullName":"Jan Zeman","PersonID":621,"FaxNumber":"(215) 555-0101","DateOfBirth":"1967-03-28 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jan@wingtiptoys.com","PreferredName":"Jan"}, + {"Gender":"Female","FullName":"Jukka-Pekk Saarijarvi","PersonID":622,"FaxNumber":"(215) 555-0101","DateOfBirth":"1978-03-11 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jukka-pekk@wingtiptoys.com","PreferredName":"Jukka-Pekk"}, + {"Gender":"Female","FullName":"Ranjit Dikshit","PersonID":623,"FaxNumber":"(787) 555-0101","DateOfBirth":"1972-02-24 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"ranjit@wingtiptoys.com","PreferredName":"Ranjit"}, + {"Gender":"Female","FullName":"Marek Blaho","PersonID":624,"FaxNumber":"(787) 555-0101","DateOfBirth":"1975-01-10 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"marek@wingtiptoys.com","PreferredName":"Marek"}, + {"Gender":"Female","FullName":"Varuna Ganguly","PersonID":625,"FaxNumber":"(262) 555-0101","DateOfBirth":"1971-09-29 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"varuna@wingtiptoys.com","PreferredName":"Varuna"}, + {"Gender":"Female","FullName":"Natalia Pokorna","PersonID":626,"FaxNumber":"(262) 555-0101","DateOfBirth":"1957-03-06 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"natalia@wingtiptoys.com","PreferredName":"Natalia"}, + {"Gender":"Female","FullName":"Basak Tekin","PersonID":627,"FaxNumber":"(207) 555-0101","DateOfBirth":"1963-07-05 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"basak@wingtiptoys.com","PreferredName":"Basak"}, + {"Gender":"Female","FullName":"Nicole Martinez","PersonID":628,"FaxNumber":"(207) 555-0101","DateOfBirth":"1975-04-08 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"nicole@wingtiptoys.com","PreferredName":"Nicole"}, + {"Gender":"Female","FullName":"Doru Tirlea","PersonID":629,"FaxNumber":"(217) 555-0101","DateOfBirth":"1976-02-11 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"doru@wingtiptoys.com","PreferredName":"Doru"}, + {"Gender":"Female","FullName":"Hema Jujjavarapu","PersonID":630,"FaxNumber":"(217) 555-0101","DateOfBirth":"1997-03-21 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"hema@wingtiptoys.com","PreferredName":"Hema"}, + {"Gender":"Female","FullName":"Jessica Perrine","PersonID":631,"FaxNumber":"(217) 555-0101","DateOfBirth":"1951-04-08 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"jessica@wingtiptoys.com","PreferredName":"Jessica"}, + {"Gender":"Female","FullName":"Mukta Sarkar","PersonID":632,"FaxNumber":"(217) 555-0101","DateOfBirth":"1996-07-10 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"mukta@wingtiptoys.com","PreferredName":"Mukta"}, + {"Gender":"Female","FullName":"Yavuz Cetinkaya","PersonID":633,"FaxNumber":"(240) 555-0101","DateOfBirth":"1975-10-22 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"yavuz@wingtiptoys.com","PreferredName":"Yavuz"}, + {"Gender":"Female","FullName":"Jaydeb Ganguly","PersonID":634,"FaxNumber":"(240) 555-0101","DateOfBirth":"1966-01-09 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"jaydeb@wingtiptoys.com","PreferredName":"Jaydeb"}, + {"Gender":"Female","FullName":"Sirirat Kongpaisarn","PersonID":635,"FaxNumber":"(303) 555-0101","DateOfBirth":"1962-11-08 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"sirirat@wingtiptoys.com","PreferredName":"Sirirat"}, + {"Gender":"Female","FullName":"Himani Sanyal","PersonID":636,"FaxNumber":"(303) 555-0101","DateOfBirth":"1976-04-05 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"himani@wingtiptoys.com","PreferredName":"Himani"}, + {"Gender":"Female","FullName":"Claude Bonsaint","PersonID":637,"FaxNumber":"(215) 555-0101","DateOfBirth":"1993-07-08 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"claude@wingtiptoys.com","PreferredName":"Claude"}, + {"Gender":"Female","FullName":"Gopal Thakur","PersonID":638,"FaxNumber":"(215) 555-0101","DateOfBirth":"1992-09-06 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"gopal@wingtiptoys.com","PreferredName":"Gopal"}, + {"Gender":"Female","FullName":"Roman Pajer","PersonID":639,"FaxNumber":"(209) 555-0101","DateOfBirth":"1966-01-13 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"roman@wingtiptoys.com","PreferredName":"Roman"}, + {"Gender":"Female","FullName":"Floris Veenhuizen","PersonID":640,"FaxNumber":"(209) 555-0101","DateOfBirth":"1988-01-21 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"floris@wingtiptoys.com","PreferredName":"Floris"}, + {"Gender":"Female","FullName":"Vitezslav Holy","PersonID":641,"FaxNumber":"(803) 555-0101","DateOfBirth":"1961-10-27 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"vitezslav@wingtiptoys.com","PreferredName":"Vitezslav"}, + {"Gender":"Female","FullName":"Paul Valbe","PersonID":642,"FaxNumber":"(803) 555-0101","DateOfBirth":"1969-10-02 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"paul@wingtiptoys.com","PreferredName":"Paul"}, + {"Gender":"Female","FullName":"Devi Dewangan","PersonID":643,"FaxNumber":"(216) 555-0101","DateOfBirth":"1974-08-24 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"devi@wingtiptoys.com","PreferredName":"Devi"}, + {"Gender":"Female","FullName":"William Bordelon","PersonID":644,"FaxNumber":"(216) 555-0101","DateOfBirth":"1963-11-07 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"william@wingtiptoys.com","PreferredName":"William"}, + {"Gender":"Female","FullName":"Masa Buecek","PersonID":645,"FaxNumber":"(216) 555-0101","DateOfBirth":"1981-02-16 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"masa@wingtiptoys.com","PreferredName":"Masa"}, + {"Gender":"Female","FullName":"Nguyet Trang","PersonID":646,"FaxNumber":"(216) 555-0101","DateOfBirth":"1972-12-18 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"nguyet@wingtiptoys.com","PreferredName":"Nguyet"}, + {"Gender":"Female","FullName":"Bipin Modi","PersonID":647,"FaxNumber":"(423) 555-0101","DateOfBirth":"1950-01-07 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"bipin@wingtiptoys.com","PreferredName":"Bipin"}, + {"Gender":"Female","FullName":"Dattaatraeya Vangapandu","PersonID":648,"FaxNumber":"(423) 555-0101","DateOfBirth":"1955-07-09 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"dattaatraeya@wingtiptoys.com","PreferredName":"Dattaatraeya"}, + {"Gender":"Female","FullName":"Rahul Sarma","PersonID":649,"FaxNumber":"(802) 555-0101","DateOfBirth":"1986-03-19 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"rahul@wingtiptoys.com","PreferredName":"Rahul"}, + {"Gender":"Female","FullName":"Deeba Hemmati","PersonID":650,"FaxNumber":"(802) 555-0101","DateOfBirth":"1954-04-07 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"deeba@wingtiptoys.com","PreferredName":"Deeba"}, + {"Gender":"Female","FullName":"Alejandro Escobar","PersonID":651,"FaxNumber":"(218) 555-0101","DateOfBirth":"1971-07-02 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"alejandro@wingtiptoys.com","PreferredName":"Alejandro"}, + {"Gender":"Female","FullName":"Milada Hadrabova","PersonID":652,"FaxNumber":"(218) 555-0101","DateOfBirth":"1972-08-24 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"milada@wingtiptoys.com","PreferredName":"Milada"}, + {"Gender":"Female","FullName":"Andris Vitols","PersonID":653,"FaxNumber":"(252) 555-0101","DateOfBirth":"1953-12-13 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"andris@wingtiptoys.com","PreferredName":"Andris"}, + {"Gender":"Female","FullName":"Lana Larsson","PersonID":654,"FaxNumber":"(252) 555-0101","DateOfBirth":"1966-02-20 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"lana@wingtiptoys.com","PreferredName":"Lana"}, + {"Gender":"Female","FullName":"Mariela Weitzer","PersonID":655,"FaxNumber":"(207) 555-0101","DateOfBirth":"1981-10-15 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"mariela@wingtiptoys.com","PreferredName":"Mariela"}, + {"Gender":"Female","FullName":"David Lanctot","PersonID":656,"FaxNumber":"(207) 555-0101","DateOfBirth":"1952-12-15 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"david@wingtiptoys.com","PreferredName":"David"}, + {"Gender":"Female","FullName":"Alain Pelland","PersonID":657,"FaxNumber":"(303) 555-0101","DateOfBirth":"1981-04-23 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"alain@wingtiptoys.com","PreferredName":"Alain"}, + {"Gender":"Female","FullName":"Ik-Soo Jo","PersonID":658,"FaxNumber":"(303) 555-0101","DateOfBirth":"1986-10-09 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"ik-soo@wingtiptoys.com","PreferredName":"Ik-Soo"}, + {"Gender":"Female","FullName":"Milica Stojkovic","PersonID":659,"FaxNumber":"(201) 555-0101","DateOfBirth":"1973-07-19 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"milica@wingtiptoys.com","PreferredName":"Milica"}, + {"Gender":"Female","FullName":"Teemu Yli-Sirnio","PersonID":660,"FaxNumber":"(201) 555-0101","DateOfBirth":"1962-02-17 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"teemu@wingtiptoys.com","PreferredName":"Teemu"}, + {"Gender":"Female","FullName":"Natalie Horackova","PersonID":661,"FaxNumber":"(215) 555-0101","DateOfBirth":"1951-02-28 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"natalie@wingtiptoys.com","PreferredName":"Natalie"}, + {"Gender":"Female","FullName":"Francesca Greece","PersonID":662,"FaxNumber":"(215) 555-0101","DateOfBirth":"1976-06-28 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"francesca@wingtiptoys.com","PreferredName":"Francesca"}, + {"Gender":"Female","FullName":"Baalaaditya Rallapalli","PersonID":663,"FaxNumber":"(314) 555-0101","DateOfBirth":"1971-07-26 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"baalaaditya@wingtiptoys.com","PreferredName":"Baalaaditya"}, + {"Gender":"Female","FullName":"Antonin Holy","PersonID":664,"FaxNumber":"(314) 555-0101","DateOfBirth":"1950-09-18 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"antonin@wingtiptoys.com","PreferredName":"Antonin"}, + {"Gender":"Female","FullName":"Matej Formanek","PersonID":665,"FaxNumber":"(303) 555-0101","DateOfBirth":"1980-02-05 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"matej@wingtiptoys.com","PreferredName":"Matej"}, + {"Gender":"Female","FullName":"Mary Eder","PersonID":666,"FaxNumber":"(303) 555-0101","DateOfBirth":"1974-01-10 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"mary@wingtiptoys.com","PreferredName":"Mary"}, + {"Gender":"Female","FullName":"Manish Ghosh","PersonID":667,"FaxNumber":"(219) 555-0101","DateOfBirth":"1996-08-15 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"manish@wingtiptoys.com","PreferredName":"Manish"}, + {"Gender":"Female","FullName":"Anish Naidu","PersonID":668,"FaxNumber":"(219) 555-0101","DateOfBirth":"1960-12-16 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"anish@wingtiptoys.com","PreferredName":"Anish"}, + {"Gender":"Female","FullName":"Pracha Nantakarn","PersonID":669,"FaxNumber":"(231) 555-0101","DateOfBirth":"1982-08-15 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"pracha@wingtiptoys.com","PreferredName":"Pracha"}, + {"Gender":"Female","FullName":"Malee Charoenkul","PersonID":670,"FaxNumber":"(231) 555-0101","DateOfBirth":"1979-04-12 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"malee@wingtiptoys.com","PreferredName":"Malee"}, + {"Gender":"Female","FullName":"Charline Flamand","PersonID":671,"FaxNumber":"(605) 555-0101","DateOfBirth":"1977-05-23 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"charline@wingtiptoys.com","PreferredName":"Charline"}, + {"Gender":"Female","FullName":"Dhavala Alladi","PersonID":672,"FaxNumber":"(605) 555-0101","DateOfBirth":"1953-09-04 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"dhavala@wingtiptoys.com","PreferredName":"Dhavala"}, + {"Gender":"Female","FullName":"Teodor Vlad","PersonID":673,"FaxNumber":"(219) 555-0101","DateOfBirth":"1962-09-06 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"teodor@wingtiptoys.com","PreferredName":"Teodor"}, + {"Gender":"Female","FullName":"Peeter Keskula","PersonID":674,"FaxNumber":"(219) 555-0101","DateOfBirth":"1972-04-30 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"peeter@wingtiptoys.com","PreferredName":"Peeter"}, + {"Gender":"Female","FullName":"Anda Liepa","PersonID":675,"FaxNumber":"(603) 555-0101","DateOfBirth":"1985-07-30 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"anda@wingtiptoys.com","PreferredName":"Anda"}, + {"Gender":"Female","FullName":"Deakshitulu Paruchuri","PersonID":676,"FaxNumber":"(603) 555-0101","DateOfBirth":"1960-07-01 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"deakshitulu@wingtiptoys.com","PreferredName":"Deakshitulu"}, + {"Gender":"Female","FullName":"Jelena Utjesenovic","PersonID":677,"FaxNumber":"(210) 555-0101","DateOfBirth":"1964-02-07 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"jelena@wingtiptoys.com","PreferredName":"Jelena"}, + {"Gender":"Female","FullName":"Debbie Clark","PersonID":678,"FaxNumber":"(210) 555-0101","DateOfBirth":"1971-10-31 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"debbie@wingtiptoys.com","PreferredName":"Debbie"}, + {"Gender":"Female","FullName":"Adriana Horackova","PersonID":679,"FaxNumber":"(252) 555-0101","DateOfBirth":"1998-03-24 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"adriana@wingtiptoys.com","PreferredName":"Adriana"}, + {"Gender":"Female","FullName":"Suniti Bhat","PersonID":680,"FaxNumber":"(252) 555-0101","DateOfBirth":"1987-05-11 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"suniti@wingtiptoys.com","PreferredName":"Suniti"}, + {"Gender":"Female","FullName":"Miika Putkonen","PersonID":681,"FaxNumber":"(314) 555-0101","DateOfBirth":"1956-05-21 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"miika@wingtiptoys.com","PreferredName":"Miika"}, + {"Gender":"Female","FullName":"Jose Williams","PersonID":682,"FaxNumber":"(314) 555-0101","DateOfBirth":"1966-05-22 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"jose@wingtiptoys.com","PreferredName":"Jose"}, + {"Gender":"Female","FullName":"Padma Iyer","PersonID":683,"FaxNumber":"(505) 555-0101","DateOfBirth":"1990-06-09 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"padma@wingtiptoys.com","PreferredName":"Padma"}, + {"Gender":"Female","FullName":"Cai Cao","PersonID":684,"FaxNumber":"(505) 555-0101","DateOfBirth":"1957-05-30 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"cai@wingtiptoys.com","PreferredName":"Cai"}, + {"Gender":"Female","FullName":"Åšani Sen","PersonID":685,"FaxNumber":"(405) 555-0101","DateOfBirth":"1979-09-03 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"aani@wingtiptoys.com","PreferredName":"Åšani"}, + {"Gender":"Female","FullName":"Ngu Hoa","PersonID":686,"FaxNumber":"(405) 555-0101","DateOfBirth":"1975-10-06 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"ngu@wingtiptoys.com","PreferredName":"Ngu"}, + {"Gender":"Female","FullName":"Helene Dupuy","PersonID":687,"FaxNumber":"(270) 555-0101","DateOfBirth":"1971-05-02 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"helene@wingtiptoys.com","PreferredName":"Helene"}, + {"Gender":"Female","FullName":"Antonio Trentini","PersonID":688,"FaxNumber":"(270) 555-0101","DateOfBirth":"1994-02-06 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"antonio@wingtiptoys.com","PreferredName":"Antonio"}, + {"Gender":"Female","FullName":"omer ozbek","PersonID":689,"FaxNumber":"(205) 555-0101","DateOfBirth":"1985-01-10 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"omer@wingtiptoys.com","PreferredName":"omer"}, + {"Gender":"Female","FullName":"Andrei Bratianu","PersonID":690,"FaxNumber":"(205) 555-0101","DateOfBirth":"1985-06-07 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"andrei@wingtiptoys.com","PreferredName":"Andrei"}, + {"Gender":"Female","FullName":"Akshayakeerti Jandhyala","PersonID":691,"FaxNumber":"(240) 555-0101","DateOfBirth":"1996-10-22 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"akshayakeerti@wingtiptoys.com","PreferredName":"Akshayakeerti"}, + {"Gender":"Female","FullName":"Tereza Stolinova","PersonID":692,"FaxNumber":"(240) 555-0101","DateOfBirth":"1970-02-01 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"tereza@wingtiptoys.com","PreferredName":"Tereza"}, + {"Gender":"Female","FullName":"Ankolika Sen","PersonID":693,"FaxNumber":"(304) 555-0101","DateOfBirth":"1958-02-20 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"ankolika@wingtiptoys.com","PreferredName":"Ankolika"}, + {"Gender":"Female","FullName":"Kristophe Couet","PersonID":694,"FaxNumber":"(304) 555-0101","DateOfBirth":"1997-04-14 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"kristophe @wingtiptoys.com","PreferredName":"Kristophe "}, + {"Gender":"Female","FullName":"Baalaamani Veturi","PersonID":695,"FaxNumber":"(218) 555-0101","DateOfBirth":"1976-12-15 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"baalaamani@wingtiptoys.com","PreferredName":"Baalaamani"}, + {"Gender":"Female","FullName":"Gustav Korjus","PersonID":696,"FaxNumber":"(218) 555-0101","DateOfBirth":"1971-03-03 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"gustav@wingtiptoys.com","PreferredName":"Gustav"}, + {"Gender":"Female","FullName":"Julia Konecna","PersonID":697,"FaxNumber":"(314) 555-0101","DateOfBirth":"1958-08-22 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"julia@wingtiptoys.com","PreferredName":"Julia"}, + {"Gender":"Female","FullName":"Birgit Saar","PersonID":698,"FaxNumber":"(314) 555-0101","DateOfBirth":"1979-07-19 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"birgit@wingtiptoys.com","PreferredName":"Birgit"}, + {"Gender":"Female","FullName":"Madelaine Paulet","PersonID":699,"FaxNumber":"(212) 555-0101","DateOfBirth":"1992-05-21 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"madelaine @wingtiptoys.com","PreferredName":"Madelaine "}, + {"Gender":"Female","FullName":"Arundhati Bhowmick","PersonID":700,"FaxNumber":"(212) 555-0101","DateOfBirth":"1980-11-30 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"arundhati@wingtiptoys.com","PreferredName":"Arundhati"}, + {"Gender":"Female","FullName":"Mario Jogi","PersonID":701,"FaxNumber":"(212) 555-0101","DateOfBirth":"1970-06-24 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"mario@wingtiptoys.com","PreferredName":"Mario"}, + {"Gender":"Female","FullName":"Martina Omelkova","PersonID":702,"FaxNumber":"(212) 555-0101","DateOfBirth":"1989-09-09 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"martina@wingtiptoys.com","PreferredName":"Martina"}, + {"Gender":"Female","FullName":"Kaya ozbek","PersonID":703,"FaxNumber":"(276) 555-0101","DateOfBirth":"1981-09-25 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"kaya@wingtiptoys.com","PreferredName":"Kaya"}, + {"Gender":"Female","FullName":"Lan Klanjcar","PersonID":704,"FaxNumber":"(276) 555-0101","DateOfBirth":"1965-04-06 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"lan@wingtiptoys.com","PreferredName":"Lan"}, + {"Gender":"Female","FullName":"Seo-yeon Rim","PersonID":705,"FaxNumber":"(229) 555-0101","DateOfBirth":"1972-05-09 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"seo-yeon@wingtiptoys.com","PreferredName":"Seo-yeon"}, + {"Gender":"Female","FullName":"Giovanna Araujo","PersonID":706,"FaxNumber":"(229) 555-0101","DateOfBirth":"1980-09-14 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"giovanna@wingtiptoys.com","PreferredName":"Giovanna"}, + {"Gender":"Female","FullName":"Sitara Benjaree","PersonID":707,"FaxNumber":"(210) 555-0101","DateOfBirth":"1976-08-20 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"sitara@wingtiptoys.com","PreferredName":"Sitara"}, + {"Gender":"Female","FullName":"Roberts Sprogis","PersonID":708,"FaxNumber":"(210) 555-0101","DateOfBirth":"1960-10-15 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"roberts@wingtiptoys.com","PreferredName":"Roberts"}, + {"Gender":"Female","FullName":"Javier Caraballo","PersonID":709,"FaxNumber":"(231) 555-0101","DateOfBirth":"1977-09-23 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"javier@wingtiptoys.com","PreferredName":"Javier"}, + {"Gender":"Female","FullName":"Coralie Brasseur","PersonID":710,"FaxNumber":"(231) 555-0101","DateOfBirth":"1984-09-01 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"coralie@wingtiptoys.com","PreferredName":"Coralie"}, + {"Gender":"Female","FullName":"Akhtar Shahrestaani","PersonID":711,"FaxNumber":"(229) 555-0101","DateOfBirth":"1967-01-07 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"akhtar@wingtiptoys.com","PreferredName":"Akhtar"}, + {"Gender":"Female","FullName":"Priya Joshi","PersonID":712,"FaxNumber":"(229) 555-0101","DateOfBirth":"1976-02-29 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"priya@wingtiptoys.com","PreferredName":"Priya"}, + {"Gender":"Female","FullName":"Vanita Bhowmick","PersonID":713,"FaxNumber":"(405) 555-0101","DateOfBirth":"1950-08-24 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"vanita@wingtiptoys.com","PreferredName":"Vanita"}, + {"Gender":"Female","FullName":"Bruna Cavalcante","PersonID":714,"FaxNumber":"(405) 555-0101","DateOfBirth":"1979-06-09 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"bruna@wingtiptoys.com","PreferredName":"Bruna"}, + {"Gender":"Female","FullName":"Nishant Menon","PersonID":715,"FaxNumber":"(225) 555-0101","DateOfBirth":"1959-05-03 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"nishant@wingtiptoys.com","PreferredName":"Nishant"}, + {"Gender":"Female","FullName":"Ratnam Singh","PersonID":716,"FaxNumber":"(225) 555-0101","DateOfBirth":"1961-01-08 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"ratnam@wingtiptoys.com","PreferredName":"Ratnam"}, + {"Gender":"Female","FullName":"Josef Benda","PersonID":717,"FaxNumber":"(304) 555-0101","DateOfBirth":"1997-06-28 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"josef@wingtiptoys.com","PreferredName":"Josef"}, + {"Gender":"Female","FullName":"Trishna Benipal","PersonID":718,"FaxNumber":"(304) 555-0101","DateOfBirth":"1974-08-12 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"trishna@wingtiptoys.com","PreferredName":"Trishna"}, + {"Gender":"Female","FullName":"Teresa Bender","PersonID":719,"FaxNumber":"(605) 555-0101","DateOfBirth":"1953-08-03 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"teresa@wingtiptoys.com","PreferredName":"Teresa"}, + {"Gender":"Female","FullName":"Diego Buccho","PersonID":720,"FaxNumber":"(605) 555-0101","DateOfBirth":"1958-01-17 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"diego@wingtiptoys.com","PreferredName":"Diego"}, + {"Gender":"Female","FullName":"Deepesh Bose","PersonID":721,"FaxNumber":"(907) 555-0101","DateOfBirth":"1964-11-30 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"deepesh@wingtiptoys.com","PreferredName":"Deepesh"}, + {"Gender":"Female","FullName":"Ambareesh Madhunapantula","PersonID":722,"FaxNumber":"(907) 555-0101","DateOfBirth":"1997-01-26 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"ambareesh@wingtiptoys.com","PreferredName":"Ambareesh"}, + {"Gender":"Female","FullName":"Madhavi Gupta","PersonID":723,"FaxNumber":"(228) 555-0101","DateOfBirth":"1967-02-09 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"madhavi@wingtiptoys.com","PreferredName":"Madhavi"}, + {"Gender":"Female","FullName":"Indu Chowdary","PersonID":724,"FaxNumber":"(228) 555-0101","DateOfBirth":"1996-06-02 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"indu@wingtiptoys.com","PreferredName":"Indu"}, + {"Gender":"Female","FullName":"Bich Banh","PersonID":725,"FaxNumber":"(215) 555-0101","DateOfBirth":"1957-08-09 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"bich@wingtiptoys.com","PreferredName":"Bich"}, + {"Gender":"Female","FullName":"Lennart Kask","PersonID":726,"FaxNumber":"(215) 555-0101","DateOfBirth":"1954-02-06 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"lennart@wingtiptoys.com","PreferredName":"Lennart"}, + {"Gender":"Female","FullName":"Åšani Nair","PersonID":727,"FaxNumber":"(207) 555-0101","DateOfBirth":"1960-04-06 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"aaani@wingtiptoys.com","PreferredName":"Åšani"}, + {"Gender":"Female","FullName":"Cuc Tu","PersonID":728,"FaxNumber":"(207) 555-0101","DateOfBirth":"1964-01-09 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"cuc@wingtiptoys.com","PreferredName":"Cuc"}, + {"Gender":"Female","FullName":"Angelina Gormanston","PersonID":729,"FaxNumber":"(201) 555-0101","DateOfBirth":"1951-06-24 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"angelina@wingtiptoys.com","PreferredName":"Angelina"}, + {"Gender":"Female","FullName":"Prasanna Shetty","PersonID":730,"FaxNumber":"(201) 555-0101","DateOfBirth":"1996-12-15 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"prasanna@wingtiptoys.com","PreferredName":"Prasanna"}, + {"Gender":"Female","FullName":"Prasert Supitayaporn","PersonID":731,"FaxNumber":"(219) 555-0101","DateOfBirth":"1975-01-19 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"prasert@wingtiptoys.com","PreferredName":"Prasert"}, + {"Gender":"Female","FullName":"Gulzar Parkar","PersonID":732,"FaxNumber":"(219) 555-0101","DateOfBirth":"1995-06-25 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"gulzar@wingtiptoys.com","PreferredName":"Gulzar"}, + {"Gender":"Female","FullName":"Abhaya Rambhatla","PersonID":733,"FaxNumber":"(231) 555-0101","DateOfBirth":"1978-01-12 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"abhaya@wingtiptoys.com","PreferredName":"Abhaya"}, + {"Gender":"Female","FullName":"Naveed Alizadeh","PersonID":734,"FaxNumber":"(231) 555-0101","DateOfBirth":"1976-01-23 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"naveed@wingtiptoys.com","PreferredName":"Naveed"}, + {"Gender":"Female","FullName":"Lalit Ogra","PersonID":735,"FaxNumber":"(205) 555-0101","DateOfBirth":"1971-04-26 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"lalit@wingtiptoys.com","PreferredName":"Lalit"}, + {"Gender":"Female","FullName":"Badanika Vankayala","PersonID":736,"FaxNumber":"(205) 555-0101","DateOfBirth":"1975-04-25 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"badanika@wingtiptoys.com","PreferredName":"Badanika"}, + {"Gender":"Female","FullName":"Mina Bagheri","PersonID":737,"FaxNumber":"(319) 555-0101","DateOfBirth":"1972-06-05 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"mina@wingtiptoys.com","PreferredName":"Mina"}, + {"Gender":"Female","FullName":"Lien Lo","PersonID":738,"FaxNumber":"(319) 555-0101","DateOfBirth":"1975-04-06 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"lien@wingtiptoys.com","PreferredName":"Lien"}, + {"Gender":"Female","FullName":"Debraj Sanyal","PersonID":739,"FaxNumber":"(239) 555-0101","DateOfBirth":"1991-11-16 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"debraj@wingtiptoys.com","PreferredName":"Debraj"}, + {"Gender":"Female","FullName":"Tara KlanCisar","PersonID":740,"FaxNumber":"(239) 555-0101","DateOfBirth":"1955-05-15 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"tara@wingtiptoys.com","PreferredName":"Tara"}, + {"Gender":"Female","FullName":"Marco Costa","PersonID":741,"FaxNumber":"(701) 555-0101","DateOfBirth":"1973-06-01 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"marco@wingtiptoys.com","PreferredName":"Marco"}, + {"Gender":"Female","FullName":"Alessandra Gallo","PersonID":742,"FaxNumber":"(701) 555-0101","DateOfBirth":"1952-04-03 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"alessandra@wingtiptoys.com","PreferredName":"Alessandra"}, + {"Gender":"Female","FullName":"Crina Nechita","PersonID":743,"FaxNumber":"(217) 555-0101","DateOfBirth":"1995-03-14 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"crina@wingtiptoys.com","PreferredName":"Crina"}, + {"Gender":"Female","FullName":"Yi Min Zhong","PersonID":744,"FaxNumber":"(217) 555-0101","DateOfBirth":"1959-04-28 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"yi min@wingtiptoys.com","PreferredName":"Yi Min"}, + {"Gender":"Female","FullName":"Zala Ibrahimagic","PersonID":745,"FaxNumber":"(212) 555-0101","DateOfBirth":"1971-06-20 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"zala@wingtiptoys.com","PreferredName":"Zala"}, + {"Gender":"Female","FullName":"Wander Ellenbroek","PersonID":746,"FaxNumber":"(212) 555-0101","DateOfBirth":"1962-05-28 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"wander@wingtiptoys.com","PreferredName":"Wander"}, + {"Gender":"Female","FullName":"Gundega Kundzina","PersonID":747,"FaxNumber":"(479) 555-0101","DateOfBirth":"1965-07-31 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"gundega@wingtiptoys.com","PreferredName":"Gundega"}, + {"Gender":"Female","FullName":"Damyanti Byrraju","PersonID":748,"FaxNumber":"(479) 555-0101","DateOfBirth":"1967-10-10 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"damyanti@wingtiptoys.com","PreferredName":"Damyanti"}, + {"Gender":"Female","FullName":"Parveen Haldar","PersonID":749,"FaxNumber":"(219) 555-0101","DateOfBirth":"1972-08-09 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"parveen@wingtiptoys.com","PreferredName":"Parveen"}, + {"Gender":"Female","FullName":"Chau Chu","PersonID":750,"FaxNumber":"(219) 555-0101","DateOfBirth":"1978-05-08 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"chau@wingtiptoys.com","PreferredName":"Chau"}, + {"Gender":"Female","FullName":"Noel Cartier","PersonID":751,"FaxNumber":"(215) 555-0101","DateOfBirth":"1996-06-05 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"noel@wingtiptoys.com","PreferredName":"Noel"}, + {"Gender":"Female","FullName":"Aet Kasesalu","PersonID":752,"FaxNumber":"(215) 555-0101","DateOfBirth":"1993-06-02 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"aet@wingtiptoys.com","PreferredName":"Aet"}, + {"Gender":"Female","FullName":"Ilgonis Dzenis","PersonID":753,"FaxNumber":"(210) 555-0101","DateOfBirth":"1989-07-26 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"ilgonis@wingtiptoys.com","PreferredName":"Ilgonis"}, + {"Gender":"Female","FullName":"Emine Gungor","PersonID":754,"FaxNumber":"(210) 555-0101","DateOfBirth":"1976-05-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"emine@wingtiptoys.com","PreferredName":"Emine"}, + {"Gender":"Female","FullName":"Ondrej Tomek","PersonID":755,"FaxNumber":"(219) 555-0101","DateOfBirth":"1986-07-07 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"ondrej@wingtiptoys.com","PreferredName":"Ondrej"}, + {"Gender":"Female","FullName":"Ngon Ta","PersonID":756,"FaxNumber":"(219) 555-0101","DateOfBirth":"1962-09-12 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"ngon@wingtiptoys.com","PreferredName":"Ngon"}, + {"Gender":"Female","FullName":"Mohini Kaul","PersonID":757,"FaxNumber":"(240) 555-0101","DateOfBirth":"1951-09-22 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"mohini@wingtiptoys.com","PreferredName":"Mohini"}, + {"Gender":"Female","FullName":"Alejandro Baeza","PersonID":758,"FaxNumber":"(240) 555-0101","DateOfBirth":"1951-12-27 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"alejandro@wingtiptoys.com","PreferredName":"Alejandro"}, + {"Gender":"Female","FullName":"Arnab Malakar","PersonID":759,"FaxNumber":"(210) 555-0101","DateOfBirth":"1997-02-14 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"arnab@wingtiptoys.com","PreferredName":"Arnab"}, + {"Gender":"Female","FullName":"Anupam Majumdar","PersonID":760,"FaxNumber":"(210) 555-0101","DateOfBirth":"1991-11-25 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"anupam@wingtiptoys.com","PreferredName":"Anupam"}, + {"Gender":"Female","FullName":"Mary Barney","PersonID":761,"FaxNumber":"(505) 555-0101","DateOfBirth":"1986-02-23 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"mary@wingtiptoys.com","PreferredName":"Mary"}, + {"Gender":"Female","FullName":"Amit Ghatak","PersonID":762,"FaxNumber":"(505) 555-0101","DateOfBirth":"1987-06-23 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"amit@wingtiptoys.com","PreferredName":"Amit"}, + {"Gender":"Female","FullName":"Dhaeraemdranaadh Allu","PersonID":763,"FaxNumber":"(216) 555-0101","DateOfBirth":"1990-09-04 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"dhaeraemdranaadh@wingtiptoys.com","PreferredName":"Dhaeraemdranaadh"}, + {"Gender":"Female","FullName":"Abel Pirvu","PersonID":764,"FaxNumber":"(216) 555-0101","DateOfBirth":"1974-03-05 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"abel@wingtiptoys.com","PreferredName":"Abel"}, + {"Gender":"Female","FullName":"Paola Greece","PersonID":765,"FaxNumber":"(210) 555-0101","DateOfBirth":"1967-09-22 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"paola@wingtiptoys.com","PreferredName":"Paola"}, + {"Gender":"Female","FullName":"Izabella Baltina","PersonID":766,"FaxNumber":"(210) 555-0101","DateOfBirth":"1957-05-26 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"izabella@wingtiptoys.com","PreferredName":"Izabella"}, + {"Gender":"Female","FullName":"Flora Olofsson","PersonID":767,"FaxNumber":"(787) 555-0101","DateOfBirth":"1974-03-24 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"flora@wingtiptoys.com","PreferredName":"Flora"}, + {"Gender":"Female","FullName":"Vitezslav Drdla","PersonID":768,"FaxNumber":"(787) 555-0101","DateOfBirth":"1994-12-05 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"vitezslav@wingtiptoys.com","PreferredName":"Vitezslav"}, + {"Gender":"Female","FullName":"Nguyet Bach","PersonID":769,"FaxNumber":"(205) 555-0101","DateOfBirth":"1969-01-09 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"nguyet@wingtiptoys.com","PreferredName":"Nguyet"}, + {"Gender":"Female","FullName":"Ratnam Sidhu","PersonID":770,"FaxNumber":"(205) 555-0101","DateOfBirth":"1993-04-29 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"ratnam@wingtiptoys.com","PreferredName":"Ratnam"}, + {"Gender":"Female","FullName":"Jyoti Karnik","PersonID":771,"FaxNumber":"(803) 555-0101","DateOfBirth":"1972-07-25 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"jyoti@wingtiptoys.com","PreferredName":"Jyoti"}, + {"Gender":"Female","FullName":"Dattu Gummadi","PersonID":772,"FaxNumber":"(803) 555-0101","DateOfBirth":"1954-12-06 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"dattu@wingtiptoys.com","PreferredName":"Dattu"}, + {"Gender":"Female","FullName":"Samuel Almaraz","PersonID":773,"FaxNumber":"(458) 555-0101","DateOfBirth":"1986-10-16 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"samuel@wingtiptoys.com","PreferredName":"Samuel"}, + {"Gender":"Female","FullName":"Filip Bunderla","PersonID":774,"FaxNumber":"(458) 555-0101","DateOfBirth":"1959-05-29 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"filip@wingtiptoys.com","PreferredName":"Filip"}, + {"Gender":"Female","FullName":"Zuzana Kuchtova","PersonID":775,"FaxNumber":"(262) 555-0101","DateOfBirth":"1976-04-09 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"zuzana@wingtiptoys.com","PreferredName":"Zuzana"}, + {"Gender":"Female","FullName":"Elias Niemi","PersonID":776,"FaxNumber":"(262) 555-0101","DateOfBirth":"1973-01-11 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"elias@wingtiptoys.com","PreferredName":"Elias"}, + {"Gender":"Female","FullName":"Mark Ruutel","PersonID":777,"FaxNumber":"(307) 555-0101","DateOfBirth":"1972-05-19 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"mark@wingtiptoys.com","PreferredName":"Mark"}, + {"Gender":"Female","FullName":"Carla Osorio","PersonID":778,"FaxNumber":"(307) 555-0101","DateOfBirth":"1953-10-01 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"carla@wingtiptoys.com","PreferredName":"Carla"}, + {"Gender":"Female","FullName":"Corneliu Vladu","PersonID":779,"FaxNumber":"(480) 555-0101","DateOfBirth":"1974-11-12 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"corneliu@wingtiptoys.com","PreferredName":"Corneliu"}, + {"Gender":"Female","FullName":"Ivo Valek","PersonID":780,"FaxNumber":"(480) 555-0101","DateOfBirth":"1978-01-27 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"ivo@wingtiptoys.com","PreferredName":"Ivo"}, + {"Gender":"Female","FullName":"Severins Polis","PersonID":781,"FaxNumber":"(216) 555-0101","DateOfBirth":"1970-02-01 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"severins@wingtiptoys.com","PreferredName":"Severins"}, + {"Gender":"Female","FullName":"Chandran Bhattacharya","PersonID":782,"FaxNumber":"(216) 555-0101","DateOfBirth":"1957-04-24 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"chandran@wingtiptoys.com","PreferredName":"Chandran"}, + {"Gender":"Female","FullName":"Linda Ledezma","PersonID":783,"FaxNumber":"(210) 555-0101","DateOfBirth":"1971-03-20 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"linda@wingtiptoys.com","PreferredName":"Linda"}, + {"Gender":"Female","FullName":"Zbynek Vacha","PersonID":784,"FaxNumber":"(210) 555-0101","DateOfBirth":"1954-07-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"zbynek@wingtiptoys.com","PreferredName":"Zbynek"}, + {"Gender":"Female","FullName":"Halit Gunes","PersonID":785,"FaxNumber":"(239) 555-0101","DateOfBirth":"1954-05-26 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"halit@wingtiptoys.com","PreferredName":"Halit"}, + {"Gender":"Female","FullName":"Indu Nambiar","PersonID":786,"FaxNumber":"(239) 555-0101","DateOfBirth":"1977-11-01 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"indu@wingtiptoys.com","PreferredName":"Indu"}, + {"Gender":"Female","FullName":"Vallo Vesik","PersonID":787,"FaxNumber":"(205) 555-0101","DateOfBirth":"1997-10-23 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"vallo@wingtiptoys.com","PreferredName":"Vallo"}, + {"Gender":"Female","FullName":"Dayaram Raut","PersonID":788,"FaxNumber":"(205) 555-0101","DateOfBirth":"1980-12-01 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"dayaram@wingtiptoys.com","PreferredName":"Dayaram"}, + {"Gender":"Female","FullName":"Dana Mrazova","PersonID":789,"FaxNumber":"(802) 555-0101","DateOfBirth":"1964-08-16 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"dana@wingtiptoys.com","PreferredName":"Dana"}, + {"Gender":"Female","FullName":"Saraswati Beniwal","PersonID":790,"FaxNumber":"(802) 555-0101","DateOfBirth":"1976-03-18 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"saraswati@wingtiptoys.com","PreferredName":"Saraswati"}, + {"Gender":"Female","FullName":"Ema Slosar","PersonID":791,"FaxNumber":"(215) 555-0101","DateOfBirth":"1961-06-11 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ema@wingtiptoys.com","PreferredName":"Ema"}, + {"Gender":"Female","FullName":"Arto Heikkinen","PersonID":792,"FaxNumber":"(215) 555-0101","DateOfBirth":"1983-01-15 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"arto@wingtiptoys.com","PreferredName":"Arto"}, + {"Gender":"Female","FullName":"Hemchandra Debnath","PersonID":793,"FaxNumber":"(209) 555-0101","DateOfBirth":"1954-06-01 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"hemchandra@wingtiptoys.com","PreferredName":"Hemchandra"}, + {"Gender":"Female","FullName":"Bala Ogra","PersonID":794,"FaxNumber":"(209) 555-0101","DateOfBirth":"1986-05-31 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bala@wingtiptoys.com","PreferredName":"Bala"}, + {"Gender":"Female","FullName":"Monika Valentova","PersonID":795,"FaxNumber":"(458) 555-0101","DateOfBirth":"1961-12-02 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"monika@wingtiptoys.com","PreferredName":"Monika"}, + {"Gender":"Female","FullName":"Anuj Sonkar","PersonID":796,"FaxNumber":"(458) 555-0101","DateOfBirth":"1983-02-16 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"anuj@wingtiptoys.com","PreferredName":"Anuj"}, + {"Gender":"Female","FullName":"Dattaatraeya Tottempudi","PersonID":797,"FaxNumber":"(212) 555-0101","DateOfBirth":"1970-08-07 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"dattaatraeya@wingtiptoys.com","PreferredName":"Dattaatraeya"}, + {"Gender":"Female","FullName":"Emilia Samaniego","PersonID":798,"FaxNumber":"(212) 555-0101","DateOfBirth":"1967-12-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"emilia@wingtiptoys.com","PreferredName":"Emilia"}, + {"Gender":"Female","FullName":"Kahkushan Shakiba","PersonID":799,"FaxNumber":"(217) 555-0101","DateOfBirth":"1996-06-25 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"kahkushan@wingtiptoys.com","PreferredName":"Kahkushan"}, + {"Gender":"Female","FullName":"Lindsey Allen","PersonID":800,"FaxNumber":"(217) 555-0101","DateOfBirth":"1975-12-20 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"lindseya@contosomotors.com","PreferredName":"Lindsey"}, + {"Gender":"Female","FullName":"Perry Skountrianos","PersonID":801,"FaxNumber":"(212) 555-0101","DateOfBirth":"1978-10-18 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"perrys@contosomotors.com","PreferredName":"Perry"}, + {"Gender":"Female","FullName":"Birol Arslan","PersonID":802,"FaxNumber":"(212) 555-0101","DateOfBirth":"1972-07-02 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"birol@wingtiptoys.com","PreferredName":"Birol"}, + {"Gender":"Female","FullName":"Abhra Thakur","PersonID":803,"FaxNumber":"(215) 555-0101","DateOfBirth":"1989-05-31 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"abhra@wingtiptoys.com","PreferredName":"Abhra"}, + {"Gender":"Female","FullName":"Uma Khalsa","PersonID":804,"FaxNumber":"(215) 555-0101","DateOfBirth":"1968-08-08 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"uma@wingtiptoys.com","PreferredName":"Uma"}, + {"Gender":"Female","FullName":"Dunja Radoncis","PersonID":805,"FaxNumber":"(215) 555-0101","DateOfBirth":"1953-10-25 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"dunja@wingtiptoys.com","PreferredName":"Dunja"}, + {"Gender":"Female","FullName":"Olya Seleznyov","PersonID":806,"FaxNumber":"(215) 555-0101","DateOfBirth":"1951-11-23 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"olya@wingtiptoys.com","PreferredName":"Olya"}, + {"Gender":"Female","FullName":"Darakhshan Javaherian","PersonID":807,"FaxNumber":"(215) 555-0101","DateOfBirth":"1965-06-10 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"darakhshan@wingtiptoys.com","PreferredName":"Darakhshan"}, + {"Gender":"Female","FullName":"Alexandre L'Angelier","PersonID":808,"FaxNumber":"(215) 555-0101","DateOfBirth":"1951-07-18 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"alexandre @wingtiptoys.com","PreferredName":"Alexandre "}, + {"Gender":"Female","FullName":"Youssef Eriksson","PersonID":809,"FaxNumber":"(701) 555-0101","DateOfBirth":"1994-09-05 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"youssef@wingtiptoys.com","PreferredName":"Youssef"}, + {"Gender":"Female","FullName":"Arunima Ganguly","PersonID":810,"FaxNumber":"(701) 555-0101","DateOfBirth":"1987-08-25 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"arunima@wingtiptoys.com","PreferredName":"Arunima"}, + {"Gender":"Female","FullName":"Pavel Bohuslav","PersonID":811,"FaxNumber":"(505) 555-0101","DateOfBirth":"1979-05-21 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"pavel@wingtiptoys.com","PreferredName":"Pavel"}, + {"Gender":"Female","FullName":"Mahendra Trivedi","PersonID":812,"FaxNumber":"(505) 555-0101","DateOfBirth":"1992-02-14 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"mahendra@wingtiptoys.com","PreferredName":"Mahendra"}, + {"Gender":"Female","FullName":"Jiri Vacha","PersonID":813,"FaxNumber":"(209) 555-0101","DateOfBirth":"1951-09-29 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"jiri@wingtiptoys.com","PreferredName":"Jiri"}, + {"Gender":"Female","FullName":"Constanta Dita","PersonID":814,"FaxNumber":"(209) 555-0101","DateOfBirth":"1964-06-25 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"constanta@wingtiptoys.com","PreferredName":"Constanta"}, + {"Gender":"Female","FullName":"Magdalena Cervenkova","PersonID":815,"FaxNumber":"(405) 555-0101","DateOfBirth":"1991-07-21 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"magdalena@wingtiptoys.com","PreferredName":"Magdalena"}, + {"Gender":"Female","FullName":"Sylvie Panetier","PersonID":816,"FaxNumber":"(405) 555-0101","DateOfBirth":"1996-02-20 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"sylvie@wingtiptoys.com","PreferredName":"Sylvie"}, + {"Gender":"Female","FullName":"Asha Mudigonda","PersonID":817,"FaxNumber":"(201) 555-0101","DateOfBirth":"1990-08-14 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"asha@wingtiptoys.com","PreferredName":"Asha"}, + {"Gender":"Female","FullName":"Jaya Benjaree","PersonID":818,"FaxNumber":"(201) 555-0101","DateOfBirth":"1979-03-24 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"jaya@wingtiptoys.com","PreferredName":"Jaya"}, + {"Gender":"Female","FullName":"Anete Kundzina","PersonID":819,"FaxNumber":"(239) 555-0101","DateOfBirth":"1996-03-18 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"anete@wingtiptoys.com","PreferredName":"Anete"}, + {"Gender":"Female","FullName":"John Kane","PersonID":820,"FaxNumber":"(239) 555-0101","DateOfBirth":"1977-02-25 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"johnk@contosomotors.com","PreferredName":"Jonny"}, + {"Gender":"Female","FullName":"Laurent Bonnet","PersonID":821,"FaxNumber":"(210) 555-0101","DateOfBirth":"1970-01-16 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"laurentb@wingtiptoys.com","PreferredName":"Laurent"}, + {"Gender":"Female","FullName":"Kunal Nakhtare","PersonID":822,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-12-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"kunal@wingtiptoys.com","PreferredName":"Kunal"}, + {"Gender":"Female","FullName":"Duangrat Atitarn","PersonID":823,"FaxNumber":"(210) 555-0101","DateOfBirth":"1958-02-20 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"duangrat@wingtiptoys.com","PreferredName":"Duangrat"}, + {"Gender":"Female","FullName":"Ella Celmina","PersonID":824,"FaxNumber":"(210) 555-0101","DateOfBirth":"1953-07-30 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"ella@wingtiptoys.com","PreferredName":"Ella"}, + {"Gender":"Female","FullName":"Deviprasad PrabhupÄda","PersonID":825,"FaxNumber":"(605) 555-0101","DateOfBirth":"1968-04-17 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"deviprasad@wingtiptoys.com","PreferredName":"Deviprasad"}, + {"Gender":"Female","FullName":"Tess Seegers","PersonID":826,"FaxNumber":"(605) 555-0101","DateOfBirth":"1981-03-10 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"tess@wingtiptoys.com","PreferredName":"Tess"}, + {"Gender":"Female","FullName":"Aija Lukstina","PersonID":827,"FaxNumber":"(252) 555-0101","DateOfBirth":"1984-01-04 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"aija@wingtiptoys.com","PreferredName":"Aija"}, + {"Gender":"Female","FullName":"Sanjay Cheema","PersonID":828,"FaxNumber":"(252) 555-0101","DateOfBirth":"1955-03-27 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"sanjay@wingtiptoys.com","PreferredName":"Sanjay"}, + {"Gender":"Female","FullName":"Hoc Le","PersonID":829,"FaxNumber":"(208) 555-0101","DateOfBirth":"1964-04-16 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"hoc@wingtiptoys.com","PreferredName":"Hoc"}, + {"Gender":"Female","FullName":"Blagoje Pavlovic","PersonID":830,"FaxNumber":"(208) 555-0101","DateOfBirth":"1969-06-29 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"blagoje@wingtiptoys.com","PreferredName":"Blagoje"}, + {"Gender":"Female","FullName":"Bhairaam Kidambi","PersonID":831,"FaxNumber":"(319) 555-0101","DateOfBirth":"1975-11-30 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"bhairaam@wingtiptoys.com","PreferredName":"Bhairaam"}, + {"Gender":"Female","FullName":"Aleksandrs Cirulis","PersonID":832,"FaxNumber":"(319) 555-0101","DateOfBirth":"1982-03-29 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"aleksandrs@wingtiptoys.com","PreferredName":"Aleksandrs"}, + {"Gender":"Female","FullName":"Jae-Hwa Shin","PersonID":833,"FaxNumber":"(505) 555-0101","DateOfBirth":"1994-09-22 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"jae-hwa@wingtiptoys.com","PreferredName":"Jae-Hwa"}, + {"Gender":"Female","FullName":"Mala Naicker","PersonID":834,"FaxNumber":"(505) 555-0101","DateOfBirth":"1965-10-31 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"mala@wingtiptoys.com","PreferredName":"Mala"}, + {"Gender":"Female","FullName":"Caterina Fallaci","PersonID":835,"FaxNumber":"(210) 555-0101","DateOfBirth":"1988-02-21 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"caterina@wingtiptoys.com","PreferredName":"Caterina"}, + {"Gender":"Female","FullName":"Brayden Macnamara","PersonID":836,"FaxNumber":"(210) 555-0101","DateOfBirth":"1970-04-04 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"brayden@wingtiptoys.com","PreferredName":"Brayden"}, + {"Gender":"Female","FullName":"Baanuraekha Voleti","PersonID":837,"FaxNumber":"(276) 555-0101","DateOfBirth":"1989-02-16 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"baanuraekha@wingtiptoys.com","PreferredName":"Baanuraekha"}, + {"Gender":"Female","FullName":"Renata Alva","PersonID":838,"FaxNumber":"(276) 555-0101","DateOfBirth":"1981-11-25 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"renata@wingtiptoys.com","PreferredName":"Renata"}, + {"Gender":"Female","FullName":"Ranjeet Haldar","PersonID":839,"FaxNumber":"(203) 555-0101","DateOfBirth":"1996-01-19 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"ranjeet@wingtiptoys.com","PreferredName":"Ranjeet"}, + {"Gender":"Female","FullName":"Mandeep Desai","PersonID":840,"FaxNumber":"(203) 555-0101","DateOfBirth":"1965-10-14 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"mandeep@wingtiptoys.com","PreferredName":"Mandeep"}, + {"Gender":"Female","FullName":"Bhaamini Kanaparthi","PersonID":841,"FaxNumber":"(907) 555-0101","DateOfBirth":"1967-08-26 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"bhaamini@wingtiptoys.com","PreferredName":"Bhaamini"}, + {"Gender":"Female","FullName":"Sun-Hi Oh","PersonID":842,"FaxNumber":"(907) 555-0101","DateOfBirth":"1965-02-15 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"sun-hi@wingtiptoys.com","PreferredName":"Sun-Hi"}, + {"Gender":"Female","FullName":"Margit Molnar","PersonID":843,"FaxNumber":"(808) 555-0101","DateOfBirth":"1961-04-03 00:00:00","PhoneNumber":"(808) 555-0100","EmailAddress":"margit@wingtiptoys.com","PreferredName":"Margit"}, + {"Gender":"Female","FullName":"Amanda Kaulina","PersonID":844,"FaxNumber":"(808) 555-0101","DateOfBirth":"1966-09-09 00:00:00","PhoneNumber":"(808) 555-0100","EmailAddress":"amanda@wingtiptoys.com","PreferredName":"Amanda"}, + {"Gender":"Female","FullName":"Chandni Jandhyala","PersonID":845,"FaxNumber":"(210) 555-0101","DateOfBirth":"1977-10-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"chandni@wingtiptoys.com","PreferredName":"Chandni"}, + {"Gender":"Female","FullName":"Verona Sykorova","PersonID":846,"FaxNumber":"(210) 555-0101","DateOfBirth":"1972-09-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"verona@wingtiptoys.com","PreferredName":"Verona"}, + {"Gender":"Female","FullName":"Ljubomir Nesic","PersonID":847,"FaxNumber":"(231) 555-0101","DateOfBirth":"1978-08-22 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"ljubomir@wingtiptoys.com","PreferredName":"Ljubomir"}, + {"Gender":"Female","FullName":"Jennifer Kim","PersonID":848,"FaxNumber":"(231) 555-0101","DateOfBirth":"1968-09-06 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"jenniferk@contosomotors.com","PreferredName":"Jennifer"}, + {"Gender":"Female","FullName":"Telma Hermansson","PersonID":849,"FaxNumber":"(240) 555-0101","DateOfBirth":"1951-05-31 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"telma@wingtiptoys.com","PreferredName":"Telma"}, + {"Gender":"Female","FullName":"Lubomir Spousta","PersonID":850,"FaxNumber":"(240) 555-0101","DateOfBirth":"1991-07-23 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"lubomir@wingtiptoys.com","PreferredName":"Lubomir"}, + {"Gender":"Female","FullName":"Eric Torres","PersonID":851,"FaxNumber":"(307) 555-0101","DateOfBirth":"1975-07-14 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"eric@example.com","PreferredName":"Eric"}, + {"Gender":"Female","FullName":"Cosmina Vlad","PersonID":852,"FaxNumber":"(505) 555-0101","DateOfBirth":"1973-01-20 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"cosmina@example.com","PreferredName":"Cosmina"}, + {"Gender":"Female","FullName":"Bala Dixit","PersonID":853,"FaxNumber":"(209) 555-0101","DateOfBirth":"1997-11-18 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bala@example.com","PreferredName":"Bala"}, + {"Gender":"Female","FullName":"Aleksandrs Riekstins","PersonID":854,"FaxNumber":"(605) 555-0101","DateOfBirth":"1985-04-20 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"aleksandrs@example.com","PreferredName":"Aleksandrs"}, + {"Gender":"Female","FullName":"Ratan Poddar","PersonID":855,"FaxNumber":"(907) 555-0101","DateOfBirth":"1968-02-17 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"ratan@example.com","PreferredName":"Ratan"}, + {"Gender":"Female","FullName":"Shi Tu","PersonID":856,"FaxNumber":"(307) 555-0101","DateOfBirth":"1981-08-10 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"shi@example.com","PreferredName":"Shi"}, + {"Gender":"Female","FullName":"Gunnar Lohmus","PersonID":857,"FaxNumber":"(201) 555-0101","DateOfBirth":"1963-01-15 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"gunnar@example.com","PreferredName":"Gunnar"}, + {"Gender":"Female","FullName":"Jackson Kolios","PersonID":858,"FaxNumber":"(209) 555-0101","DateOfBirth":"1978-03-26 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"jackson@example.com","PreferredName":"Jackson"}, + {"Gender":"Female","FullName":"Madhu Dwivedi","PersonID":859,"FaxNumber":"(802) 555-0101","DateOfBirth":"1995-01-08 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"madhu@example.com","PreferredName":"Madhu"}, + {"Gender":"Female","FullName":"Alena Kellnerova","PersonID":860,"FaxNumber":"(303) 555-0101","DateOfBirth":"1988-06-09 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"alena@example.com","PreferredName":"Alena"}, + {"Gender":"Female","FullName":"Surendra Sahu","PersonID":861,"FaxNumber":"(210) 555-0101","DateOfBirth":"1994-04-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"surendra@example.com","PreferredName":"Surendra"}, + {"Gender":"Female","FullName":"Celica Barajas","PersonID":862,"FaxNumber":"(270) 555-0101","DateOfBirth":"1988-03-04 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"celica@example.com","PreferredName":"Celica"}, + {"Gender":"Female","FullName":"Shyam Poddar","PersonID":863,"FaxNumber":"(218) 555-0101","DateOfBirth":"1968-12-08 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"shyam@example.com","PreferredName":"Shyam"}, + {"Gender":"Female","FullName":"Johanna Hoornstra","PersonID":864,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-12-14 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"johanna@example.com","PreferredName":"Johanna"}, + {"Gender":"Female","FullName":"Libuse Valentova","PersonID":865,"FaxNumber":"(270) 555-0101","DateOfBirth":"1968-10-23 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"libuse@example.com","PreferredName":"Libuse"}, + {"Gender":"Female","FullName":"Harsha Huq","PersonID":866,"FaxNumber":"(314) 555-0101","DateOfBirth":"1961-04-24 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"harsha@example.com","PreferredName":"Harsha"}, + {"Gender":"Female","FullName":"Agrita Kanepa","PersonID":867,"FaxNumber":"(201) 555-0101","DateOfBirth":"1976-02-03 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"agrita@example.com","PreferredName":"Agrita"}, + {"Gender":"Female","FullName":"Liia Orav","PersonID":868,"FaxNumber":"(252) 555-0101","DateOfBirth":"1963-07-26 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"liia@example.com","PreferredName":"Liia"}, + {"Gender":"Female","FullName":"Santiago Vera","PersonID":869,"FaxNumber":"(304) 555-0101","DateOfBirth":"1988-09-19 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"santiago@example.com","PreferredName":"Santiago"}, + {"Gender":"Female","FullName":"Knut Svensson","PersonID":870,"FaxNumber":"(201) 555-0101","DateOfBirth":"1963-09-25 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"knut@example.com","PreferredName":"Knut"}, + {"Gender":"Female","FullName":"Kwanjai Saowaluk","PersonID":871,"FaxNumber":"(787) 555-0101","DateOfBirth":"1972-04-22 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"kwanjai@example.com","PreferredName":"Kwanjai"}, + {"Gender":"Female","FullName":"Suparna Bhattacharya","PersonID":872,"FaxNumber":"(314) 555-0101","DateOfBirth":"1975-05-31 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"suparna@example.com","PreferredName":"Suparna"}, + {"Gender":"Female","FullName":"Francisca Laureano","PersonID":873,"FaxNumber":"(319) 555-0101","DateOfBirth":"1998-01-09 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"francisca@example.com","PreferredName":"Francisca"}, + {"Gender":"Female","FullName":"Risto Valbe","PersonID":874,"FaxNumber":"(205) 555-0101","DateOfBirth":"1990-05-04 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"risto@example.com","PreferredName":"Risto"}, + {"Gender":"Female","FullName":"Jayanta Thakur","PersonID":875,"FaxNumber":"(276) 555-0101","DateOfBirth":"1979-03-09 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"jayanta@example.com","PreferredName":"Jayanta"}, + {"Gender":"Female","FullName":"Leila Carvalho","PersonID":876,"FaxNumber":"(217) 555-0101","DateOfBirth":"1969-10-20 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"leila@example.com","PreferredName":"Leila"}, + {"Gender":"Female","FullName":"Crina Grasu","PersonID":877,"FaxNumber":"(308) 555-0101","DateOfBirth":"1966-02-11 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"crina@example.com","PreferredName":"Crina"}, + {"Gender":"Female","FullName":"Sercan Celik","PersonID":878,"FaxNumber":"(217) 555-0101","DateOfBirth":"1963-03-12 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"sercan@example.com","PreferredName":"Sercan"}, + {"Gender":"Female","FullName":"Jack Walker","PersonID":879,"FaxNumber":"(316) 555-0101","DateOfBirth":"1996-05-19 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"jack@example.com","PreferredName":"Jack"}, + {"Gender":"Female","FullName":"Jana Fialova","PersonID":880,"FaxNumber":"(215) 555-0101","DateOfBirth":"1978-03-31 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jana@example.com","PreferredName":"Jana"}, + {"Gender":"Female","FullName":"Bhaavan Rai","PersonID":881,"FaxNumber":"(308) 555-0101","DateOfBirth":"1950-03-07 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"bhaavan@example.com","PreferredName":"Bhaavan"}, + {"Gender":"Female","FullName":"Aakriti Byrraju","PersonID":882,"FaxNumber":"(216) 555-0101","DateOfBirth":"1951-05-26 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"aakriti@example.com","PreferredName":"Aakriti"}, + {"Gender":"Female","FullName":"Devraj Rao","PersonID":883,"FaxNumber":"(385) 555-0101","DateOfBirth":"1986-01-16 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"devraj@example.com","PreferredName":"Devraj"}, + {"Gender":"Female","FullName":"Cong Hoa","PersonID":884,"FaxNumber":"(212) 555-0101","DateOfBirth":"1973-04-25 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"cong@example.com","PreferredName":"Cong"}, + {"Gender":"Female","FullName":"Dominic Davignon","PersonID":885,"FaxNumber":"(209) 555-0101","DateOfBirth":"1968-07-11 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"dominic@example.com","PreferredName":"Dominic"}, + {"Gender":"Female","FullName":"Abel Spirlea","PersonID":886,"FaxNumber":"(218) 555-0101","DateOfBirth":"1958-02-19 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"abel@example.com","PreferredName":"Abel"}, + {"Gender":"Female","FullName":"Anil Sarkar","PersonID":887,"FaxNumber":"(215) 555-0101","DateOfBirth":"1966-11-02 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"anil@example.com","PreferredName":"Anil"}, + {"Gender":"Female","FullName":"Steve Schmidt","PersonID":888,"FaxNumber":"(339) 555-0101","DateOfBirth":"1975-04-07 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"steves@contosomotors.com","PreferredName":"Pavel"}, + {"Gender":"Female","FullName":"Juan Morse","PersonID":889,"FaxNumber":"(423) 555-0101","DateOfBirth":"1963-08-17 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"juan@example.com","PreferredName":"Juan"}, + {"Gender":"Female","FullName":"Rodrigo Figueiredo","PersonID":890,"FaxNumber":"(803) 555-0101","DateOfBirth":"1975-04-15 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"rodrigo@example.com","PreferredName":"Rodrigo"}, + {"Gender":"Female","FullName":"Camille Authier","PersonID":891,"FaxNumber":"(252) 555-0101","DateOfBirth":"1974-04-12 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"camille@example.com","PreferredName":"Camille"}, + {"Gender":"Female","FullName":"Biju Deb","PersonID":892,"FaxNumber":"(218) 555-0101","DateOfBirth":"1957-07-12 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"biju@example.com","PreferredName":"Biju"}, + {"Gender":"Female","FullName":"Marija Justina Pasek","PersonID":893,"FaxNumber":"(215) 555-0101","DateOfBirth":"1959-08-10 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"marija justina@example.com","PreferredName":"Marija Justina"}, + {"Gender":"Female","FullName":"Durdanah Abbasi","PersonID":894,"FaxNumber":"(201) 555-0101","DateOfBirth":"1958-02-24 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"durdanah@example.com","PreferredName":"Durdanah"}, + {"Gender":"Female","FullName":"Emilie Hrdlickova","PersonID":895,"FaxNumber":"(803) 555-0101","DateOfBirth":"1954-11-01 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"emilie@example.com","PreferredName":"Emilie"}, + {"Gender":"Female","FullName":"Malorie Bousquet","PersonID":896,"FaxNumber":"(209) 555-0101","DateOfBirth":"1984-11-15 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"malorie@example.com","PreferredName":"Malorie"}, + {"Gender":"Female","FullName":"Kristiina Ivanov","PersonID":897,"FaxNumber":"(605) 555-0101","DateOfBirth":"1972-05-26 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"kristiina@example.com","PreferredName":"Kristiina"}, + {"Gender":"Female","FullName":"Alvin Bollinger","PersonID":898,"FaxNumber":"(270) 555-0101","DateOfBirth":"1984-11-21 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"alvin@example.com","PreferredName":"Alvin"}, + {"Gender":"Female","FullName":"Sabine Zalite","PersonID":899,"FaxNumber":"(210) 555-0101","DateOfBirth":"1954-12-16 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"sabine@example.com","PreferredName":"Sabine"}, + {"Gender":"Female","FullName":"Daakshaayaani Sankaramanchi","PersonID":900,"FaxNumber":"(319) 555-0101","DateOfBirth":"1969-06-11 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"daakshaayaani@example.com","PreferredName":"Daakshaayaani"}, + {"Gender":"Female","FullName":"Ebru Erdogan","PersonID":901,"FaxNumber":"(405) 555-0101","DateOfBirth":"1991-11-29 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"ebru@example.com","PreferredName":"Ebru"}, + {"Gender":"Female","FullName":"Bhagavaan Atluri","PersonID":902,"FaxNumber":"(229) 555-0101","DateOfBirth":"1971-04-23 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"bhagavaan@example.com","PreferredName":"Bhagavaan"}, + {"Gender":"Female","FullName":"Caterina Pinto","PersonID":903,"FaxNumber":"(907) 555-0101","DateOfBirth":"1969-03-13 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"caterina@example.com","PreferredName":"Caterina"}, + {"Gender":"Female","FullName":"Daakshaayaani Kommineni","PersonID":904,"FaxNumber":"(239) 555-0101","DateOfBirth":"1972-09-02 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"daakshaayaani@example.com","PreferredName":"Daakshaayaani"}, + {"Gender":"Female","FullName":"Anna Mazzanti","PersonID":905,"FaxNumber":"(314) 555-0101","DateOfBirth":"1996-05-12 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"anna@example.com","PreferredName":"Anna"}, + {"Gender":"Female","FullName":"Satish Mittal","PersonID":906,"FaxNumber":"(215) 555-0101","DateOfBirth":"1966-09-19 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"satish@example.com","PreferredName":"Satish"}, + {"Gender":"Female","FullName":"Clarissa Manfrin","PersonID":907,"FaxNumber":"(210) 555-0101","DateOfBirth":"1964-02-28 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"clarissa@example.com","PreferredName":"Clarissa"}, + {"Gender":"Female","FullName":"Bimla PrabhupÄda","PersonID":908,"FaxNumber":"(209) 555-0101","DateOfBirth":"1987-10-26 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bimla@example.com","PreferredName":"Bimla"}, + {"Gender":"Female","FullName":"Shah Alizadeh","PersonID":909,"FaxNumber":"(304) 555-0101","DateOfBirth":"1996-08-15 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"shah@example.com","PreferredName":"Shah"}, + {"Gender":"Female","FullName":"Marcela Lucescu","PersonID":910,"FaxNumber":"(231) 555-0101","DateOfBirth":"1985-05-19 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"marcela@example.com","PreferredName":"Marcela"}, + {"Gender":"Female","FullName":"Amarasimha Vinjamuri","PersonID":911,"FaxNumber":"(339) 555-0101","DateOfBirth":"1973-06-30 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"amarasimha@example.com","PreferredName":"Amarasimha"}, + {"Gender":"Female","FullName":"Lana Goransson","PersonID":912,"FaxNumber":"(212) 555-0101","DateOfBirth":"1982-05-13 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"lana@example.com","PreferredName":"Lana"}, + {"Gender":"Female","FullName":"Jakub Lukes","PersonID":913,"FaxNumber":"(212) 555-0101","DateOfBirth":"1977-08-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"jakub@example.com","PreferredName":"Jakub"}, + {"Gender":"Female","FullName":"Mikhail Degtyarev","PersonID":914,"FaxNumber":"(218) 555-0101","DateOfBirth":"1984-03-14 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"mikhail@example.com","PreferredName":"Mikhail"}, + {"Gender":"Female","FullName":"Bijoya Thakur","PersonID":915,"FaxNumber":"(225) 555-0101","DateOfBirth":"1978-07-23 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"bijoya@example.com","PreferredName":"Bijoya"}, + {"Gender":"Female","FullName":"Jay Bhuiyan","PersonID":916,"FaxNumber":"(215) 555-0101","DateOfBirth":"1996-01-27 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jay@example.com","PreferredName":"Jay"}, + {"Gender":"Female","FullName":"Jasna Cerkez","PersonID":917,"FaxNumber":"(304) 555-0101","DateOfBirth":"1956-05-11 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"jasna@example.com","PreferredName":"Jasna"}, + {"Gender":"Female","FullName":"Laura Sykorova","PersonID":918,"FaxNumber":"(316) 555-0101","DateOfBirth":"1981-01-24 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"laura@example.com","PreferredName":"Laura"}, + {"Gender":"Female","FullName":"Abel Tatarescu","PersonID":919,"FaxNumber":"(217) 555-0101","DateOfBirth":"1970-01-27 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"abel@example.com","PreferredName":"Abel"}, + {"Gender":"Female","FullName":"In-Su Bae","PersonID":920,"FaxNumber":"(206) 555-0101","DateOfBirth":"1991-01-18 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"in-su@example.com","PreferredName":"In-Su"}, + {"Gender":"Female","FullName":"Darshana Madhunapantula","PersonID":921,"FaxNumber":"(240) 555-0101","DateOfBirth":"1984-06-07 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"darshana@example.com","PreferredName":"Darshana"}, + {"Gender":"Female","FullName":"Katerina Hadrabova","PersonID":922,"FaxNumber":"(219) 555-0101","DateOfBirth":"1984-04-30 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"katerina@example.com","PreferredName":"Katerina"}, + {"Gender":"Female","FullName":"Hana Hlouskova","PersonID":923,"FaxNumber":"(505) 555-0101","DateOfBirth":"1989-03-04 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"hana@example.com","PreferredName":"Hana"}, + {"Gender":"Female","FullName":"Daniel Martensson","PersonID":924,"FaxNumber":"(225) 555-0101","DateOfBirth":"1959-06-25 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"daniel@example.com","PreferredName":"Daniel"}, + {"Gender":"Female","FullName":"Philip Walker","PersonID":925,"FaxNumber":"(216) 555-0101","DateOfBirth":"1963-05-31 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"philip@example.com","PreferredName":"Philip"}, + {"Gender":"Female","FullName":"Marie LeBatelier","PersonID":926,"FaxNumber":"(210) 555-0101","DateOfBirth":"1990-05-20 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"marie@example.com","PreferredName":"Marie"}, + {"Gender":"Female","FullName":"Leyla Siavashi","PersonID":927,"FaxNumber":"(201) 555-0101","DateOfBirth":"1962-08-17 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"leyla@example.com","PreferredName":"Leyla"}, + {"Gender":"Female","FullName":"Miriam House","PersonID":928,"FaxNumber":"(701) 555-0101","DateOfBirth":"1972-01-29 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"miriam@example.com","PreferredName":"Miriam"}, + {"Gender":"Female","FullName":"Jitka Necesana","PersonID":929,"FaxNumber":"(212) 555-0101","DateOfBirth":"1964-09-08 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"jitka@example.com","PreferredName":"Jitka"}, + {"Gender":"Female","FullName":"Edmee Glissen","PersonID":930,"FaxNumber":"(208) 555-0101","DateOfBirth":"1979-02-08 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"edmee@example.com","PreferredName":"Edmee"}, + {"Gender":"Female","FullName":"Magdalena Michnova","PersonID":931,"FaxNumber":"(907) 555-0101","DateOfBirth":"1952-04-02 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"magdalena@example.com","PreferredName":"Magdalena"}, + {"Gender":"Female","FullName":"Maryann Huddleston","PersonID":932,"FaxNumber":"(304) 555-0101","DateOfBirth":"1955-03-19 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"maryann@example.com","PreferredName":"Maryann"}, + {"Gender":"Female","FullName":"Radha Barua","PersonID":933,"FaxNumber":"(405) 555-0101","DateOfBirth":"1995-08-23 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"radha@example.com","PreferredName":"Radha"}, + {"Gender":"Female","FullName":"Anindya Ghatak","PersonID":934,"FaxNumber":"(219) 555-0101","DateOfBirth":"1950-09-20 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"anindya@example.com","PreferredName":"Anindya"}, + {"Gender":"Female","FullName":"Chandrashekhar Dasgupta","PersonID":935,"FaxNumber":"(208) 555-0101","DateOfBirth":"1976-08-11 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"chandrashekhar@example.com","PreferredName":"Chandrashekhar"}, + {"Gender":"Female","FullName":"Debbie Molina","PersonID":936,"FaxNumber":"(270) 555-0101","DateOfBirth":"1980-03-21 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"debbie@example.com","PreferredName":"Debbie"}, + {"Gender":"Female","FullName":"Baran Jonsson","PersonID":937,"FaxNumber":"(458) 555-0101","DateOfBirth":"1996-03-18 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"baran@example.com","PreferredName":"Baran"}, + {"Gender":"Female","FullName":"Jai Lamble","PersonID":938,"FaxNumber":"(479) 555-0101","DateOfBirth":"1968-04-27 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"jai@example.com","PreferredName":"Jai"}, + {"Gender":"Female","FullName":"Sointu Savonheimo","PersonID":939,"FaxNumber":"(701) 555-0101","DateOfBirth":"1967-02-07 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"sointu@example.com","PreferredName":"Sointu"}, + {"Gender":"Female","FullName":"Olya Izmaylov","PersonID":940,"FaxNumber":"(210) 555-0101","DateOfBirth":"1997-06-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"olya@example.com","PreferredName":"Olya"}, + {"Gender":"Female","FullName":"Taneli Riutta","PersonID":941,"FaxNumber":"(276) 555-0101","DateOfBirth":"1991-03-10 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"taneli@example.com","PreferredName":"Taneli"}, + {"Gender":"Female","FullName":"Bahaar Asef zade","PersonID":942,"FaxNumber":"(225) 555-0101","DateOfBirth":"1978-08-11 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"bahaar@example.com","PreferredName":"Bahaar"}, + {"Gender":"Female","FullName":"Leyla Asef zade","PersonID":943,"FaxNumber":"(216) 555-0101","DateOfBirth":"1982-09-26 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"leyla@example.com","PreferredName":"Leyla"}, + {"Gender":"Female","FullName":"Gabriela Hernandes","PersonID":944,"FaxNumber":"(239) 555-0101","DateOfBirth":"1983-01-11 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"gabriela@example.com","PreferredName":"Gabriela"}, + {"Gender":"Female","FullName":"Geza Roman","PersonID":945,"FaxNumber":"(215) 555-0101","DateOfBirth":"1962-08-25 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"geza@example.com","PreferredName":"Geza"}, + {"Gender":"Female","FullName":"Leonardo Folliero","PersonID":946,"FaxNumber":"(339) 555-0101","DateOfBirth":"1980-03-24 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"leonardo@example.com","PreferredName":"Leonardo"}, + {"Gender":"Female","FullName":"Allan Mannik","PersonID":947,"FaxNumber":"(218) 555-0101","DateOfBirth":"1983-10-22 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"allan@example.com","PreferredName":"Allan"}, + {"Gender":"Female","FullName":"Gopalgobinda Sikdar","PersonID":948,"FaxNumber":"(307) 555-0101","DateOfBirth":"1996-09-10 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"gopalgobinda@example.com","PreferredName":"Gopalgobinda"}, + {"Gender":"Female","FullName":"Chin-Sun Chang","PersonID":949,"FaxNumber":"(605) 555-0101","DateOfBirth":"1953-08-02 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"chin-sun@example.com","PreferredName":"Chin-Sun"}, + {"Gender":"Female","FullName":"Lilli Sokk","PersonID":950,"FaxNumber":"(229) 555-0101","DateOfBirth":"1953-08-07 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"lilli@example.com","PreferredName":"Lilli"}, + {"Gender":"Female","FullName":"Adrian Andreasson","PersonID":951,"FaxNumber":"(217) 555-0101","DateOfBirth":"1957-07-17 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"adrian@example.com","PreferredName":"Adrian"}, + {"Gender":"Female","FullName":"Kamila Michnova","PersonID":952,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-12-04 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"kamila@example.com","PreferredName":"Kamila"}, + {"Gender":"Female","FullName":"Bing Han","PersonID":953,"FaxNumber":"(228) 555-0101","DateOfBirth":"1986-05-12 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"bing@example.com","PreferredName":"Bing"}, + {"Gender":"Female","FullName":"Olafs Rozitis","PersonID":954,"FaxNumber":"(316) 555-0101","DateOfBirth":"1980-06-09 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"olafs@example.com","PreferredName":"Olafs"}, + {"Gender":"Female","FullName":"Sara Huiting","PersonID":955,"FaxNumber":"(218) 555-0101","DateOfBirth":"1954-11-05 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"sara@example.com","PreferredName":"Sara"}, + {"Gender":"Female","FullName":"Ajitaab Pakalapati","PersonID":956,"FaxNumber":"(209) 555-0101","DateOfBirth":"1980-03-30 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"ajitaab@example.com","PreferredName":"Ajitaab"}, + {"Gender":"Female","FullName":"Eugen Agafitei","PersonID":957,"FaxNumber":"(252) 555-0101","DateOfBirth":"1989-11-12 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"eugen@example.com","PreferredName":"Eugen"}, + {"Gender":"Female","FullName":"Sumati Bhat","PersonID":958,"FaxNumber":"(206) 555-0101","DateOfBirth":"1970-07-18 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"sumati@example.com","PreferredName":"Sumati"}, + {"Gender":"Female","FullName":"Dena Glissen","PersonID":959,"FaxNumber":"(316) 555-0101","DateOfBirth":"1952-10-27 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"dena@example.com","PreferredName":"Dena"}, + {"Gender":"Female","FullName":"Elina Kaleja","PersonID":960,"FaxNumber":"(225) 555-0101","DateOfBirth":"1973-11-04 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"elina@example.com","PreferredName":"Elina"}, + {"Gender":"Female","FullName":"Liidia Lepp","PersonID":961,"FaxNumber":"(276) 555-0101","DateOfBirth":"1984-03-10 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"liidia@example.com","PreferredName":"Liidia"}, + {"Gender":"Female","FullName":"Volkan senturk","PersonID":962,"FaxNumber":"(276) 555-0101","DateOfBirth":"1963-04-28 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"volkan@example.com","PreferredName":"Volkan"}, + {"Gender":"Female","FullName":"Violetta KlanCisar","PersonID":963,"FaxNumber":"(225) 555-0101","DateOfBirth":"1957-05-22 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"violetta@example.com","PreferredName":"Violetta"}, + {"Gender":"Female","FullName":"Chandana Shasthri","PersonID":964,"FaxNumber":"(803) 555-0101","DateOfBirth":"1997-01-26 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"chandana@example.com","PreferredName":"Chandana"}, + {"Gender":"Female","FullName":"Ana Florea","PersonID":965,"FaxNumber":"(210) 555-0101","DateOfBirth":"1996-04-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"ana@example.com","PreferredName":"Ana"}, + {"Gender":"Female","FullName":"Pinja Jantunen","PersonID":966,"FaxNumber":"(308) 555-0101","DateOfBirth":"1957-08-23 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"pinja@example.com","PreferredName":"Pinja"}, + {"Gender":"Female","FullName":"Pari Hosseini","PersonID":967,"FaxNumber":"(505) 555-0101","DateOfBirth":"1971-11-15 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"pari@example.com","PreferredName":"Pari"}, + {"Gender":"Female","FullName":"Isidora Morales","PersonID":968,"FaxNumber":"(406) 555-0101","DateOfBirth":"1990-02-20 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"isidora@example.com","PreferredName":"Isidora"}, + {"Gender":"Female","FullName":"Kertu Sokk","PersonID":969,"FaxNumber":"(212) 555-0101","DateOfBirth":"1973-08-26 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"kertu@example.com","PreferredName":"Kertu"}, + {"Gender":"Female","FullName":"Gayatri Gajula","PersonID":970,"FaxNumber":"(212) 555-0101","DateOfBirth":"1959-12-28 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"gayatri@example.com","PreferredName":"Gayatri"}, + {"Gender":"Female","FullName":"Victoria Lacusta","PersonID":971,"FaxNumber":"(212) 555-0101","DateOfBirth":"1987-12-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"victoria@example.com","PreferredName":"Victoria"}, + {"Gender":"Female","FullName":"Sumati Chatterjee","PersonID":972,"FaxNumber":"(231) 555-0101","DateOfBirth":"1989-04-12 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"sumati@example.com","PreferredName":"Sumati"}, + {"Gender":"Female","FullName":"Tai Bach","PersonID":973,"FaxNumber":"(219) 555-0101","DateOfBirth":"1959-02-25 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"tai@example.com","PreferredName":"Tai"}, + {"Gender":"Female","FullName":"Eva Schulteisz","PersonID":974,"FaxNumber":"(252) 555-0101","DateOfBirth":"1951-12-27 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"eva@example.com","PreferredName":"Eva"}, + {"Gender":"Female","FullName":"Can ozcan","PersonID":975,"FaxNumber":"(215) 555-0101","DateOfBirth":"1973-07-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"can@example.com","PreferredName":"Can"}, + {"Gender":"Female","FullName":"Richard Friar","PersonID":976,"FaxNumber":"(339) 555-0101","DateOfBirth":"1973-07-24 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"richard@example.com","PreferredName":"Richard"}, + {"Gender":"Female","FullName":"Matyas Sedlar","PersonID":977,"FaxNumber":"(270) 555-0101","DateOfBirth":"1979-02-16 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"matyas@example.com","PreferredName":"Matyas"}, + {"Gender":"Female","FullName":"Arijit Bhuiyan","PersonID":978,"FaxNumber":"(212) 555-0101","DateOfBirth":"1992-04-29 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"arijit@example.com","PreferredName":"Arijit"}, + {"Gender":"Female","FullName":"Vladimir Henzl","PersonID":979,"FaxNumber":"(907) 555-0101","DateOfBirth":"1972-08-25 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"vladimir@example.com","PreferredName":"Vladimir"}, + {"Gender":"Female","FullName":"Shantanu Huq","PersonID":980,"FaxNumber":"(252) 555-0101","DateOfBirth":"1985-10-23 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"shantanu@example.com","PreferredName":"Shantanu"}, + {"Gender":"Female","FullName":"Nada Jovanovic","PersonID":981,"FaxNumber":"(215) 555-0101","DateOfBirth":"1985-09-10 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"nada@example.com","PreferredName":"Nada"}, + {"Gender":"Female","FullName":"Nicolo Cattaneo","PersonID":982,"FaxNumber":"(212) 555-0101","DateOfBirth":"1972-05-15 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"nicolo@example.com","PreferredName":"Nicolo"}, + {"Gender":"Female","FullName":"Joel Carrillo","PersonID":983,"FaxNumber":"(405) 555-0101","DateOfBirth":"1974-04-12 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"joel@example.com","PreferredName":"Joel"}, + {"Gender":"Female","FullName":"Ivan Sepulveda","PersonID":984,"FaxNumber":"(218) 555-0101","DateOfBirth":"1987-04-10 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"ivan@example.com","PreferredName":"Ivan"}, + {"Gender":"Female","FullName":"Daevasree Samavedam","PersonID":985,"FaxNumber":"(201) 555-0101","DateOfBirth":"1962-08-14 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"daevasree@example.com","PreferredName":"Daevasree"}, + {"Gender":"Female","FullName":"Ludmila Smidova","PersonID":986,"FaxNumber":"(480) 555-0101","DateOfBirth":"1973-04-21 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"ludmila@example.com","PreferredName":"Ludmila"}, + {"Gender":"Female","FullName":"Manca Hrastovsek","PersonID":987,"FaxNumber":"(205) 555-0101","DateOfBirth":"1959-10-13 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"manca@example.com","PreferredName":"Manca"}, + {"Gender":"Female","FullName":"Anna Gyarmathi","PersonID":988,"FaxNumber":"(252) 555-0101","DateOfBirth":"1961-10-09 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"anna@example.com","PreferredName":"Anna"}, + {"Gender":"Female","FullName":"Ioana Florea","PersonID":989,"FaxNumber":"(339) 555-0101","DateOfBirth":"1975-11-03 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"ioana@example.com","PreferredName":"Ioana"}, + {"Gender":"Female","FullName":"Lorin Astrom","PersonID":990,"FaxNumber":"(210) 555-0101","DateOfBirth":"1978-10-28 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"lorin@example.com","PreferredName":"Lorin"}, + {"Gender":"Female","FullName":"Bishwa Chatterjee","PersonID":991,"FaxNumber":"(239) 555-0101","DateOfBirth":"1960-12-13 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"bishwa@example.com","PreferredName":"Bishwa"}, + {"Gender":"Female","FullName":"Chaayaadaevi Sonti","PersonID":992,"FaxNumber":"(217) 555-0101","DateOfBirth":"1954-05-29 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"chaayaadaevi@example.com","PreferredName":"Chaayaadaevi"}, + {"Gender":"Female","FullName":"Drazenka Jelic","PersonID":993,"FaxNumber":"(803) 555-0101","DateOfBirth":"1955-12-17 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"drazenka@example.com","PreferredName":"Drazenka"}, + {"Gender":"Female","FullName":"Ida Celma","PersonID":994,"FaxNumber":"(319) 555-0101","DateOfBirth":"1977-08-06 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"ida@example.com","PreferredName":"Ida"}, + {"Gender":"Female","FullName":"Hoc Tran","PersonID":995,"FaxNumber":"(339) 555-0101","DateOfBirth":"1965-02-13 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"hoc@example.com","PreferredName":"Hoc"}, + {"Gender":"Female","FullName":"David safranek","PersonID":996,"FaxNumber":"(215) 555-0101","DateOfBirth":"1992-02-21 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"david@example.com","PreferredName":"David"}, + {"Gender":"Female","FullName":"Svetlana Todorovic","PersonID":997,"FaxNumber":"(206) 555-0101","DateOfBirth":"1966-10-11 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"svetlana@example.com","PreferredName":"Svetlana"}, + {"Gender":"Female","FullName":"Richard Zahradnicek","PersonID":998,"FaxNumber":"(314) 555-0101","DateOfBirth":"1961-03-02 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"richard@example.com","PreferredName":"Richard"}, + {"Gender":"Female","FullName":"Seo-yun Paik","PersonID":999,"FaxNumber":"(210) 555-0101","DateOfBirth":"1968-07-18 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"seo-yun@example.com","PreferredName":"Seo-yun"}, + {"Gender":"Female","FullName":"Emily Whittle","PersonID":1000,"FaxNumber":"(231) 555-0101","DateOfBirth":"1962-11-25 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"emily@example.com","PreferredName":"Emily"} From 4e62823dccbbbf28d91d55e85eb57c138c783246 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 00:26:19 -0700 Subject: [PATCH 005/101] test which op --- json-person-rest_assured_payd_out.json | 998 ++++++++++++++++++ .../cs/rise/opaque/execution/operators.scala | 2 + 2 files changed, 1000 insertions(+) create mode 100644 json-person-rest_assured_payd_out.json diff --git a/json-person-rest_assured_payd_out.json b/json-person-rest_assured_payd_out.json new file mode 100644 index 0000000000..6f1e73f978 --- /dev/null +++ b/json-person-rest_assured_payd_out.json @@ -0,0 +1,998 @@ + {"Gender":"Female","FullName":"Agrita Abele","PersonID":1,"FaxNumber":"(415) 555-0103","DateOfBirth":"1957-12-19 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"agrita@example.com","PreferredName":"Agrita"}, + {"Gender":"Female","FullName":"Kayla Woodcock","PersonID":2,"FaxNumber":"(415) 555-0103","DateOfBirth":"1989-01-25 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"kaylaw@wideworldimporters.com","PreferredName":"Kayla"}, + {"Gender":"Male","FullName":"Hudson Onslow","PersonID":3,"FaxNumber":"(415) 555-0103","DateOfBirth":"1995-11-09 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"hudsono@wideworldimporters.com","PreferredName":"Hudson"}, + {"Gender":"Female","FullName":"Isabella Rupp","PersonID":4,"FaxNumber":"(415) 555-0103","DateOfBirth":"1983-06-09 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"isabellar@wideworldimporters.com","PreferredName":"Isabella"}, + {"Gender":"Female","FullName":"Eva Muirden","PersonID":5,"FaxNumber":"(415) 555-0103","DateOfBirth":"1991-05-23 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"evam@wideworldimporters.com","PreferredName":"Eva"}, + {"Gender":"Female","FullName":"Sophia Hinton","PersonID":6,"FaxNumber":"(415) 555-0103","DateOfBirth":"1993-02-03 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"sophiah@wideworldimporters.com","PreferredName":"Sophia"}, + {"Gender":"Female","FullName":"Amy Trefl","PersonID":7,"FaxNumber":"(415) 555-0103","DateOfBirth":"1990-05-20 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"amyt@wideworldimporters.com","PreferredName":"Amy"}, + {"Gender":"Female","FullName":"Anthony Grosse","PersonID":8,"FaxNumber":"(415) 555-0103","DateOfBirth":"1961-02-14 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"anthonyg@wideworldimporters.com","PreferredName":"Anthony"}, + {"Gender":"Female","FullName":"Alica Fatnowna","PersonID":9,"FaxNumber":"(415) 555-0103","DateOfBirth":"1993-06-14 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"alicaf@wideworldimporters.com","PreferredName":"Alica"}, + {"Gender":"Female","FullName":"Stella Rosenhain","PersonID":10,"FaxNumber":"(415) 555-0103","DateOfBirth":"1988-09-29 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"stellar@wideworldimporters.com","PreferredName":"Stella"}, + {"Gender":"Male","FullName":"Ethan Onslow","PersonID":11,"FaxNumber":"(415) 555-0103","DateOfBirth":"1997-03-18 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"ethano@wideworldimporters.com","PreferredName":"Ethan"}, + {"Gender":"Male","FullName":"Henry Forlonge","PersonID":12,"FaxNumber":"(415) 555-0103","DateOfBirth":"1950-03-11 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"henryf@wideworldimporters.com","PreferredName":"Henry"}, + {"Gender":"Male","FullName":"Hudson Hollinworth","PersonID":13,"FaxNumber":"(415) 555-0103","DateOfBirth":"1972-06-15 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"hudsonh@wideworldimporters.com","PreferredName":"Hudson"}, + {"Gender":"Female","FullName":"Lily Code","PersonID":14,"FaxNumber":"(415) 555-0103","DateOfBirth":"1957-05-17 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"lilyc@wideworldimporters.com","PreferredName":"Lily"}, + {"Gender":"Male","FullName":"Taj Shand","PersonID":15,"FaxNumber":"(415) 555-0103","DateOfBirth":"1978-10-24 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"tajs@wideworldimporters.com","PreferredName":"Taj"}, + {"Gender":"Male","FullName":"Archer Lamble","PersonID":16,"FaxNumber":"(415) 555-0103","DateOfBirth":"1969-12-12 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"archerl@wideworldimporters.com","PreferredName":"Archer"}, + {"Gender":"Male","FullName":"Piper Koch","PersonID":17,"FaxNumber":"(415) 555-0103","DateOfBirth":"1954-11-08 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"piperk@wideworldimporters.com","PreferredName":"Piper"}, + {"Gender":"Female","FullName":"Katie Darwin","PersonID":18,"FaxNumber":"(415) 555-0103","DateOfBirth":"1960-06-16 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"katied@wideworldimporters.com","PreferredName":"Katie"}, + {"Gender":"Female","FullName":"Jai Shand","PersonID":19,"FaxNumber":"(415) 555-0103","DateOfBirth":"1981-05-02 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"jais@wideworldimporters.com","PreferredName":"Jai"}, + {"Gender":"Male","FullName":"Jack Potter","PersonID":20,"FaxNumber":"(415) 555-0103","DateOfBirth":"1955-12-27 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"jackp@wideworldimporters.com","PreferredName":"Jack"}, + {"Gender":"Male","FullName":"Reio Kabin","PersonID":21,"FaxNumber":"(847) 555-0101","DateOfBirth":"1958-08-15 00:00:00","PhoneNumber":"(847) 555-0100","EmailAddress":"reio@adatum.com","PreferredName":"Reio"}, + {"Gender":"Male","FullName":"Oliver Kivi","PersonID":22,"FaxNumber":"(847) 555-0101","DateOfBirth":"1987-01-10 00:00:00","PhoneNumber":"(847) 555-0100","EmailAddress":"olly@adatum.com","PreferredName":"Olly"}, + {"Gender":"Female","FullName":"Hanna Mihhailov","PersonID":23,"FaxNumber":"(360) 555-0101","DateOfBirth":"1967-03-08 00:00:00","PhoneNumber":"(360) 555-0100","EmailAddress":"hannam@Contoso Motors.com","PreferredName":"Hanna"}, + {"Gender":"Female","FullName":"Paulus Lippmaa","PersonID":24,"FaxNumber":"(360) 555-0101","DateOfBirth":"1993-07-29 00:00:00","PhoneNumber":"(360) 555-0100","EmailAddress":"paulusl@Contoso Motors.com","PreferredName":"Paulus"}, + {"Gender":"Female","FullName":"Kerstin Parn","PersonID":25,"FaxNumber":"(415) 555-0101","DateOfBirth":"1981-03-29 00:00:00","PhoneNumber":"(415) 555-0100","EmailAddress":"kerstin@consolidatedmessenger.com","PreferredName":"Kerstin"}, + {"Gender":"Female","FullName":"Helen Ahven","PersonID":26,"FaxNumber":"(415) 555-0101","DateOfBirth":"1980-02-28 00:00:00","PhoneNumber":"(415) 555-0100","EmailAddress":"helen@consolidatedmessenger.com","PreferredName":"Helen"}, + {"Gender":"Female","FullName":"Bill Lawson","PersonID":27,"FaxNumber":"(203) 555-0107","DateOfBirth":"1980-04-27 00:00:00","PhoneNumber":"(203) 555-0107","EmailAddress":"billl@fabrikam.com","PreferredName":"Bill"}, + {"Gender":"Female","FullName":"Helen Moore","PersonID":28,"FaxNumber":"(203) 555-0107","DateOfBirth":"1991-12-05 00:00:00","PhoneNumber":"(203) 555-0104","EmailAddress":"helenm@fabrikam.com","PreferredName":"Helen"}, + {"Gender":"Female","FullName":"Penny Buck","PersonID":29,"FaxNumber":"(406) 555-0109","DateOfBirth":"1961-10-09 00:00:00","PhoneNumber":"(406) 555-0107","EmailAddress":"pennyb@graphicdesigninstitute.com","PreferredName":"Penny"}, + {"Gender":"Female","FullName":"Donna Smith","PersonID":30,"FaxNumber":"(406) 555-0109","DateOfBirth":"1979-01-18 00:00:00","PhoneNumber":"(406) 555-0101","EmailAddress":"donnas@graphicdesigninstitute.com","PreferredName":"Donna"}, + {"Gender":"Female","FullName":"Annette Talon","PersonID":32,"FaxNumber":"(423) 555-0100","DateOfBirth":"1973-09-03 00:00:00","PhoneNumber":"(423) 555-0106","EmailAddress":"annettet@humongousinsurance.com","PreferredName":"Annette"}, + {"Gender":"Female","FullName":"Elias Myllari","PersonID":33,"FaxNumber":"(209) 555-0106","DateOfBirth":"1992-09-24 00:00:00","PhoneNumber":"(209) 555-0101","EmailAddress":"eliasm@litwareinc.com","PreferredName":"Elias"}, + {"Gender":"Female","FullName":"Vilma Niva","PersonID":34,"FaxNumber":"(209) 555-0106","DateOfBirth":"1963-03-31 00:00:00","PhoneNumber":"(209) 555-0103","EmailAddress":"vilman@litwareinc.com","PreferredName":"Vilma"}, + {"Gender":"Female","FullName":"Prem Prabhu","PersonID":35,"FaxNumber":"(423) 555-0108","DateOfBirth":"1965-05-19 00:00:00","PhoneNumber":"(423) 555-0102","EmailAddress":"premp@lucernepublishing.com","PreferredName":"Prem"}, + {"Gender":"Female","FullName":"Sunita Jadhav","PersonID":36,"FaxNumber":"(423) 555-0108","DateOfBirth":"1990-01-19 00:00:00","PhoneNumber":"(423) 555-0101","EmailAddress":"sunitaj@lucernepublishing.com","PreferredName":"Sunita"}, + {"Gender":"Female","FullName":"Marcos Costa","PersonID":37,"FaxNumber":"(252) 555-0101","DateOfBirth":"1960-12-13 00:00:00","PhoneNumber":"(252) 555-0106","EmailAddress":"marcosc@nodpublishers.com","PreferredName":"Marcos"}, + {"Gender":"Female","FullName":"Matheus Oliveira","PersonID":38,"FaxNumber":"(252) 555-0101","DateOfBirth":"1951-06-22 00:00:00","PhoneNumber":"(252) 555-0107","EmailAddress":"matheuso@nodpublishers.com","PreferredName":"Matheus"}, + {"Gender":"Female","FullName":"Eliza Soderberg","PersonID":39,"FaxNumber":"(201) 555-0106","DateOfBirth":"1973-04-11 00:00:00","PhoneNumber":"(201) 555-0101","EmailAddress":"elizas@northwindelectriccars.com","PreferredName":"Eliza"}, + {"Gender":"Female","FullName":"Sara Karlsson","PersonID":40,"FaxNumber":"(201) 555-0106","DateOfBirth":"1961-04-07 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"sarak@northwindelectriccars.com","PreferredName":"Sara"}, + {"Gender":"Female","FullName":"Donald Jones","PersonID":41,"FaxNumber":"(605) 555-0101","DateOfBirth":"1990-03-05 00:00:00","PhoneNumber":"(605) 555-0101","EmailAddress":"donaldj@treyresearch.net","PreferredName":"Donald"}, + {"Gender":"Female","FullName":"Sharon Graham","PersonID":42,"FaxNumber":"(605) 555-0101","DateOfBirth":"1978-08-18 00:00:00","PhoneNumber":"(605) 555-0106","EmailAddress":"sharong@treyresearch.net","PreferredName":"Sharon"}, + {"Gender":"Female","FullName":"Hai Dam","PersonID":43,"FaxNumber":"(218) 555-0108","DateOfBirth":"1964-08-10 00:00:00","PhoneNumber":"(218) 555-0101","EmailAddress":"haid@thephone-company.com","PreferredName":"Hai"}, + {"Gender":"Female","FullName":"Thanh Dinh","PersonID":44,"FaxNumber":"(218) 555-0108","DateOfBirth":"1959-06-11 00:00:00","PhoneNumber":"(218) 555-0104","EmailAddress":"thanhd@thephone-company.com","PreferredName":"Thanh"}, + {"Gender":"Female","FullName":"Hubert Helms","PersonID":45,"FaxNumber":"(415) 555-0104","DateOfBirth":"1964-08-19 00:00:00","PhoneNumber":"(415) 555-0103","EmailAddress":"huberth@woodgrovebank.com","PreferredName":"Hubert"}, + {"Gender":"Female","FullName":"Donald Small","PersonID":46,"FaxNumber":"(415) 555-0104","DateOfBirth":"1998-02-08 00:00:00","PhoneNumber":"(415) 555-0105","EmailAddress":"donalds@woodgrovebank.com","PreferredName":"Donald"}, + {"Gender":"Female","FullName":"Waldemar Fisar","PersonID":47,"FaxNumber":"(308) 555-0101","DateOfBirth":"1952-01-23 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"waldemar@tailspintoys.com","PreferredName":"Waldemar"}, + {"Gender":"Female","FullName":"Laimonis Berzins","PersonID":48,"FaxNumber":"(308) 555-0101","DateOfBirth":"1964-03-26 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"laimonis@tailspintoys.com","PreferredName":"Laimonis"}, + {"Gender":"Female","FullName":"Lorena Cindric","PersonID":49,"FaxNumber":"(406) 555-0101","DateOfBirth":"1960-12-10 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"lorena@tailspintoys.com","PreferredName":"Lorena"}, + {"Gender":"Female","FullName":"Hung Van Groesen","PersonID":50,"FaxNumber":"(406) 555-0101","DateOfBirth":"1976-05-16 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"hung@tailspintoys.com","PreferredName":"Hung"}, + {"Gender":"Female","FullName":"Bhaargav Rambhatla","PersonID":51,"FaxNumber":"(480) 555-0101","DateOfBirth":"1983-03-18 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"bhaargav@tailspintoys.com","PreferredName":"Bhaargav"}, + {"Gender":"Female","FullName":"Mudar Jevtic","PersonID":52,"FaxNumber":"(480) 555-0101","DateOfBirth":"1997-10-27 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"mudar@tailspintoys.com","PreferredName":"Mudar"}, + {"Gender":"Female","FullName":"Daniel Roman","PersonID":53,"FaxNumber":"(316) 555-0101","DateOfBirth":"1989-03-17 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"daniel@tailspintoys.com","PreferredName":"Daniel"}, + {"Gender":"Female","FullName":"Leyla Radnia","PersonID":54,"FaxNumber":"(316) 555-0101","DateOfBirth":"1974-05-12 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"leyla@tailspintoys.com","PreferredName":"Leyla"}, + {"Gender":"Female","FullName":"Johanna Huiting","PersonID":55,"FaxNumber":"(212) 555-0101","DateOfBirth":"1995-06-27 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"johanna@tailspintoys.com","PreferredName":"Johanna"}, + {"Gender":"Female","FullName":"Robert Ruutli","PersonID":56,"FaxNumber":"(212) 555-0101","DateOfBirth":"1972-08-22 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"robert@tailspintoys.com","PreferredName":"Robert"}, + {"Gender":"Female","FullName":"Biswajeet Thakur","PersonID":57,"FaxNumber":"(701) 555-0101","DateOfBirth":"1982-04-29 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"biswajeet@tailspintoys.com","PreferredName":"Biswajeet"}, + {"Gender":"Female","FullName":"Radha Shah","PersonID":58,"FaxNumber":"(701) 555-0101","DateOfBirth":"1980-07-31 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"radha@tailspintoys.com","PreferredName":"Radha"}, + {"Gender":"Female","FullName":"Kalidas Nadar","PersonID":59,"FaxNumber":"(423) 555-0101","DateOfBirth":"1978-12-13 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"kalidas@tailspintoys.com","PreferredName":"Kalidas"}, + {"Gender":"Female","FullName":"Filip Nedvidek","PersonID":60,"FaxNumber":"(423) 555-0101","DateOfBirth":"1979-10-30 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"filip@tailspintoys.com","PreferredName":"Filip"}, + {"Gender":"Female","FullName":"Kanti Kotadia","PersonID":61,"FaxNumber":"(303) 555-0101","DateOfBirth":"1967-05-23 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"kanti@tailspintoys.com","PreferredName":"Kanti"}, + {"Gender":"Female","FullName":"Hoa Cu","PersonID":62,"FaxNumber":"(303) 555-0101","DateOfBirth":"1976-04-29 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"hoa@tailspintoys.com","PreferredName":"Hoa"}, + {"Gender":"Female","FullName":"Sointu Aalto","PersonID":63,"FaxNumber":"(201) 555-0101","DateOfBirth":"1991-03-26 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"sointu@tailspintoys.com","PreferredName":"Sointu"}, + {"Gender":"Female","FullName":"Jae-Gon Min","PersonID":64,"FaxNumber":"(201) 555-0101","DateOfBirth":"1977-07-21 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"jae-gon@tailspintoys.com","PreferredName":"Jae-Gon"}, + {"Gender":"Female","FullName":"Paula Matos","PersonID":66,"FaxNumber":"(701) 555-0101","DateOfBirth":"1977-01-23 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"paula@tailspintoys.com","PreferredName":"Paula"}, + {"Gender":"Female","FullName":"Elnaz Javan","PersonID":67,"FaxNumber":"(215) 555-0101","DateOfBirth":"1974-06-06 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"elnaz@tailspintoys.com","PreferredName":"Elnaz"}, + {"Gender":"Female","FullName":"Jayashish Ghatak","PersonID":68,"FaxNumber":"(215) 555-0101","DateOfBirth":"1972-11-09 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jayashish@tailspintoys.com","PreferredName":"Jayashish"}, + {"Gender":"Female","FullName":"Heloisa Fernandes","PersonID":69,"FaxNumber":"(218) 555-0101","DateOfBirth":"1956-01-02 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"heloisa@tailspintoys.com","PreferredName":"Heloisa"}, + {"Gender":"Female","FullName":"Amornrat Rattanaporn","PersonID":70,"FaxNumber":"(218) 555-0101","DateOfBirth":"1988-07-17 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"amornrat@tailspintoys.com","PreferredName":"Amornrat"}, + {"Gender":"Female","FullName":"Razeena Hosseini","PersonID":71,"FaxNumber":"(217) 555-0101","DateOfBirth":"1955-12-02 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"razeena@tailspintoys.com","PreferredName":"Razeena"}, + {"Gender":"Female","FullName":"Leticia Ribeiro","PersonID":72,"FaxNumber":"(217) 555-0101","DateOfBirth":"1997-09-20 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"leticia@tailspintoys.com","PreferredName":"Leticia"}, + {"Gender":"Female","FullName":"Tereza Valentova","PersonID":73,"FaxNumber":"(240) 555-0101","DateOfBirth":"1984-03-14 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"tereza@tailspintoys.com","PreferredName":"Tereza"}, + {"Gender":"Female","FullName":"Brijesh Ganguly","PersonID":74,"FaxNumber":"(240) 555-0101","DateOfBirth":"1986-08-02 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"brijesh@tailspintoys.com","PreferredName":"Brijesh"}, + {"Gender":"Female","FullName":"Filips Jaunzems","PersonID":75,"FaxNumber":"(210) 555-0101","DateOfBirth":"1959-09-06 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"filips@tailspintoys.com","PreferredName":"Filips"}, + {"Gender":"Female","FullName":"Bharati Bhowmick","PersonID":76,"FaxNumber":"(210) 555-0101","DateOfBirth":"1956-11-10 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"bharati@tailspintoys.com","PreferredName":"Bharati"}, + {"Gender":"Female","FullName":"Nitin Matondkar","PersonID":77,"FaxNumber":"(314) 555-0101","DateOfBirth":"1953-08-14 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"nitin@tailspintoys.com","PreferredName":"Nitin"}, + {"Gender":"Female","FullName":"Joy Dutta","PersonID":78,"FaxNumber":"(314) 555-0101","DateOfBirth":"1976-05-04 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"joy@tailspintoys.com","PreferredName":"Joy"}, + {"Gender":"Female","FullName":"Adam Kubat","PersonID":79,"FaxNumber":"(216) 555-0101","DateOfBirth":"1986-09-18 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"adam@tailspintoys.com","PreferredName":"Adam"}, + {"Gender":"Female","FullName":"Gulzar Naidu","PersonID":80,"FaxNumber":"(216) 555-0101","DateOfBirth":"1976-03-04 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"gulzar@tailspintoys.com","PreferredName":"Gulzar"}, + {"Gender":"Female","FullName":"Rohan Kumar","PersonID":81,"FaxNumber":"(603) 555-0101","DateOfBirth":"1979-03-03 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"rohank@contosomotors.com","PreferredName":"Rohan"}, + {"Gender":"Female","FullName":"Prakash Sarma","PersonID":82,"FaxNumber":"(603) 555-0101","DateOfBirth":"1975-11-30 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"prakash@tailspintoys.com","PreferredName":"Prakash"}, + {"Gender":"Female","FullName":"Mithun Bhattacharya","PersonID":83,"FaxNumber":"(907) 555-0101","DateOfBirth":"1976-05-01 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"mithun@tailspintoys.com","PreferredName":"Mithun"}, + {"Gender":"Female","FullName":"Sandhya Raju","PersonID":84,"FaxNumber":"(907) 555-0101","DateOfBirth":"1969-01-17 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"sandhya@tailspintoys.com","PreferredName":"Sandhya"}, + {"Gender":"Female","FullName":"Shreya Verma","PersonID":85,"FaxNumber":"(206) 555-0101","DateOfBirth":"1983-02-14 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"shreyav@contosomotors.com","PreferredName":"Shreya"}, + {"Gender":"Female","FullName":"Ravindra Parkar","PersonID":86,"FaxNumber":"(206) 555-0101","DateOfBirth":"1977-03-23 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"ravindra@tailspintoys.com","PreferredName":"Ravindra"}, + {"Gender":"Female","FullName":"Duleep Raju","PersonID":87,"FaxNumber":"(215) 555-0101","DateOfBirth":"1993-10-18 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"duleep@tailspintoys.com","PreferredName":"Duleep"}, + {"Gender":"Female","FullName":"Vlatka Duvnjak","PersonID":88,"FaxNumber":"(215) 555-0101","DateOfBirth":"1978-12-21 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"vlatka@tailspintoys.com","PreferredName":"Vlatka"}, + {"Gender":"Female","FullName":"Cristina Longo","PersonID":89,"FaxNumber":"(239) 555-0101","DateOfBirth":"1950-07-21 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"cristina@tailspintoys.com","PreferredName":"Cristina"}, + {"Gender":"Female","FullName":"Antonio Lucchese","PersonID":90,"FaxNumber":"(239) 555-0101","DateOfBirth":"1958-06-29 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"antonio@tailspintoys.com","PreferredName":"Antonio"}, + {"Gender":"Female","FullName":"Hang Tang","PersonID":91,"FaxNumber":"(907) 555-0101","DateOfBirth":"1991-11-23 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"hang@tailspintoys.com","PreferredName":"Hang"}, + {"Gender":"Female","FullName":"Hong Ang","PersonID":92,"FaxNumber":"(907) 555-0101","DateOfBirth":"1966-09-15 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"hong@tailspintoys.com","PreferredName":"Hong"}, + {"Gender":"Female","FullName":"Intira Mookjai","PersonID":93,"FaxNumber":"(252) 555-0101","DateOfBirth":"1962-12-25 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"intira@tailspintoys.com","PreferredName":"Intira"}, + {"Gender":"Female","FullName":"Young-Tae Kim","PersonID":94,"FaxNumber":"(252) 555-0101","DateOfBirth":"1965-03-14 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"young-tae@tailspintoys.com","PreferredName":"Young-Tae"}, + {"Gender":"Female","FullName":"Sulabha Khalsa","PersonID":95,"FaxNumber":"(209) 555-0101","DateOfBirth":"1950-09-24 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"sulabha@tailspintoys.com","PreferredName":"Sulabha"}, + {"Gender":"Female","FullName":"Alessandro Milano","PersonID":96,"FaxNumber":"(209) 555-0101","DateOfBirth":"1952-02-17 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"alessandro@tailspintoys.com","PreferredName":"Alessandro"}, + {"Gender":"Female","FullName":"Dhanishta Majji","PersonID":97,"FaxNumber":"(319) 555-0101","DateOfBirth":"1962-04-28 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"dhanishta@tailspintoys.com","PreferredName":"Dhanishta"}, + {"Gender":"Female","FullName":"Nils Podnieks","PersonID":98,"FaxNumber":"(319) 555-0101","DateOfBirth":"1979-01-06 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"nils@tailspintoys.com","PreferredName":"Nils"}, + {"Gender":"Female","FullName":"Paula Gonzales","PersonID":99,"FaxNumber":"(218) 555-0101","DateOfBirth":"1981-08-17 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"paula@tailspintoys.com","PreferredName":"Paula"}, + {"Gender":"Female","FullName":"Chetana Dewangan","PersonID":100,"FaxNumber":"(218) 555-0101","DateOfBirth":"1987-01-11 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"chetana@tailspintoys.com","PreferredName":"Chetana"}, + {"Gender":"Female","FullName":"Tatjana Utjesenovic","PersonID":101,"FaxNumber":"(212) 555-0101","DateOfBirth":"1976-05-09 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"tatjana@tailspintoys.com","PreferredName":"Tatjana"}, + {"Gender":"Female","FullName":"Theresa Boose","PersonID":102,"FaxNumber":"(212) 555-0101","DateOfBirth":"1995-08-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"theresa@tailspintoys.com","PreferredName":"Theresa"}, + {"Gender":"Female","FullName":"Karel Hanak","PersonID":103,"FaxNumber":"(205) 555-0101","DateOfBirth":"1958-05-23 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"karel@tailspintoys.com","PreferredName":"Karel"}, + {"Gender":"Female","FullName":"Fernanda Fierro","PersonID":104,"FaxNumber":"(205) 555-0101","DateOfBirth":"1986-02-01 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"fernanda@tailspintoys.com","PreferredName":"Fernanda"}, + {"Gender":"Female","FullName":"Odessa Schneider","PersonID":105,"FaxNumber":"(206) 555-0101","DateOfBirth":"1987-11-01 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"odessa@tailspintoys.com","PreferredName":"Odessa"}, + {"Gender":"Female","FullName":"Konrads Sprogis","PersonID":106,"FaxNumber":"(206) 555-0101","DateOfBirth":"1978-05-08 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"konrads@tailspintoys.com","PreferredName":"Konrads"}, + {"Gender":"Female","FullName":"Kimberly Pace","PersonID":107,"FaxNumber":"(206) 555-0101","DateOfBirth":"1969-03-23 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"kimberly@tailspintoys.com","PreferredName":"Kimberly"}, + {"Gender":"Female","FullName":"Shobha Gupta","PersonID":108,"FaxNumber":"(206) 555-0101","DateOfBirth":"1993-05-13 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"shobha@tailspintoys.com","PreferredName":"Shobha"}, + {"Gender":"Female","FullName":"Nikolajs Kalejs","PersonID":109,"FaxNumber":"(210) 555-0101","DateOfBirth":"1987-07-24 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"nikolajs@tailspintoys.com","PreferredName":"Nikolajs"}, + {"Gender":"Female","FullName":"Philippe Lamy","PersonID":110,"FaxNumber":"(210) 555-0101","DateOfBirth":"1951-05-11 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"philippe@tailspintoys.com","PreferredName":"Philippe"}, + {"Gender":"Female","FullName":"Haasini Rai","PersonID":111,"FaxNumber":"(803) 555-0101","DateOfBirth":"1991-04-26 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"haasini@tailspintoys.com","PreferredName":"Haasini"}, + {"Gender":"Female","FullName":"Viktorie Melicharova","PersonID":112,"FaxNumber":"(803) 555-0101","DateOfBirth":"1992-08-22 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"viktorie@tailspintoys.com","PreferredName":"Viktorie"}, + {"Gender":"Female","FullName":"Anjali Asthana","PersonID":113,"FaxNumber":"(210) 555-0101","DateOfBirth":"1975-04-11 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"anjali@tailspintoys.com","PreferredName":"Anjali"}, + {"Gender":"Female","FullName":"Hanuman Negi","PersonID":114,"FaxNumber":"(210) 555-0101","DateOfBirth":"1950-03-07 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"hanuman@tailspintoys.com","PreferredName":"Hanuman"}, + {"Gender":"Female","FullName":"Shah Omidi","PersonID":115,"FaxNumber":"(304) 555-0101","DateOfBirth":"1975-11-20 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"shah@tailspintoys.com","PreferredName":"Shah"}, + {"Gender":"Female","FullName":"Chandra Mittal","PersonID":116,"FaxNumber":"(304) 555-0101","DateOfBirth":"1995-05-20 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"chandra@tailspintoys.com","PreferredName":"Chandra"}, + {"Gender":"Female","FullName":"Ferhat Celik","PersonID":117,"FaxNumber":"(270) 555-0101","DateOfBirth":"1985-11-30 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"ferhat@tailspintoys.com","PreferredName":"Ferhat"}, + {"Gender":"Female","FullName":"Leyla Celik","PersonID":118,"FaxNumber":"(270) 555-0101","DateOfBirth":"1996-05-03 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"leyla@tailspintoys.com","PreferredName":"Leyla"}, + {"Gender":"Female","FullName":"Dayarama Kamei","PersonID":119,"FaxNumber":"(458) 555-0101","DateOfBirth":"1993-04-07 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"dayarama@tailspintoys.com","PreferredName":"Dayarama"}, + {"Gender":"Female","FullName":"Elisabeth Flamand","PersonID":120,"FaxNumber":"(458) 555-0101","DateOfBirth":"1959-01-27 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"elisabeth@tailspintoys.com","PreferredName":"Elisabeth"}, + {"Gender":"Female","FullName":"Nils Kalnins","PersonID":121,"FaxNumber":"(314) 555-0101","DateOfBirth":"1988-12-06 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"nils@tailspintoys.com","PreferredName":"Nils"}, + {"Gender":"Female","FullName":"Rajiv Kotadia","PersonID":122,"FaxNumber":"(314) 555-0101","DateOfBirth":"1976-12-30 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"rajiv@tailspintoys.com","PreferredName":"Rajiv"}, + {"Gender":"Female","FullName":"Ashish Acharya","PersonID":123,"FaxNumber":"(270) 555-0101","DateOfBirth":"1995-07-11 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"ashish@tailspintoys.com","PreferredName":"Ashish"}, + {"Gender":"Female","FullName":"Filip Sedlar","PersonID":124,"FaxNumber":"(270) 555-0101","DateOfBirth":"1963-05-20 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"filip@tailspintoys.com","PreferredName":"Filip"}, + {"Gender":"Female","FullName":"Alena Prikrylova","PersonID":125,"FaxNumber":"(210) 555-0101","DateOfBirth":"1971-12-16 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"alena@tailspintoys.com","PreferredName":"Alena"}, + {"Gender":"Female","FullName":"Catina Bojin","PersonID":126,"FaxNumber":"(210) 555-0101","DateOfBirth":"1955-12-05 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"catina@tailspintoys.com","PreferredName":"Catina"}, + {"Gender":"Female","FullName":"Lana Rozej","PersonID":127,"FaxNumber":"(314) 555-0101","DateOfBirth":"1963-05-22 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"lana@tailspintoys.com","PreferredName":"Lana"}, + {"Gender":"Female","FullName":"Kalpana Mukherjee","PersonID":128,"FaxNumber":"(314) 555-0101","DateOfBirth":"1980-10-25 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"kalpana@tailspintoys.com","PreferredName":"Kalpana"}, + {"Gender":"Female","FullName":"Chandrakanta Raut","PersonID":129,"FaxNumber":"(212) 555-0101","DateOfBirth":"1993-03-10 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"chandrakanta@tailspintoys.com","PreferredName":"Chandrakanta"}, + {"Gender":"Female","FullName":"Ivan Castellanos","PersonID":130,"FaxNumber":"(212) 555-0101","DateOfBirth":"1975-02-02 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"ivan@tailspintoys.com","PreferredName":"Ivan"}, + {"Gender":"Female","FullName":"Ganapati Gadiyaram","PersonID":131,"FaxNumber":"(206) 555-0101","DateOfBirth":"1988-09-16 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"ganapati@tailspintoys.com","PreferredName":"Ganapati"}, + {"Gender":"Female","FullName":"Parsa Blijleven","PersonID":132,"FaxNumber":"(206) 555-0101","DateOfBirth":"1979-03-02 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"parsa@tailspintoys.com","PreferredName":"Parsa"}, + {"Gender":"Female","FullName":"Adrijana Blagojevic","PersonID":133,"FaxNumber":"(206) 555-0101","DateOfBirth":"1959-01-08 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"adrijana@tailspintoys.com","PreferredName":"Adrijana"}, + {"Gender":"Female","FullName":"Lina Martins","PersonID":134,"FaxNumber":"(206) 555-0101","DateOfBirth":"1984-05-26 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"lina@tailspintoys.com","PreferredName":"Lina"}, + {"Gender":"Female","FullName":"Lap Dinh","PersonID":135,"FaxNumber":"(240) 555-0101","DateOfBirth":"1956-11-08 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"lap@tailspintoys.com","PreferredName":"Lap"}, + {"Gender":"Female","FullName":"August Astrom","PersonID":136,"FaxNumber":"(240) 555-0101","DateOfBirth":"1989-06-28 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"august@tailspintoys.com","PreferredName":"August"}, + {"Gender":"Female","FullName":"Didem ozCelik","PersonID":137,"FaxNumber":"(205) 555-0101","DateOfBirth":"1996-01-12 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"didem@tailspintoys.com","PreferredName":"Didem"}, + {"Gender":"Female","FullName":"Krista Andrejev","PersonID":138,"FaxNumber":"(205) 555-0101","DateOfBirth":"1965-07-06 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"krista@tailspintoys.com","PreferredName":"Krista"}, + {"Gender":"Female","FullName":"Serhat Akbulut","PersonID":139,"FaxNumber":"(209) 555-0101","DateOfBirth":"1985-06-23 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"serhat@tailspintoys.com","PreferredName":"Serhat"}, + {"Gender":"Female","FullName":"Nadja Johansson","PersonID":140,"FaxNumber":"(209) 555-0101","DateOfBirth":"1972-04-06 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"nadja@tailspintoys.com","PreferredName":"Nadja"}, + {"Gender":"Female","FullName":"Daniela Barrios","PersonID":141,"FaxNumber":"(206) 555-0101","DateOfBirth":"1987-04-28 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"daniela@tailspintoys.com","PreferredName":"Daniela"}, + {"Gender":"Female","FullName":"Daina Celma","PersonID":142,"FaxNumber":"(206) 555-0101","DateOfBirth":"1984-08-18 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"daina@tailspintoys.com","PreferredName":"Daina"}, + {"Gender":"Female","FullName":"Julia Slobodova","PersonID":143,"FaxNumber":"(231) 555-0101","DateOfBirth":"1987-10-09 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"julia@tailspintoys.com","PreferredName":"Julia"}, + {"Gender":"Female","FullName":"Raimonds Kalnins","PersonID":144,"FaxNumber":"(231) 555-0101","DateOfBirth":"1952-09-17 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"raimonds@tailspintoys.com","PreferredName":"Raimonds"}, + {"Gender":"Female","FullName":"Marcela Jankova","PersonID":145,"FaxNumber":"(304) 555-0101","DateOfBirth":"1980-04-09 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"marcela@tailspintoys.com","PreferredName":"Marcela"}, + {"Gender":"Female","FullName":"Predrag Stojanovic","PersonID":146,"FaxNumber":"(304) 555-0101","DateOfBirth":"1979-12-31 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"predrag@tailspintoys.com","PreferredName":"Predrag"}, + {"Gender":"Female","FullName":"Dipali Sonkar","PersonID":147,"FaxNumber":"(201) 555-0101","DateOfBirth":"1978-01-11 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"dipali@tailspintoys.com","PreferredName":"Dipali"}, + {"Gender":"Female","FullName":"Mariana Apodaca","PersonID":148,"FaxNumber":"(201) 555-0101","DateOfBirth":"1963-07-19 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"mariana@tailspintoys.com","PreferredName":"Mariana"}, + {"Gender":"Female","FullName":"Bansidhar Mitra","PersonID":149,"FaxNumber":"(209) 555-0101","DateOfBirth":"1958-10-20 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bansidhar@tailspintoys.com","PreferredName":"Bansidhar"}, + {"Gender":"Female","FullName":"Liia Mae","PersonID":150,"FaxNumber":"(209) 555-0101","DateOfBirth":"1997-12-20 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"liia@tailspintoys.com","PreferredName":"Liia"}, + {"Gender":"Female","FullName":"Gunnar Persson","PersonID":151,"FaxNumber":"(205) 555-0101","DateOfBirth":"1985-10-05 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"gunnar@tailspintoys.com","PreferredName":"Gunnar"}, + {"Gender":"Female","FullName":"Parvati Modi","PersonID":152,"FaxNumber":"(205) 555-0101","DateOfBirth":"1965-06-13 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"parvati@tailspintoys.com","PreferredName":"Parvati"}, + {"Gender":"Female","FullName":"Vitezslav Rehak","PersonID":153,"FaxNumber":"(215) 555-0101","DateOfBirth":"1963-06-04 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"vitezslav@tailspintoys.com","PreferredName":"Vitezslav"}, + {"Gender":"Female","FullName":"Parsa Van Vossen","PersonID":154,"FaxNumber":"(215) 555-0101","DateOfBirth":"1962-05-16 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"parsa@tailspintoys.com","PreferredName":"Parsa"}, + {"Gender":"Female","FullName":"Bharat Sikdar","PersonID":155,"FaxNumber":"(229) 555-0101","DateOfBirth":"1990-05-08 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"bharat@tailspintoys.com","PreferredName":"Bharat"}, + {"Gender":"Female","FullName":"Alain Aupry","PersonID":156,"FaxNumber":"(229) 555-0101","DateOfBirth":"1970-08-06 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"alain@tailspintoys.com","PreferredName":"Alain"}, + {"Gender":"Female","FullName":"Juan Bezanson","PersonID":157,"FaxNumber":"(206) 555-0101","DateOfBirth":"1964-07-19 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"juan@tailspintoys.com","PreferredName":"Juan"}, + {"Gender":"Female","FullName":"Ruby Charlton","PersonID":158,"FaxNumber":"(206) 555-0101","DateOfBirth":"1960-09-05 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"ruby@tailspintoys.com","PreferredName":"Ruby"}, + {"Gender":"Female","FullName":"Aile Mae","PersonID":159,"FaxNumber":"(216) 555-0101","DateOfBirth":"1972-09-07 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"aile@tailspintoys.com","PreferredName":"Aile"}, + {"Gender":"Female","FullName":"Margherita Lucchesi","PersonID":160,"FaxNumber":"(216) 555-0101","DateOfBirth":"1963-03-05 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"margherita@tailspintoys.com","PreferredName":"Margherita"}, + {"Gender":"Female","FullName":"Pratap Varghese","PersonID":161,"FaxNumber":"(276) 555-0101","DateOfBirth":"1994-11-03 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"pratap@tailspintoys.com","PreferredName":"Pratap"}, + {"Gender":"Female","FullName":"Marcel Marquis","PersonID":162,"FaxNumber":"(276) 555-0101","DateOfBirth":"1972-04-02 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"marcel@tailspintoys.com","PreferredName":"Marcel"}, + {"Gender":"Female","FullName":"Margita Kopecka","PersonID":163,"FaxNumber":"(339) 555-0101","DateOfBirth":"1996-03-14 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"margita@tailspintoys.com","PreferredName":"Margita"}, + {"Gender":"Female","FullName":"Mirjam Johansson","PersonID":164,"FaxNumber":"(339) 555-0101","DateOfBirth":"1989-12-19 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"mirjam@tailspintoys.com","PreferredName":"Mirjam"}, + {"Gender":"Female","FullName":"Lekha Mitra","PersonID":165,"FaxNumber":"(304) 555-0101","DateOfBirth":"1982-01-11 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"lekha@tailspintoys.com","PreferredName":"Lekha"}, + {"Gender":"Female","FullName":"Seeta Bose","PersonID":166,"FaxNumber":"(304) 555-0101","DateOfBirth":"1985-09-08 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"seeta@tailspintoys.com","PreferredName":"Seeta"}, + {"Gender":"Female","FullName":"Abhoy PrabhupÄda","PersonID":167,"FaxNumber":"(423) 555-0101","DateOfBirth":"1957-09-04 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"abhoy@tailspintoys.com","PreferredName":"Abhoy"}, + {"Gender":"Female","FullName":"Seok-Ho Jeon","PersonID":168,"FaxNumber":"(423) 555-0101","DateOfBirth":"1997-10-04 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"seok-ho@tailspintoys.com","PreferredName":"Seok-Ho"}, + {"Gender":"Female","FullName":"Alida Caune","PersonID":169,"FaxNumber":"(212) 555-0101","DateOfBirth":"1971-01-24 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"alida@tailspintoys.com","PreferredName":"Alida"}, + {"Gender":"Female","FullName":"Indiana Fritzsche","PersonID":170,"FaxNumber":"(212) 555-0101","DateOfBirth":"1985-12-01 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"indiana@tailspintoys.com","PreferredName":"Indiana"}, + {"Gender":"Female","FullName":"Agnes Szolosy","PersonID":171,"FaxNumber":"(209) 555-0101","DateOfBirth":"1956-08-28 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"agnes@tailspintoys.com","PreferredName":"Agnes"}, + {"Gender":"Female","FullName":"Yu-jin Jee","PersonID":172,"FaxNumber":"(209) 555-0101","DateOfBirth":"1978-07-28 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"yu-jin@tailspintoys.com","PreferredName":"Yu-jin"}, + {"Gender":"Female","FullName":"Rohana Kaskar","PersonID":173,"FaxNumber":"(207) 555-0101","DateOfBirth":"1965-09-15 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"rohana@tailspintoys.com","PreferredName":"Rohana"}, + {"Gender":"Female","FullName":"Grieta Kalnina","PersonID":174,"FaxNumber":"(207) 555-0101","DateOfBirth":"1966-12-13 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"grieta@tailspintoys.com","PreferredName":"Grieta"}, + {"Gender":"Female","FullName":"Hanuman Dubey","PersonID":175,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-11-06 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"hanuman@tailspintoys.com","PreferredName":"Hanuman"}, + {"Gender":"Female","FullName":"Paola Loggia","PersonID":176,"FaxNumber":"(210) 555-0101","DateOfBirth":"1995-01-17 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"paola@tailspintoys.com","PreferredName":"Paola"}, + {"Gender":"Female","FullName":"Bao Dao","PersonID":177,"FaxNumber":"(339) 555-0101","DateOfBirth":"1986-07-30 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"bao@tailspintoys.com","PreferredName":"Bao"}, + {"Gender":"Female","FullName":"Viljo Lampsa","PersonID":178,"FaxNumber":"(339) 555-0101","DateOfBirth":"1990-05-22 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"viljo@tailspintoys.com","PreferredName":"Viljo"}, + {"Gender":"Female","FullName":"Preyakshna Aluri","PersonID":179,"FaxNumber":"(701) 555-0101","DateOfBirth":"1997-01-01 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"preyakshna@tailspintoys.com","PreferredName":"Preyakshna"}, + {"Gender":"Female","FullName":"Chandan Raut","PersonID":180,"FaxNumber":"(701) 555-0101","DateOfBirth":"1969-09-05 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"chandan@tailspintoys.com","PreferredName":"Chandan"}, + {"Gender":"Female","FullName":"Valentina Conti","PersonID":181,"FaxNumber":"(225) 555-0101","DateOfBirth":"1984-05-31 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"valentina@tailspintoys.com","PreferredName":"Valentina"}, + {"Gender":"Female","FullName":"Narayan Mukherjee","PersonID":182,"FaxNumber":"(225) 555-0101","DateOfBirth":"1964-07-02 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"narayan@tailspintoys.com","PreferredName":"Narayan"}, + {"Gender":"Female","FullName":"Theodore Saucier","PersonID":183,"FaxNumber":"(209) 555-0101","DateOfBirth":"1974-09-17 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"theodore@tailspintoys.com","PreferredName":"Theodore"}, + {"Gender":"Female","FullName":"Chaowalit Pornpipatpong","PersonID":184,"FaxNumber":"(209) 555-0101","DateOfBirth":"1990-11-21 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"chaowalit@tailspintoys.com","PreferredName":"Chaowalit"}, + {"Gender":"Female","FullName":"Mariana Fierro","PersonID":185,"FaxNumber":"(217) 555-0101","DateOfBirth":"1983-02-18 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"mariana@tailspintoys.com","PreferredName":"Mariana"}, + {"Gender":"Female","FullName":"Ivana Kozakova","PersonID":186,"FaxNumber":"(217) 555-0101","DateOfBirth":"1994-03-03 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"ivana@tailspintoys.com","PreferredName":"Ivana"}, + {"Gender":"Female","FullName":"Afshin Djalili","PersonID":187,"FaxNumber":"(231) 555-0101","DateOfBirth":"1984-06-30 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"afshin@tailspintoys.com","PreferredName":"Afshin"}, + {"Gender":"Female","FullName":"Vaclav Holy","PersonID":188,"FaxNumber":"(231) 555-0101","DateOfBirth":"1992-01-09 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"vaclav@tailspintoys.com","PreferredName":"Vaclav"}, + {"Gender":"Female","FullName":"Bianh Phan","PersonID":189,"FaxNumber":"(480) 555-0101","DateOfBirth":"1970-10-24 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"bianh@tailspintoys.com","PreferredName":"Bianh"}, + {"Gender":"Female","FullName":"Kanti Pipalia","PersonID":190,"FaxNumber":"(480) 555-0101","DateOfBirth":"1995-12-16 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"kanti@tailspintoys.com","PreferredName":"Kanti"}, + {"Gender":"Female","FullName":"Koknesis Vitols","PersonID":191,"FaxNumber":"(218) 555-0101","DateOfBirth":"1961-07-21 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"koknesis@tailspintoys.com","PreferredName":"Koknesis"}, + {"Gender":"Female","FullName":"Malle Sepp","PersonID":192,"FaxNumber":"(218) 555-0101","DateOfBirth":"1992-01-01 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"malle@tailspintoys.com","PreferredName":"Malle"}, + {"Gender":"Female","FullName":"Roxane Rastgu","PersonID":193,"FaxNumber":"(787) 555-0101","DateOfBirth":"1961-01-07 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"roxane@tailspintoys.com","PreferredName":"Roxane"}, + {"Gender":"Female","FullName":"Hue Chu","PersonID":194,"FaxNumber":"(787) 555-0101","DateOfBirth":"1955-09-27 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"hue@tailspintoys.com","PreferredName":"Hue"}, + {"Gender":"Female","FullName":"Vlasta Srbova","PersonID":195,"FaxNumber":"(203) 555-0101","DateOfBirth":"1959-04-22 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"vlasta@tailspintoys.com","PreferredName":"Vlasta"}, + {"Gender":"Female","FullName":"Gadhar Ghosh","PersonID":196,"FaxNumber":"(203) 555-0101","DateOfBirth":"1961-10-18 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"gadhar@tailspintoys.com","PreferredName":"Gadhar"}, + {"Gender":"Female","FullName":"Lata Babu","PersonID":197,"FaxNumber":"(405) 555-0101","DateOfBirth":"1972-12-08 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"lata@tailspintoys.com","PreferredName":"Lata"}, + {"Gender":"Female","FullName":"Chandra De","PersonID":198,"FaxNumber":"(405) 555-0101","DateOfBirth":"1980-07-12 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"chandra@tailspintoys.com","PreferredName":"Chandra"}, + {"Gender":"Female","FullName":"Airi Vassiljev","PersonID":199,"FaxNumber":"(229) 555-0101","DateOfBirth":"1995-04-29 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"airi@tailspintoys.com","PreferredName":"Airi"}, + {"Gender":"Female","FullName":"Hoang La","PersonID":200,"FaxNumber":"(229) 555-0101","DateOfBirth":"1995-09-01 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"hoang@tailspintoys.com","PreferredName":"Hoang"}, + {"Gender":"Female","FullName":"Duleep Walia","PersonID":201,"FaxNumber":"(206) 555-0101","DateOfBirth":"1959-11-07 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"duleep@tailspintoys.com","PreferredName":"Duleep"}, + {"Gender":"Female","FullName":"Satish Gill","PersonID":202,"FaxNumber":"(206) 555-0101","DateOfBirth":"1982-11-17 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"satish@tailspintoys.com","PreferredName":"Satish"}, + {"Gender":"Female","FullName":"Matyas Macek","PersonID":203,"FaxNumber":"(316) 555-0101","DateOfBirth":"1997-10-01 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"matyas@tailspintoys.com","PreferredName":"Matyas"}, + {"Gender":"Female","FullName":"Ethan Hopkins","PersonID":204,"FaxNumber":"(316) 555-0101","DateOfBirth":"1970-05-03 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"ethan@tailspintoys.com","PreferredName":"Ethan"}, + {"Gender":"Female","FullName":"Bharat Ankitham","PersonID":205,"FaxNumber":"(252) 555-0101","DateOfBirth":"1991-02-22 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"bharat@tailspintoys.com","PreferredName":"Bharat"}, + {"Gender":"Female","FullName":"Be Phan","PersonID":206,"FaxNumber":"(252) 555-0101","DateOfBirth":"1975-12-15 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"be@tailspintoys.com","PreferredName":"Be"}, + {"Gender":"Female","FullName":"Vera Kubatova","PersonID":207,"FaxNumber":"(212) 555-0101","DateOfBirth":"1978-03-09 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"vera@tailspintoys.com","PreferredName":"Vera"}, + {"Gender":"Female","FullName":"Diego Almeida","PersonID":208,"FaxNumber":"(212) 555-0101","DateOfBirth":"1950-12-27 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"diego@tailspintoys.com","PreferredName":"Diego"}, + {"Gender":"Female","FullName":"Rakesh Nishad","PersonID":209,"FaxNumber":"(505) 555-0101","DateOfBirth":"1973-01-08 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"rakesh@tailspintoys.com","PreferredName":"Rakesh"}, + {"Gender":"Female","FullName":"Huu Hoa","PersonID":210,"FaxNumber":"(505) 555-0101","DateOfBirth":"1978-05-11 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"huu@tailspintoys.com","PreferredName":"Huu"}, + {"Gender":"Female","FullName":"Sang Tran","PersonID":211,"FaxNumber":"(201) 555-0101","DateOfBirth":"1993-04-07 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"sang@tailspintoys.com","PreferredName":"Sang"}, + {"Gender":"Female","FullName":"Bela Nemeth","PersonID":212,"FaxNumber":"(201) 555-0101","DateOfBirth":"1989-10-28 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"bela@tailspintoys.com","PreferredName":"Bela"}, + {"Gender":"Female","FullName":"Eekalabya Bose","PersonID":213,"FaxNumber":"(787) 555-0101","DateOfBirth":"1980-12-14 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"eekalabya@tailspintoys.com","PreferredName":"Eekalabya"}, + {"Gender":"Female","FullName":"Margherita Bucco","PersonID":214,"FaxNumber":"(787) 555-0101","DateOfBirth":"1966-08-24 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"margherita@tailspintoys.com","PreferredName":"Margherita"}, + {"Gender":"Female","FullName":"Tommy Kilpi","PersonID":215,"FaxNumber":"(303) 555-0101","DateOfBirth":"1964-10-23 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"tommy@tailspintoys.com","PreferredName":"Tommy"}, + {"Gender":"Female","FullName":"Giri Bhamidipati","PersonID":216,"FaxNumber":"(303) 555-0101","DateOfBirth":"1971-10-10 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"giri@tailspintoys.com","PreferredName":"Giri"}, + {"Gender":"Female","FullName":"Andrea Ricci","PersonID":217,"FaxNumber":"(216) 555-0101","DateOfBirth":"1969-05-18 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"andrea@tailspintoys.com","PreferredName":"Andrea"}, + {"Gender":"Female","FullName":"Chung-Ho Han","PersonID":218,"FaxNumber":"(216) 555-0101","DateOfBirth":"1992-10-31 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"chung-ho@tailspintoys.com","PreferredName":"Chung-Ho"}, + {"Gender":"Female","FullName":"Isabell Duperre","PersonID":219,"FaxNumber":"(212) 555-0101","DateOfBirth":"1970-07-26 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"isabell @tailspintoys.com","PreferredName":"Isabell "}, + {"Gender":"Female","FullName":"Jasna Vujica","PersonID":220,"FaxNumber":"(212) 555-0101","DateOfBirth":"1960-01-21 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"jasna@tailspintoys.com","PreferredName":"Jasna"}, + {"Gender":"Female","FullName":"Amarendra Ankitham","PersonID":221,"FaxNumber":"(339) 555-0101","DateOfBirth":"1969-12-28 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"amarendra@tailspintoys.com","PreferredName":"Amarendra"}, + {"Gender":"Female","FullName":"Isak Berggren","PersonID":222,"FaxNumber":"(339) 555-0101","DateOfBirth":"1992-05-18 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"isak@tailspintoys.com","PreferredName":"Isak"}, + {"Gender":"Female","FullName":"Aakarsha Nookala","PersonID":223,"FaxNumber":"(201) 555-0101","DateOfBirth":"1992-09-27 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"aakarsha@tailspintoys.com","PreferredName":"Aakarsha"}, + {"Gender":"Female","FullName":"Ilgonis Rozitis","PersonID":224,"FaxNumber":"(201) 555-0101","DateOfBirth":"1992-01-31 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"ilgonis@tailspintoys.com","PreferredName":"Ilgonis"}, + {"Gender":"Female","FullName":"Stanislav Sedlar","PersonID":225,"FaxNumber":"(701) 555-0101","DateOfBirth":"1971-01-04 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"stanislav@tailspintoys.com","PreferredName":"Stanislav"}, + {"Gender":"Female","FullName":"Telma Arvidsson","PersonID":226,"FaxNumber":"(701) 555-0101","DateOfBirth":"1996-12-15 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"telma@tailspintoys.com","PreferredName":"Telma"}, + {"Gender":"Female","FullName":"GokCe Karaca","PersonID":227,"FaxNumber":"(603) 555-0101","DateOfBirth":"1996-07-02 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"gokce@tailspintoys.com","PreferredName":"GokCe"}, + {"Gender":"Female","FullName":"Maria Munteanu","PersonID":228,"FaxNumber":"(603) 555-0101","DateOfBirth":"1991-07-07 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"maria@tailspintoys.com","PreferredName":"Maria"}, + {"Gender":"Female","FullName":"Coralie Emond","PersonID":229,"FaxNumber":"(803) 555-0101","DateOfBirth":"1988-06-19 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"coralie@tailspintoys.com","PreferredName":"Coralie"}, + {"Gender":"Female","FullName":"Cong Trung","PersonID":230,"FaxNumber":"(803) 555-0101","DateOfBirth":"1957-12-23 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"cong@tailspintoys.com","PreferredName":"Cong"}, + {"Gender":"Female","FullName":"Karina Celmina","PersonID":231,"FaxNumber":"(239) 555-0101","DateOfBirth":"1977-05-26 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"karina@tailspintoys.com","PreferredName":"Karina"}, + {"Gender":"Female","FullName":"Nik Stoimenova","PersonID":232,"FaxNumber":"(239) 555-0101","DateOfBirth":"1968-07-26 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"nik@tailspintoys.com","PreferredName":"Nik"}, + {"Gender":"Female","FullName":"Teresa Pisani","PersonID":233,"FaxNumber":"(303) 555-0101","DateOfBirth":"1965-03-05 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"teresa@tailspintoys.com","PreferredName":"Teresa"}, + {"Gender":"Female","FullName":"Murugan Thakur","PersonID":234,"FaxNumber":"(303) 555-0101","DateOfBirth":"1974-02-22 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"murugan@tailspintoys.com","PreferredName":"Murugan"}, + {"Gender":"Female","FullName":"Alba Ponce","PersonID":235,"FaxNumber":"(210) 555-0101","DateOfBirth":"1962-07-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"alba@tailspintoys.com","PreferredName":"Alba"}, + {"Gender":"Female","FullName":"Antra Dzene","PersonID":236,"FaxNumber":"(210) 555-0101","DateOfBirth":"1956-02-28 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"antra@tailspintoys.com","PreferredName":"Antra"}, + {"Gender":"Female","FullName":"Piper Leigh","PersonID":237,"FaxNumber":"(210) 555-0101","DateOfBirth":"1950-04-02 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"piper@tailspintoys.com","PreferredName":"Piper"}, + {"Gender":"Female","FullName":"Jautrite Krievina","PersonID":238,"FaxNumber":"(210) 555-0101","DateOfBirth":"1996-12-31 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"jautrite@tailspintoys.com","PreferredName":"Jautrite"}, + {"Gender":"Female","FullName":"Karie Seymour","PersonID":239,"FaxNumber":"(802) 555-0101","DateOfBirth":"1978-12-16 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"karie@tailspintoys.com","PreferredName":"Karie"}, + {"Gender":"Female","FullName":"Lorenzo Lee","PersonID":240,"FaxNumber":"(802) 555-0101","DateOfBirth":"1956-08-18 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"lorenzo@tailspintoys.com","PreferredName":"Lorenzo"}, + {"Gender":"Female","FullName":"Timea Peto","PersonID":241,"FaxNumber":"(209) 555-0101","DateOfBirth":"1950-05-17 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"timea@tailspintoys.com","PreferredName":"Timea"}, + {"Gender":"Female","FullName":"Amanat Shaker Doust","PersonID":242,"FaxNumber":"(209) 555-0101","DateOfBirth":"1953-09-07 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"amanat@tailspintoys.com","PreferredName":"Amanat"}, + {"Gender":"Female","FullName":"Victoria Ene","PersonID":243,"FaxNumber":"(205) 555-0101","DateOfBirth":"1959-03-20 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"victoria@tailspintoys.com","PreferredName":"Victoria"}, + {"Gender":"Female","FullName":"Panit Meesang","PersonID":244,"FaxNumber":"(205) 555-0101","DateOfBirth":"1964-02-22 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"panit@tailspintoys.com","PreferredName":"Panit"}, + {"Gender":"Female","FullName":"Bhavani Bhowmick","PersonID":245,"FaxNumber":"(215) 555-0101","DateOfBirth":"1959-05-28 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"bhavani@tailspintoys.com","PreferredName":"Bhavani"}, + {"Gender":"Female","FullName":"Ivica Debeljak","PersonID":246,"FaxNumber":"(215) 555-0101","DateOfBirth":"1978-11-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ivica@tailspintoys.com","PreferredName":"Ivica"}, + {"Gender":"Female","FullName":"Yasmine Berggren","PersonID":247,"FaxNumber":"(505) 555-0101","DateOfBirth":"1972-01-21 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"yasmine@tailspintoys.com","PreferredName":"Yasmine"}, + {"Gender":"Female","FullName":"Anima Bagchi","PersonID":248,"FaxNumber":"(505) 555-0101","DateOfBirth":"1998-01-11 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"anima@tailspintoys.com","PreferredName":"Anima"}, + {"Gender":"Female","FullName":"Tea Koppel","PersonID":249,"FaxNumber":"(209) 555-0101","DateOfBirth":"1960-05-17 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"tea@tailspintoys.com","PreferredName":"Tea"}, + {"Gender":"Female","FullName":"Bozena Palatova","PersonID":250,"FaxNumber":"(209) 555-0101","DateOfBirth":"1967-09-14 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bozena@tailspintoys.com","PreferredName":"Bozena"}, + {"Gender":"Female","FullName":"Naseem Radan","PersonID":251,"FaxNumber":"(316) 555-0101","DateOfBirth":"1974-11-16 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"naseem@tailspintoys.com","PreferredName":"Naseem"}, + {"Gender":"Female","FullName":"Geza Olteanu","PersonID":252,"FaxNumber":"(316) 555-0101","DateOfBirth":"1980-04-08 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"geza@tailspintoys.com","PreferredName":"Geza"}, + {"Gender":"Female","FullName":"Laboni Deb","PersonID":253,"FaxNumber":"(207) 555-0101","DateOfBirth":"1978-03-15 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"laboni@tailspintoys.com","PreferredName":"Laboni"}, + {"Gender":"Female","FullName":"Antonin Klaus","PersonID":254,"FaxNumber":"(207) 555-0101","DateOfBirth":"1977-12-18 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"antonin@tailspintoys.com","PreferredName":"Antonin"}, + {"Gender":"Female","FullName":"Sung-Hwan Hwang","PersonID":255,"FaxNumber":"(228) 555-0101","DateOfBirth":"1980-07-21 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"sung-hwan@tailspintoys.com","PreferredName":"Sung-Hwan"}, + {"Gender":"Female","FullName":"Reigo Rebane","PersonID":256,"FaxNumber":"(228) 555-0101","DateOfBirth":"1990-07-27 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"reigo@tailspintoys.com","PreferredName":"Reigo"}, + {"Gender":"Female","FullName":"Shiva Pipalia","PersonID":257,"FaxNumber":"(480) 555-0101","DateOfBirth":"1978-12-05 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"shiva@tailspintoys.com","PreferredName":"Shiva"}, + {"Gender":"Female","FullName":"Aishwarya Beniwal","PersonID":258,"FaxNumber":"(480) 555-0101","DateOfBirth":"1976-12-15 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"aishwarya@tailspintoys.com","PreferredName":"Aishwarya"}, + {"Gender":"Female","FullName":"Karie Mercier","PersonID":259,"FaxNumber":"(209) 555-0101","DateOfBirth":"1989-08-10 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"karie@tailspintoys.com","PreferredName":"Karie"}, + {"Gender":"Female","FullName":"Milada Buresova","PersonID":260,"FaxNumber":"(209) 555-0101","DateOfBirth":"1974-02-05 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"milada@tailspintoys.com","PreferredName":"Milada"}, + {"Gender":"Female","FullName":"Bhanu Thota","PersonID":261,"FaxNumber":"(314) 555-0101","DateOfBirth":"1963-10-26 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"bhanu@tailspintoys.com","PreferredName":"Bhanu"}, + {"Gender":"Female","FullName":"Cyrus Poursokh","PersonID":262,"FaxNumber":"(314) 555-0101","DateOfBirth":"1979-09-24 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"cyrus@tailspintoys.com","PreferredName":"Cyrus"}, + {"Gender":"Female","FullName":"Ae-Cha Joo","PersonID":263,"FaxNumber":"(209) 555-0101","DateOfBirth":"1993-12-23 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"ae-cha@tailspintoys.com","PreferredName":"Ae-Cha"}, + {"Gender":"Female","FullName":"Jawid Pourali","PersonID":264,"FaxNumber":"(209) 555-0101","DateOfBirth":"1964-06-26 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"jawid@tailspintoys.com","PreferredName":"Jawid"}, + {"Gender":"Female","FullName":"Dinara Saparkyzy","PersonID":265,"FaxNumber":"(219) 555-0101","DateOfBirth":"1957-03-06 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"dinara@tailspintoys.com","PreferredName":"Dinara"}, + {"Gender":"Female","FullName":"Karel Sedlar","PersonID":266,"FaxNumber":"(219) 555-0101","DateOfBirth":"1952-06-13 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"karel@tailspintoys.com","PreferredName":"Karel"}, + {"Gender":"Female","FullName":"Adam Dvorak","PersonID":267,"FaxNumber":"(239) 555-0101","DateOfBirth":"1966-07-21 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"adam@tailspintoys.com","PreferredName":"Adam"}, + {"Gender":"Female","FullName":"Dhanishta Vankayala","PersonID":268,"FaxNumber":"(239) 555-0101","DateOfBirth":"1955-03-20 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"dhanishta@tailspintoys.com","PreferredName":"Dhanishta"}, + {"Gender":"Female","FullName":"Ingrida Celmina","PersonID":269,"FaxNumber":"(316) 555-0101","DateOfBirth":"1973-12-23 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"ingrida@tailspintoys.com","PreferredName":"Ingrida"}, + {"Gender":"Female","FullName":"Be Dang","PersonID":270,"FaxNumber":"(316) 555-0101","DateOfBirth":"1997-09-10 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"be@tailspintoys.com","PreferredName":"Be"}, + {"Gender":"Female","FullName":"Jae-Hwa Jang","PersonID":271,"FaxNumber":"(505) 555-0101","DateOfBirth":"1969-07-13 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"jae-hwa@tailspintoys.com","PreferredName":"Jae-Hwa"}, + {"Gender":"Female","FullName":"Clara Cunha","PersonID":272,"FaxNumber":"(505) 555-0101","DateOfBirth":"1984-10-07 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"clara@tailspintoys.com","PreferredName":"Clara"}, + {"Gender":"Female","FullName":"Duck-Hwan Bae","PersonID":273,"FaxNumber":"(803) 555-0101","DateOfBirth":"1962-07-03 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"duck-hwan@tailspintoys.com","PreferredName":"Duck-Hwan"}, + {"Gender":"Female","FullName":"Surya Mishra","PersonID":274,"FaxNumber":"(803) 555-0101","DateOfBirth":"1959-06-15 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"surya@tailspintoys.com","PreferredName":"Surya"}, + {"Gender":"Female","FullName":"Jagoda Vasiljevic","PersonID":275,"FaxNumber":"(252) 555-0101","DateOfBirth":"1953-04-27 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"jagoda@tailspintoys.com","PreferredName":"Jagoda"}, + {"Gender":"Female","FullName":"Eero Raud","PersonID":276,"FaxNumber":"(252) 555-0101","DateOfBirth":"1962-06-29 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"eero@tailspintoys.com","PreferredName":"Eero"}, + {"Gender":"Female","FullName":"Toma Nastase","PersonID":277,"FaxNumber":"(787) 555-0101","DateOfBirth":"1960-12-08 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"toma@tailspintoys.com","PreferredName":"Toma"}, + {"Gender":"Female","FullName":"Arjuna Haldar","PersonID":278,"FaxNumber":"(787) 555-0101","DateOfBirth":"1992-01-12 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"arjuna@tailspintoys.com","PreferredName":"Arjuna"}, + {"Gender":"Female","FullName":"Valerio Cardoso","PersonID":279,"FaxNumber":"(385) 555-0101","DateOfBirth":"1995-02-18 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"valerio@tailspintoys.com","PreferredName":"Valerio"}, + {"Gender":"Female","FullName":"Zac Wintle","PersonID":280,"FaxNumber":"(385) 555-0101","DateOfBirth":"1988-12-02 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"zac@tailspintoys.com","PreferredName":"Zac"}, + {"Gender":"Female","FullName":"Ileana Aguilar","PersonID":281,"FaxNumber":"(207) 555-0101","DateOfBirth":"1975-11-11 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"ileana@tailspintoys.com","PreferredName":"Ileana"}, + {"Gender":"Female","FullName":"Cai Nguyen","PersonID":282,"FaxNumber":"(207) 555-0101","DateOfBirth":"1971-03-20 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"cai@tailspintoys.com","PreferredName":"Cai"}, + {"Gender":"Female","FullName":"Tjasa Weitzer","PersonID":283,"FaxNumber":"(229) 555-0101","DateOfBirth":"1990-08-30 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"tjasa@tailspintoys.com","PreferredName":"Tjasa"}, + {"Gender":"Female","FullName":"Shefali Bose","PersonID":284,"FaxNumber":"(229) 555-0101","DateOfBirth":"1997-02-23 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"shefali@tailspintoys.com","PreferredName":"Shefali"}, + {"Gender":"Female","FullName":"Lucas Van Veenen","PersonID":285,"FaxNumber":"(216) 555-0101","DateOfBirth":"1995-07-02 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"lucas@tailspintoys.com","PreferredName":"Lucas"}, + {"Gender":"Female","FullName":"Farzana Saidi","PersonID":286,"FaxNumber":"(216) 555-0101","DateOfBirth":"1965-07-23 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"farzana@tailspintoys.com","PreferredName":"Farzana"}, + {"Gender":"Female","FullName":"Steven Frasier","PersonID":287,"FaxNumber":"(218) 555-0101","DateOfBirth":"1955-02-24 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"steven@tailspintoys.com","PreferredName":"Steven"}, + {"Gender":"Female","FullName":"Amaranaath Muppavarapu","PersonID":288,"FaxNumber":"(218) 555-0101","DateOfBirth":"1979-03-08 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"amaranaath@tailspintoys.com","PreferredName":"Amaranaath"}, + {"Gender":"Female","FullName":"Mauri Enestam","PersonID":289,"FaxNumber":"(303) 555-0101","DateOfBirth":"1983-01-12 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"mauri@tailspintoys.com","PreferredName":"Mauri"}, + {"Gender":"Female","FullName":"Lakshmi Nair","PersonID":290,"FaxNumber":"(303) 555-0101","DateOfBirth":"1969-04-14 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"lakshmi@tailspintoys.com","PreferredName":"Lakshmi"}, + {"Gender":"Female","FullName":"Ella Zvirbule","PersonID":291,"FaxNumber":"(212) 555-0101","DateOfBirth":"1966-12-06 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"ella@tailspintoys.com","PreferredName":"Ella"}, + {"Gender":"Female","FullName":"Vicente Chávez","PersonID":292,"FaxNumber":"(212) 555-0101","DateOfBirth":"1983-05-06 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"vicente@tailspintoys.com","PreferredName":"Vicente"}, + {"Gender":"Female","FullName":"Sevim Aydın","PersonID":293,"FaxNumber":"(216) 555-0101","DateOfBirth":"1980-12-04 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"sevim@tailspintoys.com","PreferredName":"Sevim"}, + {"Gender":"Female","FullName":"Tamer Ayhan","PersonID":294,"FaxNumber":"(216) 555-0101","DateOfBirth":"1965-01-01 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"tamer@tailspintoys.com","PreferredName":"Tamer"}, + {"Gender":"Female","FullName":"Blanka Stavinohova","PersonID":295,"FaxNumber":"(304) 555-0101","DateOfBirth":"1976-08-15 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"blanka@tailspintoys.com","PreferredName":"Blanka"}, + {"Gender":"Female","FullName":"Josefa Diaz","PersonID":296,"FaxNumber":"(304) 555-0101","DateOfBirth":"1996-05-19 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"josefa@tailspintoys.com","PreferredName":"Josefa"}, + {"Gender":"Female","FullName":"Akanksha Iyengar","PersonID":297,"FaxNumber":"(201) 555-0101","DateOfBirth":"1986-05-30 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"akanksha@tailspintoys.com","PreferredName":"Akanksha"}, + {"Gender":"Female","FullName":"Markus Kantee","PersonID":298,"FaxNumber":"(201) 555-0101","DateOfBirth":"1972-11-09 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"markus@tailspintoys.com","PreferredName":"Markus"}, + {"Gender":"Female","FullName":"Kertu Smirnov","PersonID":299,"FaxNumber":"(206) 555-0101","DateOfBirth":"1958-08-20 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"kertu@tailspintoys.com","PreferredName":"Kertu"}, + {"Gender":"Female","FullName":"Lovro Kulaga","PersonID":300,"FaxNumber":"(206) 555-0101","DateOfBirth":"1969-09-28 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"lovro@tailspintoys.com","PreferredName":"Lovro"}, + {"Gender":"Female","FullName":"Jure Grabensek","PersonID":301,"FaxNumber":"(303) 555-0101","DateOfBirth":"1964-07-31 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"jure@tailspintoys.com","PreferredName":"Jure"}, + {"Gender":"Female","FullName":"Chompunut Jetjirawat","PersonID":302,"FaxNumber":"(303) 555-0101","DateOfBirth":"1966-04-26 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"chompunut@tailspintoys.com","PreferredName":"Chompunut"}, + {"Gender":"Female","FullName":"Javiera Madera","PersonID":303,"FaxNumber":"(231) 555-0101","DateOfBirth":"1965-08-27 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"javiera@tailspintoys.com","PreferredName":"Javiera"}, + {"Gender":"Female","FullName":"Geetanjali Bagchi","PersonID":304,"FaxNumber":"(231) 555-0101","DateOfBirth":"1957-05-07 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"geetanjali@tailspintoys.com","PreferredName":"Geetanjali"}, + {"Gender":"Female","FullName":"Aija Mottola","PersonID":305,"FaxNumber":"(201) 555-0101","DateOfBirth":"1975-10-30 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"aija@tailspintoys.com","PreferredName":"Aija"}, + {"Gender":"Female","FullName":"Elli Berg","PersonID":306,"FaxNumber":"(201) 555-0101","DateOfBirth":"1974-11-19 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"elli@tailspintoys.com","PreferredName":"Elli"}, + {"Gender":"Female","FullName":"Darshan Gupta","PersonID":307,"FaxNumber":"(907) 555-0101","DateOfBirth":"1974-05-12 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"darshan@tailspintoys.com","PreferredName":"Darshan"}, + {"Gender":"Female","FullName":"Prem Reddy","PersonID":308,"FaxNumber":"(907) 555-0101","DateOfBirth":"1997-08-01 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"prem@tailspintoys.com","PreferredName":"Prem"}, + {"Gender":"Female","FullName":"Akanksha Sarma","PersonID":309,"FaxNumber":"(208) 555-0101","DateOfBirth":"1950-10-11 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"akanksha@tailspintoys.com","PreferredName":"Akanksha"}, + {"Gender":"Female","FullName":"Edward Alfred","PersonID":310,"FaxNumber":"(208) 555-0101","DateOfBirth":"1978-07-23 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"edward@tailspintoys.com","PreferredName":"Edward"}, + {"Gender":"Female","FullName":"Aino Kallas","PersonID":311,"FaxNumber":"(212) 555-0101","DateOfBirth":"1976-12-10 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"aino@tailspintoys.com","PreferredName":"Aino"}, + {"Gender":"Female","FullName":"Dhaaruni Vinjamuri","PersonID":312,"FaxNumber":"(212) 555-0101","DateOfBirth":"1977-12-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"dhaaruni@tailspintoys.com","PreferredName":"Dhaaruni"}, + {"Gender":"Female","FullName":"An Dung Phung","PersonID":313,"FaxNumber":"(239) 555-0101","DateOfBirth":"1996-08-05 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"an dung@tailspintoys.com","PreferredName":"An Dung"}, + {"Gender":"Female","FullName":"Ioana Ibanescu","PersonID":314,"FaxNumber":"(239) 555-0101","DateOfBirth":"1966-12-23 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"ioana@tailspintoys.com","PreferredName":"Ioana"}, + {"Gender":"Female","FullName":"Gaurav Sikdar","PersonID":315,"FaxNumber":"(314) 555-0101","DateOfBirth":"1954-08-07 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"gaurav@tailspintoys.com","PreferredName":"Gaurav"}, + {"Gender":"Female","FullName":"Christian Berggren","PersonID":316,"FaxNumber":"(314) 555-0101","DateOfBirth":"1975-08-21 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"christian@tailspintoys.com","PreferredName":"Christian"}, + {"Gender":"Female","FullName":"Anirban Sen","PersonID":317,"FaxNumber":"(702) 555-0101","DateOfBirth":"1991-12-31 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"anirban@tailspintoys.com","PreferredName":"Anirban"}, + {"Gender":"Female","FullName":"Joel Koivisto","PersonID":318,"FaxNumber":"(702) 555-0101","DateOfBirth":"1969-06-04 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"joel@tailspintoys.com","PreferredName":"Joel"}, + {"Gender":"Female","FullName":"Chandrakanta Benjaree","PersonID":319,"FaxNumber":"(385) 555-0101","DateOfBirth":"1966-04-04 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"chandrakanta@tailspintoys.com","PreferredName":"Chandrakanta"}, + {"Gender":"Female","FullName":"Joy Das","PersonID":320,"FaxNumber":"(385) 555-0101","DateOfBirth":"1990-09-15 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"joy@tailspintoys.com","PreferredName":"Joy"}, + {"Gender":"Female","FullName":"Badari Chadalavada","PersonID":321,"FaxNumber":"(252) 555-0101","DateOfBirth":"1981-05-15 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"badari@tailspintoys.com","PreferredName":"Badari"}, + {"Gender":"Female","FullName":"Zala Ude","PersonID":322,"FaxNumber":"(252) 555-0101","DateOfBirth":"1970-12-03 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"zala@tailspintoys.com","PreferredName":"Zala"}, + {"Gender":"Female","FullName":"Gabriele Udinesi","PersonID":323,"FaxNumber":"(803) 555-0101","DateOfBirth":"1994-02-03 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"gabriele@tailspintoys.com","PreferredName":"Gabriele"}, + {"Gender":"Female","FullName":"Murugan Dewangan","PersonID":324,"FaxNumber":"(803) 555-0101","DateOfBirth":"1996-02-10 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"murugan@tailspintoys.com","PreferredName":"Murugan"}, + {"Gender":"Female","FullName":"Malay PrabhupÄda","PersonID":325,"FaxNumber":"(316) 555-0101","DateOfBirth":"1994-06-21 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"malay@tailspintoys.com","PreferredName":"Malay"}, + {"Gender":"Female","FullName":"Nghi Ly","PersonID":326,"FaxNumber":"(316) 555-0101","DateOfBirth":"1981-03-22 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"nghi@tailspintoys.com","PreferredName":"Nghi"}, + {"Gender":"Female","FullName":"Hedi Koppel","PersonID":327,"FaxNumber":"(314) 555-0101","DateOfBirth":"1961-03-18 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"hedi@tailspintoys.com","PreferredName":"Hedi"}, + {"Gender":"Female","FullName":"Teodors Klavins","PersonID":328,"FaxNumber":"(314) 555-0101","DateOfBirth":"1981-03-06 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"teodors@tailspintoys.com","PreferredName":"Teodors"}, + {"Gender":"Female","FullName":"Denisa Ioveanu","PersonID":329,"FaxNumber":"(907) 555-0101","DateOfBirth":"1992-07-11 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"denisa@tailspintoys.com","PreferredName":"Denisa"}, + {"Gender":"Female","FullName":"Cosmin Nutiu","PersonID":330,"FaxNumber":"(907) 555-0101","DateOfBirth":"1992-06-20 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"cosmin@tailspintoys.com","PreferredName":"Cosmin"}, + {"Gender":"Female","FullName":"Vaclav Polaskova","PersonID":331,"FaxNumber":"(216) 555-0101","DateOfBirth":"1952-09-03 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"vaclav@tailspintoys.com","PreferredName":"Vaclav"}, + {"Gender":"Female","FullName":"Georg Valbe","PersonID":332,"FaxNumber":"(216) 555-0101","DateOfBirth":"1970-07-06 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"georg@tailspintoys.com","PreferredName":"Georg"}, + {"Gender":"Female","FullName":"Pramod Nishad","PersonID":333,"FaxNumber":"(225) 555-0101","DateOfBirth":"1951-09-26 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"pramod@tailspintoys.com","PreferredName":"Pramod"}, + {"Gender":"Female","FullName":"Avani Aggarwal","PersonID":334,"FaxNumber":"(225) 555-0101","DateOfBirth":"1973-03-02 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"avani@tailspintoys.com","PreferredName":"Avani"}, + {"Gender":"Female","FullName":"Prasong Tuntayakul","PersonID":335,"FaxNumber":"(201) 555-0101","DateOfBirth":"1996-10-20 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"prasong@tailspintoys.com","PreferredName":"Prasong"}, + {"Gender":"Female","FullName":"Mariela Pasek","PersonID":336,"FaxNumber":"(201) 555-0101","DateOfBirth":"1969-02-13 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"mariela@tailspintoys.com","PreferredName":"Mariela"}, + {"Gender":"Female","FullName":"Aija Zvaigzne","PersonID":337,"FaxNumber":"(205) 555-0101","DateOfBirth":"1950-02-22 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"aija@tailspintoys.com","PreferredName":"Aija"}, + {"Gender":"Female","FullName":"Dharanikumaar Sonti","PersonID":338,"FaxNumber":"(205) 555-0101","DateOfBirth":"1962-08-01 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"dharanikumaar@tailspintoys.com","PreferredName":"Dharanikumaar"}, + {"Gender":"Female","FullName":"Gilbert Pelland","PersonID":339,"FaxNumber":"(406) 555-0101","DateOfBirth":"1960-10-08 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"gilbert@tailspintoys.com","PreferredName":"Gilbert"}, + {"Gender":"Female","FullName":"Ngoc Cao","PersonID":340,"FaxNumber":"(406) 555-0101","DateOfBirth":"1992-11-25 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"ngoc@tailspintoys.com","PreferredName":"Ngoc"}, + {"Gender":"Female","FullName":"Marcella Napolitani","PersonID":341,"FaxNumber":"(262) 555-0101","DateOfBirth":"1966-11-22 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"marcella@tailspintoys.com","PreferredName":"Marcella"}, + {"Gender":"Female","FullName":"Pavol Oravec","PersonID":342,"FaxNumber":"(262) 555-0101","DateOfBirth":"1987-12-17 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"pavol@tailspintoys.com","PreferredName":"Pavol"}, + {"Gender":"Female","FullName":"Femke Hollenberg","PersonID":343,"FaxNumber":"(218) 555-0101","DateOfBirth":"1996-05-25 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"femke@tailspintoys.com","PreferredName":"Femke"}, + {"Gender":"Female","FullName":"Roman Kubat","PersonID":344,"FaxNumber":"(218) 555-0101","DateOfBirth":"1981-12-28 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"roman@tailspintoys.com","PreferredName":"Roman"}, + {"Gender":"Female","FullName":"Brita Jarvi","PersonID":345,"FaxNumber":"(212) 555-0101","DateOfBirth":"1980-11-05 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"brita@tailspintoys.com","PreferredName":"Brita"}, + {"Gender":"Female","FullName":"Lucie Hrdlickova","PersonID":346,"FaxNumber":"(212) 555-0101","DateOfBirth":"1956-04-30 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"lucie@tailspintoys.com","PreferredName":"Lucie"}, + {"Gender":"Female","FullName":"Donato Araujo","PersonID":347,"FaxNumber":"(480) 555-0101","DateOfBirth":"1984-12-28 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"donato@tailspintoys.com","PreferredName":"Donato"}, + {"Gender":"Female","FullName":"Alaine Berthelette","PersonID":348,"FaxNumber":"(480) 555-0101","DateOfBirth":"1964-01-02 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"alaine@tailspintoys.com","PreferredName":"Alaine"}, + {"Gender":"Female","FullName":"Aleksander Jarvi","PersonID":349,"FaxNumber":"(406) 555-0101","DateOfBirth":"1958-03-16 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"aleksander@tailspintoys.com","PreferredName":"Aleksander"}, + {"Gender":"Female","FullName":"Kurt Konecny","PersonID":350,"FaxNumber":"(406) 555-0101","DateOfBirth":"1960-01-02 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"kurt@tailspintoys.com","PreferredName":"Kurt"}, + {"Gender":"Female","FullName":"Malati Shenoy","PersonID":351,"FaxNumber":"(218) 555-0101","DateOfBirth":"1951-06-08 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"malati@tailspintoys.com","PreferredName":"Malati"}, + {"Gender":"Female","FullName":"Duong Duong","PersonID":352,"FaxNumber":"(218) 555-0101","DateOfBirth":"1985-04-28 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"duong@tailspintoys.com","PreferredName":"Duong"}, + {"Gender":"Female","FullName":"Gui-Hyun Ji","PersonID":353,"FaxNumber":"(218) 555-0101","DateOfBirth":"1966-12-23 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"gui-hyun@tailspintoys.com","PreferredName":"Gui-Hyun"}, + {"Gender":"Female","FullName":"Karl Kangur","PersonID":354,"FaxNumber":"(218) 555-0101","DateOfBirth":"1979-03-19 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"karl@tailspintoys.com","PreferredName":"Karl"}, + {"Gender":"Female","FullName":"Michal Polaskova","PersonID":355,"FaxNumber":"(262) 555-0101","DateOfBirth":"1982-08-07 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"michal@tailspintoys.com","PreferredName":"Michal"}, + {"Gender":"Female","FullName":"Debendra Chakraborty","PersonID":356,"FaxNumber":"(262) 555-0101","DateOfBirth":"1972-08-10 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"debendra@tailspintoys.com","PreferredName":"Debendra"}, + {"Gender":"Female","FullName":"Dilara Ayhan","PersonID":357,"FaxNumber":"(210) 555-0101","DateOfBirth":"1963-12-25 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"dilara@tailspintoys.com","PreferredName":"Dilara"}, + {"Gender":"Female","FullName":"Virgiliu Vladu","PersonID":358,"FaxNumber":"(210) 555-0101","DateOfBirth":"1961-07-24 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"virgiliu@tailspintoys.com","PreferredName":"Virgiliu"}, + {"Gender":"Female","FullName":"Peter Macias","PersonID":359,"FaxNumber":"(205) 555-0101","DateOfBirth":"1993-03-23 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"peter@tailspintoys.com","PreferredName":"Peter"}, + {"Gender":"Female","FullName":"Nasrin Fard","PersonID":360,"FaxNumber":"(205) 555-0101","DateOfBirth":"1958-08-19 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"nasrin@tailspintoys.com","PreferredName":"Nasrin"}, + {"Gender":"Female","FullName":"Kurt Lukes","PersonID":361,"FaxNumber":"(225) 555-0101","DateOfBirth":"1974-06-15 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"kurt@tailspintoys.com","PreferredName":"Kurt"}, + {"Gender":"Female","FullName":"Daman Devulapalli","PersonID":362,"FaxNumber":"(225) 555-0101","DateOfBirth":"1975-02-10 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"daman@tailspintoys.com","PreferredName":"Daman"}, + {"Gender":"Female","FullName":"Beatrise Bite","PersonID":363,"FaxNumber":"(218) 555-0101","DateOfBirth":"1954-08-25 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"beatrise@tailspintoys.com","PreferredName":"Beatrise"}, + {"Gender":"Female","FullName":"Hele Semjonov","PersonID":364,"FaxNumber":"(218) 555-0101","DateOfBirth":"1953-11-30 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"hele@tailspintoys.com","PreferredName":"Hele"}, + {"Gender":"Female","FullName":"Bishwanath Ghosh","PersonID":365,"FaxNumber":"(701) 555-0101","DateOfBirth":"1968-09-26 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"bishwanath@tailspintoys.com","PreferredName":"Bishwanath"}, + {"Gender":"Female","FullName":"Gasper Jovicevic","PersonID":366,"FaxNumber":"(701) 555-0101","DateOfBirth":"1972-02-04 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"gasper@tailspintoys.com","PreferredName":"Gasper"}, + {"Gender":"Female","FullName":"Gianguido Lucchesi","PersonID":367,"FaxNumber":"(303) 555-0101","DateOfBirth":"1961-02-04 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"gianguido@tailspintoys.com","PreferredName":"Gianguido"}, + {"Gender":"Female","FullName":"Harihar Chatterjee","PersonID":368,"FaxNumber":"(303) 555-0101","DateOfBirth":"1967-11-01 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"harihar@tailspintoys.com","PreferredName":"Harihar"}, + {"Gender":"Female","FullName":"Nu Bach","PersonID":369,"FaxNumber":"(212) 555-0101","DateOfBirth":"1965-03-25 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"nu@tailspintoys.com","PreferredName":"Nu"}, + {"Gender":"Female","FullName":"Gautama Reddy","PersonID":370,"FaxNumber":"(212) 555-0101","DateOfBirth":"1996-10-20 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"gautama@tailspintoys.com","PreferredName":"Gautama"}, + {"Gender":"Female","FullName":"Ivonna Ene","PersonID":371,"FaxNumber":"(702) 555-0101","DateOfBirth":"1982-12-26 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"ivonna@tailspintoys.com","PreferredName":"Ivonna"}, + {"Gender":"Female","FullName":"Girish Banerjee","PersonID":372,"FaxNumber":"(702) 555-0101","DateOfBirth":"1982-06-08 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"girish@tailspintoys.com","PreferredName":"Girish"}, + {"Gender":"Female","FullName":"Ceyhun sahin","PersonID":373,"FaxNumber":"(215) 555-0101","DateOfBirth":"1989-11-25 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ceyhun@tailspintoys.com","PreferredName":"Ceyhun"}, + {"Gender":"Female","FullName":"Dhir Bhattacharya","PersonID":374,"FaxNumber":"(215) 555-0101","DateOfBirth":"1955-08-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"dhir@tailspintoys.com","PreferredName":"Dhir"}, + {"Gender":"Female","FullName":"Tian Peng","PersonID":375,"FaxNumber":"(203) 555-0101","DateOfBirth":"1953-09-24 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"tian@tailspintoys.com","PreferredName":"Tian"}, + {"Gender":"Female","FullName":"Mariano Costa","PersonID":376,"FaxNumber":"(203) 555-0101","DateOfBirth":"1957-03-20 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"mariano@tailspintoys.com","PreferredName":"Mariano"}, + {"Gender":"Female","FullName":"Vlastimil Bohuslav","PersonID":377,"FaxNumber":"(210) 555-0101","DateOfBirth":"1994-09-16 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"vlastimil@tailspintoys.com","PreferredName":"Vlastimil"}, + {"Gender":"Female","FullName":"Beau Boule","PersonID":378,"FaxNumber":"(210) 555-0101","DateOfBirth":"1975-01-13 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"beau @tailspintoys.com","PreferredName":"Beau "}, + {"Gender":"Female","FullName":"Nejc Vosnik","PersonID":379,"FaxNumber":"(210) 555-0101","DateOfBirth":"1976-08-18 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"nejc@tailspintoys.com","PreferredName":"Nejc"}, + {"Gender":"Female","FullName":"Amalendu Veturi","PersonID":380,"FaxNumber":"(210) 555-0101","DateOfBirth":"1955-12-22 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"amalendu@tailspintoys.com","PreferredName":"Amalendu"}, + {"Gender":"Female","FullName":"Anindo Mazumdar","PersonID":381,"FaxNumber":"(210) 555-0101","DateOfBirth":"1979-01-13 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"anindo@tailspintoys.com","PreferredName":"Anindo"}, + {"Gender":"Female","FullName":"Tarja Saikkonen","PersonID":382,"FaxNumber":"(210) 555-0101","DateOfBirth":"1974-05-13 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"tarja@tailspintoys.com","PreferredName":"Tarja"}, + {"Gender":"Female","FullName":"Nils Balodis","PersonID":383,"FaxNumber":"(307) 555-0101","DateOfBirth":"1972-04-16 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"nils@tailspintoys.com","PreferredName":"Nils"}, + {"Gender":"Female","FullName":"Bernadette Potvin","PersonID":384,"FaxNumber":"(307) 555-0101","DateOfBirth":"1974-10-26 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"bernadette @tailspintoys.com","PreferredName":"Bernadette "}, + {"Gender":"Female","FullName":"Daniella Barbosa","PersonID":385,"FaxNumber":"(212) 555-0101","DateOfBirth":"1974-11-27 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"daniella@tailspintoys.com","PreferredName":"Daniella"}, + {"Gender":"Female","FullName":"Nancy Hansson","PersonID":386,"FaxNumber":"(212) 555-0101","DateOfBirth":"1979-07-15 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"nancy@tailspintoys.com","PreferredName":"Nancy"}, + {"Gender":"Female","FullName":"Raymond Levesque","PersonID":387,"FaxNumber":"(201) 555-0101","DateOfBirth":"1982-09-24 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"raymond@tailspintoys.com","PreferredName":"Raymond"}, + {"Gender":"Female","FullName":"Linda Fisher","PersonID":388,"FaxNumber":"(201) 555-0101","DateOfBirth":"1981-08-26 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"linda@tailspintoys.com","PreferredName":"Linda"}, + {"Gender":"Female","FullName":"Raymond Desforges","PersonID":389,"FaxNumber":"(505) 555-0101","DateOfBirth":"1978-09-27 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"raymond@tailspintoys.com","PreferredName":"Raymond"}, + {"Gender":"Female","FullName":"Stern Neumann","PersonID":390,"FaxNumber":"(505) 555-0101","DateOfBirth":"1950-08-17 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"stern@tailspintoys.com","PreferredName":"Stern"}, + {"Gender":"Female","FullName":"Raju Atluri","PersonID":391,"FaxNumber":"(212) 555-0101","DateOfBirth":"1980-05-19 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"raju@tailspintoys.com","PreferredName":"Raju"}, + {"Gender":"Female","FullName":"Cezar Preda","PersonID":392,"FaxNumber":"(212) 555-0101","DateOfBirth":"1989-01-07 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"cezar@tailspintoys.com","PreferredName":"Cezar"}, + {"Gender":"Female","FullName":"Matyas Bohuslav","PersonID":393,"FaxNumber":"(239) 555-0101","DateOfBirth":"1997-11-27 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"matyas@tailspintoys.com","PreferredName":"Matyas"}, + {"Gender":"Female","FullName":"Ambaajeeraav Ghattamaneni","PersonID":394,"FaxNumber":"(239) 555-0101","DateOfBirth":"1963-07-13 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"ambaajeeraav@tailspintoys.com","PreferredName":"Ambaajeeraav"}, + {"Gender":"Female","FullName":"Julio Correa","PersonID":395,"FaxNumber":"(505) 555-0101","DateOfBirth":"1951-03-28 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"julio@tailspintoys.com","PreferredName":"Julio"}, + {"Gender":"Female","FullName":"Hamsapriya Nandamuri","PersonID":396,"FaxNumber":"(505) 555-0101","DateOfBirth":"1994-12-01 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"hamsapriya@tailspintoys.com","PreferredName":"Hamsapriya"}, + {"Gender":"Female","FullName":"Banshari De","PersonID":397,"FaxNumber":"(206) 555-0101","DateOfBirth":"1955-04-28 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"banshari@tailspintoys.com","PreferredName":"Banshari"}, + {"Gender":"Female","FullName":"Sudhir Yadav","PersonID":398,"FaxNumber":"(206) 555-0101","DateOfBirth":"1959-11-18 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"sudhir@tailspintoys.com","PreferredName":"Sudhir"}, + {"Gender":"Female","FullName":"Ngai Lam","PersonID":399,"FaxNumber":"(215) 555-0101","DateOfBirth":"1952-10-30 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ngai@tailspintoys.com","PreferredName":"Ngai"}, + {"Gender":"Female","FullName":"Camille Hetu","PersonID":400,"FaxNumber":"(215) 555-0101","DateOfBirth":"1951-06-26 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"camille@tailspintoys.com","PreferredName":"Camille"}, + {"Gender":"Female","FullName":"Hyun-Doo Song","PersonID":401,"FaxNumber":"(262) 555-0101","DateOfBirth":"1957-07-21 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"hyun-doo@tailspintoys.com","PreferredName":"Hyun-Doo"}, + {"Gender":"Female","FullName":"Bahadır Korkmaz","PersonID":402,"FaxNumber":"(262) 555-0101","DateOfBirth":"1987-11-04 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"bahad@tailspintoys.com","PreferredName":"Bahadır"}, + {"Gender":"Female","FullName":"Gabriela Srbova","PersonID":403,"FaxNumber":"(319) 555-0101","DateOfBirth":"1960-03-19 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"gabriela@tailspintoys.com","PreferredName":"Gabriela"}, + {"Gender":"Female","FullName":"Priya kaushal","PersonID":404,"FaxNumber":"(319) 555-0101","DateOfBirth":"1994-08-12 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"priya@tailspintoys.com","PreferredName":"Priya"}, + {"Gender":"Female","FullName":"Serkan senturk","PersonID":405,"FaxNumber":"(702) 555-0101","DateOfBirth":"1975-06-21 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"serkan@tailspintoys.com","PreferredName":"Serkan"}, + {"Gender":"Female","FullName":"Fatemeh Javan","PersonID":406,"FaxNumber":"(702) 555-0101","DateOfBirth":"1962-12-20 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"fatemeh@tailspintoys.com","PreferredName":"Fatemeh"}, + {"Gender":"Female","FullName":"Aahlada Thota","PersonID":407,"FaxNumber":"(215) 555-0101","DateOfBirth":"1959-02-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"aahlada@tailspintoys.com","PreferredName":"Aahlada"}, + {"Gender":"Female","FullName":"Marten Keskkula","PersonID":408,"FaxNumber":"(215) 555-0101","DateOfBirth":"1983-06-09 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"marten@tailspintoys.com","PreferredName":"Marten"}, + {"Gender":"Female","FullName":"Ayberk sahin","PersonID":409,"FaxNumber":"(308) 555-0101","DateOfBirth":"1991-07-25 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"ayberk@tailspintoys.com","PreferredName":"Ayberk"}, + {"Gender":"Female","FullName":"Magda Ciora","PersonID":410,"FaxNumber":"(308) 555-0101","DateOfBirth":"1981-08-24 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"magda@tailspintoys.com","PreferredName":"Magda"}, + {"Gender":"Female","FullName":"Kaan Tekin","PersonID":411,"FaxNumber":"(239) 555-0101","DateOfBirth":"1954-04-18 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"kaan@tailspintoys.com","PreferredName":"Kaan"}, + {"Gender":"Female","FullName":"Harshini Kommineni","PersonID":412,"FaxNumber":"(239) 555-0101","DateOfBirth":"1981-08-30 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"harshini@tailspintoys.com","PreferredName":"Harshini"}, + {"Gender":"Female","FullName":"Lata Khandke","PersonID":413,"FaxNumber":"(216) 555-0101","DateOfBirth":"1981-12-01 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"lata@tailspintoys.com","PreferredName":"Lata"}, + {"Gender":"Female","FullName":"Emil Nutiu","PersonID":414,"FaxNumber":"(216) 555-0101","DateOfBirth":"1950-11-05 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"emil@tailspintoys.com","PreferredName":"Emil"}, + {"Gender":"Female","FullName":"Truman Eder","PersonID":415,"FaxNumber":"(225) 555-0101","DateOfBirth":"1966-09-04 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"truman@tailspintoys.com","PreferredName":"Truman"}, + {"Gender":"Female","FullName":"Lale Javan","PersonID":416,"FaxNumber":"(225) 555-0101","DateOfBirth":"1983-03-14 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"lale@tailspintoys.com","PreferredName":"Lale"}, + {"Gender":"Female","FullName":"Lorraine Paulet","PersonID":417,"FaxNumber":"(458) 555-0101","DateOfBirth":"1957-06-10 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"lorraine@tailspintoys.com","PreferredName":"Lorraine"}, + {"Gender":"Female","FullName":"Yusuf Johansson","PersonID":418,"FaxNumber":"(458) 555-0101","DateOfBirth":"1959-10-27 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"yusuf@tailspintoys.com","PreferredName":"Yusuf"}, + {"Gender":"Female","FullName":"Biplab De","PersonID":419,"FaxNumber":"(231) 555-0101","DateOfBirth":"1956-09-30 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"biplab@tailspintoys.com","PreferredName":"Biplab"}, + {"Gender":"Female","FullName":"Dhanishta Kidambi","PersonID":420,"FaxNumber":"(231) 555-0101","DateOfBirth":"1964-06-09 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"dhanishta@tailspintoys.com","PreferredName":"Dhanishta"}, + {"Gender":"Female","FullName":"Rachelle Brasseur","PersonID":421,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-08-03 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"rachelle@tailspintoys.com","PreferredName":"Rachelle"}, + {"Gender":"Female","FullName":"Bholanath Das","PersonID":422,"FaxNumber":"(210) 555-0101","DateOfBirth":"1974-01-10 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"bholanath@tailspintoys.com","PreferredName":"Bholanath"}, + {"Gender":"Female","FullName":"Sara Charlton","PersonID":423,"FaxNumber":"(215) 555-0101","DateOfBirth":"1960-10-31 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"sara@tailspintoys.com","PreferredName":"Sara"}, + {"Gender":"Female","FullName":"Libor safranek","PersonID":424,"FaxNumber":"(215) 555-0101","DateOfBirth":"1975-07-21 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"libor@tailspintoys.com","PreferredName":"Libor"}, + {"Gender":"Female","FullName":"Ramesh Mukherjee","PersonID":425,"FaxNumber":"(217) 555-0101","DateOfBirth":"1991-01-02 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"ramesh@tailspintoys.com","PreferredName":"Ramesh"}, + {"Gender":"Female","FullName":"Byung-Hyun Gwak","PersonID":426,"FaxNumber":"(217) 555-0101","DateOfBirth":"1958-07-08 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"byung-hyun@tailspintoys.com","PreferredName":"Byung-Hyun"}, + {"Gender":"Female","FullName":"Ester Ahmadian","PersonID":427,"FaxNumber":"(229) 555-0101","DateOfBirth":"1986-03-10 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"ester@tailspintoys.com","PreferredName":"Ester"}, + {"Gender":"Female","FullName":"Kanika Mazumdar","PersonID":428,"FaxNumber":"(229) 555-0101","DateOfBirth":"1990-05-19 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"kanika@tailspintoys.com","PreferredName":"Kanika"}, + {"Gender":"Female","FullName":"Daniel Magnusson","PersonID":429,"FaxNumber":"(505) 555-0101","DateOfBirth":"1972-04-05 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"daniel@tailspintoys.com","PreferredName":"Daniel"}, + {"Gender":"Female","FullName":"Cemal Dogan","PersonID":430,"FaxNumber":"(505) 555-0101","DateOfBirth":"1991-11-24 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"cemal@tailspintoys.com","PreferredName":"Cemal"}, + {"Gender":"Female","FullName":"Jack Carpenter","PersonID":431,"FaxNumber":"(270) 555-0101","DateOfBirth":"1987-10-18 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"jack@tailspintoys.com","PreferredName":"Jack"}, + {"Gender":"Female","FullName":"Am Lieu","PersonID":432,"FaxNumber":"(270) 555-0101","DateOfBirth":"1979-03-11 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"am@tailspintoys.com","PreferredName":"Am"}, + {"Gender":"Female","FullName":"Thomas Fischer","PersonID":433,"FaxNumber":"(239) 555-0101","DateOfBirth":"1990-01-30 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"thomas@tailspintoys.com","PreferredName":"Thomas"}, + {"Gender":"Female","FullName":"Neil Logan","PersonID":434,"FaxNumber":"(239) 555-0101","DateOfBirth":"1985-10-26 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"neil@tailspintoys.com","PreferredName":"Neil"}, + {"Gender":"Female","FullName":"Viollette Monty","PersonID":435,"FaxNumber":"(803) 555-0101","DateOfBirth":"1977-09-14 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"viollette@tailspintoys.com","PreferredName":"Viollette"}, + {"Gender":"Female","FullName":"Gita Dutta","PersonID":436,"FaxNumber":"(803) 555-0101","DateOfBirth":"1957-07-04 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"gita@tailspintoys.com","PreferredName":"Gita"}, + {"Gender":"Female","FullName":"Alinne Cardoso","PersonID":437,"FaxNumber":"(308) 555-0101","DateOfBirth":"1975-03-13 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"alinne@tailspintoys.com","PreferredName":"Alinne"}, + {"Gender":"Female","FullName":"Uma Pandit","PersonID":438,"FaxNumber":"(308) 555-0101","DateOfBirth":"1976-04-10 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"uma@tailspintoys.com","PreferredName":"Uma"}, + {"Gender":"Female","FullName":"Mani Poddar","PersonID":439,"FaxNumber":"(209) 555-0101","DateOfBirth":"1967-08-07 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"mani@tailspintoys.com","PreferredName":"Mani"}, + {"Gender":"Female","FullName":"Rama Mukaddam","PersonID":440,"FaxNumber":"(209) 555-0101","DateOfBirth":"1987-10-23 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"rama@tailspintoys.com","PreferredName":"Rama"}, + {"Gender":"Female","FullName":"Deakshitulu Mokkapati","PersonID":441,"FaxNumber":"(314) 555-0101","DateOfBirth":"1985-05-01 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"deakshitulu@tailspintoys.com","PreferredName":"Deakshitulu"}, + {"Gender":"Female","FullName":"Tereza PinÄakova","PersonID":442,"FaxNumber":"(314) 555-0101","DateOfBirth":"1987-04-18 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"tereza@tailspintoys.com","PreferredName":"Tereza"}, + {"Gender":"Female","FullName":"Cezar Pavel","PersonID":443,"FaxNumber":"(303) 555-0101","DateOfBirth":"1959-01-27 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"cezar@tailspintoys.com","PreferredName":"Cezar"}, + {"Gender":"Female","FullName":"Bahaar Yekta","PersonID":444,"FaxNumber":"(303) 555-0101","DateOfBirth":"1966-03-23 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"bahaar@tailspintoys.com","PreferredName":"Bahaar"}, + {"Gender":"Female","FullName":"Fanni Benko","PersonID":445,"FaxNumber":"(385) 555-0101","DateOfBirth":"1974-09-18 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"fanni@tailspintoys.com","PreferredName":"Fanni"}, + {"Gender":"Female","FullName":"Amar Dutta","PersonID":446,"FaxNumber":"(385) 555-0101","DateOfBirth":"1968-10-15 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"amar@tailspintoys.com","PreferredName":"Amar"}, + {"Gender":"Female","FullName":"Brenda Morgan","PersonID":447,"FaxNumber":"(206) 555-0101","DateOfBirth":"1954-01-02 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"brenda@tailspintoys.com","PreferredName":"Brenda"}, + {"Gender":"Female","FullName":"Kamal Nakhtare","PersonID":448,"FaxNumber":"(206) 555-0101","DateOfBirth":"1991-12-01 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"kamal@tailspintoys.com","PreferredName":"Kamal"}, + {"Gender":"Female","FullName":"Olga Alexandrova","PersonID":449,"FaxNumber":"(303) 555-0101","DateOfBirth":"1955-11-24 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"olga@wingtiptoys.com","PreferredName":"Olga"}, + {"Gender":"Female","FullName":"Bibi Javan","PersonID":450,"FaxNumber":"(303) 555-0101","DateOfBirth":"1973-04-16 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"bibi@wingtiptoys.com","PreferredName":"Bibi"}, + {"Gender":"Female","FullName":"Maris Baltins","PersonID":451,"FaxNumber":"(215) 555-0101","DateOfBirth":"1975-05-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"maris@wingtiptoys.com","PreferredName":"Maris"}, + {"Gender":"Female","FullName":"Taneli Hahl","PersonID":452,"FaxNumber":"(215) 555-0101","DateOfBirth":"1987-10-11 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"taneli@wingtiptoys.com","PreferredName":"Taneli"}, + {"Gender":"Female","FullName":"Parsa Reuser","PersonID":453,"FaxNumber":"(480) 555-0101","DateOfBirth":"1969-09-06 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"parsa@wingtiptoys.com","PreferredName":"Parsa"}, + {"Gender":"Female","FullName":"Da-eun Kwak","PersonID":454,"FaxNumber":"(480) 555-0101","DateOfBirth":"1953-04-05 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"da-eun@wingtiptoys.com","PreferredName":"Da-eun"}, + {"Gender":"Female","FullName":"Duleep Srivastava","PersonID":455,"FaxNumber":"(215) 555-0101","DateOfBirth":"1977-11-21 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"duleep@wingtiptoys.com","PreferredName":"Duleep"}, + {"Gender":"Female","FullName":"Kurt Balog","PersonID":456,"FaxNumber":"(215) 555-0101","DateOfBirth":"1996-09-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"kurt@wingtiptoys.com","PreferredName":"Kurt"}, + {"Gender":"Female","FullName":"Miran Nikolic","PersonID":457,"FaxNumber":"(217) 555-0101","DateOfBirth":"1981-10-06 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"miran@wingtiptoys.com","PreferredName":"Miran"}, + {"Gender":"Female","FullName":"Indra Mudaliyar","PersonID":458,"FaxNumber":"(217) 555-0101","DateOfBirth":"1991-05-17 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"indra@wingtiptoys.com","PreferredName":"Indra"}, + {"Gender":"Female","FullName":"Calin Bojin","PersonID":459,"FaxNumber":"(205) 555-0101","DateOfBirth":"1969-10-08 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"calin@wingtiptoys.com","PreferredName":"Calin"}, + {"Gender":"Female","FullName":"Maxime Westerink","PersonID":460,"FaxNumber":"(205) 555-0101","DateOfBirth":"1967-06-25 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"maxime@wingtiptoys.com","PreferredName":"Maxime"}, + {"Gender":"Female","FullName":"Lang Le","PersonID":461,"FaxNumber":"(225) 555-0101","DateOfBirth":"1993-12-09 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"lang@wingtiptoys.com","PreferredName":"Lang"}, + {"Gender":"Female","FullName":"Bozena Divisova","PersonID":462,"FaxNumber":"(225) 555-0101","DateOfBirth":"1984-01-05 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"bozena@wingtiptoys.com","PreferredName":"Bozena"}, + {"Gender":"Female","FullName":"Bhaagyalakshmi Muppavarapu","PersonID":463,"FaxNumber":"(210) 555-0101","DateOfBirth":"1990-02-17 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"bhaagyalakshmi@wingtiptoys.com","PreferredName":"Bhaagyalakshmi"}, + {"Gender":"Female","FullName":"Durjoy Bose","PersonID":464,"FaxNumber":"(210) 555-0101","DateOfBirth":"1982-08-12 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"durjoy@wingtiptoys.com","PreferredName":"Durjoy"}, + {"Gender":"Female","FullName":"Dimitry Nechita","PersonID":465,"FaxNumber":"(209) 555-0101","DateOfBirth":"1976-07-09 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"dimitry@wingtiptoys.com","PreferredName":"Dimitry"}, + {"Gender":"Female","FullName":"Meredith Padilla","PersonID":466,"FaxNumber":"(209) 555-0101","DateOfBirth":"1977-07-06 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"meredith@wingtiptoys.com","PreferredName":"Meredith"}, + {"Gender":"Female","FullName":"Miroslav Kohout","PersonID":467,"FaxNumber":"(210) 555-0101","DateOfBirth":"1979-06-02 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"miroslav@wingtiptoys.com","PreferredName":"Miroslav"}, + {"Gender":"Female","FullName":"Teresa Torres","PersonID":468,"FaxNumber":"(210) 555-0101","DateOfBirth":"1993-01-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"teresa@wingtiptoys.com","PreferredName":"Teresa"}, + {"Gender":"Female","FullName":"Fransje Mutlu","PersonID":469,"FaxNumber":"(262) 555-0101","DateOfBirth":"1977-02-23 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"fransje@wingtiptoys.com","PreferredName":"Fransje"}, + {"Gender":"Female","FullName":"Karel Hybl","PersonID":470,"FaxNumber":"(262) 555-0101","DateOfBirth":"1980-01-10 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"karel@wingtiptoys.com","PreferredName":"Karel"}, + {"Gender":"Female","FullName":"Chati Ornlamai","PersonID":471,"FaxNumber":"(406) 555-0101","DateOfBirth":"1952-06-30 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"chati@wingtiptoys.com","PreferredName":"Chati"}, + {"Gender":"Female","FullName":"Tajana Lovric","PersonID":472,"FaxNumber":"(406) 555-0101","DateOfBirth":"1971-07-03 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"tajana@wingtiptoys.com","PreferredName":"Tajana"}, + {"Gender":"Female","FullName":"Raine Knihtila","PersonID":473,"FaxNumber":"(210) 555-0101","DateOfBirth":"1981-12-19 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"raine@wingtiptoys.com","PreferredName":"Raine"}, + {"Gender":"Female","FullName":"Dhir Mazumdar","PersonID":474,"FaxNumber":"(210) 555-0101","DateOfBirth":"1958-09-27 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"dhir@wingtiptoys.com","PreferredName":"Dhir"}, + {"Gender":"Female","FullName":"Lan Chu","PersonID":475,"FaxNumber":"(215) 555-0101","DateOfBirth":"1962-07-20 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"lan@wingtiptoys.com","PreferredName":"Lan"}, + {"Gender":"Female","FullName":"Tereza Prikrylova","PersonID":476,"FaxNumber":"(215) 555-0101","DateOfBirth":"1957-04-24 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"tereza@wingtiptoys.com","PreferredName":"Tereza"}, + {"Gender":"Female","FullName":"Maurice English","PersonID":477,"FaxNumber":"(229) 555-0101","DateOfBirth":"1952-10-11 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"maurice@wingtiptoys.com","PreferredName":"Maurice"}, + {"Gender":"Female","FullName":"Daniella Ribeiro","PersonID":478,"FaxNumber":"(229) 555-0101","DateOfBirth":"1975-11-22 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"daniella@wingtiptoys.com","PreferredName":"Daniella"}, + {"Gender":"Female","FullName":"Irene Sepp","PersonID":479,"FaxNumber":"(262) 555-0101","DateOfBirth":"1963-04-11 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"irene@wingtiptoys.com","PreferredName":"Irene"}, + {"Gender":"Female","FullName":"Hubert Fields","PersonID":480,"FaxNumber":"(262) 555-0101","DateOfBirth":"1973-02-01 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"hubert@wingtiptoys.com","PreferredName":"Hubert"}, + {"Gender":"Female","FullName":"Chandranath Bose","PersonID":481,"FaxNumber":"(262) 555-0101","DateOfBirth":"1995-08-27 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"chandranath@wingtiptoys.com","PreferredName":"Chandranath"}, + {"Gender":"Female","FullName":"Gaurav Acharya","PersonID":482,"FaxNumber":"(262) 555-0101","DateOfBirth":"1982-01-18 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"gaurav@wingtiptoys.com","PreferredName":"Gaurav"}, + {"Gender":"Female","FullName":"Ana Julijana Isa","PersonID":483,"FaxNumber":"(406) 555-0101","DateOfBirth":"1978-11-02 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"ana julijana@wingtiptoys.com","PreferredName":"Ana Julijana"}, + {"Gender":"Female","FullName":"Libor Klaus","PersonID":484,"FaxNumber":"(406) 555-0101","DateOfBirth":"1970-06-28 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"libor@wingtiptoys.com","PreferredName":"Libor"}, + {"Gender":"Female","FullName":"Gireesh Bhogireddy","PersonID":485,"FaxNumber":"(239) 555-0101","DateOfBirth":"1951-07-24 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"gireesh@wingtiptoys.com","PreferredName":"Gireesh"}, + {"Gender":"Female","FullName":"Stanislav Zeman","PersonID":486,"FaxNumber":"(239) 555-0101","DateOfBirth":"1968-06-06 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"stanislav@wingtiptoys.com","PreferredName":"Stanislav"}, + {"Gender":"Female","FullName":"Premwadee Atitarn","PersonID":487,"FaxNumber":"(209) 555-0101","DateOfBirth":"1988-04-29 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"premwadee@wingtiptoys.com","PreferredName":"Premwadee"}, + {"Gender":"Female","FullName":"Deeptendu Das","PersonID":488,"FaxNumber":"(209) 555-0101","DateOfBirth":"1955-05-10 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"deeptendu@wingtiptoys.com","PreferredName":"Deeptendu"}, + {"Gender":"Female","FullName":"Nishant Patil","PersonID":489,"FaxNumber":"(205) 555-0101","DateOfBirth":"1964-07-05 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"nishant@wingtiptoys.com","PreferredName":"Nishant"}, + {"Gender":"Female","FullName":"Bhaagyalakshmi Rajanala","PersonID":490,"FaxNumber":"(205) 555-0101","DateOfBirth":"1966-09-20 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"bhaagyalakshmi@wingtiptoys.com","PreferredName":"Bhaagyalakshmi"}, + {"Gender":"Female","FullName":"Rohan Das","PersonID":491,"FaxNumber":"(206) 555-0101","DateOfBirth":"1950-04-13 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"rohan@wingtiptoys.com","PreferredName":"Rohan"}, + {"Gender":"Female","FullName":"Bhaanusree Ankitham","PersonID":492,"FaxNumber":"(206) 555-0101","DateOfBirth":"1994-05-04 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"bhaanusree@wingtiptoys.com","PreferredName":"Bhaanusree"}, + {"Gender":"Female","FullName":"Aamdaal Kamasamudram","PersonID":493,"FaxNumber":"(316) 555-0101","DateOfBirth":"1981-04-05 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"aamdaal@wingtiptoys.com","PreferredName":"Aamdaal"}, + {"Gender":"Female","FullName":"Karita Rosberg","PersonID":494,"FaxNumber":"(316) 555-0101","DateOfBirth":"1955-11-02 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"karita@wingtiptoys.com","PreferredName":"Karita"}, + {"Gender":"Female","FullName":"Baebeesarasvati Kamasamudram","PersonID":495,"FaxNumber":"(308) 555-0101","DateOfBirth":"1979-01-29 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"baebeesarasvati@wingtiptoys.com","PreferredName":"Baebeesarasvati"}, + {"Gender":"Female","FullName":"Hana Palatova","PersonID":496,"FaxNumber":"(308) 555-0101","DateOfBirth":"1957-07-10 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"hana@wingtiptoys.com","PreferredName":"Hana"}, + {"Gender":"Female","FullName":"Marcello Dellucci","PersonID":497,"FaxNumber":"(405) 555-0101","DateOfBirth":"1980-11-04 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"marcello@wingtiptoys.com","PreferredName":"Marcello"}, + {"Gender":"Female","FullName":"Shobha Raju","PersonID":498,"FaxNumber":"(405) 555-0101","DateOfBirth":"1964-05-25 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"shobha@wingtiptoys.com","PreferredName":"Shobha"}, + {"Gender":"Female","FullName":"Mee-Kyong Sin","PersonID":499,"FaxNumber":"(480) 555-0101","DateOfBirth":"1953-10-09 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"mee-kyong@wingtiptoys.com","PreferredName":"Mee-Kyong"}, + {"Gender":"Female","FullName":"VÄ›ra Kopecka","PersonID":500,"FaxNumber":"(480) 555-0101","DateOfBirth":"1950-12-10 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"vacra@wingtiptoys.com","PreferredName":"VÄ›ra"}, + {"Gender":"Female","FullName":"Ivica LuÄic","PersonID":501,"FaxNumber":"(212) 555-0101","DateOfBirth":"1984-11-08 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"ivica@wingtiptoys.com","PreferredName":"Ivica"}, + {"Gender":"Female","FullName":"David Svoboda","PersonID":502,"FaxNumber":"(212) 555-0101","DateOfBirth":"1977-01-02 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"david@wingtiptoys.com","PreferredName":"David"}, + {"Gender":"Female","FullName":"Vinicius Correa","PersonID":503,"FaxNumber":"(231) 555-0101","DateOfBirth":"1961-12-17 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"vinicius@wingtiptoys.com","PreferredName":"Vinicius"}, + {"Gender":"Female","FullName":"Surat Pornpipatpong","PersonID":504,"FaxNumber":"(231) 555-0101","DateOfBirth":"1964-11-25 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"surat@wingtiptoys.com","PreferredName":"Surat"}, + {"Gender":"Female","FullName":"Fabio Pena","PersonID":505,"FaxNumber":"(314) 555-0101","DateOfBirth":"1966-03-09 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"fabio@wingtiptoys.com","PreferredName":"Fabio"}, + {"Gender":"Female","FullName":"Kauan Gomes","PersonID":506,"FaxNumber":"(314) 555-0101","DateOfBirth":"1982-04-01 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"kauan@wingtiptoys.com","PreferredName":"Kauan"}, + {"Gender":"Female","FullName":"Lakshmi Roy","PersonID":507,"FaxNumber":"(208) 555-0101","DateOfBirth":"1955-08-21 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"lakshmi@wingtiptoys.com","PreferredName":"Lakshmi"}, + {"Gender":"Female","FullName":"Kersti Mihhailov","PersonID":508,"FaxNumber":"(208) 555-0101","DateOfBirth":"1967-11-15 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"kersti@wingtiptoys.com","PreferredName":"Kersti"}, + {"Gender":"Female","FullName":"Selma Seppanen","PersonID":509,"FaxNumber":"(787) 555-0101","DateOfBirth":"1995-12-21 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"selma@wingtiptoys.com","PreferredName":"Selma"}, + {"Gender":"Female","FullName":"Danielle Brasseur","PersonID":510,"FaxNumber":"(787) 555-0101","DateOfBirth":"1991-10-11 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"danielle @wingtiptoys.com","PreferredName":"Danielle "}, + {"Gender":"Female","FullName":"Bay Ly","PersonID":511,"FaxNumber":"(239) 555-0101","DateOfBirth":"1990-03-29 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"bay@wingtiptoys.com","PreferredName":"Bay"}, + {"Gender":"Female","FullName":"Sanjiv Raina","PersonID":512,"FaxNumber":"(239) 555-0101","DateOfBirth":"1989-08-12 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"sanjiv@wingtiptoys.com","PreferredName":"Sanjiv"}, + {"Gender":"Female","FullName":"Adirake Saenamuang","PersonID":513,"FaxNumber":"(405) 555-0101","DateOfBirth":"1953-04-06 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"adirake@wingtiptoys.com","PreferredName":"Adirake"}, + {"Gender":"Female","FullName":"Leena De","PersonID":514,"FaxNumber":"(405) 555-0101","DateOfBirth":"1988-04-01 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"leena@wingtiptoys.com","PreferredName":"Leena"}, + {"Gender":"Female","FullName":"Tarja Penttila","PersonID":515,"FaxNumber":"(212) 555-0101","DateOfBirth":"1976-06-21 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"tarja@wingtiptoys.com","PreferredName":"Tarja"}, + {"Gender":"Female","FullName":"Gunnar Larsson","PersonID":516,"FaxNumber":"(212) 555-0101","DateOfBirth":"1982-05-08 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"gunnar@wingtiptoys.com","PreferredName":"Gunnar"}, + {"Gender":"Female","FullName":"Devendranath Huq","PersonID":517,"FaxNumber":"(217) 555-0101","DateOfBirth":"1979-09-27 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"devendranath@wingtiptoys.com","PreferredName":"Devendranath"}, + {"Gender":"Female","FullName":"Vicente Cabrera","PersonID":518,"FaxNumber":"(217) 555-0101","DateOfBirth":"1964-02-22 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"vicente@wingtiptoys.com","PreferredName":"Vicente"}, + {"Gender":"Female","FullName":"Enes Olsson","PersonID":519,"FaxNumber":"(276) 555-0101","DateOfBirth":"1953-10-25 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"enes@wingtiptoys.com","PreferredName":"Enes"}, + {"Gender":"Female","FullName":"Milada Kubatova","PersonID":520,"FaxNumber":"(276) 555-0101","DateOfBirth":"1951-10-19 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"milada@wingtiptoys.com","PreferredName":"Milada"}, + {"Gender":"Female","FullName":"Vanja Grgic","PersonID":521,"FaxNumber":"(215) 555-0101","DateOfBirth":"1952-11-17 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"vanja@wingtiptoys.com","PreferredName":"Vanja"}, + {"Gender":"Female","FullName":"Daniela Omelkova","PersonID":522,"FaxNumber":"(215) 555-0101","DateOfBirth":"1971-08-23 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"daniela@wingtiptoys.com","PreferredName":"Daniela"}, + {"Gender":"Female","FullName":"Dayaram Mishra","PersonID":523,"FaxNumber":"(216) 555-0101","DateOfBirth":"1988-02-15 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"dayaram@wingtiptoys.com","PreferredName":"Dayaram"}, + {"Gender":"Female","FullName":"Gal Kokeza","PersonID":524,"FaxNumber":"(216) 555-0101","DateOfBirth":"1951-06-11 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"gal@wingtiptoys.com","PreferredName":"Gal"}, + {"Gender":"Female","FullName":"Mina Omidzadeh","PersonID":525,"FaxNumber":"(262) 555-0101","DateOfBirth":"1963-02-07 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"mina@wingtiptoys.com","PreferredName":"Mina"}, + {"Gender":"Female","FullName":"Adrian Bengtsson","PersonID":526,"FaxNumber":"(262) 555-0101","DateOfBirth":"1985-08-13 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"adrian@wingtiptoys.com","PreferredName":"Adrian"}, + {"Gender":"Female","FullName":"Kadir Usenuly","PersonID":527,"FaxNumber":"(405) 555-0101","DateOfBirth":"1982-07-03 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"kadir@wingtiptoys.com","PreferredName":"Kadir"}, + {"Gender":"Female","FullName":"Rajiv Shasthri","PersonID":528,"FaxNumber":"(405) 555-0101","DateOfBirth":"1988-06-24 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"rajiv@wingtiptoys.com","PreferredName":"Rajiv"}, + {"Gender":"Female","FullName":"Kajsa Jakobsson","PersonID":529,"FaxNumber":"(319) 555-0101","DateOfBirth":"1986-07-21 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"kajsa@wingtiptoys.com","PreferredName":"Kajsa"}, + {"Gender":"Female","FullName":"Elnaz Rahimi","PersonID":530,"FaxNumber":"(319) 555-0101","DateOfBirth":"1987-06-08 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"elnaz@wingtiptoys.com","PreferredName":"Elnaz"}, + {"Gender":"Female","FullName":"Rahul Ghate","PersonID":531,"FaxNumber":"(215) 555-0101","DateOfBirth":"1985-08-19 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"rahul@wingtiptoys.com","PreferredName":"Rahul"}, + {"Gender":"Female","FullName":"Chuan Wongsawat","PersonID":532,"FaxNumber":"(215) 555-0101","DateOfBirth":"1985-05-08 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"chuan@wingtiptoys.com","PreferredName":"Chuan"}, + {"Gender":"Female","FullName":"Lien Banh","PersonID":533,"FaxNumber":"(231) 555-0101","DateOfBirth":"1962-08-15 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"lien@wingtiptoys.com","PreferredName":"Lien"}, + {"Gender":"Female","FullName":"Anshula Mitra","PersonID":534,"FaxNumber":"(231) 555-0101","DateOfBirth":"1984-08-28 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"anshula@wingtiptoys.com","PreferredName":"Anshula"}, + {"Gender":"Female","FullName":"Divyendu Chakraborty","PersonID":535,"FaxNumber":"(605) 555-0101","DateOfBirth":"1983-03-17 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"divyendu@wingtiptoys.com","PreferredName":"Divyendu"}, + {"Gender":"Female","FullName":"Rita Kauppi","PersonID":536,"FaxNumber":"(605) 555-0101","DateOfBirth":"1997-10-01 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"rita@wingtiptoys.com","PreferredName":"Rita"}, + {"Gender":"Female","FullName":"An Dung Ngo","PersonID":537,"FaxNumber":"(303) 555-0101","DateOfBirth":"1954-12-26 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"an dung@wingtiptoys.com","PreferredName":"An Dung"}, + {"Gender":"Female","FullName":"Pranav Yadav","PersonID":538,"FaxNumber":"(303) 555-0101","DateOfBirth":"1993-06-29 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"pranav@wingtiptoys.com","PreferredName":"Pranav"}, + {"Gender":"Female","FullName":"Chetana Kamath","PersonID":539,"FaxNumber":"(225) 555-0101","DateOfBirth":"1997-03-07 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"chetana@wingtiptoys.com","PreferredName":"Chetana"}, + {"Gender":"Female","FullName":"Isabelina Flores","PersonID":540,"FaxNumber":"(225) 555-0101","DateOfBirth":"1978-02-24 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"isabelina@wingtiptoys.com","PreferredName":"Isabelina"}, + {"Gender":"Female","FullName":"Premwadee Saowaluk","PersonID":541,"FaxNumber":"(319) 555-0101","DateOfBirth":"1980-12-11 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"premwadee@wingtiptoys.com","PreferredName":"Premwadee"}, + {"Gender":"Female","FullName":"Adam Balaz","PersonID":542,"FaxNumber":"(319) 555-0101","DateOfBirth":"1988-01-23 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"adam@wingtiptoys.com","PreferredName":"Adam"}, + {"Gender":"Female","FullName":"Jae-Hwa Min","PersonID":543,"FaxNumber":"(702) 555-0101","DateOfBirth":"1992-03-04 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"jae-hwa@wingtiptoys.com","PreferredName":"Jae-Hwa"}, + {"Gender":"Female","FullName":"Rafael Pena","PersonID":544,"FaxNumber":"(702) 555-0101","DateOfBirth":"1950-01-06 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"rafael@wingtiptoys.com","PreferredName":"Rafael"}, + {"Gender":"Female","FullName":"Catalina Nechita","PersonID":545,"FaxNumber":"(304) 555-0101","DateOfBirth":"1993-02-07 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"catalina@wingtiptoys.com","PreferredName":"Catalina"}, + {"Gender":"Female","FullName":"Robert Cosic","PersonID":546,"FaxNumber":"(304) 555-0101","DateOfBirth":"1956-11-17 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"robert@wingtiptoys.com","PreferredName":"Robert"}, + {"Gender":"Female","FullName":"Constanza Laureano","PersonID":547,"FaxNumber":"(219) 555-0101","DateOfBirth":"1996-07-27 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"constanza@wingtiptoys.com","PreferredName":"Constanza"}, + {"Gender":"Female","FullName":"Sunil Nakhtare","PersonID":548,"FaxNumber":"(219) 555-0101","DateOfBirth":"1964-06-01 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"sunil@wingtiptoys.com","PreferredName":"Sunil"}, + {"Gender":"Female","FullName":"Aakriti Bhamidipati","PersonID":549,"FaxNumber":"(307) 555-0101","DateOfBirth":"1987-09-26 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"aakriti@wingtiptoys.com","PreferredName":"Aakriti"}, + {"Gender":"Female","FullName":"Sakchai Supitayaporn","PersonID":550,"FaxNumber":"(307) 555-0101","DateOfBirth":"1957-02-10 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"sakchai@wingtiptoys.com","PreferredName":"Sakchai"}, + {"Gender":"Female","FullName":"Himadri PrabhupÄda","PersonID":551,"FaxNumber":"(209) 555-0101","DateOfBirth":"1966-04-08 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"himadri@wingtiptoys.com","PreferredName":"Himadri"}, + {"Gender":"Female","FullName":"Lukas Kohout","PersonID":552,"FaxNumber":"(209) 555-0101","DateOfBirth":"1984-01-12 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"lukas@wingtiptoys.com","PreferredName":"Lukas"}, + {"Gender":"Female","FullName":"Bryan Helms","PersonID":553,"FaxNumber":"(276) 555-0101","DateOfBirth":"1980-03-22 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"bryan@wingtiptoys.com","PreferredName":"Bryan"}, + {"Gender":"Female","FullName":"Julianna Makay","PersonID":554,"FaxNumber":"(276) 555-0101","DateOfBirth":"1972-06-23 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"julianna@wingtiptoys.com","PreferredName":"Julianna"}, + {"Gender":"Female","FullName":"Harri Kask","PersonID":555,"FaxNumber":"(787) 555-0101","DateOfBirth":"1975-06-17 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"harri@wingtiptoys.com","PreferredName":"Harri"}, + {"Gender":"Female","FullName":"Rakhshinda Mansouri","PersonID":556,"FaxNumber":"(787) 555-0101","DateOfBirth":"1994-11-07 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"rakhshinda@wingtiptoys.com","PreferredName":"Rakhshinda"}, + {"Gender":"Female","FullName":"Ilse Sandell","PersonID":557,"FaxNumber":"(209) 555-0101","DateOfBirth":"1968-05-20 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"ilse@wingtiptoys.com","PreferredName":"Ilse"}, + {"Gender":"Female","FullName":"Tibor Harsanyi","PersonID":558,"FaxNumber":"(209) 555-0101","DateOfBirth":"1981-01-05 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"tibor@wingtiptoys.com","PreferredName":"Tibor"}, + {"Gender":"Female","FullName":"Subhash Matondkar","PersonID":559,"FaxNumber":"(212) 555-0101","DateOfBirth":"1954-05-17 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"subhash@wingtiptoys.com","PreferredName":"Subhash"}, + {"Gender":"Female","FullName":"Gurudas De","PersonID":560,"FaxNumber":"(212) 555-0101","DateOfBirth":"1972-04-08 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"gurudas@wingtiptoys.com","PreferredName":"Gurudas"}, + {"Gender":"Female","FullName":"Eesvaraavu Ankitham","PersonID":561,"FaxNumber":"(505) 555-0101","DateOfBirth":"1956-02-19 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"eesvaraavu@wingtiptoys.com","PreferredName":"Eesvaraavu"}, + {"Gender":"Female","FullName":"Angelina Karlsson","PersonID":562,"FaxNumber":"(505) 555-0101","DateOfBirth":"1992-01-22 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"angelina@wingtiptoys.com","PreferredName":"Angelina"}, + {"Gender":"Female","FullName":"Miguel Paez","PersonID":563,"FaxNumber":"(205) 555-0101","DateOfBirth":"1952-12-18 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"miguel@wingtiptoys.com","PreferredName":"Miguel"}, + {"Gender":"Female","FullName":"Anukul Dey","PersonID":564,"FaxNumber":"(205) 555-0101","DateOfBirth":"1951-03-01 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"anukul@wingtiptoys.com","PreferredName":"Anukul"}, + {"Gender":"Female","FullName":"Tobias Gruber","PersonID":565,"FaxNumber":"(216) 555-0101","DateOfBirth":"1967-10-15 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"tobias@wingtiptoys.com","PreferredName":"Tobias"}, + {"Gender":"Female","FullName":"Jitka Stastna","PersonID":566,"FaxNumber":"(216) 555-0101","DateOfBirth":"1959-08-17 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"jitka@wingtiptoys.com","PreferredName":"Jitka"}, + {"Gender":"Female","FullName":"Daniela Dumina","PersonID":567,"FaxNumber":"(505) 555-0101","DateOfBirth":"1969-10-15 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"daniela@wingtiptoys.com","PreferredName":"Daniela"}, + {"Gender":"Female","FullName":"Fahmidah Fallahi","PersonID":568,"FaxNumber":"(505) 555-0101","DateOfBirth":"1984-01-07 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"fahmidah@wingtiptoys.com","PreferredName":"Fahmidah"}, + {"Gender":"Female","FullName":"Ganesh Mukherjee","PersonID":569,"FaxNumber":"(210) 555-0101","DateOfBirth":"1968-07-17 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"ganesh@wingtiptoys.com","PreferredName":"Ganesh"}, + {"Gender":"Female","FullName":"Hector Parra","PersonID":570,"FaxNumber":"(210) 555-0101","DateOfBirth":"1965-08-22 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"hector@wingtiptoys.com","PreferredName":"Hector"}, + {"Gender":"Female","FullName":"Avanti Nishad","PersonID":571,"FaxNumber":"(505) 555-0101","DateOfBirth":"1997-03-26 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"avanti@wingtiptoys.com","PreferredName":"Avanti"}, + {"Gender":"Female","FullName":"Gino Sal","PersonID":572,"FaxNumber":"(505) 555-0101","DateOfBirth":"1995-12-10 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"gino@wingtiptoys.com","PreferredName":"Gino"}, + {"Gender":"Female","FullName":"Daedeepya Thota","PersonID":573,"FaxNumber":"(405) 555-0101","DateOfBirth":"1961-09-26 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"daedeepya@wingtiptoys.com","PreferredName":"Daedeepya"}, + {"Gender":"Female","FullName":"Lekha Sen","PersonID":574,"FaxNumber":"(405) 555-0101","DateOfBirth":"1968-03-05 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"lekha@wingtiptoys.com","PreferredName":"Lekha"}, + {"Gender":"Female","FullName":"Gabriela Chirila","PersonID":575,"FaxNumber":"(701) 555-0101","DateOfBirth":"1955-02-04 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"gabriela@wingtiptoys.com","PreferredName":"Gabriela"}, + {"Gender":"Female","FullName":"Elina Bite","PersonID":576,"FaxNumber":"(701) 555-0101","DateOfBirth":"1971-11-28 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"elina@wingtiptoys.com","PreferredName":"Elina"}, + {"Gender":"Female","FullName":"Nagur Atluri","PersonID":577,"FaxNumber":"(405) 555-0101","DateOfBirth":"1951-02-04 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"nagur@wingtiptoys.com","PreferredName":"Nagur"}, + {"Gender":"Female","FullName":"Hanita Kamasamudram","PersonID":578,"FaxNumber":"(405) 555-0101","DateOfBirth":"1966-09-13 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"hanita@wingtiptoys.com","PreferredName":"Hanita"}, + {"Gender":"Female","FullName":"Sintja Buecek","PersonID":579,"FaxNumber":"(210) 555-0101","DateOfBirth":"1989-07-26 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"sintja@wingtiptoys.com","PreferredName":"Sintja"}, + {"Gender":"Female","FullName":"Esha Singh","PersonID":580,"FaxNumber":"(210) 555-0101","DateOfBirth":"1995-04-23 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"esha@wingtiptoys.com","PreferredName":"Esha"}, + {"Gender":"Female","FullName":"Pongrit Srisati","PersonID":581,"FaxNumber":"(215) 555-0101","DateOfBirth":"1968-01-19 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"pongrit@wingtiptoys.com","PreferredName":"Pongrit"}, + {"Gender":"Female","FullName":"Hanna Piip","PersonID":582,"FaxNumber":"(215) 555-0101","DateOfBirth":"1958-10-23 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"hanna@wingtiptoys.com","PreferredName":"Hanna"}, + {"Gender":"Female","FullName":"Linda Green","PersonID":583,"FaxNumber":"(218) 555-0101","DateOfBirth":"1990-05-02 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"linda@wingtiptoys.com","PreferredName":"Linda"}, + {"Gender":"Female","FullName":"Baalamurali Kommineni","PersonID":584,"FaxNumber":"(218) 555-0101","DateOfBirth":"1998-01-02 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"baalamurali@wingtiptoys.com","PreferredName":"Baalamurali"}, + {"Gender":"Female","FullName":"Sarmis Skujins","PersonID":585,"FaxNumber":"(270) 555-0101","DateOfBirth":"1987-12-16 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"sarmis@wingtiptoys.com","PreferredName":"Sarmis"}, + {"Gender":"Female","FullName":"Amporn Jetjirawat","PersonID":586,"FaxNumber":"(270) 555-0101","DateOfBirth":"1969-07-23 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"amporn@wingtiptoys.com","PreferredName":"Amporn"}, + {"Gender":"Female","FullName":"Libuse Srbova","PersonID":587,"FaxNumber":"(210) 555-0101","DateOfBirth":"1974-12-07 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"libuse@wingtiptoys.com","PreferredName":"Libuse"}, + {"Gender":"Female","FullName":"Jimme Harmsen","PersonID":588,"FaxNumber":"(210) 555-0101","DateOfBirth":"1960-08-30 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"jimme@wingtiptoys.com","PreferredName":"Jimme"}, + {"Gender":"Female","FullName":"Viktorie Stejskalova","PersonID":589,"FaxNumber":"(209) 555-0101","DateOfBirth":"1990-11-22 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"viktorie@wingtiptoys.com","PreferredName":"Viktorie"}, + {"Gender":"Female","FullName":"Bishnu Bandopadhyay","PersonID":590,"FaxNumber":"(209) 555-0101","DateOfBirth":"1995-11-02 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bishnu@wingtiptoys.com","PreferredName":"Bishnu"}, + {"Gender":"Female","FullName":"Slavko Pavlovic","PersonID":591,"FaxNumber":"(209) 555-0101","DateOfBirth":"1977-06-02 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"slavko@wingtiptoys.com","PreferredName":"Slavko"}, + {"Gender":"Female","FullName":"Malorie Dupuy","PersonID":592,"FaxNumber":"(209) 555-0101","DateOfBirth":"1977-05-18 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"malorie@wingtiptoys.com","PreferredName":"Malorie"}, + {"Gender":"Female","FullName":"Doru Munteanu","PersonID":593,"FaxNumber":"(209) 555-0101","DateOfBirth":"1965-01-15 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"doru@wingtiptoys.com","PreferredName":"Doru"}, + {"Gender":"Female","FullName":"Ankita Mittal","PersonID":594,"FaxNumber":"(209) 555-0101","DateOfBirth":"1963-09-19 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"ankita@wingtiptoys.com","PreferredName":"Ankita"}, + {"Gender":"Female","FullName":"Aile Aasmae","PersonID":595,"FaxNumber":"(239) 555-0101","DateOfBirth":"1988-09-05 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"aile@wingtiptoys.com","PreferredName":"Aile"}, + {"Gender":"Female","FullName":"Ezgi Kaya","PersonID":596,"FaxNumber":"(239) 555-0101","DateOfBirth":"1989-10-18 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"ezgi@wingtiptoys.com","PreferredName":"Ezgi"}, + {"Gender":"Female","FullName":"Ava Edden","PersonID":597,"FaxNumber":"(479) 555-0101","DateOfBirth":"1956-03-25 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"ava@wingtiptoys.com","PreferredName":"Ava"}, + {"Gender":"Female","FullName":"Adirake Narkbunnum","PersonID":598,"FaxNumber":"(479) 555-0101","DateOfBirth":"1968-12-02 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"adirake@wingtiptoys.com","PreferredName":"Adirake"}, + {"Gender":"Female","FullName":"Manali Bose","PersonID":599,"FaxNumber":"(215) 555-0101","DateOfBirth":"1989-04-16 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"manali@wingtiptoys.com","PreferredName":"Manali"}, + {"Gender":"Female","FullName":"Ji-min Jun","PersonID":600,"FaxNumber":"(215) 555-0101","DateOfBirth":"1950-11-06 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ji-min@wingtiptoys.com","PreferredName":"Ji-min"}, + {"Gender":"Female","FullName":"Astrid Poisson","PersonID":601,"FaxNumber":"(228) 555-0101","DateOfBirth":"1974-03-25 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"astrid@wingtiptoys.com","PreferredName":"Astrid"}, + {"Gender":"Female","FullName":"Timotej stakne","PersonID":602,"FaxNumber":"(228) 555-0101","DateOfBirth":"1995-01-11 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"timotej@wingtiptoys.com","PreferredName":"Timotej"}, + {"Gender":"Female","FullName":"Gi-Suk Heo","PersonID":603,"FaxNumber":"(215) 555-0101","DateOfBirth":"1977-11-01 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"gi-suk@wingtiptoys.com","PreferredName":"Gi-Suk"}, + {"Gender":"Female","FullName":"Roman Tomek","PersonID":604,"FaxNumber":"(215) 555-0101","DateOfBirth":"1980-07-23 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"roman@wingtiptoys.com","PreferredName":"Roman"}, + {"Gender":"Female","FullName":"Irma Kruze","PersonID":605,"FaxNumber":"(219) 555-0101","DateOfBirth":"1980-10-06 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"irma@wingtiptoys.com","PreferredName":"Irma"}, + {"Gender":"Female","FullName":"VÄ›ra Stejskalova","PersonID":606,"FaxNumber":"(219) 555-0101","DateOfBirth":"1965-11-10 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"vicra@wingtiptoys.com","PreferredName":"VÄ›ra"}, + {"Gender":"Female","FullName":"Dhaeraemdranaadh Pamulaparthi","PersonID":607,"FaxNumber":"(458) 555-0101","DateOfBirth":"1965-02-02 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"dhaeraemdranaadh@wingtiptoys.com","PreferredName":"Dhaeraemdranaadh"}, + {"Gender":"Female","FullName":"Victoria Brezeanu","PersonID":608,"FaxNumber":"(458) 555-0101","DateOfBirth":"1994-01-03 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"victoria@wingtiptoys.com","PreferredName":"Victoria"}, + {"Gender":"Female","FullName":"Agrita Kalnina","PersonID":609,"FaxNumber":"(314) 555-0101","DateOfBirth":"1968-02-26 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"agrita@wingtiptoys.com","PreferredName":"Agrita"}, + {"Gender":"Female","FullName":"Burak ozden","PersonID":610,"FaxNumber":"(314) 555-0101","DateOfBirth":"1954-02-16 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"burak@wingtiptoys.com","PreferredName":"Burak"}, + {"Gender":"Female","FullName":"Ravindra Sandhu","PersonID":611,"FaxNumber":"(212) 555-0101","DateOfBirth":"1992-11-30 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"ravindra@wingtiptoys.com","PreferredName":"Ravindra"}, + {"Gender":"Female","FullName":"Iulia Nechita","PersonID":612,"FaxNumber":"(212) 555-0101","DateOfBirth":"1980-08-14 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"iulia@wingtiptoys.com","PreferredName":"Iulia"}, + {"Gender":"Female","FullName":"Klara Rakus","PersonID":613,"FaxNumber":"(803) 555-0101","DateOfBirth":"1968-11-18 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"klara@wingtiptoys.com","PreferredName":"Klara"}, + {"Gender":"Female","FullName":"Razeena Rezaei","PersonID":614,"FaxNumber":"(803) 555-0101","DateOfBirth":"1970-09-29 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"razeena@wingtiptoys.com","PreferredName":"Razeena"}, + {"Gender":"Female","FullName":"Am Lo","PersonID":615,"FaxNumber":"(803) 555-0101","DateOfBirth":"1978-08-14 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"am@wingtiptoys.com","PreferredName":"Am"}, + {"Gender":"Female","FullName":"Edmee Schol","PersonID":616,"FaxNumber":"(803) 555-0101","DateOfBirth":"1977-06-28 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"edmee@wingtiptoys.com","PreferredName":"Edmee"}, + {"Gender":"Female","FullName":"Sophie Van Lier","PersonID":617,"FaxNumber":"(316) 555-0101","DateOfBirth":"1952-08-12 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"sophie@wingtiptoys.com","PreferredName":"Sophie"}, + {"Gender":"Female","FullName":"Shiva Nair","PersonID":618,"FaxNumber":"(316) 555-0101","DateOfBirth":"1976-07-01 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"shiva@wingtiptoys.com","PreferredName":"Shiva"}, + {"Gender":"Female","FullName":"Dimitry Profis","PersonID":619,"FaxNumber":"(216) 555-0101","DateOfBirth":"1993-12-30 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"dimitry@wingtiptoys.com","PreferredName":"Dimitry"}, + {"Gender":"Female","FullName":"Manindra Desai","PersonID":620,"FaxNumber":"(216) 555-0101","DateOfBirth":"1962-02-06 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"manindra@wingtiptoys.com","PreferredName":"Manindra"}, + {"Gender":"Female","FullName":"Jan Zeman","PersonID":621,"FaxNumber":"(215) 555-0101","DateOfBirth":"1967-03-28 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jan@wingtiptoys.com","PreferredName":"Jan"}, + {"Gender":"Female","FullName":"Jukka-Pekk Saarijarvi","PersonID":622,"FaxNumber":"(215) 555-0101","DateOfBirth":"1978-03-11 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jukka-pekk@wingtiptoys.com","PreferredName":"Jukka-Pekk"}, + {"Gender":"Female","FullName":"Ranjit Dikshit","PersonID":623,"FaxNumber":"(787) 555-0101","DateOfBirth":"1972-02-24 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"ranjit@wingtiptoys.com","PreferredName":"Ranjit"}, + {"Gender":"Female","FullName":"Marek Blaho","PersonID":624,"FaxNumber":"(787) 555-0101","DateOfBirth":"1975-01-10 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"marek@wingtiptoys.com","PreferredName":"Marek"}, + {"Gender":"Female","FullName":"Varuna Ganguly","PersonID":625,"FaxNumber":"(262) 555-0101","DateOfBirth":"1971-09-29 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"varuna@wingtiptoys.com","PreferredName":"Varuna"}, + {"Gender":"Female","FullName":"Natalia Pokorna","PersonID":626,"FaxNumber":"(262) 555-0101","DateOfBirth":"1957-03-06 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"natalia@wingtiptoys.com","PreferredName":"Natalia"}, + {"Gender":"Female","FullName":"Basak Tekin","PersonID":627,"FaxNumber":"(207) 555-0101","DateOfBirth":"1963-07-05 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"basak@wingtiptoys.com","PreferredName":"Basak"}, + {"Gender":"Female","FullName":"Nicole Martinez","PersonID":628,"FaxNumber":"(207) 555-0101","DateOfBirth":"1975-04-08 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"nicole@wingtiptoys.com","PreferredName":"Nicole"}, + {"Gender":"Female","FullName":"Doru Tirlea","PersonID":629,"FaxNumber":"(217) 555-0101","DateOfBirth":"1976-02-11 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"doru@wingtiptoys.com","PreferredName":"Doru"}, + {"Gender":"Female","FullName":"Hema Jujjavarapu","PersonID":630,"FaxNumber":"(217) 555-0101","DateOfBirth":"1997-03-21 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"hema@wingtiptoys.com","PreferredName":"Hema"}, + {"Gender":"Female","FullName":"Jessica Perrine","PersonID":631,"FaxNumber":"(217) 555-0101","DateOfBirth":"1951-04-08 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"jessica@wingtiptoys.com","PreferredName":"Jessica"}, + {"Gender":"Female","FullName":"Mukta Sarkar","PersonID":632,"FaxNumber":"(217) 555-0101","DateOfBirth":"1996-07-10 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"mukta@wingtiptoys.com","PreferredName":"Mukta"}, + {"Gender":"Female","FullName":"Yavuz Cetinkaya","PersonID":633,"FaxNumber":"(240) 555-0101","DateOfBirth":"1975-10-22 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"yavuz@wingtiptoys.com","PreferredName":"Yavuz"}, + {"Gender":"Female","FullName":"Jaydeb Ganguly","PersonID":634,"FaxNumber":"(240) 555-0101","DateOfBirth":"1966-01-09 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"jaydeb@wingtiptoys.com","PreferredName":"Jaydeb"}, + {"Gender":"Female","FullName":"Sirirat Kongpaisarn","PersonID":635,"FaxNumber":"(303) 555-0101","DateOfBirth":"1962-11-08 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"sirirat@wingtiptoys.com","PreferredName":"Sirirat"}, + {"Gender":"Female","FullName":"Himani Sanyal","PersonID":636,"FaxNumber":"(303) 555-0101","DateOfBirth":"1976-04-05 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"himani@wingtiptoys.com","PreferredName":"Himani"}, + {"Gender":"Female","FullName":"Claude Bonsaint","PersonID":637,"FaxNumber":"(215) 555-0101","DateOfBirth":"1993-07-08 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"claude@wingtiptoys.com","PreferredName":"Claude"}, + {"Gender":"Female","FullName":"Gopal Thakur","PersonID":638,"FaxNumber":"(215) 555-0101","DateOfBirth":"1992-09-06 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"gopal@wingtiptoys.com","PreferredName":"Gopal"}, + {"Gender":"Female","FullName":"Roman Pajer","PersonID":639,"FaxNumber":"(209) 555-0101","DateOfBirth":"1966-01-13 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"roman@wingtiptoys.com","PreferredName":"Roman"}, + {"Gender":"Female","FullName":"Floris Veenhuizen","PersonID":640,"FaxNumber":"(209) 555-0101","DateOfBirth":"1988-01-21 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"floris@wingtiptoys.com","PreferredName":"Floris"}, + {"Gender":"Female","FullName":"Vitezslav Holy","PersonID":641,"FaxNumber":"(803) 555-0101","DateOfBirth":"1961-10-27 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"vitezslav@wingtiptoys.com","PreferredName":"Vitezslav"}, + {"Gender":"Female","FullName":"Paul Valbe","PersonID":642,"FaxNumber":"(803) 555-0101","DateOfBirth":"1969-10-02 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"paul@wingtiptoys.com","PreferredName":"Paul"}, + {"Gender":"Female","FullName":"Devi Dewangan","PersonID":643,"FaxNumber":"(216) 555-0101","DateOfBirth":"1974-08-24 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"devi@wingtiptoys.com","PreferredName":"Devi"}, + {"Gender":"Female","FullName":"William Bordelon","PersonID":644,"FaxNumber":"(216) 555-0101","DateOfBirth":"1963-11-07 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"william@wingtiptoys.com","PreferredName":"William"}, + {"Gender":"Female","FullName":"Masa Buecek","PersonID":645,"FaxNumber":"(216) 555-0101","DateOfBirth":"1981-02-16 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"masa@wingtiptoys.com","PreferredName":"Masa"}, + {"Gender":"Female","FullName":"Nguyet Trang","PersonID":646,"FaxNumber":"(216) 555-0101","DateOfBirth":"1972-12-18 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"nguyet@wingtiptoys.com","PreferredName":"Nguyet"}, + {"Gender":"Female","FullName":"Bipin Modi","PersonID":647,"FaxNumber":"(423) 555-0101","DateOfBirth":"1950-01-07 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"bipin@wingtiptoys.com","PreferredName":"Bipin"}, + {"Gender":"Female","FullName":"Dattaatraeya Vangapandu","PersonID":648,"FaxNumber":"(423) 555-0101","DateOfBirth":"1955-07-09 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"dattaatraeya@wingtiptoys.com","PreferredName":"Dattaatraeya"}, + {"Gender":"Female","FullName":"Rahul Sarma","PersonID":649,"FaxNumber":"(802) 555-0101","DateOfBirth":"1986-03-19 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"rahul@wingtiptoys.com","PreferredName":"Rahul"}, + {"Gender":"Female","FullName":"Deeba Hemmati","PersonID":650,"FaxNumber":"(802) 555-0101","DateOfBirth":"1954-04-07 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"deeba@wingtiptoys.com","PreferredName":"Deeba"}, + {"Gender":"Female","FullName":"Alejandro Escobar","PersonID":651,"FaxNumber":"(218) 555-0101","DateOfBirth":"1971-07-02 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"alejandro@wingtiptoys.com","PreferredName":"Alejandro"}, + {"Gender":"Female","FullName":"Milada Hadrabova","PersonID":652,"FaxNumber":"(218) 555-0101","DateOfBirth":"1972-08-24 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"milada@wingtiptoys.com","PreferredName":"Milada"}, + {"Gender":"Female","FullName":"Andris Vitols","PersonID":653,"FaxNumber":"(252) 555-0101","DateOfBirth":"1953-12-13 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"andris@wingtiptoys.com","PreferredName":"Andris"}, + {"Gender":"Female","FullName":"Lana Larsson","PersonID":654,"FaxNumber":"(252) 555-0101","DateOfBirth":"1966-02-20 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"lana@wingtiptoys.com","PreferredName":"Lana"}, + {"Gender":"Female","FullName":"Mariela Weitzer","PersonID":655,"FaxNumber":"(207) 555-0101","DateOfBirth":"1981-10-15 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"mariela@wingtiptoys.com","PreferredName":"Mariela"}, + {"Gender":"Female","FullName":"David Lanctot","PersonID":656,"FaxNumber":"(207) 555-0101","DateOfBirth":"1952-12-15 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"david@wingtiptoys.com","PreferredName":"David"}, + {"Gender":"Female","FullName":"Alain Pelland","PersonID":657,"FaxNumber":"(303) 555-0101","DateOfBirth":"1981-04-23 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"alain@wingtiptoys.com","PreferredName":"Alain"}, + {"Gender":"Female","FullName":"Ik-Soo Jo","PersonID":658,"FaxNumber":"(303) 555-0101","DateOfBirth":"1986-10-09 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"ik-soo@wingtiptoys.com","PreferredName":"Ik-Soo"}, + {"Gender":"Female","FullName":"Milica Stojkovic","PersonID":659,"FaxNumber":"(201) 555-0101","DateOfBirth":"1973-07-19 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"milica@wingtiptoys.com","PreferredName":"Milica"}, + {"Gender":"Female","FullName":"Teemu Yli-Sirnio","PersonID":660,"FaxNumber":"(201) 555-0101","DateOfBirth":"1962-02-17 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"teemu@wingtiptoys.com","PreferredName":"Teemu"}, + {"Gender":"Female","FullName":"Natalie Horackova","PersonID":661,"FaxNumber":"(215) 555-0101","DateOfBirth":"1951-02-28 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"natalie@wingtiptoys.com","PreferredName":"Natalie"}, + {"Gender":"Female","FullName":"Francesca Greece","PersonID":662,"FaxNumber":"(215) 555-0101","DateOfBirth":"1976-06-28 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"francesca@wingtiptoys.com","PreferredName":"Francesca"}, + {"Gender":"Female","FullName":"Baalaaditya Rallapalli","PersonID":663,"FaxNumber":"(314) 555-0101","DateOfBirth":"1971-07-26 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"baalaaditya@wingtiptoys.com","PreferredName":"Baalaaditya"}, + {"Gender":"Female","FullName":"Antonin Holy","PersonID":664,"FaxNumber":"(314) 555-0101","DateOfBirth":"1950-09-18 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"antonin@wingtiptoys.com","PreferredName":"Antonin"}, + {"Gender":"Female","FullName":"Matej Formanek","PersonID":665,"FaxNumber":"(303) 555-0101","DateOfBirth":"1980-02-05 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"matej@wingtiptoys.com","PreferredName":"Matej"}, + {"Gender":"Female","FullName":"Mary Eder","PersonID":666,"FaxNumber":"(303) 555-0101","DateOfBirth":"1974-01-10 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"mary@wingtiptoys.com","PreferredName":"Mary"}, + {"Gender":"Female","FullName":"Manish Ghosh","PersonID":667,"FaxNumber":"(219) 555-0101","DateOfBirth":"1996-08-15 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"manish@wingtiptoys.com","PreferredName":"Manish"}, + {"Gender":"Female","FullName":"Anish Naidu","PersonID":668,"FaxNumber":"(219) 555-0101","DateOfBirth":"1960-12-16 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"anish@wingtiptoys.com","PreferredName":"Anish"}, + {"Gender":"Female","FullName":"Pracha Nantakarn","PersonID":669,"FaxNumber":"(231) 555-0101","DateOfBirth":"1982-08-15 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"pracha@wingtiptoys.com","PreferredName":"Pracha"}, + {"Gender":"Female","FullName":"Malee Charoenkul","PersonID":670,"FaxNumber":"(231) 555-0101","DateOfBirth":"1979-04-12 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"malee@wingtiptoys.com","PreferredName":"Malee"}, + {"Gender":"Female","FullName":"Charline Flamand","PersonID":671,"FaxNumber":"(605) 555-0101","DateOfBirth":"1977-05-23 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"charline@wingtiptoys.com","PreferredName":"Charline"}, + {"Gender":"Female","FullName":"Dhavala Alladi","PersonID":672,"FaxNumber":"(605) 555-0101","DateOfBirth":"1953-09-04 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"dhavala@wingtiptoys.com","PreferredName":"Dhavala"}, + {"Gender":"Female","FullName":"Teodor Vlad","PersonID":673,"FaxNumber":"(219) 555-0101","DateOfBirth":"1962-09-06 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"teodor@wingtiptoys.com","PreferredName":"Teodor"}, + {"Gender":"Female","FullName":"Peeter Keskula","PersonID":674,"FaxNumber":"(219) 555-0101","DateOfBirth":"1972-04-30 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"peeter@wingtiptoys.com","PreferredName":"Peeter"}, + {"Gender":"Female","FullName":"Anda Liepa","PersonID":675,"FaxNumber":"(603) 555-0101","DateOfBirth":"1985-07-30 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"anda@wingtiptoys.com","PreferredName":"Anda"}, + {"Gender":"Female","FullName":"Deakshitulu Paruchuri","PersonID":676,"FaxNumber":"(603) 555-0101","DateOfBirth":"1960-07-01 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"deakshitulu@wingtiptoys.com","PreferredName":"Deakshitulu"}, + {"Gender":"Female","FullName":"Jelena Utjesenovic","PersonID":677,"FaxNumber":"(210) 555-0101","DateOfBirth":"1964-02-07 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"jelena@wingtiptoys.com","PreferredName":"Jelena"}, + {"Gender":"Female","FullName":"Debbie Clark","PersonID":678,"FaxNumber":"(210) 555-0101","DateOfBirth":"1971-10-31 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"debbie@wingtiptoys.com","PreferredName":"Debbie"}, + {"Gender":"Female","FullName":"Adriana Horackova","PersonID":679,"FaxNumber":"(252) 555-0101","DateOfBirth":"1998-03-24 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"adriana@wingtiptoys.com","PreferredName":"Adriana"}, + {"Gender":"Female","FullName":"Suniti Bhat","PersonID":680,"FaxNumber":"(252) 555-0101","DateOfBirth":"1987-05-11 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"suniti@wingtiptoys.com","PreferredName":"Suniti"}, + {"Gender":"Female","FullName":"Miika Putkonen","PersonID":681,"FaxNumber":"(314) 555-0101","DateOfBirth":"1956-05-21 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"miika@wingtiptoys.com","PreferredName":"Miika"}, + {"Gender":"Female","FullName":"Jose Williams","PersonID":682,"FaxNumber":"(314) 555-0101","DateOfBirth":"1966-05-22 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"jose@wingtiptoys.com","PreferredName":"Jose"}, + {"Gender":"Female","FullName":"Padma Iyer","PersonID":683,"FaxNumber":"(505) 555-0101","DateOfBirth":"1990-06-09 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"padma@wingtiptoys.com","PreferredName":"Padma"}, + {"Gender":"Female","FullName":"Cai Cao","PersonID":684,"FaxNumber":"(505) 555-0101","DateOfBirth":"1957-05-30 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"cai@wingtiptoys.com","PreferredName":"Cai"}, + {"Gender":"Female","FullName":"Åšani Sen","PersonID":685,"FaxNumber":"(405) 555-0101","DateOfBirth":"1979-09-03 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"aani@wingtiptoys.com","PreferredName":"Åšani"}, + {"Gender":"Female","FullName":"Ngu Hoa","PersonID":686,"FaxNumber":"(405) 555-0101","DateOfBirth":"1975-10-06 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"ngu@wingtiptoys.com","PreferredName":"Ngu"}, + {"Gender":"Female","FullName":"Helene Dupuy","PersonID":687,"FaxNumber":"(270) 555-0101","DateOfBirth":"1971-05-02 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"helene@wingtiptoys.com","PreferredName":"Helene"}, + {"Gender":"Female","FullName":"Antonio Trentini","PersonID":688,"FaxNumber":"(270) 555-0101","DateOfBirth":"1994-02-06 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"antonio@wingtiptoys.com","PreferredName":"Antonio"}, + {"Gender":"Female","FullName":"omer ozbek","PersonID":689,"FaxNumber":"(205) 555-0101","DateOfBirth":"1985-01-10 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"omer@wingtiptoys.com","PreferredName":"omer"}, + {"Gender":"Female","FullName":"Andrei Bratianu","PersonID":690,"FaxNumber":"(205) 555-0101","DateOfBirth":"1985-06-07 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"andrei@wingtiptoys.com","PreferredName":"Andrei"}, + {"Gender":"Female","FullName":"Akshayakeerti Jandhyala","PersonID":691,"FaxNumber":"(240) 555-0101","DateOfBirth":"1996-10-22 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"akshayakeerti@wingtiptoys.com","PreferredName":"Akshayakeerti"}, + {"Gender":"Female","FullName":"Tereza Stolinova","PersonID":692,"FaxNumber":"(240) 555-0101","DateOfBirth":"1970-02-01 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"tereza@wingtiptoys.com","PreferredName":"Tereza"}, + {"Gender":"Female","FullName":"Ankolika Sen","PersonID":693,"FaxNumber":"(304) 555-0101","DateOfBirth":"1958-02-20 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"ankolika@wingtiptoys.com","PreferredName":"Ankolika"}, + {"Gender":"Female","FullName":"Kristophe Couet","PersonID":694,"FaxNumber":"(304) 555-0101","DateOfBirth":"1997-04-14 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"kristophe @wingtiptoys.com","PreferredName":"Kristophe "}, + {"Gender":"Female","FullName":"Baalaamani Veturi","PersonID":695,"FaxNumber":"(218) 555-0101","DateOfBirth":"1976-12-15 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"baalaamani@wingtiptoys.com","PreferredName":"Baalaamani"}, + {"Gender":"Female","FullName":"Gustav Korjus","PersonID":696,"FaxNumber":"(218) 555-0101","DateOfBirth":"1971-03-03 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"gustav@wingtiptoys.com","PreferredName":"Gustav"}, + {"Gender":"Female","FullName":"Julia Konecna","PersonID":697,"FaxNumber":"(314) 555-0101","DateOfBirth":"1958-08-22 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"julia@wingtiptoys.com","PreferredName":"Julia"}, + {"Gender":"Female","FullName":"Birgit Saar","PersonID":698,"FaxNumber":"(314) 555-0101","DateOfBirth":"1979-07-19 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"birgit@wingtiptoys.com","PreferredName":"Birgit"}, + {"Gender":"Female","FullName":"Madelaine Paulet","PersonID":699,"FaxNumber":"(212) 555-0101","DateOfBirth":"1992-05-21 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"madelaine @wingtiptoys.com","PreferredName":"Madelaine "}, + {"Gender":"Female","FullName":"Arundhati Bhowmick","PersonID":700,"FaxNumber":"(212) 555-0101","DateOfBirth":"1980-11-30 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"arundhati@wingtiptoys.com","PreferredName":"Arundhati"}, + {"Gender":"Female","FullName":"Mario Jogi","PersonID":701,"FaxNumber":"(212) 555-0101","DateOfBirth":"1970-06-24 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"mario@wingtiptoys.com","PreferredName":"Mario"}, + {"Gender":"Female","FullName":"Martina Omelkova","PersonID":702,"FaxNumber":"(212) 555-0101","DateOfBirth":"1989-09-09 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"martina@wingtiptoys.com","PreferredName":"Martina"}, + {"Gender":"Female","FullName":"Kaya ozbek","PersonID":703,"FaxNumber":"(276) 555-0101","DateOfBirth":"1981-09-25 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"kaya@wingtiptoys.com","PreferredName":"Kaya"}, + {"Gender":"Female","FullName":"Lan Klanjcar","PersonID":704,"FaxNumber":"(276) 555-0101","DateOfBirth":"1965-04-06 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"lan@wingtiptoys.com","PreferredName":"Lan"}, + {"Gender":"Female","FullName":"Seo-yeon Rim","PersonID":705,"FaxNumber":"(229) 555-0101","DateOfBirth":"1972-05-09 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"seo-yeon@wingtiptoys.com","PreferredName":"Seo-yeon"}, + {"Gender":"Female","FullName":"Giovanna Araujo","PersonID":706,"FaxNumber":"(229) 555-0101","DateOfBirth":"1980-09-14 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"giovanna@wingtiptoys.com","PreferredName":"Giovanna"}, + {"Gender":"Female","FullName":"Sitara Benjaree","PersonID":707,"FaxNumber":"(210) 555-0101","DateOfBirth":"1976-08-20 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"sitara@wingtiptoys.com","PreferredName":"Sitara"}, + {"Gender":"Female","FullName":"Roberts Sprogis","PersonID":708,"FaxNumber":"(210) 555-0101","DateOfBirth":"1960-10-15 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"roberts@wingtiptoys.com","PreferredName":"Roberts"}, + {"Gender":"Female","FullName":"Javier Caraballo","PersonID":709,"FaxNumber":"(231) 555-0101","DateOfBirth":"1977-09-23 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"javier@wingtiptoys.com","PreferredName":"Javier"}, + {"Gender":"Female","FullName":"Coralie Brasseur","PersonID":710,"FaxNumber":"(231) 555-0101","DateOfBirth":"1984-09-01 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"coralie@wingtiptoys.com","PreferredName":"Coralie"}, + {"Gender":"Female","FullName":"Akhtar Shahrestaani","PersonID":711,"FaxNumber":"(229) 555-0101","DateOfBirth":"1967-01-07 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"akhtar@wingtiptoys.com","PreferredName":"Akhtar"}, + {"Gender":"Female","FullName":"Priya Joshi","PersonID":712,"FaxNumber":"(229) 555-0101","DateOfBirth":"1976-02-29 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"priya@wingtiptoys.com","PreferredName":"Priya"}, + {"Gender":"Female","FullName":"Vanita Bhowmick","PersonID":713,"FaxNumber":"(405) 555-0101","DateOfBirth":"1950-08-24 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"vanita@wingtiptoys.com","PreferredName":"Vanita"}, + {"Gender":"Female","FullName":"Bruna Cavalcante","PersonID":714,"FaxNumber":"(405) 555-0101","DateOfBirth":"1979-06-09 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"bruna@wingtiptoys.com","PreferredName":"Bruna"}, + {"Gender":"Female","FullName":"Nishant Menon","PersonID":715,"FaxNumber":"(225) 555-0101","DateOfBirth":"1959-05-03 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"nishant@wingtiptoys.com","PreferredName":"Nishant"}, + {"Gender":"Female","FullName":"Ratnam Singh","PersonID":716,"FaxNumber":"(225) 555-0101","DateOfBirth":"1961-01-08 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"ratnam@wingtiptoys.com","PreferredName":"Ratnam"}, + {"Gender":"Female","FullName":"Josef Benda","PersonID":717,"FaxNumber":"(304) 555-0101","DateOfBirth":"1997-06-28 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"josef@wingtiptoys.com","PreferredName":"Josef"}, + {"Gender":"Female","FullName":"Trishna Benipal","PersonID":718,"FaxNumber":"(304) 555-0101","DateOfBirth":"1974-08-12 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"trishna@wingtiptoys.com","PreferredName":"Trishna"}, + {"Gender":"Female","FullName":"Teresa Bender","PersonID":719,"FaxNumber":"(605) 555-0101","DateOfBirth":"1953-08-03 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"teresa@wingtiptoys.com","PreferredName":"Teresa"}, + {"Gender":"Female","FullName":"Diego Buccho","PersonID":720,"FaxNumber":"(605) 555-0101","DateOfBirth":"1958-01-17 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"diego@wingtiptoys.com","PreferredName":"Diego"}, + {"Gender":"Female","FullName":"Deepesh Bose","PersonID":721,"FaxNumber":"(907) 555-0101","DateOfBirth":"1964-11-30 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"deepesh@wingtiptoys.com","PreferredName":"Deepesh"}, + {"Gender":"Female","FullName":"Ambareesh Madhunapantula","PersonID":722,"FaxNumber":"(907) 555-0101","DateOfBirth":"1997-01-26 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"ambareesh@wingtiptoys.com","PreferredName":"Ambareesh"}, + {"Gender":"Female","FullName":"Madhavi Gupta","PersonID":723,"FaxNumber":"(228) 555-0101","DateOfBirth":"1967-02-09 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"madhavi@wingtiptoys.com","PreferredName":"Madhavi"}, + {"Gender":"Female","FullName":"Indu Chowdary","PersonID":724,"FaxNumber":"(228) 555-0101","DateOfBirth":"1996-06-02 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"indu@wingtiptoys.com","PreferredName":"Indu"}, + {"Gender":"Female","FullName":"Bich Banh","PersonID":725,"FaxNumber":"(215) 555-0101","DateOfBirth":"1957-08-09 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"bich@wingtiptoys.com","PreferredName":"Bich"}, + {"Gender":"Female","FullName":"Lennart Kask","PersonID":726,"FaxNumber":"(215) 555-0101","DateOfBirth":"1954-02-06 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"lennart@wingtiptoys.com","PreferredName":"Lennart"}, + {"Gender":"Female","FullName":"Åšani Nair","PersonID":727,"FaxNumber":"(207) 555-0101","DateOfBirth":"1960-04-06 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"aaani@wingtiptoys.com","PreferredName":"Åšani"}, + {"Gender":"Female","FullName":"Cuc Tu","PersonID":728,"FaxNumber":"(207) 555-0101","DateOfBirth":"1964-01-09 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"cuc@wingtiptoys.com","PreferredName":"Cuc"}, + {"Gender":"Female","FullName":"Angelina Gormanston","PersonID":729,"FaxNumber":"(201) 555-0101","DateOfBirth":"1951-06-24 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"angelina@wingtiptoys.com","PreferredName":"Angelina"}, + {"Gender":"Female","FullName":"Prasanna Shetty","PersonID":730,"FaxNumber":"(201) 555-0101","DateOfBirth":"1996-12-15 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"prasanna@wingtiptoys.com","PreferredName":"Prasanna"}, + {"Gender":"Female","FullName":"Prasert Supitayaporn","PersonID":731,"FaxNumber":"(219) 555-0101","DateOfBirth":"1975-01-19 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"prasert@wingtiptoys.com","PreferredName":"Prasert"}, + {"Gender":"Female","FullName":"Gulzar Parkar","PersonID":732,"FaxNumber":"(219) 555-0101","DateOfBirth":"1995-06-25 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"gulzar@wingtiptoys.com","PreferredName":"Gulzar"}, + {"Gender":"Female","FullName":"Abhaya Rambhatla","PersonID":733,"FaxNumber":"(231) 555-0101","DateOfBirth":"1978-01-12 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"abhaya@wingtiptoys.com","PreferredName":"Abhaya"}, + {"Gender":"Female","FullName":"Naveed Alizadeh","PersonID":734,"FaxNumber":"(231) 555-0101","DateOfBirth":"1976-01-23 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"naveed@wingtiptoys.com","PreferredName":"Naveed"}, + {"Gender":"Female","FullName":"Lalit Ogra","PersonID":735,"FaxNumber":"(205) 555-0101","DateOfBirth":"1971-04-26 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"lalit@wingtiptoys.com","PreferredName":"Lalit"}, + {"Gender":"Female","FullName":"Badanika Vankayala","PersonID":736,"FaxNumber":"(205) 555-0101","DateOfBirth":"1975-04-25 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"badanika@wingtiptoys.com","PreferredName":"Badanika"}, + {"Gender":"Female","FullName":"Mina Bagheri","PersonID":737,"FaxNumber":"(319) 555-0101","DateOfBirth":"1972-06-05 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"mina@wingtiptoys.com","PreferredName":"Mina"}, + {"Gender":"Female","FullName":"Lien Lo","PersonID":738,"FaxNumber":"(319) 555-0101","DateOfBirth":"1975-04-06 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"lien@wingtiptoys.com","PreferredName":"Lien"}, + {"Gender":"Female","FullName":"Debraj Sanyal","PersonID":739,"FaxNumber":"(239) 555-0101","DateOfBirth":"1991-11-16 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"debraj@wingtiptoys.com","PreferredName":"Debraj"}, + {"Gender":"Female","FullName":"Tara KlanCisar","PersonID":740,"FaxNumber":"(239) 555-0101","DateOfBirth":"1955-05-15 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"tara@wingtiptoys.com","PreferredName":"Tara"}, + {"Gender":"Female","FullName":"Marco Costa","PersonID":741,"FaxNumber":"(701) 555-0101","DateOfBirth":"1973-06-01 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"marco@wingtiptoys.com","PreferredName":"Marco"}, + {"Gender":"Female","FullName":"Alessandra Gallo","PersonID":742,"FaxNumber":"(701) 555-0101","DateOfBirth":"1952-04-03 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"alessandra@wingtiptoys.com","PreferredName":"Alessandra"}, + {"Gender":"Female","FullName":"Crina Nechita","PersonID":743,"FaxNumber":"(217) 555-0101","DateOfBirth":"1995-03-14 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"crina@wingtiptoys.com","PreferredName":"Crina"}, + {"Gender":"Female","FullName":"Yi Min Zhong","PersonID":744,"FaxNumber":"(217) 555-0101","DateOfBirth":"1959-04-28 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"yi min@wingtiptoys.com","PreferredName":"Yi Min"}, + {"Gender":"Female","FullName":"Zala Ibrahimagic","PersonID":745,"FaxNumber":"(212) 555-0101","DateOfBirth":"1971-06-20 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"zala@wingtiptoys.com","PreferredName":"Zala"}, + {"Gender":"Female","FullName":"Wander Ellenbroek","PersonID":746,"FaxNumber":"(212) 555-0101","DateOfBirth":"1962-05-28 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"wander@wingtiptoys.com","PreferredName":"Wander"}, + {"Gender":"Female","FullName":"Gundega Kundzina","PersonID":747,"FaxNumber":"(479) 555-0101","DateOfBirth":"1965-07-31 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"gundega@wingtiptoys.com","PreferredName":"Gundega"}, + {"Gender":"Female","FullName":"Damyanti Byrraju","PersonID":748,"FaxNumber":"(479) 555-0101","DateOfBirth":"1967-10-10 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"damyanti@wingtiptoys.com","PreferredName":"Damyanti"}, + {"Gender":"Female","FullName":"Parveen Haldar","PersonID":749,"FaxNumber":"(219) 555-0101","DateOfBirth":"1972-08-09 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"parveen@wingtiptoys.com","PreferredName":"Parveen"}, + {"Gender":"Female","FullName":"Chau Chu","PersonID":750,"FaxNumber":"(219) 555-0101","DateOfBirth":"1978-05-08 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"chau@wingtiptoys.com","PreferredName":"Chau"}, + {"Gender":"Female","FullName":"Noel Cartier","PersonID":751,"FaxNumber":"(215) 555-0101","DateOfBirth":"1996-06-05 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"noel@wingtiptoys.com","PreferredName":"Noel"}, + {"Gender":"Female","FullName":"Aet Kasesalu","PersonID":752,"FaxNumber":"(215) 555-0101","DateOfBirth":"1993-06-02 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"aet@wingtiptoys.com","PreferredName":"Aet"}, + {"Gender":"Female","FullName":"Ilgonis Dzenis","PersonID":753,"FaxNumber":"(210) 555-0101","DateOfBirth":"1989-07-26 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"ilgonis@wingtiptoys.com","PreferredName":"Ilgonis"}, + {"Gender":"Female","FullName":"Emine Gungor","PersonID":754,"FaxNumber":"(210) 555-0101","DateOfBirth":"1976-05-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"emine@wingtiptoys.com","PreferredName":"Emine"}, + {"Gender":"Female","FullName":"Ondrej Tomek","PersonID":755,"FaxNumber":"(219) 555-0101","DateOfBirth":"1986-07-07 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"ondrej@wingtiptoys.com","PreferredName":"Ondrej"}, + {"Gender":"Female","FullName":"Ngon Ta","PersonID":756,"FaxNumber":"(219) 555-0101","DateOfBirth":"1962-09-12 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"ngon@wingtiptoys.com","PreferredName":"Ngon"}, + {"Gender":"Female","FullName":"Mohini Kaul","PersonID":757,"FaxNumber":"(240) 555-0101","DateOfBirth":"1951-09-22 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"mohini@wingtiptoys.com","PreferredName":"Mohini"}, + {"Gender":"Female","FullName":"Alejandro Baeza","PersonID":758,"FaxNumber":"(240) 555-0101","DateOfBirth":"1951-12-27 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"alejandro@wingtiptoys.com","PreferredName":"Alejandro"}, + {"Gender":"Female","FullName":"Arnab Malakar","PersonID":759,"FaxNumber":"(210) 555-0101","DateOfBirth":"1997-02-14 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"arnab@wingtiptoys.com","PreferredName":"Arnab"}, + {"Gender":"Female","FullName":"Anupam Majumdar","PersonID":760,"FaxNumber":"(210) 555-0101","DateOfBirth":"1991-11-25 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"anupam@wingtiptoys.com","PreferredName":"Anupam"}, + {"Gender":"Female","FullName":"Mary Barney","PersonID":761,"FaxNumber":"(505) 555-0101","DateOfBirth":"1986-02-23 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"mary@wingtiptoys.com","PreferredName":"Mary"}, + {"Gender":"Female","FullName":"Amit Ghatak","PersonID":762,"FaxNumber":"(505) 555-0101","DateOfBirth":"1987-06-23 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"amit@wingtiptoys.com","PreferredName":"Amit"}, + {"Gender":"Female","FullName":"Dhaeraemdranaadh Allu","PersonID":763,"FaxNumber":"(216) 555-0101","DateOfBirth":"1990-09-04 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"dhaeraemdranaadh@wingtiptoys.com","PreferredName":"Dhaeraemdranaadh"}, + {"Gender":"Female","FullName":"Abel Pirvu","PersonID":764,"FaxNumber":"(216) 555-0101","DateOfBirth":"1974-03-05 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"abel@wingtiptoys.com","PreferredName":"Abel"}, + {"Gender":"Female","FullName":"Paola Greece","PersonID":765,"FaxNumber":"(210) 555-0101","DateOfBirth":"1967-09-22 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"paola@wingtiptoys.com","PreferredName":"Paola"}, + {"Gender":"Female","FullName":"Izabella Baltina","PersonID":766,"FaxNumber":"(210) 555-0101","DateOfBirth":"1957-05-26 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"izabella@wingtiptoys.com","PreferredName":"Izabella"}, + {"Gender":"Female","FullName":"Flora Olofsson","PersonID":767,"FaxNumber":"(787) 555-0101","DateOfBirth":"1974-03-24 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"flora@wingtiptoys.com","PreferredName":"Flora"}, + {"Gender":"Female","FullName":"Vitezslav Drdla","PersonID":768,"FaxNumber":"(787) 555-0101","DateOfBirth":"1994-12-05 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"vitezslav@wingtiptoys.com","PreferredName":"Vitezslav"}, + {"Gender":"Female","FullName":"Nguyet Bach","PersonID":769,"FaxNumber":"(205) 555-0101","DateOfBirth":"1969-01-09 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"nguyet@wingtiptoys.com","PreferredName":"Nguyet"}, + {"Gender":"Female","FullName":"Ratnam Sidhu","PersonID":770,"FaxNumber":"(205) 555-0101","DateOfBirth":"1993-04-29 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"ratnam@wingtiptoys.com","PreferredName":"Ratnam"}, + {"Gender":"Female","FullName":"Jyoti Karnik","PersonID":771,"FaxNumber":"(803) 555-0101","DateOfBirth":"1972-07-25 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"jyoti@wingtiptoys.com","PreferredName":"Jyoti"}, + {"Gender":"Female","FullName":"Dattu Gummadi","PersonID":772,"FaxNumber":"(803) 555-0101","DateOfBirth":"1954-12-06 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"dattu@wingtiptoys.com","PreferredName":"Dattu"}, + {"Gender":"Female","FullName":"Samuel Almaraz","PersonID":773,"FaxNumber":"(458) 555-0101","DateOfBirth":"1986-10-16 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"samuel@wingtiptoys.com","PreferredName":"Samuel"}, + {"Gender":"Female","FullName":"Filip Bunderla","PersonID":774,"FaxNumber":"(458) 555-0101","DateOfBirth":"1959-05-29 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"filip@wingtiptoys.com","PreferredName":"Filip"}, + {"Gender":"Female","FullName":"Zuzana Kuchtova","PersonID":775,"FaxNumber":"(262) 555-0101","DateOfBirth":"1976-04-09 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"zuzana@wingtiptoys.com","PreferredName":"Zuzana"}, + {"Gender":"Female","FullName":"Elias Niemi","PersonID":776,"FaxNumber":"(262) 555-0101","DateOfBirth":"1973-01-11 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"elias@wingtiptoys.com","PreferredName":"Elias"}, + {"Gender":"Female","FullName":"Mark Ruutel","PersonID":777,"FaxNumber":"(307) 555-0101","DateOfBirth":"1972-05-19 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"mark@wingtiptoys.com","PreferredName":"Mark"}, + {"Gender":"Female","FullName":"Carla Osorio","PersonID":778,"FaxNumber":"(307) 555-0101","DateOfBirth":"1953-10-01 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"carla@wingtiptoys.com","PreferredName":"Carla"}, + {"Gender":"Female","FullName":"Corneliu Vladu","PersonID":779,"FaxNumber":"(480) 555-0101","DateOfBirth":"1974-11-12 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"corneliu@wingtiptoys.com","PreferredName":"Corneliu"}, + {"Gender":"Female","FullName":"Ivo Valek","PersonID":780,"FaxNumber":"(480) 555-0101","DateOfBirth":"1978-01-27 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"ivo@wingtiptoys.com","PreferredName":"Ivo"}, + {"Gender":"Female","FullName":"Severins Polis","PersonID":781,"FaxNumber":"(216) 555-0101","DateOfBirth":"1970-02-01 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"severins@wingtiptoys.com","PreferredName":"Severins"}, + {"Gender":"Female","FullName":"Chandran Bhattacharya","PersonID":782,"FaxNumber":"(216) 555-0101","DateOfBirth":"1957-04-24 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"chandran@wingtiptoys.com","PreferredName":"Chandran"}, + {"Gender":"Female","FullName":"Linda Ledezma","PersonID":783,"FaxNumber":"(210) 555-0101","DateOfBirth":"1971-03-20 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"linda@wingtiptoys.com","PreferredName":"Linda"}, + {"Gender":"Female","FullName":"Zbynek Vacha","PersonID":784,"FaxNumber":"(210) 555-0101","DateOfBirth":"1954-07-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"zbynek@wingtiptoys.com","PreferredName":"Zbynek"}, + {"Gender":"Female","FullName":"Halit Gunes","PersonID":785,"FaxNumber":"(239) 555-0101","DateOfBirth":"1954-05-26 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"halit@wingtiptoys.com","PreferredName":"Halit"}, + {"Gender":"Female","FullName":"Indu Nambiar","PersonID":786,"FaxNumber":"(239) 555-0101","DateOfBirth":"1977-11-01 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"indu@wingtiptoys.com","PreferredName":"Indu"}, + {"Gender":"Female","FullName":"Vallo Vesik","PersonID":787,"FaxNumber":"(205) 555-0101","DateOfBirth":"1997-10-23 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"vallo@wingtiptoys.com","PreferredName":"Vallo"}, + {"Gender":"Female","FullName":"Dayaram Raut","PersonID":788,"FaxNumber":"(205) 555-0101","DateOfBirth":"1980-12-01 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"dayaram@wingtiptoys.com","PreferredName":"Dayaram"}, + {"Gender":"Female","FullName":"Dana Mrazova","PersonID":789,"FaxNumber":"(802) 555-0101","DateOfBirth":"1964-08-16 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"dana@wingtiptoys.com","PreferredName":"Dana"}, + {"Gender":"Female","FullName":"Saraswati Beniwal","PersonID":790,"FaxNumber":"(802) 555-0101","DateOfBirth":"1976-03-18 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"saraswati@wingtiptoys.com","PreferredName":"Saraswati"}, + {"Gender":"Female","FullName":"Ema Slosar","PersonID":791,"FaxNumber":"(215) 555-0101","DateOfBirth":"1961-06-11 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ema@wingtiptoys.com","PreferredName":"Ema"}, + {"Gender":"Female","FullName":"Arto Heikkinen","PersonID":792,"FaxNumber":"(215) 555-0101","DateOfBirth":"1983-01-15 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"arto@wingtiptoys.com","PreferredName":"Arto"}, + {"Gender":"Female","FullName":"Hemchandra Debnath","PersonID":793,"FaxNumber":"(209) 555-0101","DateOfBirth":"1954-06-01 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"hemchandra@wingtiptoys.com","PreferredName":"Hemchandra"}, + {"Gender":"Female","FullName":"Bala Ogra","PersonID":794,"FaxNumber":"(209) 555-0101","DateOfBirth":"1986-05-31 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bala@wingtiptoys.com","PreferredName":"Bala"}, + {"Gender":"Female","FullName":"Monika Valentova","PersonID":795,"FaxNumber":"(458) 555-0101","DateOfBirth":"1961-12-02 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"monika@wingtiptoys.com","PreferredName":"Monika"}, + {"Gender":"Female","FullName":"Anuj Sonkar","PersonID":796,"FaxNumber":"(458) 555-0101","DateOfBirth":"1983-02-16 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"anuj@wingtiptoys.com","PreferredName":"Anuj"}, + {"Gender":"Female","FullName":"Dattaatraeya Tottempudi","PersonID":797,"FaxNumber":"(212) 555-0101","DateOfBirth":"1970-08-07 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"dattaatraeya@wingtiptoys.com","PreferredName":"Dattaatraeya"}, + {"Gender":"Female","FullName":"Emilia Samaniego","PersonID":798,"FaxNumber":"(212) 555-0101","DateOfBirth":"1967-12-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"emilia@wingtiptoys.com","PreferredName":"Emilia"}, + {"Gender":"Female","FullName":"Kahkushan Shakiba","PersonID":799,"FaxNumber":"(217) 555-0101","DateOfBirth":"1996-06-25 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"kahkushan@wingtiptoys.com","PreferredName":"Kahkushan"}, + {"Gender":"Female","FullName":"Lindsey Allen","PersonID":800,"FaxNumber":"(217) 555-0101","DateOfBirth":"1975-12-20 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"lindseya@contosomotors.com","PreferredName":"Lindsey"}, + {"Gender":"Female","FullName":"Perry Skountrianos","PersonID":801,"FaxNumber":"(212) 555-0101","DateOfBirth":"1978-10-18 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"perrys@contosomotors.com","PreferredName":"Perry"}, + {"Gender":"Female","FullName":"Birol Arslan","PersonID":802,"FaxNumber":"(212) 555-0101","DateOfBirth":"1972-07-02 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"birol@wingtiptoys.com","PreferredName":"Birol"}, + {"Gender":"Female","FullName":"Abhra Thakur","PersonID":803,"FaxNumber":"(215) 555-0101","DateOfBirth":"1989-05-31 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"abhra@wingtiptoys.com","PreferredName":"Abhra"}, + {"Gender":"Female","FullName":"Uma Khalsa","PersonID":804,"FaxNumber":"(215) 555-0101","DateOfBirth":"1968-08-08 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"uma@wingtiptoys.com","PreferredName":"Uma"}, + {"Gender":"Female","FullName":"Dunja Radoncis","PersonID":805,"FaxNumber":"(215) 555-0101","DateOfBirth":"1953-10-25 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"dunja@wingtiptoys.com","PreferredName":"Dunja"}, + {"Gender":"Female","FullName":"Olya Seleznyov","PersonID":806,"FaxNumber":"(215) 555-0101","DateOfBirth":"1951-11-23 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"olya@wingtiptoys.com","PreferredName":"Olya"}, + {"Gender":"Female","FullName":"Darakhshan Javaherian","PersonID":807,"FaxNumber":"(215) 555-0101","DateOfBirth":"1965-06-10 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"darakhshan@wingtiptoys.com","PreferredName":"Darakhshan"}, + {"Gender":"Female","FullName":"Alexandre L'Angelier","PersonID":808,"FaxNumber":"(215) 555-0101","DateOfBirth":"1951-07-18 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"alexandre @wingtiptoys.com","PreferredName":"Alexandre "}, + {"Gender":"Female","FullName":"Youssef Eriksson","PersonID":809,"FaxNumber":"(701) 555-0101","DateOfBirth":"1994-09-05 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"youssef@wingtiptoys.com","PreferredName":"Youssef"}, + {"Gender":"Female","FullName":"Arunima Ganguly","PersonID":810,"FaxNumber":"(701) 555-0101","DateOfBirth":"1987-08-25 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"arunima@wingtiptoys.com","PreferredName":"Arunima"}, + {"Gender":"Female","FullName":"Pavel Bohuslav","PersonID":811,"FaxNumber":"(505) 555-0101","DateOfBirth":"1979-05-21 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"pavel@wingtiptoys.com","PreferredName":"Pavel"}, + {"Gender":"Female","FullName":"Mahendra Trivedi","PersonID":812,"FaxNumber":"(505) 555-0101","DateOfBirth":"1992-02-14 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"mahendra@wingtiptoys.com","PreferredName":"Mahendra"}, + {"Gender":"Female","FullName":"Jiri Vacha","PersonID":813,"FaxNumber":"(209) 555-0101","DateOfBirth":"1951-09-29 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"jiri@wingtiptoys.com","PreferredName":"Jiri"}, + {"Gender":"Female","FullName":"Constanta Dita","PersonID":814,"FaxNumber":"(209) 555-0101","DateOfBirth":"1964-06-25 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"constanta@wingtiptoys.com","PreferredName":"Constanta"}, + {"Gender":"Female","FullName":"Magdalena Cervenkova","PersonID":815,"FaxNumber":"(405) 555-0101","DateOfBirth":"1991-07-21 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"magdalena@wingtiptoys.com","PreferredName":"Magdalena"}, + {"Gender":"Female","FullName":"Sylvie Panetier","PersonID":816,"FaxNumber":"(405) 555-0101","DateOfBirth":"1996-02-20 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"sylvie@wingtiptoys.com","PreferredName":"Sylvie"}, + {"Gender":"Female","FullName":"Asha Mudigonda","PersonID":817,"FaxNumber":"(201) 555-0101","DateOfBirth":"1990-08-14 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"asha@wingtiptoys.com","PreferredName":"Asha"}, + {"Gender":"Female","FullName":"Jaya Benjaree","PersonID":818,"FaxNumber":"(201) 555-0101","DateOfBirth":"1979-03-24 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"jaya@wingtiptoys.com","PreferredName":"Jaya"}, + {"Gender":"Female","FullName":"Anete Kundzina","PersonID":819,"FaxNumber":"(239) 555-0101","DateOfBirth":"1996-03-18 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"anete@wingtiptoys.com","PreferredName":"Anete"}, + {"Gender":"Female","FullName":"John Kane","PersonID":820,"FaxNumber":"(239) 555-0101","DateOfBirth":"1977-02-25 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"johnk@contosomotors.com","PreferredName":"Jonny"}, + {"Gender":"Female","FullName":"Laurent Bonnet","PersonID":821,"FaxNumber":"(210) 555-0101","DateOfBirth":"1970-01-16 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"laurentb@wingtiptoys.com","PreferredName":"Laurent"}, + {"Gender":"Female","FullName":"Kunal Nakhtare","PersonID":822,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-12-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"kunal@wingtiptoys.com","PreferredName":"Kunal"}, + {"Gender":"Female","FullName":"Duangrat Atitarn","PersonID":823,"FaxNumber":"(210) 555-0101","DateOfBirth":"1958-02-20 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"duangrat@wingtiptoys.com","PreferredName":"Duangrat"}, + {"Gender":"Female","FullName":"Ella Celmina","PersonID":824,"FaxNumber":"(210) 555-0101","DateOfBirth":"1953-07-30 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"ella@wingtiptoys.com","PreferredName":"Ella"}, + {"Gender":"Female","FullName":"Deviprasad PrabhupÄda","PersonID":825,"FaxNumber":"(605) 555-0101","DateOfBirth":"1968-04-17 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"deviprasad@wingtiptoys.com","PreferredName":"Deviprasad"}, + {"Gender":"Female","FullName":"Tess Seegers","PersonID":826,"FaxNumber":"(605) 555-0101","DateOfBirth":"1981-03-10 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"tess@wingtiptoys.com","PreferredName":"Tess"}, + {"Gender":"Female","FullName":"Aija Lukstina","PersonID":827,"FaxNumber":"(252) 555-0101","DateOfBirth":"1984-01-04 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"aija@wingtiptoys.com","PreferredName":"Aija"}, + {"Gender":"Female","FullName":"Sanjay Cheema","PersonID":828,"FaxNumber":"(252) 555-0101","DateOfBirth":"1955-03-27 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"sanjay@wingtiptoys.com","PreferredName":"Sanjay"}, + {"Gender":"Female","FullName":"Hoc Le","PersonID":829,"FaxNumber":"(208) 555-0101","DateOfBirth":"1964-04-16 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"hoc@wingtiptoys.com","PreferredName":"Hoc"}, + {"Gender":"Female","FullName":"Blagoje Pavlovic","PersonID":830,"FaxNumber":"(208) 555-0101","DateOfBirth":"1969-06-29 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"blagoje@wingtiptoys.com","PreferredName":"Blagoje"}, + {"Gender":"Female","FullName":"Bhairaam Kidambi","PersonID":831,"FaxNumber":"(319) 555-0101","DateOfBirth":"1975-11-30 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"bhairaam@wingtiptoys.com","PreferredName":"Bhairaam"}, + {"Gender":"Female","FullName":"Aleksandrs Cirulis","PersonID":832,"FaxNumber":"(319) 555-0101","DateOfBirth":"1982-03-29 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"aleksandrs@wingtiptoys.com","PreferredName":"Aleksandrs"}, + {"Gender":"Female","FullName":"Jae-Hwa Shin","PersonID":833,"FaxNumber":"(505) 555-0101","DateOfBirth":"1994-09-22 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"jae-hwa@wingtiptoys.com","PreferredName":"Jae-Hwa"}, + {"Gender":"Female","FullName":"Mala Naicker","PersonID":834,"FaxNumber":"(505) 555-0101","DateOfBirth":"1965-10-31 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"mala@wingtiptoys.com","PreferredName":"Mala"}, + {"Gender":"Female","FullName":"Caterina Fallaci","PersonID":835,"FaxNumber":"(210) 555-0101","DateOfBirth":"1988-02-21 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"caterina@wingtiptoys.com","PreferredName":"Caterina"}, + {"Gender":"Female","FullName":"Brayden Macnamara","PersonID":836,"FaxNumber":"(210) 555-0101","DateOfBirth":"1970-04-04 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"brayden@wingtiptoys.com","PreferredName":"Brayden"}, + {"Gender":"Female","FullName":"Baanuraekha Voleti","PersonID":837,"FaxNumber":"(276) 555-0101","DateOfBirth":"1989-02-16 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"baanuraekha@wingtiptoys.com","PreferredName":"Baanuraekha"}, + {"Gender":"Female","FullName":"Renata Alva","PersonID":838,"FaxNumber":"(276) 555-0101","DateOfBirth":"1981-11-25 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"renata@wingtiptoys.com","PreferredName":"Renata"}, + {"Gender":"Female","FullName":"Ranjeet Haldar","PersonID":839,"FaxNumber":"(203) 555-0101","DateOfBirth":"1996-01-19 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"ranjeet@wingtiptoys.com","PreferredName":"Ranjeet"}, + {"Gender":"Female","FullName":"Mandeep Desai","PersonID":840,"FaxNumber":"(203) 555-0101","DateOfBirth":"1965-10-14 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"mandeep@wingtiptoys.com","PreferredName":"Mandeep"}, + {"Gender":"Female","FullName":"Bhaamini Kanaparthi","PersonID":841,"FaxNumber":"(907) 555-0101","DateOfBirth":"1967-08-26 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"bhaamini@wingtiptoys.com","PreferredName":"Bhaamini"}, + {"Gender":"Female","FullName":"Sun-Hi Oh","PersonID":842,"FaxNumber":"(907) 555-0101","DateOfBirth":"1965-02-15 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"sun-hi@wingtiptoys.com","PreferredName":"Sun-Hi"}, + {"Gender":"Female","FullName":"Margit Molnar","PersonID":843,"FaxNumber":"(808) 555-0101","DateOfBirth":"1961-04-03 00:00:00","PhoneNumber":"(808) 555-0100","EmailAddress":"margit@wingtiptoys.com","PreferredName":"Margit"}, + {"Gender":"Female","FullName":"Amanda Kaulina","PersonID":844,"FaxNumber":"(808) 555-0101","DateOfBirth":"1966-09-09 00:00:00","PhoneNumber":"(808) 555-0100","EmailAddress":"amanda@wingtiptoys.com","PreferredName":"Amanda"}, + {"Gender":"Female","FullName":"Chandni Jandhyala","PersonID":845,"FaxNumber":"(210) 555-0101","DateOfBirth":"1977-10-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"chandni@wingtiptoys.com","PreferredName":"Chandni"}, + {"Gender":"Female","FullName":"Verona Sykorova","PersonID":846,"FaxNumber":"(210) 555-0101","DateOfBirth":"1972-09-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"verona@wingtiptoys.com","PreferredName":"Verona"}, + {"Gender":"Female","FullName":"Ljubomir Nesic","PersonID":847,"FaxNumber":"(231) 555-0101","DateOfBirth":"1978-08-22 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"ljubomir@wingtiptoys.com","PreferredName":"Ljubomir"}, + {"Gender":"Female","FullName":"Jennifer Kim","PersonID":848,"FaxNumber":"(231) 555-0101","DateOfBirth":"1968-09-06 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"jenniferk@contosomotors.com","PreferredName":"Jennifer"}, + {"Gender":"Female","FullName":"Telma Hermansson","PersonID":849,"FaxNumber":"(240) 555-0101","DateOfBirth":"1951-05-31 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"telma@wingtiptoys.com","PreferredName":"Telma"}, + {"Gender":"Female","FullName":"Lubomir Spousta","PersonID":850,"FaxNumber":"(240) 555-0101","DateOfBirth":"1991-07-23 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"lubomir@wingtiptoys.com","PreferredName":"Lubomir"}, + {"Gender":"Female","FullName":"Eric Torres","PersonID":851,"FaxNumber":"(307) 555-0101","DateOfBirth":"1975-07-14 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"eric@example.com","PreferredName":"Eric"}, + {"Gender":"Female","FullName":"Cosmina Vlad","PersonID":852,"FaxNumber":"(505) 555-0101","DateOfBirth":"1973-01-20 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"cosmina@example.com","PreferredName":"Cosmina"}, + {"Gender":"Female","FullName":"Bala Dixit","PersonID":853,"FaxNumber":"(209) 555-0101","DateOfBirth":"1997-11-18 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bala@example.com","PreferredName":"Bala"}, + {"Gender":"Female","FullName":"Aleksandrs Riekstins","PersonID":854,"FaxNumber":"(605) 555-0101","DateOfBirth":"1985-04-20 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"aleksandrs@example.com","PreferredName":"Aleksandrs"}, + {"Gender":"Female","FullName":"Ratan Poddar","PersonID":855,"FaxNumber":"(907) 555-0101","DateOfBirth":"1968-02-17 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"ratan@example.com","PreferredName":"Ratan"}, + {"Gender":"Female","FullName":"Shi Tu","PersonID":856,"FaxNumber":"(307) 555-0101","DateOfBirth":"1981-08-10 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"shi@example.com","PreferredName":"Shi"}, + {"Gender":"Female","FullName":"Gunnar Lohmus","PersonID":857,"FaxNumber":"(201) 555-0101","DateOfBirth":"1963-01-15 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"gunnar@example.com","PreferredName":"Gunnar"}, + {"Gender":"Female","FullName":"Jackson Kolios","PersonID":858,"FaxNumber":"(209) 555-0101","DateOfBirth":"1978-03-26 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"jackson@example.com","PreferredName":"Jackson"}, + {"Gender":"Female","FullName":"Madhu Dwivedi","PersonID":859,"FaxNumber":"(802) 555-0101","DateOfBirth":"1995-01-08 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"madhu@example.com","PreferredName":"Madhu"}, + {"Gender":"Female","FullName":"Alena Kellnerova","PersonID":860,"FaxNumber":"(303) 555-0101","DateOfBirth":"1988-06-09 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"alena@example.com","PreferredName":"Alena"}, + {"Gender":"Female","FullName":"Surendra Sahu","PersonID":861,"FaxNumber":"(210) 555-0101","DateOfBirth":"1994-04-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"surendra@example.com","PreferredName":"Surendra"}, + {"Gender":"Female","FullName":"Celica Barajas","PersonID":862,"FaxNumber":"(270) 555-0101","DateOfBirth":"1988-03-04 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"celica@example.com","PreferredName":"Celica"}, + {"Gender":"Female","FullName":"Shyam Poddar","PersonID":863,"FaxNumber":"(218) 555-0101","DateOfBirth":"1968-12-08 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"shyam@example.com","PreferredName":"Shyam"}, + {"Gender":"Female","FullName":"Johanna Hoornstra","PersonID":864,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-12-14 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"johanna@example.com","PreferredName":"Johanna"}, + {"Gender":"Female","FullName":"Libuse Valentova","PersonID":865,"FaxNumber":"(270) 555-0101","DateOfBirth":"1968-10-23 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"libuse@example.com","PreferredName":"Libuse"}, + {"Gender":"Female","FullName":"Harsha Huq","PersonID":866,"FaxNumber":"(314) 555-0101","DateOfBirth":"1961-04-24 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"harsha@example.com","PreferredName":"Harsha"}, + {"Gender":"Female","FullName":"Agrita Kanepa","PersonID":867,"FaxNumber":"(201) 555-0101","DateOfBirth":"1976-02-03 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"agrita@example.com","PreferredName":"Agrita"}, + {"Gender":"Female","FullName":"Liia Orav","PersonID":868,"FaxNumber":"(252) 555-0101","DateOfBirth":"1963-07-26 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"liia@example.com","PreferredName":"Liia"}, + {"Gender":"Female","FullName":"Santiago Vera","PersonID":869,"FaxNumber":"(304) 555-0101","DateOfBirth":"1988-09-19 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"santiago@example.com","PreferredName":"Santiago"}, + {"Gender":"Female","FullName":"Knut Svensson","PersonID":870,"FaxNumber":"(201) 555-0101","DateOfBirth":"1963-09-25 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"knut@example.com","PreferredName":"Knut"}, + {"Gender":"Female","FullName":"Kwanjai Saowaluk","PersonID":871,"FaxNumber":"(787) 555-0101","DateOfBirth":"1972-04-22 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"kwanjai@example.com","PreferredName":"Kwanjai"}, + {"Gender":"Female","FullName":"Suparna Bhattacharya","PersonID":872,"FaxNumber":"(314) 555-0101","DateOfBirth":"1975-05-31 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"suparna@example.com","PreferredName":"Suparna"}, + {"Gender":"Female","FullName":"Francisca Laureano","PersonID":873,"FaxNumber":"(319) 555-0101","DateOfBirth":"1998-01-09 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"francisca@example.com","PreferredName":"Francisca"}, + {"Gender":"Female","FullName":"Risto Valbe","PersonID":874,"FaxNumber":"(205) 555-0101","DateOfBirth":"1990-05-04 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"risto@example.com","PreferredName":"Risto"}, + {"Gender":"Female","FullName":"Jayanta Thakur","PersonID":875,"FaxNumber":"(276) 555-0101","DateOfBirth":"1979-03-09 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"jayanta@example.com","PreferredName":"Jayanta"}, + {"Gender":"Female","FullName":"Leila Carvalho","PersonID":876,"FaxNumber":"(217) 555-0101","DateOfBirth":"1969-10-20 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"leila@example.com","PreferredName":"Leila"}, + {"Gender":"Female","FullName":"Crina Grasu","PersonID":877,"FaxNumber":"(308) 555-0101","DateOfBirth":"1966-02-11 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"crina@example.com","PreferredName":"Crina"}, + {"Gender":"Female","FullName":"Sercan Celik","PersonID":878,"FaxNumber":"(217) 555-0101","DateOfBirth":"1963-03-12 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"sercan@example.com","PreferredName":"Sercan"}, + {"Gender":"Female","FullName":"Jack Walker","PersonID":879,"FaxNumber":"(316) 555-0101","DateOfBirth":"1996-05-19 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"jack@example.com","PreferredName":"Jack"}, + {"Gender":"Female","FullName":"Jana Fialova","PersonID":880,"FaxNumber":"(215) 555-0101","DateOfBirth":"1978-03-31 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jana@example.com","PreferredName":"Jana"}, + {"Gender":"Female","FullName":"Bhaavan Rai","PersonID":881,"FaxNumber":"(308) 555-0101","DateOfBirth":"1950-03-07 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"bhaavan@example.com","PreferredName":"Bhaavan"}, + {"Gender":"Female","FullName":"Aakriti Byrraju","PersonID":882,"FaxNumber":"(216) 555-0101","DateOfBirth":"1951-05-26 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"aakriti@example.com","PreferredName":"Aakriti"}, + {"Gender":"Female","FullName":"Devraj Rao","PersonID":883,"FaxNumber":"(385) 555-0101","DateOfBirth":"1986-01-16 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"devraj@example.com","PreferredName":"Devraj"}, + {"Gender":"Female","FullName":"Cong Hoa","PersonID":884,"FaxNumber":"(212) 555-0101","DateOfBirth":"1973-04-25 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"cong@example.com","PreferredName":"Cong"}, + {"Gender":"Female","FullName":"Dominic Davignon","PersonID":885,"FaxNumber":"(209) 555-0101","DateOfBirth":"1968-07-11 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"dominic@example.com","PreferredName":"Dominic"}, + {"Gender":"Female","FullName":"Abel Spirlea","PersonID":886,"FaxNumber":"(218) 555-0101","DateOfBirth":"1958-02-19 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"abel@example.com","PreferredName":"Abel"}, + {"Gender":"Female","FullName":"Anil Sarkar","PersonID":887,"FaxNumber":"(215) 555-0101","DateOfBirth":"1966-11-02 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"anil@example.com","PreferredName":"Anil"}, + {"Gender":"Female","FullName":"Steve Schmidt","PersonID":888,"FaxNumber":"(339) 555-0101","DateOfBirth":"1975-04-07 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"steves@contosomotors.com","PreferredName":"Pavel"}, + {"Gender":"Female","FullName":"Juan Morse","PersonID":889,"FaxNumber":"(423) 555-0101","DateOfBirth":"1963-08-17 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"juan@example.com","PreferredName":"Juan"}, + {"Gender":"Female","FullName":"Rodrigo Figueiredo","PersonID":890,"FaxNumber":"(803) 555-0101","DateOfBirth":"1975-04-15 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"rodrigo@example.com","PreferredName":"Rodrigo"}, + {"Gender":"Female","FullName":"Camille Authier","PersonID":891,"FaxNumber":"(252) 555-0101","DateOfBirth":"1974-04-12 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"camille@example.com","PreferredName":"Camille"}, + {"Gender":"Female","FullName":"Biju Deb","PersonID":892,"FaxNumber":"(218) 555-0101","DateOfBirth":"1957-07-12 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"biju@example.com","PreferredName":"Biju"}, + {"Gender":"Female","FullName":"Marija Justina Pasek","PersonID":893,"FaxNumber":"(215) 555-0101","DateOfBirth":"1959-08-10 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"marija justina@example.com","PreferredName":"Marija Justina"}, + {"Gender":"Female","FullName":"Durdanah Abbasi","PersonID":894,"FaxNumber":"(201) 555-0101","DateOfBirth":"1958-02-24 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"durdanah@example.com","PreferredName":"Durdanah"}, + {"Gender":"Female","FullName":"Emilie Hrdlickova","PersonID":895,"FaxNumber":"(803) 555-0101","DateOfBirth":"1954-11-01 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"emilie@example.com","PreferredName":"Emilie"}, + {"Gender":"Female","FullName":"Malorie Bousquet","PersonID":896,"FaxNumber":"(209) 555-0101","DateOfBirth":"1984-11-15 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"malorie@example.com","PreferredName":"Malorie"}, + {"Gender":"Female","FullName":"Kristiina Ivanov","PersonID":897,"FaxNumber":"(605) 555-0101","DateOfBirth":"1972-05-26 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"kristiina@example.com","PreferredName":"Kristiina"}, + {"Gender":"Female","FullName":"Alvin Bollinger","PersonID":898,"FaxNumber":"(270) 555-0101","DateOfBirth":"1984-11-21 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"alvin@example.com","PreferredName":"Alvin"}, + {"Gender":"Female","FullName":"Sabine Zalite","PersonID":899,"FaxNumber":"(210) 555-0101","DateOfBirth":"1954-12-16 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"sabine@example.com","PreferredName":"Sabine"}, + {"Gender":"Female","FullName":"Daakshaayaani Sankaramanchi","PersonID":900,"FaxNumber":"(319) 555-0101","DateOfBirth":"1969-06-11 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"daakshaayaani@example.com","PreferredName":"Daakshaayaani"}, + {"Gender":"Female","FullName":"Ebru Erdogan","PersonID":901,"FaxNumber":"(405) 555-0101","DateOfBirth":"1991-11-29 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"ebru@example.com","PreferredName":"Ebru"}, + {"Gender":"Female","FullName":"Bhagavaan Atluri","PersonID":902,"FaxNumber":"(229) 555-0101","DateOfBirth":"1971-04-23 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"bhagavaan@example.com","PreferredName":"Bhagavaan"}, + {"Gender":"Female","FullName":"Caterina Pinto","PersonID":903,"FaxNumber":"(907) 555-0101","DateOfBirth":"1969-03-13 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"caterina@example.com","PreferredName":"Caterina"}, + {"Gender":"Female","FullName":"Daakshaayaani Kommineni","PersonID":904,"FaxNumber":"(239) 555-0101","DateOfBirth":"1972-09-02 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"daakshaayaani@example.com","PreferredName":"Daakshaayaani"}, + {"Gender":"Female","FullName":"Anna Mazzanti","PersonID":905,"FaxNumber":"(314) 555-0101","DateOfBirth":"1996-05-12 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"anna@example.com","PreferredName":"Anna"}, + {"Gender":"Female","FullName":"Satish Mittal","PersonID":906,"FaxNumber":"(215) 555-0101","DateOfBirth":"1966-09-19 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"satish@example.com","PreferredName":"Satish"}, + {"Gender":"Female","FullName":"Clarissa Manfrin","PersonID":907,"FaxNumber":"(210) 555-0101","DateOfBirth":"1964-02-28 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"clarissa@example.com","PreferredName":"Clarissa"}, + {"Gender":"Female","FullName":"Bimla PrabhupÄda","PersonID":908,"FaxNumber":"(209) 555-0101","DateOfBirth":"1987-10-26 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bimla@example.com","PreferredName":"Bimla"}, + {"Gender":"Female","FullName":"Shah Alizadeh","PersonID":909,"FaxNumber":"(304) 555-0101","DateOfBirth":"1996-08-15 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"shah@example.com","PreferredName":"Shah"}, + {"Gender":"Female","FullName":"Marcela Lucescu","PersonID":910,"FaxNumber":"(231) 555-0101","DateOfBirth":"1985-05-19 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"marcela@example.com","PreferredName":"Marcela"}, + {"Gender":"Female","FullName":"Amarasimha Vinjamuri","PersonID":911,"FaxNumber":"(339) 555-0101","DateOfBirth":"1973-06-30 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"amarasimha@example.com","PreferredName":"Amarasimha"}, + {"Gender":"Female","FullName":"Lana Goransson","PersonID":912,"FaxNumber":"(212) 555-0101","DateOfBirth":"1982-05-13 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"lana@example.com","PreferredName":"Lana"}, + {"Gender":"Female","FullName":"Jakub Lukes","PersonID":913,"FaxNumber":"(212) 555-0101","DateOfBirth":"1977-08-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"jakub@example.com","PreferredName":"Jakub"}, + {"Gender":"Female","FullName":"Mikhail Degtyarev","PersonID":914,"FaxNumber":"(218) 555-0101","DateOfBirth":"1984-03-14 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"mikhail@example.com","PreferredName":"Mikhail"}, + {"Gender":"Female","FullName":"Bijoya Thakur","PersonID":915,"FaxNumber":"(225) 555-0101","DateOfBirth":"1978-07-23 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"bijoya@example.com","PreferredName":"Bijoya"}, + {"Gender":"Female","FullName":"Jay Bhuiyan","PersonID":916,"FaxNumber":"(215) 555-0101","DateOfBirth":"1996-01-27 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jay@example.com","PreferredName":"Jay"}, + {"Gender":"Female","FullName":"Jasna Cerkez","PersonID":917,"FaxNumber":"(304) 555-0101","DateOfBirth":"1956-05-11 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"jasna@example.com","PreferredName":"Jasna"}, + {"Gender":"Female","FullName":"Laura Sykorova","PersonID":918,"FaxNumber":"(316) 555-0101","DateOfBirth":"1981-01-24 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"laura@example.com","PreferredName":"Laura"}, + {"Gender":"Female","FullName":"Abel Tatarescu","PersonID":919,"FaxNumber":"(217) 555-0101","DateOfBirth":"1970-01-27 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"abel@example.com","PreferredName":"Abel"}, + {"Gender":"Female","FullName":"In-Su Bae","PersonID":920,"FaxNumber":"(206) 555-0101","DateOfBirth":"1991-01-18 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"in-su@example.com","PreferredName":"In-Su"}, + {"Gender":"Female","FullName":"Darshana Madhunapantula","PersonID":921,"FaxNumber":"(240) 555-0101","DateOfBirth":"1984-06-07 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"darshana@example.com","PreferredName":"Darshana"}, + {"Gender":"Female","FullName":"Katerina Hadrabova","PersonID":922,"FaxNumber":"(219) 555-0101","DateOfBirth":"1984-04-30 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"katerina@example.com","PreferredName":"Katerina"}, + {"Gender":"Female","FullName":"Hana Hlouskova","PersonID":923,"FaxNumber":"(505) 555-0101","DateOfBirth":"1989-03-04 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"hana@example.com","PreferredName":"Hana"}, + {"Gender":"Female","FullName":"Daniel Martensson","PersonID":924,"FaxNumber":"(225) 555-0101","DateOfBirth":"1959-06-25 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"daniel@example.com","PreferredName":"Daniel"}, + {"Gender":"Female","FullName":"Philip Walker","PersonID":925,"FaxNumber":"(216) 555-0101","DateOfBirth":"1963-05-31 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"philip@example.com","PreferredName":"Philip"}, + {"Gender":"Female","FullName":"Marie LeBatelier","PersonID":926,"FaxNumber":"(210) 555-0101","DateOfBirth":"1990-05-20 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"marie@example.com","PreferredName":"Marie"}, + {"Gender":"Female","FullName":"Leyla Siavashi","PersonID":927,"FaxNumber":"(201) 555-0101","DateOfBirth":"1962-08-17 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"leyla@example.com","PreferredName":"Leyla"}, + {"Gender":"Female","FullName":"Miriam House","PersonID":928,"FaxNumber":"(701) 555-0101","DateOfBirth":"1972-01-29 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"miriam@example.com","PreferredName":"Miriam"}, + {"Gender":"Female","FullName":"Jitka Necesana","PersonID":929,"FaxNumber":"(212) 555-0101","DateOfBirth":"1964-09-08 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"jitka@example.com","PreferredName":"Jitka"}, + {"Gender":"Female","FullName":"Edmee Glissen","PersonID":930,"FaxNumber":"(208) 555-0101","DateOfBirth":"1979-02-08 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"edmee@example.com","PreferredName":"Edmee"}, + {"Gender":"Female","FullName":"Magdalena Michnova","PersonID":931,"FaxNumber":"(907) 555-0101","DateOfBirth":"1952-04-02 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"magdalena@example.com","PreferredName":"Magdalena"}, + {"Gender":"Female","FullName":"Maryann Huddleston","PersonID":932,"FaxNumber":"(304) 555-0101","DateOfBirth":"1955-03-19 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"maryann@example.com","PreferredName":"Maryann"}, + {"Gender":"Female","FullName":"Radha Barua","PersonID":933,"FaxNumber":"(405) 555-0101","DateOfBirth":"1995-08-23 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"radha@example.com","PreferredName":"Radha"}, + {"Gender":"Female","FullName":"Anindya Ghatak","PersonID":934,"FaxNumber":"(219) 555-0101","DateOfBirth":"1950-09-20 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"anindya@example.com","PreferredName":"Anindya"}, + {"Gender":"Female","FullName":"Chandrashekhar Dasgupta","PersonID":935,"FaxNumber":"(208) 555-0101","DateOfBirth":"1976-08-11 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"chandrashekhar@example.com","PreferredName":"Chandrashekhar"}, + {"Gender":"Female","FullName":"Debbie Molina","PersonID":936,"FaxNumber":"(270) 555-0101","DateOfBirth":"1980-03-21 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"debbie@example.com","PreferredName":"Debbie"}, + {"Gender":"Female","FullName":"Baran Jonsson","PersonID":937,"FaxNumber":"(458) 555-0101","DateOfBirth":"1996-03-18 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"baran@example.com","PreferredName":"Baran"}, + {"Gender":"Female","FullName":"Jai Lamble","PersonID":938,"FaxNumber":"(479) 555-0101","DateOfBirth":"1968-04-27 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"jai@example.com","PreferredName":"Jai"}, + {"Gender":"Female","FullName":"Sointu Savonheimo","PersonID":939,"FaxNumber":"(701) 555-0101","DateOfBirth":"1967-02-07 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"sointu@example.com","PreferredName":"Sointu"}, + {"Gender":"Female","FullName":"Olya Izmaylov","PersonID":940,"FaxNumber":"(210) 555-0101","DateOfBirth":"1997-06-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"olya@example.com","PreferredName":"Olya"}, + {"Gender":"Female","FullName":"Taneli Riutta","PersonID":941,"FaxNumber":"(276) 555-0101","DateOfBirth":"1991-03-10 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"taneli@example.com","PreferredName":"Taneli"}, + {"Gender":"Female","FullName":"Bahaar Asef zade","PersonID":942,"FaxNumber":"(225) 555-0101","DateOfBirth":"1978-08-11 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"bahaar@example.com","PreferredName":"Bahaar"}, + {"Gender":"Female","FullName":"Leyla Asef zade","PersonID":943,"FaxNumber":"(216) 555-0101","DateOfBirth":"1982-09-26 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"leyla@example.com","PreferredName":"Leyla"}, + {"Gender":"Female","FullName":"Gabriela Hernandes","PersonID":944,"FaxNumber":"(239) 555-0101","DateOfBirth":"1983-01-11 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"gabriela@example.com","PreferredName":"Gabriela"}, + {"Gender":"Female","FullName":"Geza Roman","PersonID":945,"FaxNumber":"(215) 555-0101","DateOfBirth":"1962-08-25 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"geza@example.com","PreferredName":"Geza"}, + {"Gender":"Female","FullName":"Leonardo Folliero","PersonID":946,"FaxNumber":"(339) 555-0101","DateOfBirth":"1980-03-24 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"leonardo@example.com","PreferredName":"Leonardo"}, + {"Gender":"Female","FullName":"Allan Mannik","PersonID":947,"FaxNumber":"(218) 555-0101","DateOfBirth":"1983-10-22 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"allan@example.com","PreferredName":"Allan"}, + {"Gender":"Female","FullName":"Gopalgobinda Sikdar","PersonID":948,"FaxNumber":"(307) 555-0101","DateOfBirth":"1996-09-10 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"gopalgobinda@example.com","PreferredName":"Gopalgobinda"}, + {"Gender":"Female","FullName":"Chin-Sun Chang","PersonID":949,"FaxNumber":"(605) 555-0101","DateOfBirth":"1953-08-02 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"chin-sun@example.com","PreferredName":"Chin-Sun"}, + {"Gender":"Female","FullName":"Lilli Sokk","PersonID":950,"FaxNumber":"(229) 555-0101","DateOfBirth":"1953-08-07 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"lilli@example.com","PreferredName":"Lilli"}, + {"Gender":"Female","FullName":"Adrian Andreasson","PersonID":951,"FaxNumber":"(217) 555-0101","DateOfBirth":"1957-07-17 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"adrian@example.com","PreferredName":"Adrian"}, + {"Gender":"Female","FullName":"Kamila Michnova","PersonID":952,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-12-04 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"kamila@example.com","PreferredName":"Kamila"}, + {"Gender":"Female","FullName":"Bing Han","PersonID":953,"FaxNumber":"(228) 555-0101","DateOfBirth":"1986-05-12 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"bing@example.com","PreferredName":"Bing"}, + {"Gender":"Female","FullName":"Olafs Rozitis","PersonID":954,"FaxNumber":"(316) 555-0101","DateOfBirth":"1980-06-09 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"olafs@example.com","PreferredName":"Olafs"}, + {"Gender":"Female","FullName":"Sara Huiting","PersonID":955,"FaxNumber":"(218) 555-0101","DateOfBirth":"1954-11-05 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"sara@example.com","PreferredName":"Sara"}, + {"Gender":"Female","FullName":"Ajitaab Pakalapati","PersonID":956,"FaxNumber":"(209) 555-0101","DateOfBirth":"1980-03-30 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"ajitaab@example.com","PreferredName":"Ajitaab"}, + {"Gender":"Female","FullName":"Eugen Agafitei","PersonID":957,"FaxNumber":"(252) 555-0101","DateOfBirth":"1989-11-12 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"eugen@example.com","PreferredName":"Eugen"}, + {"Gender":"Female","FullName":"Sumati Bhat","PersonID":958,"FaxNumber":"(206) 555-0101","DateOfBirth":"1970-07-18 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"sumati@example.com","PreferredName":"Sumati"}, + {"Gender":"Female","FullName":"Dena Glissen","PersonID":959,"FaxNumber":"(316) 555-0101","DateOfBirth":"1952-10-27 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"dena@example.com","PreferredName":"Dena"}, + {"Gender":"Female","FullName":"Elina Kaleja","PersonID":960,"FaxNumber":"(225) 555-0101","DateOfBirth":"1973-11-04 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"elina@example.com","PreferredName":"Elina"}, + {"Gender":"Female","FullName":"Liidia Lepp","PersonID":961,"FaxNumber":"(276) 555-0101","DateOfBirth":"1984-03-10 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"liidia@example.com","PreferredName":"Liidia"}, + {"Gender":"Female","FullName":"Volkan senturk","PersonID":962,"FaxNumber":"(276) 555-0101","DateOfBirth":"1963-04-28 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"volkan@example.com","PreferredName":"Volkan"}, + {"Gender":"Female","FullName":"Violetta KlanCisar","PersonID":963,"FaxNumber":"(225) 555-0101","DateOfBirth":"1957-05-22 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"violetta@example.com","PreferredName":"Violetta"}, + {"Gender":"Female","FullName":"Chandana Shasthri","PersonID":964,"FaxNumber":"(803) 555-0101","DateOfBirth":"1997-01-26 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"chandana@example.com","PreferredName":"Chandana"}, + {"Gender":"Female","FullName":"Ana Florea","PersonID":965,"FaxNumber":"(210) 555-0101","DateOfBirth":"1996-04-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"ana@example.com","PreferredName":"Ana"}, + {"Gender":"Female","FullName":"Pinja Jantunen","PersonID":966,"FaxNumber":"(308) 555-0101","DateOfBirth":"1957-08-23 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"pinja@example.com","PreferredName":"Pinja"}, + {"Gender":"Female","FullName":"Pari Hosseini","PersonID":967,"FaxNumber":"(505) 555-0101","DateOfBirth":"1971-11-15 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"pari@example.com","PreferredName":"Pari"}, + {"Gender":"Female","FullName":"Isidora Morales","PersonID":968,"FaxNumber":"(406) 555-0101","DateOfBirth":"1990-02-20 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"isidora@example.com","PreferredName":"Isidora"}, + {"Gender":"Female","FullName":"Kertu Sokk","PersonID":969,"FaxNumber":"(212) 555-0101","DateOfBirth":"1973-08-26 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"kertu@example.com","PreferredName":"Kertu"}, + {"Gender":"Female","FullName":"Gayatri Gajula","PersonID":970,"FaxNumber":"(212) 555-0101","DateOfBirth":"1959-12-28 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"gayatri@example.com","PreferredName":"Gayatri"}, + {"Gender":"Female","FullName":"Victoria Lacusta","PersonID":971,"FaxNumber":"(212) 555-0101","DateOfBirth":"1987-12-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"victoria@example.com","PreferredName":"Victoria"}, + {"Gender":"Female","FullName":"Sumati Chatterjee","PersonID":972,"FaxNumber":"(231) 555-0101","DateOfBirth":"1989-04-12 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"sumati@example.com","PreferredName":"Sumati"}, + {"Gender":"Female","FullName":"Tai Bach","PersonID":973,"FaxNumber":"(219) 555-0101","DateOfBirth":"1959-02-25 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"tai@example.com","PreferredName":"Tai"}, + {"Gender":"Female","FullName":"Eva Schulteisz","PersonID":974,"FaxNumber":"(252) 555-0101","DateOfBirth":"1951-12-27 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"eva@example.com","PreferredName":"Eva"}, + {"Gender":"Female","FullName":"Can ozcan","PersonID":975,"FaxNumber":"(215) 555-0101","DateOfBirth":"1973-07-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"can@example.com","PreferredName":"Can"}, + {"Gender":"Female","FullName":"Richard Friar","PersonID":976,"FaxNumber":"(339) 555-0101","DateOfBirth":"1973-07-24 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"richard@example.com","PreferredName":"Richard"}, + {"Gender":"Female","FullName":"Matyas Sedlar","PersonID":977,"FaxNumber":"(270) 555-0101","DateOfBirth":"1979-02-16 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"matyas@example.com","PreferredName":"Matyas"}, + {"Gender":"Female","FullName":"Arijit Bhuiyan","PersonID":978,"FaxNumber":"(212) 555-0101","DateOfBirth":"1992-04-29 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"arijit@example.com","PreferredName":"Arijit"}, + {"Gender":"Female","FullName":"Vladimir Henzl","PersonID":979,"FaxNumber":"(907) 555-0101","DateOfBirth":"1972-08-25 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"vladimir@example.com","PreferredName":"Vladimir"}, + {"Gender":"Female","FullName":"Shantanu Huq","PersonID":980,"FaxNumber":"(252) 555-0101","DateOfBirth":"1985-10-23 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"shantanu@example.com","PreferredName":"Shantanu"}, + {"Gender":"Female","FullName":"Nada Jovanovic","PersonID":981,"FaxNumber":"(215) 555-0101","DateOfBirth":"1985-09-10 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"nada@example.com","PreferredName":"Nada"}, + {"Gender":"Female","FullName":"Nicolo Cattaneo","PersonID":982,"FaxNumber":"(212) 555-0101","DateOfBirth":"1972-05-15 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"nicolo@example.com","PreferredName":"Nicolo"}, + {"Gender":"Female","FullName":"Joel Carrillo","PersonID":983,"FaxNumber":"(405) 555-0101","DateOfBirth":"1974-04-12 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"joel@example.com","PreferredName":"Joel"}, + {"Gender":"Female","FullName":"Ivan Sepulveda","PersonID":984,"FaxNumber":"(218) 555-0101","DateOfBirth":"1987-04-10 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"ivan@example.com","PreferredName":"Ivan"}, + {"Gender":"Female","FullName":"Daevasree Samavedam","PersonID":985,"FaxNumber":"(201) 555-0101","DateOfBirth":"1962-08-14 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"daevasree@example.com","PreferredName":"Daevasree"}, + {"Gender":"Female","FullName":"Ludmila Smidova","PersonID":986,"FaxNumber":"(480) 555-0101","DateOfBirth":"1973-04-21 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"ludmila@example.com","PreferredName":"Ludmila"}, + {"Gender":"Female","FullName":"Manca Hrastovsek","PersonID":987,"FaxNumber":"(205) 555-0101","DateOfBirth":"1959-10-13 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"manca@example.com","PreferredName":"Manca"}, + {"Gender":"Female","FullName":"Anna Gyarmathi","PersonID":988,"FaxNumber":"(252) 555-0101","DateOfBirth":"1961-10-09 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"anna@example.com","PreferredName":"Anna"}, + {"Gender":"Female","FullName":"Ioana Florea","PersonID":989,"FaxNumber":"(339) 555-0101","DateOfBirth":"1975-11-03 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"ioana@example.com","PreferredName":"Ioana"}, + {"Gender":"Female","FullName":"Lorin Astrom","PersonID":990,"FaxNumber":"(210) 555-0101","DateOfBirth":"1978-10-28 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"lorin@example.com","PreferredName":"Lorin"}, + {"Gender":"Female","FullName":"Bishwa Chatterjee","PersonID":991,"FaxNumber":"(239) 555-0101","DateOfBirth":"1960-12-13 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"bishwa@example.com","PreferredName":"Bishwa"}, + {"Gender":"Female","FullName":"Chaayaadaevi Sonti","PersonID":992,"FaxNumber":"(217) 555-0101","DateOfBirth":"1954-05-29 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"chaayaadaevi@example.com","PreferredName":"Chaayaadaevi"}, + {"Gender":"Female","FullName":"Drazenka Jelic","PersonID":993,"FaxNumber":"(803) 555-0101","DateOfBirth":"1955-12-17 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"drazenka@example.com","PreferredName":"Drazenka"}, + {"Gender":"Female","FullName":"Ida Celma","PersonID":994,"FaxNumber":"(319) 555-0101","DateOfBirth":"1977-08-06 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"ida@example.com","PreferredName":"Ida"}, + {"Gender":"Female","FullName":"Hoc Tran","PersonID":995,"FaxNumber":"(339) 555-0101","DateOfBirth":"1965-02-13 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"hoc@example.com","PreferredName":"Hoc"}, + {"Gender":"Female","FullName":"David safranek","PersonID":996,"FaxNumber":"(215) 555-0101","DateOfBirth":"1992-02-21 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"david@example.com","PreferredName":"David"}, + {"Gender":"Female","FullName":"Svetlana Todorovic","PersonID":997,"FaxNumber":"(206) 555-0101","DateOfBirth":"1966-10-11 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"svetlana@example.com","PreferredName":"Svetlana"}, + {"Gender":"Female","FullName":"Richard Zahradnicek","PersonID":998,"FaxNumber":"(314) 555-0101","DateOfBirth":"1961-03-02 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"richard@example.com","PreferredName":"Richard"}, + {"Gender":"Female","FullName":"Seo-yun Paik","PersonID":999,"FaxNumber":"(210) 555-0101","DateOfBirth":"1968-07-18 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"seo-yun@example.com","PreferredName":"Seo-yun"}, + {"Gender":"Female","FullName":"Emily Whittle","PersonID":1000,"FaxNumber":"(231) 555-0101","DateOfBirth":"1962-11-25 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"emily@example.com","PreferredName":"Emily"} diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index 2ad4ae219b..5069646b27 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -307,6 +307,8 @@ case class EncryptedSortMergeJoinExec( sparkContext.parallelize(shifted, childRDD.partitions.length) // TODO: Fix this zipPartitions + println(childRDD.getNumPartitions) + println(processedJoinRowsRDD.getNumPartitions) childRDD.zipPartitions(processedJoinRowsRDD) { (blockIter, joinRowIter) => (blockIter.toSeq, joinRowIter.toSeq) match { case (Seq(block), Seq(joinRow)) => From eebda35cdca9f20c161fc01d19e6830c0b5437a0 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 00:31:56 -0700 Subject: [PATCH 006/101] oblivioius union exec --- .../edu/berkeley/cs/rise/opaque/execution/operators.scala | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index 5069646b27..877aa27296 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -306,7 +306,8 @@ case class EncryptedSortMergeJoinExec( val processedJoinRowsRDD = sparkContext.parallelize(shifted, childRDD.partitions.length) - // TODO: Fix this zipPartitions + // TODO + println("In encrypted sort merge join exec") println(childRDD.getNumPartitions) println(processedJoinRowsRDD.getNumPartitions) childRDD.zipPartitions(processedJoinRowsRDD) { (blockIter, joinRowIter) => @@ -340,7 +341,10 @@ case class ObliviousUnionExec( // RA.initRA(leftRDD) - // fix this zipPartitions + // TODO + println("In oblivious union exec") + println(childRDD.getNumPartitions) + println(processedJoinRowsRDD.getNumPartitions) val unioned = leftRDD.zipPartitions(rightRDD) { (leftBlockIter, rightBlockIter) => (leftBlockIter.toSeq ++ rightBlockIter.toSeq) match { case Seq(leftBlock, rightBlock) => From 2b919400d25005f36117bf12b8d9613a12b1c554 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 00:33:24 -0700 Subject: [PATCH 007/101] d --- .../edu/berkeley/cs/rise/opaque/execution/operators.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index 877aa27296..a03526fdf3 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -343,8 +343,8 @@ case class ObliviousUnionExec( // TODO println("In oblivious union exec") - println(childRDD.getNumPartitions) - println(processedJoinRowsRDD.getNumPartitions) + println(leftRDD.getNumPartitions) + println(right.getNumPartitions) val unioned = leftRDD.zipPartitions(rightRDD) { (leftBlockIter, rightBlockIter) => (leftBlockIter.toSeq ++ rightBlockIter.toSeq) match { case Seq(leftBlock, rightBlock) => From d20bc2167c8cf822d654f0197b8eaa8f4dae5902 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 00:39:39 -0700 Subject: [PATCH 008/101] add script --- enc_join.scala | 19 +++++++++++++++++++ .../cs/rise/opaque/execution/operators.scala | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 enc_join.scala diff --git a/enc_join.scala b/enc_join.scala new file mode 100644 index 0000000000..a7400eaeeb --- /dev/null +++ b/enc_join.scala @@ -0,0 +1,19 @@ +import edu.berkeley.cs.rise.opaque.implicits._ +edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) + +val df1 = spark.read.json("person.json") +val df1_repart = df1.repartition(5) +println(s"df1 num partitions: ${df1_repart.rdd.getNumPartitions}") + + +val df1_repart_enc = df1_repart.encrypted + +val df2 = spark.read.json("idlist.json") +val df2_repart = df2.repartition(3) +println(s"df2 num partitions: ${df2_repart.rdd.getNumPartitions}") +val df2_repart_enc = df2_repart.encrypted + +df1_repart_enc.repartition(5) + +val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("PersonID")) +enc_join.show \ No newline at end of file diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index a03526fdf3..7bd3f5b585 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -344,7 +344,7 @@ case class ObliviousUnionExec( // TODO println("In oblivious union exec") println(leftRDD.getNumPartitions) - println(right.getNumPartitions) + println(rightRDD.getNumPartitions) val unioned = leftRDD.zipPartitions(rightRDD) { (leftBlockIter, rightBlockIter) => (leftBlockIter.toSeq ++ rightBlockIter.toSeq) match { case Seq(leftBlock, rightBlock) => From dfd4fcc85c218c10c48290a2b24f1c20edff5711 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 01:47:15 -0700 Subject: [PATCH 009/101] try --- enc_join.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/enc_join.scala b/enc_join.scala index a7400eaeeb..a2db6e79ad 100644 --- a/enc_join.scala +++ b/enc_join.scala @@ -1,5 +1,7 @@ import edu.berkeley.cs.rise.opaque.implicits._ -edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) +import edu.berkeley.cs.rise.opaque._ + +Utils.initSQLContext(spark.sqlContext) val df1 = spark.read.json("person.json") val df1_repart = df1.repartition(5) From 147e39e8f52b533c67878f3fee033467b37b1cca Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 01:51:11 -0700 Subject: [PATCH 010/101] main --- enc_join.scala | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/enc_join.scala b/enc_join.scala index a2db6e79ad..8666b000fb 100644 --- a/enc_join.scala +++ b/enc_join.scala @@ -1,21 +1,24 @@ import edu.berkeley.cs.rise.opaque.implicits._ -import edu.berkeley.cs.rise.opaque._ -Utils.initSQLContext(spark.sqlContext) +object Join { + def main(args: Array[String]): Unit = { + edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) -val df1 = spark.read.json("person.json") -val df1_repart = df1.repartition(5) -println(s"df1 num partitions: ${df1_repart.rdd.getNumPartitions}") + val df1 = spark.read.json("person.json") + val df1_repart = df1.repartition(5) + println(s"df1 num partitions: ${df1_repart.rdd.getNumPartitions}") -val df1_repart_enc = df1_repart.encrypted + val df1_repart_enc = df1_repart.encrypted -val df2 = spark.read.json("idlist.json") -val df2_repart = df2.repartition(3) -println(s"df2 num partitions: ${df2_repart.rdd.getNumPartitions}") -val df2_repart_enc = df2_repart.encrypted + val df2 = spark.read.json("idlist.json") + val df2_repart = df2.repartition(3) + println(s"df2 num partitions: ${df2_repart.rdd.getNumPartitions}") + val df2_repart_enc = df2_repart.encrypted -df1_repart_enc.repartition(5) + df1_repart_enc.repartition(5) -val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("PersonID")) -enc_join.show \ No newline at end of file + val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("PersonID")) + enc_join.show + } +} From 9ba0e93b854a5fae78a9326421390b29157da94d Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 02:01:01 -0700 Subject: [PATCH 011/101] try --- enc_join.scala | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/enc_join.scala b/enc_join.scala index 8666b000fb..2d882d5d25 100644 --- a/enc_join.scala +++ b/enc_join.scala @@ -1,7 +1,15 @@ import edu.berkeley.cs.rise.opaque.implicits._ +import org.apache.spark.sql.SparkSession + import org.apache.spark.SparkContext + object Join { def main(args: Array[String]): Unit = { + val spark = SparkSession.builder. + master("local[*]"). + appName("Console"). + config("spark.app.id", "Console"). // to silence Metrics warning + getOrCreate() edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) val df1 = spark.read.json("person.json") From b9484c610b9719ccfb937726746e5582f304902c Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 02:07:51 -0700 Subject: [PATCH 012/101] script like --- enc_join.scala | 49 ++++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/enc_join.scala b/enc_join.scala index 2d882d5d25..16dc19549a 100644 --- a/enc_join.scala +++ b/enc_join.scala @@ -1,32 +1,35 @@ import edu.berkeley.cs.rise.opaque.implicits._ -import org.apache.spark.sql.SparkSession - import org.apache.spark.SparkContext +// import org.apache.spark.sql.SparkSession +// import org.apache.spark.SparkContext -object Join { - def main(args: Array[String]): Unit = { - val spark = SparkSession.builder. - master("local[*]"). - appName("Console"). - config("spark.app.id", "Console"). // to silence Metrics warning - getOrCreate() - edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) +// object Join { +// def main(args: Array[String]): Unit = { +// val spark = SparkSession.builder. +// master("local[*]"). +// appName("Console"). +// config("spark.app.id", "Console"). +// getOrCreate() +edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) - val df1 = spark.read.json("person.json") - val df1_repart = df1.repartition(5) - println(s"df1 num partitions: ${df1_repart.rdd.getNumPartitions}") +val df1 = spark.read.json("person.json") +val df1_repart = df1.repartition(5) +// println(s"df1 num partitions: ${df1_repart.rdd.getNumPartitions}") +df1_repart.rdd.getNumPartitions - val df1_repart_enc = df1_repart.encrypted +val df1_repart_enc = df1_repart.encrypted - val df2 = spark.read.json("idlist.json") - val df2_repart = df2.repartition(3) - println(s"df2 num partitions: ${df2_repart.rdd.getNumPartitions}") - val df2_repart_enc = df2_repart.encrypted +val df2 = spark.read.json("idlist.json") +val df2_repart = df2.repartition(3) +// println(s"df2 num partitions: ${df2_repart.rdd.getNumPartitions}") - df1_repart_enc.repartition(5) +df2_repart.rdd.getNumPartitions +val df2_repart_enc = df2_repart.encrypted - val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("PersonID")) - enc_join.show - } -} +df1_repart_enc.repartition(5) + +val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("PersonID")) +enc_join.show +// } +// } From 98f038b8a979b7fff8a2378c7065e2576ffab191 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 02:12:01 -0700 Subject: [PATCH 013/101] ugh --- enc_join.scala | 49 +++++++++++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/enc_join.scala b/enc_join.scala index 16dc19549a..dded21a91d 100644 --- a/enc_join.scala +++ b/enc_join.scala @@ -1,35 +1,32 @@ import edu.berkeley.cs.rise.opaque.implicits._ -// import org.apache.spark.sql.SparkSession -// import org.apache.spark.SparkContext +import org.apache.spark.sql.SparkSession +import org.apache.spark.SparkContext -// object Join { -// def main(args: Array[String]): Unit = { -// val spark = SparkSession.builder. -// master("local[*]"). -// appName("Console"). -// config("spark.app.id", "Console"). -// getOrCreate() -edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) +object Join { + def main(args: Array[String]): Unit = { + val spark = SparkSession.builder. + master("local[*]"). + appName("Console"). + config("spark.app.id", "Console"). // to silence Metrics warning + getOrCreate() + edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) -val df1 = spark.read.json("person.json") -val df1_repart = df1.repartition(5) -// println(s"df1 num partitions: ${df1_repart.rdd.getNumPartitions}") -df1_repart.rdd.getNumPartitions + val df1 = spark.read.json("person.json") + val df1_repart = df1.repartition(5) + println(s"df1 num partitions: ${df1_repart.rdd.getNumPartitions}") -val df1_repart_enc = df1_repart.encrypted + val df1_repart_enc = df1_repart.encrypted -val df2 = spark.read.json("idlist.json") -val df2_repart = df2.repartition(3) -// println(s"df2 num partitions: ${df2_repart.rdd.getNumPartitions}") + val df2 = spark.read.json("idlist.json") + val df2_repart = df2.repartition(3) + println(s"df2 num partitions: ${df2_repart.rdd.getNumPartitions}") + val df2_repart_enc = df2_repart.encrypted -df2_repart.rdd.getNumPartitions -val df2_repart_enc = df2_repart.encrypted + df1_repart_enc.repartition(5) -df1_repart_enc.repartition(5) - -val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("PersonID")) -enc_join.show -// } -// } + val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("PersonID")) + enc_join.show + } +} From 324161781cc33812a6b96248d4cbbbbcd2acde36 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 02:13:50 -0700 Subject: [PATCH 014/101] hmm --- enc_join.scala | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/enc_join.scala b/enc_join.scala index dded21a91d..249b2e32a9 100644 --- a/enc_join.scala +++ b/enc_join.scala @@ -3,30 +3,30 @@ import org.apache.spark.sql.SparkSession import org.apache.spark.SparkContext -object Join { - def main(args: Array[String]): Unit = { - val spark = SparkSession.builder. - master("local[*]"). - appName("Console"). - config("spark.app.id", "Console"). // to silence Metrics warning - getOrCreate() - edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) +// object Join { +// def main(args: Array[String]): Unit = { +// val spark = SparkSession.builder. +// master("local[*]"). +// appName("Console"). +// config("spark.app.id", "Console"). // to silence Metrics warning +// getOrCreate() +// edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) - val df1 = spark.read.json("person.json") - val df1_repart = df1.repartition(5) - println(s"df1 num partitions: ${df1_repart.rdd.getNumPartitions}") +val df1 = spark.read.json("person.json") +val df1_repart = df1.repartition(5) +println(s"df1 num partitions: ${df1_repart.rdd.getNumPartitions}") - val df1_repart_enc = df1_repart.encrypted +val df1_repart_enc = df1_repart.encrypted - val df2 = spark.read.json("idlist.json") - val df2_repart = df2.repartition(3) - println(s"df2 num partitions: ${df2_repart.rdd.getNumPartitions}") - val df2_repart_enc = df2_repart.encrypted +val df2 = spark.read.json("idlist.json") +val df2_repart = df2.repartition(3) +println(s"df2 num partitions: ${df2_repart.rdd.getNumPartitions}") +val df2_repart_enc = df2_repart.encrypted - df1_repart_enc.repartition(5) +df1_repart_enc.repartition(5) - val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("PersonID")) - enc_join.show - } -} +val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("PersonID")) +enc_join.show +// } +// } From 5d76a828b5b9c67911fb060ee374ca80964175d3 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 02:18:22 -0700 Subject: [PATCH 015/101] good to go now --- enc_join.scala | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/enc_join.scala b/enc_join.scala index 249b2e32a9..9f9d55c99c 100644 --- a/enc_join.scala +++ b/enc_join.scala @@ -10,7 +10,8 @@ import org.apache.spark.SparkContext // appName("Console"). // config("spark.app.id", "Console"). // to silence Metrics warning // getOrCreate() -// edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) + +edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) val df1 = spark.read.json("person.json") val df1_repart = df1.repartition(5) @@ -27,6 +28,6 @@ val df2_repart_enc = df2_repart.encrypted df1_repart_enc.repartition(5) val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("PersonID")) -enc_join.show +// enc_join.show // } // } From 4df358cf5487da1809f474715fc8838972a02e69 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 02:19:12 -0700 Subject: [PATCH 016/101] rename --- enc_join.scala => enc_join.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename enc_join.scala => enc_join.txt (100%) diff --git a/enc_join.scala b/enc_join.txt similarity index 100% rename from enc_join.scala rename to enc_join.txt From ccb0590c889f37d02efe900bf75361a6d3b8eb27 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 17:35:06 -0700 Subject: [PATCH 017/101] repartition in obliviousUnionExec if Rdds are different --- enc_join.scala | 33 +++++++++++++++++++ .../cs/rise/opaque/execution/operators.scala | 19 ++++++----- 2 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 enc_join.scala diff --git a/enc_join.scala b/enc_join.scala new file mode 100644 index 0000000000..9f9d55c99c --- /dev/null +++ b/enc_join.scala @@ -0,0 +1,33 @@ +import edu.berkeley.cs.rise.opaque.implicits._ +import org.apache.spark.sql.SparkSession +import org.apache.spark.SparkContext + + +// object Join { +// def main(args: Array[String]): Unit = { +// val spark = SparkSession.builder. +// master("local[*]"). +// appName("Console"). +// config("spark.app.id", "Console"). // to silence Metrics warning +// getOrCreate() + +edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) + +val df1 = spark.read.json("person.json") +val df1_repart = df1.repartition(5) +println(s"df1 num partitions: ${df1_repart.rdd.getNumPartitions}") + + +val df1_repart_enc = df1_repart.encrypted + +val df2 = spark.read.json("idlist.json") +val df2_repart = df2.repartition(3) +println(s"df2 num partitions: ${df2_repart.rdd.getNumPartitions}") +val df2_repart_enc = df2_repart.encrypted + +df1_repart_enc.repartition(5) + +val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("PersonID")) +// enc_join.show +// } +// } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index 7bd3f5b585..c7d31a5c80 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -306,10 +306,6 @@ case class EncryptedSortMergeJoinExec( val processedJoinRowsRDD = sparkContext.parallelize(shifted, childRDD.partitions.length) - // TODO - println("In encrypted sort merge join exec") - println(childRDD.getNumPartitions) - println(processedJoinRowsRDD.getNumPartitions) childRDD.zipPartitions(processedJoinRowsRDD) { (blockIter, joinRowIter) => (blockIter.toSeq, joinRowIter.toSeq) match { case (Seq(block), Seq(joinRow)) => @@ -332,8 +328,8 @@ case class ObliviousUnionExec( left.output override def executeBlocked() = { - val leftRDD = left.asInstanceOf[OpaqueOperatorExec].executeBlocked() - val rightRDD = right.asInstanceOf[OpaqueOperatorExec].executeBlocked() + var leftRDD = left.asInstanceOf[OpaqueOperatorExec].executeBlocked() + var rightRDD = right.asInstanceOf[OpaqueOperatorExec].executeBlocked() Utils.ensureCached(leftRDD) time("Force left child of ObliviousUnionExec") { leftRDD.count } Utils.ensureCached(rightRDD) @@ -343,8 +339,15 @@ case class ObliviousUnionExec( // TODO println("In oblivious union exec") - println(leftRDD.getNumPartitions) - println(rightRDD.getNumPartitions) + val num_left_partitions = leftRDD.getNumPartitions + val num_right_partitions = rightRDD.getNumPartitions + if (num_left_partitions != num_right_partitions) { + if (num_left_partitions > num_right_partitions) { + rightRDD = rightRDD.repartition(num_left_partitions) + } else { + leftRDD = leftRDD.repartition(num_right_partitions) + } + } val unioned = leftRDD.zipPartitions(rightRDD) { (leftBlockIter, rightBlockIter) => (leftBlockIter.toSeq ++ rightBlockIter.toSeq) match { case Seq(leftBlock, rightBlock) => From 323a0b1f9922acfcbf85d3e5aa7f71a5f5876e50 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Sat, 15 Sep 2018 00:36:41 +0000 Subject: [PATCH 018/101] rm enc_join.scala to prevent compile errors --- enc_join.scala | 33 --------------------------------- enc_join.txt | 6 +++--- 2 files changed, 3 insertions(+), 36 deletions(-) delete mode 100644 enc_join.scala diff --git a/enc_join.scala b/enc_join.scala deleted file mode 100644 index 9f9d55c99c..0000000000 --- a/enc_join.scala +++ /dev/null @@ -1,33 +0,0 @@ -import edu.berkeley.cs.rise.opaque.implicits._ -import org.apache.spark.sql.SparkSession -import org.apache.spark.SparkContext - - -// object Join { -// def main(args: Array[String]): Unit = { -// val spark = SparkSession.builder. -// master("local[*]"). -// appName("Console"). -// config("spark.app.id", "Console"). // to silence Metrics warning -// getOrCreate() - -edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) - -val df1 = spark.read.json("person.json") -val df1_repart = df1.repartition(5) -println(s"df1 num partitions: ${df1_repart.rdd.getNumPartitions}") - - -val df1_repart_enc = df1_repart.encrypted - -val df2 = spark.read.json("idlist.json") -val df2_repart = df2.repartition(3) -println(s"df2 num partitions: ${df2_repart.rdd.getNumPartitions}") -val df2_repart_enc = df2_repart.encrypted - -df1_repart_enc.repartition(5) - -val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("PersonID")) -// enc_join.show -// } -// } diff --git a/enc_join.txt b/enc_join.txt index 9f9d55c99c..344522d9c6 100644 --- a/enc_join.txt +++ b/enc_join.txt @@ -13,21 +13,21 @@ import org.apache.spark.SparkContext edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) -val df1 = spark.read.json("person.json") +val df1 = spark.read.json("employees.json") val df1_repart = df1.repartition(5) println(s"df1 num partitions: ${df1_repart.rdd.getNumPartitions}") val df1_repart_enc = df1_repart.encrypted -val df2 = spark.read.json("idlist.json") +val df2 = spark.read.json("employees_truncated.json") val df2_repart = df2.repartition(3) println(s"df2 num partitions: ${df2_repart.rdd.getNumPartitions}") val df2_repart_enc = df2_repart.encrypted df1_repart_enc.repartition(5) -val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("PersonID")) +val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("name")) // enc_join.show // } // } From eba9d2687187b08ccdc1a7bba2b9e9029a92e4e0 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 17:50:56 -0700 Subject: [PATCH 019/101] try again --- enc_join.scala | 33 +++++++++++++++++++ .../cs/rise/opaque/execution/operators.scala | 4 +-- 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 enc_join.scala diff --git a/enc_join.scala b/enc_join.scala new file mode 100644 index 0000000000..9f9d55c99c --- /dev/null +++ b/enc_join.scala @@ -0,0 +1,33 @@ +import edu.berkeley.cs.rise.opaque.implicits._ +import org.apache.spark.sql.SparkSession +import org.apache.spark.SparkContext + + +// object Join { +// def main(args: Array[String]): Unit = { +// val spark = SparkSession.builder. +// master("local[*]"). +// appName("Console"). +// config("spark.app.id", "Console"). // to silence Metrics warning +// getOrCreate() + +edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) + +val df1 = spark.read.json("person.json") +val df1_repart = df1.repartition(5) +println(s"df1 num partitions: ${df1_repart.rdd.getNumPartitions}") + + +val df1_repart_enc = df1_repart.encrypted + +val df2 = spark.read.json("idlist.json") +val df2_repart = df2.repartition(3) +println(s"df2 num partitions: ${df2_repart.rdd.getNumPartitions}") +val df2_repart_enc = df2_repart.encrypted + +df1_repart_enc.repartition(5) + +val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("PersonID")) +// enc_join.show +// } +// } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index c7d31a5c80..e770a05ace 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -343,9 +343,9 @@ case class ObliviousUnionExec( val num_right_partitions = rightRDD.getNumPartitions if (num_left_partitions != num_right_partitions) { if (num_left_partitions > num_right_partitions) { - rightRDD = rightRDD.repartition(num_left_partitions) - } else { leftRDD = leftRDD.repartition(num_right_partitions) + } else { + rightRDD = rightRDD.repartition(num_left_partitions) } } val unioned = leftRDD.zipPartitions(rightRDD) { (leftBlockIter, rightBlockIter) => From 342b566e2afb67aed98e5e3862c1bcafb50005dd Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 18:19:03 -0700 Subject: [PATCH 020/101] repartition both to 1 if different sizes --- .../cs/rise/opaque/execution/operators.scala | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index e770a05ace..e061072e2a 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -263,7 +263,6 @@ case class EncryptedAggregateExec( assert(shifted.size == childRDD.partitions.length) val shiftedRDD = sparkContext.parallelize(shifted, childRDD.partitions.length) - // TODO: fix this childRDD.zipPartitions(shiftedRDD) { (blockIter, boundaryIter) => (blockIter.toSeq, boundaryIter.toSeq) match { case (Seq(block), Seq(Tuple3( @@ -342,11 +341,13 @@ case class ObliviousUnionExec( val num_left_partitions = leftRDD.getNumPartitions val num_right_partitions = rightRDD.getNumPartitions if (num_left_partitions != num_right_partitions) { - if (num_left_partitions > num_right_partitions) { - leftRDD = leftRDD.repartition(num_right_partitions) - } else { - rightRDD = rightRDD.repartition(num_left_partitions) - } + // if (num_left_partitions > num_right_partitions) { + // leftRDD = leftRDD.repartition(num_right_partitions) + // } else { + // rightRDD = rightRDD.repartition(num_left_partitions) + // } + leftRDD = leftRDD.repartition(1) + rightRDD = rightRDD.reparition(1) } val unioned = leftRDD.zipPartitions(rightRDD) { (leftBlockIter, rightBlockIter) => (leftBlockIter.toSeq ++ rightBlockIter.toSeq) match { From 1306c06c804ce7b7ea63d0a2b48ce9a85f7b8b85 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 18:21:31 -0700 Subject: [PATCH 021/101] h --- .../scala/edu/berkeley/cs/rise/opaque/execution/operators.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index e061072e2a..aa90f00520 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -347,7 +347,7 @@ case class ObliviousUnionExec( // rightRDD = rightRDD.repartition(num_left_partitions) // } leftRDD = leftRDD.repartition(1) - rightRDD = rightRDD.reparition(1) + rightRDD = rightRDD.repartition(1) } val unioned = leftRDD.zipPartitions(rightRDD) { (leftBlockIter, rightBlockIter) => (leftBlockIter.toSeq ++ rightBlockIter.toSeq) match { From e4ba8be43220774784ab52ea0dc0be0bf0f94897 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 14 Sep 2018 18:39:01 -0700 Subject: [PATCH 022/101] try coalesce --- .../cs/rise/opaque/execution/operators.scala | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index aa90f00520..240d4fa583 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -341,13 +341,11 @@ case class ObliviousUnionExec( val num_left_partitions = leftRDD.getNumPartitions val num_right_partitions = rightRDD.getNumPartitions if (num_left_partitions != num_right_partitions) { - // if (num_left_partitions > num_right_partitions) { - // leftRDD = leftRDD.repartition(num_right_partitions) - // } else { - // rightRDD = rightRDD.repartition(num_left_partitions) - // } - leftRDD = leftRDD.repartition(1) - rightRDD = rightRDD.repartition(1) + if (num_left_partitions > num_right_partitions) { + leftRDD = leftRDD.coalesce(num_right_partitions) + } else { + rightRDD = rightRDD.coalesce(num_left_partitions) + } } val unioned = leftRDD.zipPartitions(rightRDD) { (leftBlockIter, rightBlockIter) => (leftBlockIter.toSeq ++ rightBlockIter.toSeq) match { From 71bc6e4bcad2b4f448029cdfbde2b530807c2f03 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Tue, 18 Sep 2018 00:35:50 -0700 Subject: [PATCH 023/101] copy ankur fix --- .../berkeley/cs/rise/opaque/execution/operators.scala | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index 240d4fa583..b183abd2b5 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -347,13 +347,9 @@ case class ObliviousUnionExec( rightRDD = rightRDD.coalesce(num_left_partitions) } } - val unioned = leftRDD.zipPartitions(rightRDD) { (leftBlockIter, rightBlockIter) => - (leftBlockIter.toSeq ++ rightBlockIter.toSeq) match { - case Seq(leftBlock, rightBlock) => - Iterator(Utils.concatEncryptedBlocks(Seq(leftBlock, rightBlock))) - case Seq(block) => Iterator(block) - case Seq() => Iterator.empty - } + val unioned = leftRDD.zipPartitions(rightRDD.repartition(leftRDD.partitions.length)) { + (leftBlockIter, rightBlockIter) => + Iterator(Utils.concatEncryptedBlocks(leftBlockIter.toSeq ++ rightBlockIter.toSeq)) } Utils.ensureCached(unioned) time("ObliviousUnionExec") { unioned.count } From 0a470af2080054bc6861494007ed0d245b57d863 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Tue, 18 Sep 2018 00:49:33 -0700 Subject: [PATCH 024/101] repartition to coalesce --- .../scala/edu/berkeley/cs/rise/opaque/execution/operators.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index b183abd2b5..5b034ec663 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -347,7 +347,7 @@ case class ObliviousUnionExec( rightRDD = rightRDD.coalesce(num_left_partitions) } } - val unioned = leftRDD.zipPartitions(rightRDD.repartition(leftRDD.partitions.length)) { + val unioned = leftRDD.zipPartitions(rightRDD.coalesce(leftRDD.partitions.length)) { (leftBlockIter, rightBlockIter) => Iterator(Utils.concatEncryptedBlocks(leftBlockIter.toSeq ++ rightBlockIter.toSeq)) } From 1f8dd72c72ac8ce752ecbd0204d2783653c68ada Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Tue, 18 Sep 2018 00:56:03 -0700 Subject: [PATCH 025/101] rm redundant code --- .../edu/berkeley/cs/rise/opaque/execution/operators.scala | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index 5b034ec663..ca9a57329e 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -336,8 +336,6 @@ case class ObliviousUnionExec( // RA.initRA(leftRDD) - // TODO - println("In oblivious union exec") val num_left_partitions = leftRDD.getNumPartitions val num_right_partitions = rightRDD.getNumPartitions if (num_left_partitions != num_right_partitions) { @@ -347,7 +345,7 @@ case class ObliviousUnionExec( rightRDD = rightRDD.coalesce(num_left_partitions) } } - val unioned = leftRDD.zipPartitions(rightRDD.coalesce(leftRDD.partitions.length)) { + val unioned = leftRDD.zipPartitions(rightRDD)) { (leftBlockIter, rightBlockIter) => Iterator(Utils.concatEncryptedBlocks(leftBlockIter.toSeq ++ rightBlockIter.toSeq)) } From e8599fafef192932d53bda8b956ec03ab55acb40 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Tue, 18 Sep 2018 00:56:51 -0700 Subject: [PATCH 026/101] syntax error --- .../scala/edu/berkeley/cs/rise/opaque/execution/operators.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index ca9a57329e..47e7d0607e 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -345,7 +345,7 @@ case class ObliviousUnionExec( rightRDD = rightRDD.coalesce(num_left_partitions) } } - val unioned = leftRDD.zipPartitions(rightRDD)) { + val unioned = leftRDD.zipPartitions(rightRDD) { (leftBlockIter, rightBlockIter) => Iterator(Utils.concatEncryptedBlocks(leftBlockIter.toSeq ++ rightBlockIter.toSeq)) } From 07151d9d2aa749818e92a30335242744bd38adca Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Tue, 18 Sep 2018 14:21:49 -0700 Subject: [PATCH 027/101] fix merge conflict --- .../scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala b/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala index 7202c77e1b..7c79693e85 100644 --- a/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala +++ b/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala @@ -330,7 +330,6 @@ class OpaqueMultiplePartitionSuite extends OpaqueOperatorTests { .master("local[1]") .appName("QEDSuite") .config("spark.sql.shuffle.partitions", 3) - .config("spark.default.parallelism", 3) .getOrCreate() override def numPartitions = 3 From e97caf7e4fb8fb0255af81e671d2a8195a51c0e2 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Tue, 18 Sep 2018 14:24:04 -0700 Subject: [PATCH 028/101] revert master --- .../berkeley/cs/rise/opaque/execution/operators.scala | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index 47e7d0607e..b05766f7cf 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -336,13 +336,10 @@ case class ObliviousUnionExec( // RA.initRA(leftRDD) - val num_left_partitions = leftRDD.getNumPartitions - val num_right_partitions = rightRDD.getNumPartitions - if (num_left_partitions != num_right_partitions) { - if (num_left_partitions > num_right_partitions) { - leftRDD = leftRDD.coalesce(num_right_partitions) - } else { - rightRDD = rightRDD.coalesce(num_left_partitions) + val unioned = leftRDD.zipPartitions(rightRDD) { (leftBlockIter, rightBlockIter) => + (leftBlockIter.toSeq, rightBlockIter.toSeq) match { + case (Seq(leftBlock), Seq(rightBlock)) => + Iterator(Utils.concatEncryptedBlocks(Seq(leftBlock, rightBlock))) } } val unioned = leftRDD.zipPartitions(rightRDD) { From 973d5eac1079036cd63ceeb8211735da6aa3d45d Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Thu, 8 Nov 2018 14:43:13 -0800 Subject: [PATCH 029/101] merge upstream changes --- type_test.txt | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 type_test.txt diff --git a/type_test.txt b/type_test.txt new file mode 100644 index 0000000000..085c4ebf6a --- /dev/null +++ b/type_test.txt @@ -0,0 +1,27 @@ +import org.apache.spark.sql.types._ +import org.apache.spark.sql.Row +import edu.berkeley.cs.rise.opaque.implicits._ + +import java.math.BigDecimal + + +val decimal = new BigDecimal(100000.555555) + + +val data = Seq( + Row(decimal, "dog"), + Row(decimal, "cat"), + Row(decimal, "ant")) + +val schema = StructType( + List( + StructField("decimal", DecimalType, true), + StructField("animal_type", StringType, true) + ) +) + +val df = spark.createDataFrame( + spark.sparkContext.parallelize(data), + schema +) + From 2903cdf5f7b21cd1515b1b346926e0b3c79c24f8 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 9 Nov 2018 00:57:24 +0000 Subject: [PATCH 030/101] rm unnecessary files --- employees.json | 16 - employees_truncated.json | 7 - enc_join.scala | 33 - enc_join.txt | 33 - idlist.json | 64 -- json-person-rest_assured_payd_out.json | 998 ------------------------- person.json | 998 ------------------------- 7 files changed, 2149 deletions(-) delete mode 100644 employees.json delete mode 100644 employees_truncated.json delete mode 100644 enc_join.scala delete mode 100644 enc_join.txt delete mode 100644 idlist.json delete mode 100644 json-person-rest_assured_payd_out.json delete mode 100644 person.json diff --git a/employees.json b/employees.json deleted file mode 100644 index 7235820d7e..0000000000 --- a/employees.json +++ /dev/null @@ -1,16 +0,0 @@ -{"name":"Michael", "salary":3000} -{"name":"Andy", "salary":4500} -{"name":"Justin", "salary":3500} -{"name":"Berta", "salary":4000} -{"name":"Michae", "salary":3000} -{"name":"And", "salary":4500} -{"name":"Justi", "salary":3500} -{"name":"Bert", "salary":4000} -{"name":"ichael", "salary":3000} -{"name":"ndy", "salary":4500} -{"name":"ustin", "salary":3500} -{"name":"erta", "salary":4000} -{"name":"ichae", "salary":3000} -{"name":"nd", "salary":4500} -{"name":"usti", "salary":3500} -{"name":"ert", "salary":4000} \ No newline at end of file diff --git a/employees_truncated.json b/employees_truncated.json deleted file mode 100644 index aab8171b6e..0000000000 --- a/employees_truncated.json +++ /dev/null @@ -1,7 +0,0 @@ -{"name":"Michael", "family":3} -{"name":"Andy", "family":4} -{"name":"erta", "family":4} -{"name":"ichae", "family":4} -{"name":"nd", "family":4} -{"name":"usti", "family":4} -{"name":"ert", "family":4} \ No newline at end of file diff --git a/enc_join.scala b/enc_join.scala deleted file mode 100644 index 9f9d55c99c..0000000000 --- a/enc_join.scala +++ /dev/null @@ -1,33 +0,0 @@ -import edu.berkeley.cs.rise.opaque.implicits._ -import org.apache.spark.sql.SparkSession -import org.apache.spark.SparkContext - - -// object Join { -// def main(args: Array[String]): Unit = { -// val spark = SparkSession.builder. -// master("local[*]"). -// appName("Console"). -// config("spark.app.id", "Console"). // to silence Metrics warning -// getOrCreate() - -edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) - -val df1 = spark.read.json("person.json") -val df1_repart = df1.repartition(5) -println(s"df1 num partitions: ${df1_repart.rdd.getNumPartitions}") - - -val df1_repart_enc = df1_repart.encrypted - -val df2 = spark.read.json("idlist.json") -val df2_repart = df2.repartition(3) -println(s"df2 num partitions: ${df2_repart.rdd.getNumPartitions}") -val df2_repart_enc = df2_repart.encrypted - -df1_repart_enc.repartition(5) - -val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("PersonID")) -// enc_join.show -// } -// } diff --git a/enc_join.txt b/enc_join.txt deleted file mode 100644 index 344522d9c6..0000000000 --- a/enc_join.txt +++ /dev/null @@ -1,33 +0,0 @@ -import edu.berkeley.cs.rise.opaque.implicits._ -import org.apache.spark.sql.SparkSession -import org.apache.spark.SparkContext - - -// object Join { -// def main(args: Array[String]): Unit = { -// val spark = SparkSession.builder. -// master("local[*]"). -// appName("Console"). -// config("spark.app.id", "Console"). // to silence Metrics warning -// getOrCreate() - -edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) - -val df1 = spark.read.json("employees.json") -val df1_repart = df1.repartition(5) -println(s"df1 num partitions: ${df1_repart.rdd.getNumPartitions}") - - -val df1_repart_enc = df1_repart.encrypted - -val df2 = spark.read.json("employees_truncated.json") -val df2_repart = df2.repartition(3) -println(s"df2 num partitions: ${df2_repart.rdd.getNumPartitions}") -val df2_repart_enc = df2_repart.encrypted - -df1_repart_enc.repartition(5) - -val enc_join = df1_repart_enc.join(df2_repart_enc, Seq("name")) -// enc_join.show -// } -// } diff --git a/idlist.json b/idlist.json deleted file mode 100644 index fd4958c9b2..0000000000 --- a/idlist.json +++ /dev/null @@ -1,64 +0,0 @@ -{"PersonId":2}, -{"PersonId":3}, -{"PersonId":4}, -{"PersonId":7}, -{"PersonId":9}, -{"PersonId":10}, -{"PersonId":11}, -{"PersonId":12}, -{"PersonId":13}, -{"PersonId":14}, -{"PersonId":15}, -{"PersonId":16}, -{"PersonId":17}, -{"PersonId":18}, -{"PersonId":19}, -{"PersonId":20}, -{"PersonId":23}, -{"PersonId":24}, -{"PersonId":26}, -{"PersonId":28}, -{"PersonId":29}, -{"PersonId":31}, -{"PersonId":32}, -{"PersonId":33}, -{"PersonId":35}, -{"PersonId":39}, -{"PersonId":42}, -{"PersonId":43}, -{"PersonId":45}, -{"PersonId":48}, -{"PersonId":49}, -{"PersonId":50}, -{"PersonId":55}, -{"PersonId":56}, -{"PersonId":57}, -{"PersonId":58}, -{"PersonId":60}, -{"PersonId":62}, -{"PersonId":63}, -{"PersonId":64}, -{"PersonId":65}, -{"PersonId":69}, -{"PersonId":70}, -{"PersonId":72}, -{"PersonId":73}, -{"PersonId":74}, -{"PersonId":76}, -{"PersonId":79}, -{"PersonId":82}, -{"PersonId":83}, -{"PersonId":84}, -{"PersonId":87}, -{"PersonId":88}, -{"PersonId":89}, -{"PersonId":91}, -{"PersonId":92}, -{"PersonId":93}, -{"PersonId":94}, -{"PersonId":97}, -{"PersonId":100}, -{"PersonId":135}, -{"PersonId":138}, -{"PersonId":140} - diff --git a/json-person-rest_assured_payd_out.json b/json-person-rest_assured_payd_out.json deleted file mode 100644 index 6f1e73f978..0000000000 --- a/json-person-rest_assured_payd_out.json +++ /dev/null @@ -1,998 +0,0 @@ - {"Gender":"Female","FullName":"Agrita Abele","PersonID":1,"FaxNumber":"(415) 555-0103","DateOfBirth":"1957-12-19 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"agrita@example.com","PreferredName":"Agrita"}, - {"Gender":"Female","FullName":"Kayla Woodcock","PersonID":2,"FaxNumber":"(415) 555-0103","DateOfBirth":"1989-01-25 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"kaylaw@wideworldimporters.com","PreferredName":"Kayla"}, - {"Gender":"Male","FullName":"Hudson Onslow","PersonID":3,"FaxNumber":"(415) 555-0103","DateOfBirth":"1995-11-09 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"hudsono@wideworldimporters.com","PreferredName":"Hudson"}, - {"Gender":"Female","FullName":"Isabella Rupp","PersonID":4,"FaxNumber":"(415) 555-0103","DateOfBirth":"1983-06-09 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"isabellar@wideworldimporters.com","PreferredName":"Isabella"}, - {"Gender":"Female","FullName":"Eva Muirden","PersonID":5,"FaxNumber":"(415) 555-0103","DateOfBirth":"1991-05-23 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"evam@wideworldimporters.com","PreferredName":"Eva"}, - {"Gender":"Female","FullName":"Sophia Hinton","PersonID":6,"FaxNumber":"(415) 555-0103","DateOfBirth":"1993-02-03 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"sophiah@wideworldimporters.com","PreferredName":"Sophia"}, - {"Gender":"Female","FullName":"Amy Trefl","PersonID":7,"FaxNumber":"(415) 555-0103","DateOfBirth":"1990-05-20 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"amyt@wideworldimporters.com","PreferredName":"Amy"}, - {"Gender":"Female","FullName":"Anthony Grosse","PersonID":8,"FaxNumber":"(415) 555-0103","DateOfBirth":"1961-02-14 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"anthonyg@wideworldimporters.com","PreferredName":"Anthony"}, - {"Gender":"Female","FullName":"Alica Fatnowna","PersonID":9,"FaxNumber":"(415) 555-0103","DateOfBirth":"1993-06-14 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"alicaf@wideworldimporters.com","PreferredName":"Alica"}, - {"Gender":"Female","FullName":"Stella Rosenhain","PersonID":10,"FaxNumber":"(415) 555-0103","DateOfBirth":"1988-09-29 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"stellar@wideworldimporters.com","PreferredName":"Stella"}, - {"Gender":"Male","FullName":"Ethan Onslow","PersonID":11,"FaxNumber":"(415) 555-0103","DateOfBirth":"1997-03-18 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"ethano@wideworldimporters.com","PreferredName":"Ethan"}, - {"Gender":"Male","FullName":"Henry Forlonge","PersonID":12,"FaxNumber":"(415) 555-0103","DateOfBirth":"1950-03-11 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"henryf@wideworldimporters.com","PreferredName":"Henry"}, - {"Gender":"Male","FullName":"Hudson Hollinworth","PersonID":13,"FaxNumber":"(415) 555-0103","DateOfBirth":"1972-06-15 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"hudsonh@wideworldimporters.com","PreferredName":"Hudson"}, - {"Gender":"Female","FullName":"Lily Code","PersonID":14,"FaxNumber":"(415) 555-0103","DateOfBirth":"1957-05-17 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"lilyc@wideworldimporters.com","PreferredName":"Lily"}, - {"Gender":"Male","FullName":"Taj Shand","PersonID":15,"FaxNumber":"(415) 555-0103","DateOfBirth":"1978-10-24 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"tajs@wideworldimporters.com","PreferredName":"Taj"}, - {"Gender":"Male","FullName":"Archer Lamble","PersonID":16,"FaxNumber":"(415) 555-0103","DateOfBirth":"1969-12-12 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"archerl@wideworldimporters.com","PreferredName":"Archer"}, - {"Gender":"Male","FullName":"Piper Koch","PersonID":17,"FaxNumber":"(415) 555-0103","DateOfBirth":"1954-11-08 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"piperk@wideworldimporters.com","PreferredName":"Piper"}, - {"Gender":"Female","FullName":"Katie Darwin","PersonID":18,"FaxNumber":"(415) 555-0103","DateOfBirth":"1960-06-16 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"katied@wideworldimporters.com","PreferredName":"Katie"}, - {"Gender":"Female","FullName":"Jai Shand","PersonID":19,"FaxNumber":"(415) 555-0103","DateOfBirth":"1981-05-02 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"jais@wideworldimporters.com","PreferredName":"Jai"}, - {"Gender":"Male","FullName":"Jack Potter","PersonID":20,"FaxNumber":"(415) 555-0103","DateOfBirth":"1955-12-27 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"jackp@wideworldimporters.com","PreferredName":"Jack"}, - {"Gender":"Male","FullName":"Reio Kabin","PersonID":21,"FaxNumber":"(847) 555-0101","DateOfBirth":"1958-08-15 00:00:00","PhoneNumber":"(847) 555-0100","EmailAddress":"reio@adatum.com","PreferredName":"Reio"}, - {"Gender":"Male","FullName":"Oliver Kivi","PersonID":22,"FaxNumber":"(847) 555-0101","DateOfBirth":"1987-01-10 00:00:00","PhoneNumber":"(847) 555-0100","EmailAddress":"olly@adatum.com","PreferredName":"Olly"}, - {"Gender":"Female","FullName":"Hanna Mihhailov","PersonID":23,"FaxNumber":"(360) 555-0101","DateOfBirth":"1967-03-08 00:00:00","PhoneNumber":"(360) 555-0100","EmailAddress":"hannam@Contoso Motors.com","PreferredName":"Hanna"}, - {"Gender":"Female","FullName":"Paulus Lippmaa","PersonID":24,"FaxNumber":"(360) 555-0101","DateOfBirth":"1993-07-29 00:00:00","PhoneNumber":"(360) 555-0100","EmailAddress":"paulusl@Contoso Motors.com","PreferredName":"Paulus"}, - {"Gender":"Female","FullName":"Kerstin Parn","PersonID":25,"FaxNumber":"(415) 555-0101","DateOfBirth":"1981-03-29 00:00:00","PhoneNumber":"(415) 555-0100","EmailAddress":"kerstin@consolidatedmessenger.com","PreferredName":"Kerstin"}, - {"Gender":"Female","FullName":"Helen Ahven","PersonID":26,"FaxNumber":"(415) 555-0101","DateOfBirth":"1980-02-28 00:00:00","PhoneNumber":"(415) 555-0100","EmailAddress":"helen@consolidatedmessenger.com","PreferredName":"Helen"}, - {"Gender":"Female","FullName":"Bill Lawson","PersonID":27,"FaxNumber":"(203) 555-0107","DateOfBirth":"1980-04-27 00:00:00","PhoneNumber":"(203) 555-0107","EmailAddress":"billl@fabrikam.com","PreferredName":"Bill"}, - {"Gender":"Female","FullName":"Helen Moore","PersonID":28,"FaxNumber":"(203) 555-0107","DateOfBirth":"1991-12-05 00:00:00","PhoneNumber":"(203) 555-0104","EmailAddress":"helenm@fabrikam.com","PreferredName":"Helen"}, - {"Gender":"Female","FullName":"Penny Buck","PersonID":29,"FaxNumber":"(406) 555-0109","DateOfBirth":"1961-10-09 00:00:00","PhoneNumber":"(406) 555-0107","EmailAddress":"pennyb@graphicdesigninstitute.com","PreferredName":"Penny"}, - {"Gender":"Female","FullName":"Donna Smith","PersonID":30,"FaxNumber":"(406) 555-0109","DateOfBirth":"1979-01-18 00:00:00","PhoneNumber":"(406) 555-0101","EmailAddress":"donnas@graphicdesigninstitute.com","PreferredName":"Donna"}, - {"Gender":"Female","FullName":"Annette Talon","PersonID":32,"FaxNumber":"(423) 555-0100","DateOfBirth":"1973-09-03 00:00:00","PhoneNumber":"(423) 555-0106","EmailAddress":"annettet@humongousinsurance.com","PreferredName":"Annette"}, - {"Gender":"Female","FullName":"Elias Myllari","PersonID":33,"FaxNumber":"(209) 555-0106","DateOfBirth":"1992-09-24 00:00:00","PhoneNumber":"(209) 555-0101","EmailAddress":"eliasm@litwareinc.com","PreferredName":"Elias"}, - {"Gender":"Female","FullName":"Vilma Niva","PersonID":34,"FaxNumber":"(209) 555-0106","DateOfBirth":"1963-03-31 00:00:00","PhoneNumber":"(209) 555-0103","EmailAddress":"vilman@litwareinc.com","PreferredName":"Vilma"}, - {"Gender":"Female","FullName":"Prem Prabhu","PersonID":35,"FaxNumber":"(423) 555-0108","DateOfBirth":"1965-05-19 00:00:00","PhoneNumber":"(423) 555-0102","EmailAddress":"premp@lucernepublishing.com","PreferredName":"Prem"}, - {"Gender":"Female","FullName":"Sunita Jadhav","PersonID":36,"FaxNumber":"(423) 555-0108","DateOfBirth":"1990-01-19 00:00:00","PhoneNumber":"(423) 555-0101","EmailAddress":"sunitaj@lucernepublishing.com","PreferredName":"Sunita"}, - {"Gender":"Female","FullName":"Marcos Costa","PersonID":37,"FaxNumber":"(252) 555-0101","DateOfBirth":"1960-12-13 00:00:00","PhoneNumber":"(252) 555-0106","EmailAddress":"marcosc@nodpublishers.com","PreferredName":"Marcos"}, - {"Gender":"Female","FullName":"Matheus Oliveira","PersonID":38,"FaxNumber":"(252) 555-0101","DateOfBirth":"1951-06-22 00:00:00","PhoneNumber":"(252) 555-0107","EmailAddress":"matheuso@nodpublishers.com","PreferredName":"Matheus"}, - {"Gender":"Female","FullName":"Eliza Soderberg","PersonID":39,"FaxNumber":"(201) 555-0106","DateOfBirth":"1973-04-11 00:00:00","PhoneNumber":"(201) 555-0101","EmailAddress":"elizas@northwindelectriccars.com","PreferredName":"Eliza"}, - {"Gender":"Female","FullName":"Sara Karlsson","PersonID":40,"FaxNumber":"(201) 555-0106","DateOfBirth":"1961-04-07 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"sarak@northwindelectriccars.com","PreferredName":"Sara"}, - {"Gender":"Female","FullName":"Donald Jones","PersonID":41,"FaxNumber":"(605) 555-0101","DateOfBirth":"1990-03-05 00:00:00","PhoneNumber":"(605) 555-0101","EmailAddress":"donaldj@treyresearch.net","PreferredName":"Donald"}, - {"Gender":"Female","FullName":"Sharon Graham","PersonID":42,"FaxNumber":"(605) 555-0101","DateOfBirth":"1978-08-18 00:00:00","PhoneNumber":"(605) 555-0106","EmailAddress":"sharong@treyresearch.net","PreferredName":"Sharon"}, - {"Gender":"Female","FullName":"Hai Dam","PersonID":43,"FaxNumber":"(218) 555-0108","DateOfBirth":"1964-08-10 00:00:00","PhoneNumber":"(218) 555-0101","EmailAddress":"haid@thephone-company.com","PreferredName":"Hai"}, - {"Gender":"Female","FullName":"Thanh Dinh","PersonID":44,"FaxNumber":"(218) 555-0108","DateOfBirth":"1959-06-11 00:00:00","PhoneNumber":"(218) 555-0104","EmailAddress":"thanhd@thephone-company.com","PreferredName":"Thanh"}, - {"Gender":"Female","FullName":"Hubert Helms","PersonID":45,"FaxNumber":"(415) 555-0104","DateOfBirth":"1964-08-19 00:00:00","PhoneNumber":"(415) 555-0103","EmailAddress":"huberth@woodgrovebank.com","PreferredName":"Hubert"}, - {"Gender":"Female","FullName":"Donald Small","PersonID":46,"FaxNumber":"(415) 555-0104","DateOfBirth":"1998-02-08 00:00:00","PhoneNumber":"(415) 555-0105","EmailAddress":"donalds@woodgrovebank.com","PreferredName":"Donald"}, - {"Gender":"Female","FullName":"Waldemar Fisar","PersonID":47,"FaxNumber":"(308) 555-0101","DateOfBirth":"1952-01-23 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"waldemar@tailspintoys.com","PreferredName":"Waldemar"}, - {"Gender":"Female","FullName":"Laimonis Berzins","PersonID":48,"FaxNumber":"(308) 555-0101","DateOfBirth":"1964-03-26 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"laimonis@tailspintoys.com","PreferredName":"Laimonis"}, - {"Gender":"Female","FullName":"Lorena Cindric","PersonID":49,"FaxNumber":"(406) 555-0101","DateOfBirth":"1960-12-10 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"lorena@tailspintoys.com","PreferredName":"Lorena"}, - {"Gender":"Female","FullName":"Hung Van Groesen","PersonID":50,"FaxNumber":"(406) 555-0101","DateOfBirth":"1976-05-16 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"hung@tailspintoys.com","PreferredName":"Hung"}, - {"Gender":"Female","FullName":"Bhaargav Rambhatla","PersonID":51,"FaxNumber":"(480) 555-0101","DateOfBirth":"1983-03-18 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"bhaargav@tailspintoys.com","PreferredName":"Bhaargav"}, - {"Gender":"Female","FullName":"Mudar Jevtic","PersonID":52,"FaxNumber":"(480) 555-0101","DateOfBirth":"1997-10-27 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"mudar@tailspintoys.com","PreferredName":"Mudar"}, - {"Gender":"Female","FullName":"Daniel Roman","PersonID":53,"FaxNumber":"(316) 555-0101","DateOfBirth":"1989-03-17 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"daniel@tailspintoys.com","PreferredName":"Daniel"}, - {"Gender":"Female","FullName":"Leyla Radnia","PersonID":54,"FaxNumber":"(316) 555-0101","DateOfBirth":"1974-05-12 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"leyla@tailspintoys.com","PreferredName":"Leyla"}, - {"Gender":"Female","FullName":"Johanna Huiting","PersonID":55,"FaxNumber":"(212) 555-0101","DateOfBirth":"1995-06-27 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"johanna@tailspintoys.com","PreferredName":"Johanna"}, - {"Gender":"Female","FullName":"Robert Ruutli","PersonID":56,"FaxNumber":"(212) 555-0101","DateOfBirth":"1972-08-22 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"robert@tailspintoys.com","PreferredName":"Robert"}, - {"Gender":"Female","FullName":"Biswajeet Thakur","PersonID":57,"FaxNumber":"(701) 555-0101","DateOfBirth":"1982-04-29 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"biswajeet@tailspintoys.com","PreferredName":"Biswajeet"}, - {"Gender":"Female","FullName":"Radha Shah","PersonID":58,"FaxNumber":"(701) 555-0101","DateOfBirth":"1980-07-31 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"radha@tailspintoys.com","PreferredName":"Radha"}, - {"Gender":"Female","FullName":"Kalidas Nadar","PersonID":59,"FaxNumber":"(423) 555-0101","DateOfBirth":"1978-12-13 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"kalidas@tailspintoys.com","PreferredName":"Kalidas"}, - {"Gender":"Female","FullName":"Filip Nedvidek","PersonID":60,"FaxNumber":"(423) 555-0101","DateOfBirth":"1979-10-30 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"filip@tailspintoys.com","PreferredName":"Filip"}, - {"Gender":"Female","FullName":"Kanti Kotadia","PersonID":61,"FaxNumber":"(303) 555-0101","DateOfBirth":"1967-05-23 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"kanti@tailspintoys.com","PreferredName":"Kanti"}, - {"Gender":"Female","FullName":"Hoa Cu","PersonID":62,"FaxNumber":"(303) 555-0101","DateOfBirth":"1976-04-29 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"hoa@tailspintoys.com","PreferredName":"Hoa"}, - {"Gender":"Female","FullName":"Sointu Aalto","PersonID":63,"FaxNumber":"(201) 555-0101","DateOfBirth":"1991-03-26 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"sointu@tailspintoys.com","PreferredName":"Sointu"}, - {"Gender":"Female","FullName":"Jae-Gon Min","PersonID":64,"FaxNumber":"(201) 555-0101","DateOfBirth":"1977-07-21 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"jae-gon@tailspintoys.com","PreferredName":"Jae-Gon"}, - {"Gender":"Female","FullName":"Paula Matos","PersonID":66,"FaxNumber":"(701) 555-0101","DateOfBirth":"1977-01-23 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"paula@tailspintoys.com","PreferredName":"Paula"}, - {"Gender":"Female","FullName":"Elnaz Javan","PersonID":67,"FaxNumber":"(215) 555-0101","DateOfBirth":"1974-06-06 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"elnaz@tailspintoys.com","PreferredName":"Elnaz"}, - {"Gender":"Female","FullName":"Jayashish Ghatak","PersonID":68,"FaxNumber":"(215) 555-0101","DateOfBirth":"1972-11-09 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jayashish@tailspintoys.com","PreferredName":"Jayashish"}, - {"Gender":"Female","FullName":"Heloisa Fernandes","PersonID":69,"FaxNumber":"(218) 555-0101","DateOfBirth":"1956-01-02 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"heloisa@tailspintoys.com","PreferredName":"Heloisa"}, - {"Gender":"Female","FullName":"Amornrat Rattanaporn","PersonID":70,"FaxNumber":"(218) 555-0101","DateOfBirth":"1988-07-17 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"amornrat@tailspintoys.com","PreferredName":"Amornrat"}, - {"Gender":"Female","FullName":"Razeena Hosseini","PersonID":71,"FaxNumber":"(217) 555-0101","DateOfBirth":"1955-12-02 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"razeena@tailspintoys.com","PreferredName":"Razeena"}, - {"Gender":"Female","FullName":"Leticia Ribeiro","PersonID":72,"FaxNumber":"(217) 555-0101","DateOfBirth":"1997-09-20 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"leticia@tailspintoys.com","PreferredName":"Leticia"}, - {"Gender":"Female","FullName":"Tereza Valentova","PersonID":73,"FaxNumber":"(240) 555-0101","DateOfBirth":"1984-03-14 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"tereza@tailspintoys.com","PreferredName":"Tereza"}, - {"Gender":"Female","FullName":"Brijesh Ganguly","PersonID":74,"FaxNumber":"(240) 555-0101","DateOfBirth":"1986-08-02 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"brijesh@tailspintoys.com","PreferredName":"Brijesh"}, - {"Gender":"Female","FullName":"Filips Jaunzems","PersonID":75,"FaxNumber":"(210) 555-0101","DateOfBirth":"1959-09-06 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"filips@tailspintoys.com","PreferredName":"Filips"}, - {"Gender":"Female","FullName":"Bharati Bhowmick","PersonID":76,"FaxNumber":"(210) 555-0101","DateOfBirth":"1956-11-10 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"bharati@tailspintoys.com","PreferredName":"Bharati"}, - {"Gender":"Female","FullName":"Nitin Matondkar","PersonID":77,"FaxNumber":"(314) 555-0101","DateOfBirth":"1953-08-14 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"nitin@tailspintoys.com","PreferredName":"Nitin"}, - {"Gender":"Female","FullName":"Joy Dutta","PersonID":78,"FaxNumber":"(314) 555-0101","DateOfBirth":"1976-05-04 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"joy@tailspintoys.com","PreferredName":"Joy"}, - {"Gender":"Female","FullName":"Adam Kubat","PersonID":79,"FaxNumber":"(216) 555-0101","DateOfBirth":"1986-09-18 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"adam@tailspintoys.com","PreferredName":"Adam"}, - {"Gender":"Female","FullName":"Gulzar Naidu","PersonID":80,"FaxNumber":"(216) 555-0101","DateOfBirth":"1976-03-04 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"gulzar@tailspintoys.com","PreferredName":"Gulzar"}, - {"Gender":"Female","FullName":"Rohan Kumar","PersonID":81,"FaxNumber":"(603) 555-0101","DateOfBirth":"1979-03-03 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"rohank@contosomotors.com","PreferredName":"Rohan"}, - {"Gender":"Female","FullName":"Prakash Sarma","PersonID":82,"FaxNumber":"(603) 555-0101","DateOfBirth":"1975-11-30 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"prakash@tailspintoys.com","PreferredName":"Prakash"}, - {"Gender":"Female","FullName":"Mithun Bhattacharya","PersonID":83,"FaxNumber":"(907) 555-0101","DateOfBirth":"1976-05-01 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"mithun@tailspintoys.com","PreferredName":"Mithun"}, - {"Gender":"Female","FullName":"Sandhya Raju","PersonID":84,"FaxNumber":"(907) 555-0101","DateOfBirth":"1969-01-17 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"sandhya@tailspintoys.com","PreferredName":"Sandhya"}, - {"Gender":"Female","FullName":"Shreya Verma","PersonID":85,"FaxNumber":"(206) 555-0101","DateOfBirth":"1983-02-14 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"shreyav@contosomotors.com","PreferredName":"Shreya"}, - {"Gender":"Female","FullName":"Ravindra Parkar","PersonID":86,"FaxNumber":"(206) 555-0101","DateOfBirth":"1977-03-23 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"ravindra@tailspintoys.com","PreferredName":"Ravindra"}, - {"Gender":"Female","FullName":"Duleep Raju","PersonID":87,"FaxNumber":"(215) 555-0101","DateOfBirth":"1993-10-18 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"duleep@tailspintoys.com","PreferredName":"Duleep"}, - {"Gender":"Female","FullName":"Vlatka Duvnjak","PersonID":88,"FaxNumber":"(215) 555-0101","DateOfBirth":"1978-12-21 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"vlatka@tailspintoys.com","PreferredName":"Vlatka"}, - {"Gender":"Female","FullName":"Cristina Longo","PersonID":89,"FaxNumber":"(239) 555-0101","DateOfBirth":"1950-07-21 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"cristina@tailspintoys.com","PreferredName":"Cristina"}, - {"Gender":"Female","FullName":"Antonio Lucchese","PersonID":90,"FaxNumber":"(239) 555-0101","DateOfBirth":"1958-06-29 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"antonio@tailspintoys.com","PreferredName":"Antonio"}, - {"Gender":"Female","FullName":"Hang Tang","PersonID":91,"FaxNumber":"(907) 555-0101","DateOfBirth":"1991-11-23 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"hang@tailspintoys.com","PreferredName":"Hang"}, - {"Gender":"Female","FullName":"Hong Ang","PersonID":92,"FaxNumber":"(907) 555-0101","DateOfBirth":"1966-09-15 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"hong@tailspintoys.com","PreferredName":"Hong"}, - {"Gender":"Female","FullName":"Intira Mookjai","PersonID":93,"FaxNumber":"(252) 555-0101","DateOfBirth":"1962-12-25 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"intira@tailspintoys.com","PreferredName":"Intira"}, - {"Gender":"Female","FullName":"Young-Tae Kim","PersonID":94,"FaxNumber":"(252) 555-0101","DateOfBirth":"1965-03-14 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"young-tae@tailspintoys.com","PreferredName":"Young-Tae"}, - {"Gender":"Female","FullName":"Sulabha Khalsa","PersonID":95,"FaxNumber":"(209) 555-0101","DateOfBirth":"1950-09-24 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"sulabha@tailspintoys.com","PreferredName":"Sulabha"}, - {"Gender":"Female","FullName":"Alessandro Milano","PersonID":96,"FaxNumber":"(209) 555-0101","DateOfBirth":"1952-02-17 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"alessandro@tailspintoys.com","PreferredName":"Alessandro"}, - {"Gender":"Female","FullName":"Dhanishta Majji","PersonID":97,"FaxNumber":"(319) 555-0101","DateOfBirth":"1962-04-28 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"dhanishta@tailspintoys.com","PreferredName":"Dhanishta"}, - {"Gender":"Female","FullName":"Nils Podnieks","PersonID":98,"FaxNumber":"(319) 555-0101","DateOfBirth":"1979-01-06 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"nils@tailspintoys.com","PreferredName":"Nils"}, - {"Gender":"Female","FullName":"Paula Gonzales","PersonID":99,"FaxNumber":"(218) 555-0101","DateOfBirth":"1981-08-17 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"paula@tailspintoys.com","PreferredName":"Paula"}, - {"Gender":"Female","FullName":"Chetana Dewangan","PersonID":100,"FaxNumber":"(218) 555-0101","DateOfBirth":"1987-01-11 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"chetana@tailspintoys.com","PreferredName":"Chetana"}, - {"Gender":"Female","FullName":"Tatjana Utjesenovic","PersonID":101,"FaxNumber":"(212) 555-0101","DateOfBirth":"1976-05-09 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"tatjana@tailspintoys.com","PreferredName":"Tatjana"}, - {"Gender":"Female","FullName":"Theresa Boose","PersonID":102,"FaxNumber":"(212) 555-0101","DateOfBirth":"1995-08-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"theresa@tailspintoys.com","PreferredName":"Theresa"}, - {"Gender":"Female","FullName":"Karel Hanak","PersonID":103,"FaxNumber":"(205) 555-0101","DateOfBirth":"1958-05-23 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"karel@tailspintoys.com","PreferredName":"Karel"}, - {"Gender":"Female","FullName":"Fernanda Fierro","PersonID":104,"FaxNumber":"(205) 555-0101","DateOfBirth":"1986-02-01 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"fernanda@tailspintoys.com","PreferredName":"Fernanda"}, - {"Gender":"Female","FullName":"Odessa Schneider","PersonID":105,"FaxNumber":"(206) 555-0101","DateOfBirth":"1987-11-01 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"odessa@tailspintoys.com","PreferredName":"Odessa"}, - {"Gender":"Female","FullName":"Konrads Sprogis","PersonID":106,"FaxNumber":"(206) 555-0101","DateOfBirth":"1978-05-08 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"konrads@tailspintoys.com","PreferredName":"Konrads"}, - {"Gender":"Female","FullName":"Kimberly Pace","PersonID":107,"FaxNumber":"(206) 555-0101","DateOfBirth":"1969-03-23 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"kimberly@tailspintoys.com","PreferredName":"Kimberly"}, - {"Gender":"Female","FullName":"Shobha Gupta","PersonID":108,"FaxNumber":"(206) 555-0101","DateOfBirth":"1993-05-13 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"shobha@tailspintoys.com","PreferredName":"Shobha"}, - {"Gender":"Female","FullName":"Nikolajs Kalejs","PersonID":109,"FaxNumber":"(210) 555-0101","DateOfBirth":"1987-07-24 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"nikolajs@tailspintoys.com","PreferredName":"Nikolajs"}, - {"Gender":"Female","FullName":"Philippe Lamy","PersonID":110,"FaxNumber":"(210) 555-0101","DateOfBirth":"1951-05-11 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"philippe@tailspintoys.com","PreferredName":"Philippe"}, - {"Gender":"Female","FullName":"Haasini Rai","PersonID":111,"FaxNumber":"(803) 555-0101","DateOfBirth":"1991-04-26 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"haasini@tailspintoys.com","PreferredName":"Haasini"}, - {"Gender":"Female","FullName":"Viktorie Melicharova","PersonID":112,"FaxNumber":"(803) 555-0101","DateOfBirth":"1992-08-22 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"viktorie@tailspintoys.com","PreferredName":"Viktorie"}, - {"Gender":"Female","FullName":"Anjali Asthana","PersonID":113,"FaxNumber":"(210) 555-0101","DateOfBirth":"1975-04-11 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"anjali@tailspintoys.com","PreferredName":"Anjali"}, - {"Gender":"Female","FullName":"Hanuman Negi","PersonID":114,"FaxNumber":"(210) 555-0101","DateOfBirth":"1950-03-07 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"hanuman@tailspintoys.com","PreferredName":"Hanuman"}, - {"Gender":"Female","FullName":"Shah Omidi","PersonID":115,"FaxNumber":"(304) 555-0101","DateOfBirth":"1975-11-20 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"shah@tailspintoys.com","PreferredName":"Shah"}, - {"Gender":"Female","FullName":"Chandra Mittal","PersonID":116,"FaxNumber":"(304) 555-0101","DateOfBirth":"1995-05-20 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"chandra@tailspintoys.com","PreferredName":"Chandra"}, - {"Gender":"Female","FullName":"Ferhat Celik","PersonID":117,"FaxNumber":"(270) 555-0101","DateOfBirth":"1985-11-30 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"ferhat@tailspintoys.com","PreferredName":"Ferhat"}, - {"Gender":"Female","FullName":"Leyla Celik","PersonID":118,"FaxNumber":"(270) 555-0101","DateOfBirth":"1996-05-03 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"leyla@tailspintoys.com","PreferredName":"Leyla"}, - {"Gender":"Female","FullName":"Dayarama Kamei","PersonID":119,"FaxNumber":"(458) 555-0101","DateOfBirth":"1993-04-07 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"dayarama@tailspintoys.com","PreferredName":"Dayarama"}, - {"Gender":"Female","FullName":"Elisabeth Flamand","PersonID":120,"FaxNumber":"(458) 555-0101","DateOfBirth":"1959-01-27 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"elisabeth@tailspintoys.com","PreferredName":"Elisabeth"}, - {"Gender":"Female","FullName":"Nils Kalnins","PersonID":121,"FaxNumber":"(314) 555-0101","DateOfBirth":"1988-12-06 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"nils@tailspintoys.com","PreferredName":"Nils"}, - {"Gender":"Female","FullName":"Rajiv Kotadia","PersonID":122,"FaxNumber":"(314) 555-0101","DateOfBirth":"1976-12-30 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"rajiv@tailspintoys.com","PreferredName":"Rajiv"}, - {"Gender":"Female","FullName":"Ashish Acharya","PersonID":123,"FaxNumber":"(270) 555-0101","DateOfBirth":"1995-07-11 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"ashish@tailspintoys.com","PreferredName":"Ashish"}, - {"Gender":"Female","FullName":"Filip Sedlar","PersonID":124,"FaxNumber":"(270) 555-0101","DateOfBirth":"1963-05-20 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"filip@tailspintoys.com","PreferredName":"Filip"}, - {"Gender":"Female","FullName":"Alena Prikrylova","PersonID":125,"FaxNumber":"(210) 555-0101","DateOfBirth":"1971-12-16 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"alena@tailspintoys.com","PreferredName":"Alena"}, - {"Gender":"Female","FullName":"Catina Bojin","PersonID":126,"FaxNumber":"(210) 555-0101","DateOfBirth":"1955-12-05 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"catina@tailspintoys.com","PreferredName":"Catina"}, - {"Gender":"Female","FullName":"Lana Rozej","PersonID":127,"FaxNumber":"(314) 555-0101","DateOfBirth":"1963-05-22 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"lana@tailspintoys.com","PreferredName":"Lana"}, - {"Gender":"Female","FullName":"Kalpana Mukherjee","PersonID":128,"FaxNumber":"(314) 555-0101","DateOfBirth":"1980-10-25 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"kalpana@tailspintoys.com","PreferredName":"Kalpana"}, - {"Gender":"Female","FullName":"Chandrakanta Raut","PersonID":129,"FaxNumber":"(212) 555-0101","DateOfBirth":"1993-03-10 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"chandrakanta@tailspintoys.com","PreferredName":"Chandrakanta"}, - {"Gender":"Female","FullName":"Ivan Castellanos","PersonID":130,"FaxNumber":"(212) 555-0101","DateOfBirth":"1975-02-02 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"ivan@tailspintoys.com","PreferredName":"Ivan"}, - {"Gender":"Female","FullName":"Ganapati Gadiyaram","PersonID":131,"FaxNumber":"(206) 555-0101","DateOfBirth":"1988-09-16 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"ganapati@tailspintoys.com","PreferredName":"Ganapati"}, - {"Gender":"Female","FullName":"Parsa Blijleven","PersonID":132,"FaxNumber":"(206) 555-0101","DateOfBirth":"1979-03-02 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"parsa@tailspintoys.com","PreferredName":"Parsa"}, - {"Gender":"Female","FullName":"Adrijana Blagojevic","PersonID":133,"FaxNumber":"(206) 555-0101","DateOfBirth":"1959-01-08 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"adrijana@tailspintoys.com","PreferredName":"Adrijana"}, - {"Gender":"Female","FullName":"Lina Martins","PersonID":134,"FaxNumber":"(206) 555-0101","DateOfBirth":"1984-05-26 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"lina@tailspintoys.com","PreferredName":"Lina"}, - {"Gender":"Female","FullName":"Lap Dinh","PersonID":135,"FaxNumber":"(240) 555-0101","DateOfBirth":"1956-11-08 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"lap@tailspintoys.com","PreferredName":"Lap"}, - {"Gender":"Female","FullName":"August Astrom","PersonID":136,"FaxNumber":"(240) 555-0101","DateOfBirth":"1989-06-28 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"august@tailspintoys.com","PreferredName":"August"}, - {"Gender":"Female","FullName":"Didem ozCelik","PersonID":137,"FaxNumber":"(205) 555-0101","DateOfBirth":"1996-01-12 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"didem@tailspintoys.com","PreferredName":"Didem"}, - {"Gender":"Female","FullName":"Krista Andrejev","PersonID":138,"FaxNumber":"(205) 555-0101","DateOfBirth":"1965-07-06 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"krista@tailspintoys.com","PreferredName":"Krista"}, - {"Gender":"Female","FullName":"Serhat Akbulut","PersonID":139,"FaxNumber":"(209) 555-0101","DateOfBirth":"1985-06-23 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"serhat@tailspintoys.com","PreferredName":"Serhat"}, - {"Gender":"Female","FullName":"Nadja Johansson","PersonID":140,"FaxNumber":"(209) 555-0101","DateOfBirth":"1972-04-06 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"nadja@tailspintoys.com","PreferredName":"Nadja"}, - {"Gender":"Female","FullName":"Daniela Barrios","PersonID":141,"FaxNumber":"(206) 555-0101","DateOfBirth":"1987-04-28 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"daniela@tailspintoys.com","PreferredName":"Daniela"}, - {"Gender":"Female","FullName":"Daina Celma","PersonID":142,"FaxNumber":"(206) 555-0101","DateOfBirth":"1984-08-18 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"daina@tailspintoys.com","PreferredName":"Daina"}, - {"Gender":"Female","FullName":"Julia Slobodova","PersonID":143,"FaxNumber":"(231) 555-0101","DateOfBirth":"1987-10-09 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"julia@tailspintoys.com","PreferredName":"Julia"}, - {"Gender":"Female","FullName":"Raimonds Kalnins","PersonID":144,"FaxNumber":"(231) 555-0101","DateOfBirth":"1952-09-17 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"raimonds@tailspintoys.com","PreferredName":"Raimonds"}, - {"Gender":"Female","FullName":"Marcela Jankova","PersonID":145,"FaxNumber":"(304) 555-0101","DateOfBirth":"1980-04-09 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"marcela@tailspintoys.com","PreferredName":"Marcela"}, - {"Gender":"Female","FullName":"Predrag Stojanovic","PersonID":146,"FaxNumber":"(304) 555-0101","DateOfBirth":"1979-12-31 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"predrag@tailspintoys.com","PreferredName":"Predrag"}, - {"Gender":"Female","FullName":"Dipali Sonkar","PersonID":147,"FaxNumber":"(201) 555-0101","DateOfBirth":"1978-01-11 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"dipali@tailspintoys.com","PreferredName":"Dipali"}, - {"Gender":"Female","FullName":"Mariana Apodaca","PersonID":148,"FaxNumber":"(201) 555-0101","DateOfBirth":"1963-07-19 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"mariana@tailspintoys.com","PreferredName":"Mariana"}, - {"Gender":"Female","FullName":"Bansidhar Mitra","PersonID":149,"FaxNumber":"(209) 555-0101","DateOfBirth":"1958-10-20 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bansidhar@tailspintoys.com","PreferredName":"Bansidhar"}, - {"Gender":"Female","FullName":"Liia Mae","PersonID":150,"FaxNumber":"(209) 555-0101","DateOfBirth":"1997-12-20 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"liia@tailspintoys.com","PreferredName":"Liia"}, - {"Gender":"Female","FullName":"Gunnar Persson","PersonID":151,"FaxNumber":"(205) 555-0101","DateOfBirth":"1985-10-05 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"gunnar@tailspintoys.com","PreferredName":"Gunnar"}, - {"Gender":"Female","FullName":"Parvati Modi","PersonID":152,"FaxNumber":"(205) 555-0101","DateOfBirth":"1965-06-13 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"parvati@tailspintoys.com","PreferredName":"Parvati"}, - {"Gender":"Female","FullName":"Vitezslav Rehak","PersonID":153,"FaxNumber":"(215) 555-0101","DateOfBirth":"1963-06-04 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"vitezslav@tailspintoys.com","PreferredName":"Vitezslav"}, - {"Gender":"Female","FullName":"Parsa Van Vossen","PersonID":154,"FaxNumber":"(215) 555-0101","DateOfBirth":"1962-05-16 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"parsa@tailspintoys.com","PreferredName":"Parsa"}, - {"Gender":"Female","FullName":"Bharat Sikdar","PersonID":155,"FaxNumber":"(229) 555-0101","DateOfBirth":"1990-05-08 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"bharat@tailspintoys.com","PreferredName":"Bharat"}, - {"Gender":"Female","FullName":"Alain Aupry","PersonID":156,"FaxNumber":"(229) 555-0101","DateOfBirth":"1970-08-06 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"alain@tailspintoys.com","PreferredName":"Alain"}, - {"Gender":"Female","FullName":"Juan Bezanson","PersonID":157,"FaxNumber":"(206) 555-0101","DateOfBirth":"1964-07-19 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"juan@tailspintoys.com","PreferredName":"Juan"}, - {"Gender":"Female","FullName":"Ruby Charlton","PersonID":158,"FaxNumber":"(206) 555-0101","DateOfBirth":"1960-09-05 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"ruby@tailspintoys.com","PreferredName":"Ruby"}, - {"Gender":"Female","FullName":"Aile Mae","PersonID":159,"FaxNumber":"(216) 555-0101","DateOfBirth":"1972-09-07 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"aile@tailspintoys.com","PreferredName":"Aile"}, - {"Gender":"Female","FullName":"Margherita Lucchesi","PersonID":160,"FaxNumber":"(216) 555-0101","DateOfBirth":"1963-03-05 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"margherita@tailspintoys.com","PreferredName":"Margherita"}, - {"Gender":"Female","FullName":"Pratap Varghese","PersonID":161,"FaxNumber":"(276) 555-0101","DateOfBirth":"1994-11-03 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"pratap@tailspintoys.com","PreferredName":"Pratap"}, - {"Gender":"Female","FullName":"Marcel Marquis","PersonID":162,"FaxNumber":"(276) 555-0101","DateOfBirth":"1972-04-02 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"marcel@tailspintoys.com","PreferredName":"Marcel"}, - {"Gender":"Female","FullName":"Margita Kopecka","PersonID":163,"FaxNumber":"(339) 555-0101","DateOfBirth":"1996-03-14 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"margita@tailspintoys.com","PreferredName":"Margita"}, - {"Gender":"Female","FullName":"Mirjam Johansson","PersonID":164,"FaxNumber":"(339) 555-0101","DateOfBirth":"1989-12-19 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"mirjam@tailspintoys.com","PreferredName":"Mirjam"}, - {"Gender":"Female","FullName":"Lekha Mitra","PersonID":165,"FaxNumber":"(304) 555-0101","DateOfBirth":"1982-01-11 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"lekha@tailspintoys.com","PreferredName":"Lekha"}, - {"Gender":"Female","FullName":"Seeta Bose","PersonID":166,"FaxNumber":"(304) 555-0101","DateOfBirth":"1985-09-08 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"seeta@tailspintoys.com","PreferredName":"Seeta"}, - {"Gender":"Female","FullName":"Abhoy PrabhupÄda","PersonID":167,"FaxNumber":"(423) 555-0101","DateOfBirth":"1957-09-04 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"abhoy@tailspintoys.com","PreferredName":"Abhoy"}, - {"Gender":"Female","FullName":"Seok-Ho Jeon","PersonID":168,"FaxNumber":"(423) 555-0101","DateOfBirth":"1997-10-04 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"seok-ho@tailspintoys.com","PreferredName":"Seok-Ho"}, - {"Gender":"Female","FullName":"Alida Caune","PersonID":169,"FaxNumber":"(212) 555-0101","DateOfBirth":"1971-01-24 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"alida@tailspintoys.com","PreferredName":"Alida"}, - {"Gender":"Female","FullName":"Indiana Fritzsche","PersonID":170,"FaxNumber":"(212) 555-0101","DateOfBirth":"1985-12-01 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"indiana@tailspintoys.com","PreferredName":"Indiana"}, - {"Gender":"Female","FullName":"Agnes Szolosy","PersonID":171,"FaxNumber":"(209) 555-0101","DateOfBirth":"1956-08-28 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"agnes@tailspintoys.com","PreferredName":"Agnes"}, - {"Gender":"Female","FullName":"Yu-jin Jee","PersonID":172,"FaxNumber":"(209) 555-0101","DateOfBirth":"1978-07-28 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"yu-jin@tailspintoys.com","PreferredName":"Yu-jin"}, - {"Gender":"Female","FullName":"Rohana Kaskar","PersonID":173,"FaxNumber":"(207) 555-0101","DateOfBirth":"1965-09-15 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"rohana@tailspintoys.com","PreferredName":"Rohana"}, - {"Gender":"Female","FullName":"Grieta Kalnina","PersonID":174,"FaxNumber":"(207) 555-0101","DateOfBirth":"1966-12-13 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"grieta@tailspintoys.com","PreferredName":"Grieta"}, - {"Gender":"Female","FullName":"Hanuman Dubey","PersonID":175,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-11-06 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"hanuman@tailspintoys.com","PreferredName":"Hanuman"}, - {"Gender":"Female","FullName":"Paola Loggia","PersonID":176,"FaxNumber":"(210) 555-0101","DateOfBirth":"1995-01-17 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"paola@tailspintoys.com","PreferredName":"Paola"}, - {"Gender":"Female","FullName":"Bao Dao","PersonID":177,"FaxNumber":"(339) 555-0101","DateOfBirth":"1986-07-30 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"bao@tailspintoys.com","PreferredName":"Bao"}, - {"Gender":"Female","FullName":"Viljo Lampsa","PersonID":178,"FaxNumber":"(339) 555-0101","DateOfBirth":"1990-05-22 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"viljo@tailspintoys.com","PreferredName":"Viljo"}, - {"Gender":"Female","FullName":"Preyakshna Aluri","PersonID":179,"FaxNumber":"(701) 555-0101","DateOfBirth":"1997-01-01 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"preyakshna@tailspintoys.com","PreferredName":"Preyakshna"}, - {"Gender":"Female","FullName":"Chandan Raut","PersonID":180,"FaxNumber":"(701) 555-0101","DateOfBirth":"1969-09-05 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"chandan@tailspintoys.com","PreferredName":"Chandan"}, - {"Gender":"Female","FullName":"Valentina Conti","PersonID":181,"FaxNumber":"(225) 555-0101","DateOfBirth":"1984-05-31 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"valentina@tailspintoys.com","PreferredName":"Valentina"}, - {"Gender":"Female","FullName":"Narayan Mukherjee","PersonID":182,"FaxNumber":"(225) 555-0101","DateOfBirth":"1964-07-02 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"narayan@tailspintoys.com","PreferredName":"Narayan"}, - {"Gender":"Female","FullName":"Theodore Saucier","PersonID":183,"FaxNumber":"(209) 555-0101","DateOfBirth":"1974-09-17 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"theodore@tailspintoys.com","PreferredName":"Theodore"}, - {"Gender":"Female","FullName":"Chaowalit Pornpipatpong","PersonID":184,"FaxNumber":"(209) 555-0101","DateOfBirth":"1990-11-21 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"chaowalit@tailspintoys.com","PreferredName":"Chaowalit"}, - {"Gender":"Female","FullName":"Mariana Fierro","PersonID":185,"FaxNumber":"(217) 555-0101","DateOfBirth":"1983-02-18 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"mariana@tailspintoys.com","PreferredName":"Mariana"}, - {"Gender":"Female","FullName":"Ivana Kozakova","PersonID":186,"FaxNumber":"(217) 555-0101","DateOfBirth":"1994-03-03 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"ivana@tailspintoys.com","PreferredName":"Ivana"}, - {"Gender":"Female","FullName":"Afshin Djalili","PersonID":187,"FaxNumber":"(231) 555-0101","DateOfBirth":"1984-06-30 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"afshin@tailspintoys.com","PreferredName":"Afshin"}, - {"Gender":"Female","FullName":"Vaclav Holy","PersonID":188,"FaxNumber":"(231) 555-0101","DateOfBirth":"1992-01-09 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"vaclav@tailspintoys.com","PreferredName":"Vaclav"}, - {"Gender":"Female","FullName":"Bianh Phan","PersonID":189,"FaxNumber":"(480) 555-0101","DateOfBirth":"1970-10-24 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"bianh@tailspintoys.com","PreferredName":"Bianh"}, - {"Gender":"Female","FullName":"Kanti Pipalia","PersonID":190,"FaxNumber":"(480) 555-0101","DateOfBirth":"1995-12-16 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"kanti@tailspintoys.com","PreferredName":"Kanti"}, - {"Gender":"Female","FullName":"Koknesis Vitols","PersonID":191,"FaxNumber":"(218) 555-0101","DateOfBirth":"1961-07-21 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"koknesis@tailspintoys.com","PreferredName":"Koknesis"}, - {"Gender":"Female","FullName":"Malle Sepp","PersonID":192,"FaxNumber":"(218) 555-0101","DateOfBirth":"1992-01-01 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"malle@tailspintoys.com","PreferredName":"Malle"}, - {"Gender":"Female","FullName":"Roxane Rastgu","PersonID":193,"FaxNumber":"(787) 555-0101","DateOfBirth":"1961-01-07 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"roxane@tailspintoys.com","PreferredName":"Roxane"}, - {"Gender":"Female","FullName":"Hue Chu","PersonID":194,"FaxNumber":"(787) 555-0101","DateOfBirth":"1955-09-27 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"hue@tailspintoys.com","PreferredName":"Hue"}, - {"Gender":"Female","FullName":"Vlasta Srbova","PersonID":195,"FaxNumber":"(203) 555-0101","DateOfBirth":"1959-04-22 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"vlasta@tailspintoys.com","PreferredName":"Vlasta"}, - {"Gender":"Female","FullName":"Gadhar Ghosh","PersonID":196,"FaxNumber":"(203) 555-0101","DateOfBirth":"1961-10-18 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"gadhar@tailspintoys.com","PreferredName":"Gadhar"}, - {"Gender":"Female","FullName":"Lata Babu","PersonID":197,"FaxNumber":"(405) 555-0101","DateOfBirth":"1972-12-08 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"lata@tailspintoys.com","PreferredName":"Lata"}, - {"Gender":"Female","FullName":"Chandra De","PersonID":198,"FaxNumber":"(405) 555-0101","DateOfBirth":"1980-07-12 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"chandra@tailspintoys.com","PreferredName":"Chandra"}, - {"Gender":"Female","FullName":"Airi Vassiljev","PersonID":199,"FaxNumber":"(229) 555-0101","DateOfBirth":"1995-04-29 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"airi@tailspintoys.com","PreferredName":"Airi"}, - {"Gender":"Female","FullName":"Hoang La","PersonID":200,"FaxNumber":"(229) 555-0101","DateOfBirth":"1995-09-01 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"hoang@tailspintoys.com","PreferredName":"Hoang"}, - {"Gender":"Female","FullName":"Duleep Walia","PersonID":201,"FaxNumber":"(206) 555-0101","DateOfBirth":"1959-11-07 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"duleep@tailspintoys.com","PreferredName":"Duleep"}, - {"Gender":"Female","FullName":"Satish Gill","PersonID":202,"FaxNumber":"(206) 555-0101","DateOfBirth":"1982-11-17 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"satish@tailspintoys.com","PreferredName":"Satish"}, - {"Gender":"Female","FullName":"Matyas Macek","PersonID":203,"FaxNumber":"(316) 555-0101","DateOfBirth":"1997-10-01 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"matyas@tailspintoys.com","PreferredName":"Matyas"}, - {"Gender":"Female","FullName":"Ethan Hopkins","PersonID":204,"FaxNumber":"(316) 555-0101","DateOfBirth":"1970-05-03 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"ethan@tailspintoys.com","PreferredName":"Ethan"}, - {"Gender":"Female","FullName":"Bharat Ankitham","PersonID":205,"FaxNumber":"(252) 555-0101","DateOfBirth":"1991-02-22 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"bharat@tailspintoys.com","PreferredName":"Bharat"}, - {"Gender":"Female","FullName":"Be Phan","PersonID":206,"FaxNumber":"(252) 555-0101","DateOfBirth":"1975-12-15 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"be@tailspintoys.com","PreferredName":"Be"}, - {"Gender":"Female","FullName":"Vera Kubatova","PersonID":207,"FaxNumber":"(212) 555-0101","DateOfBirth":"1978-03-09 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"vera@tailspintoys.com","PreferredName":"Vera"}, - {"Gender":"Female","FullName":"Diego Almeida","PersonID":208,"FaxNumber":"(212) 555-0101","DateOfBirth":"1950-12-27 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"diego@tailspintoys.com","PreferredName":"Diego"}, - {"Gender":"Female","FullName":"Rakesh Nishad","PersonID":209,"FaxNumber":"(505) 555-0101","DateOfBirth":"1973-01-08 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"rakesh@tailspintoys.com","PreferredName":"Rakesh"}, - {"Gender":"Female","FullName":"Huu Hoa","PersonID":210,"FaxNumber":"(505) 555-0101","DateOfBirth":"1978-05-11 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"huu@tailspintoys.com","PreferredName":"Huu"}, - {"Gender":"Female","FullName":"Sang Tran","PersonID":211,"FaxNumber":"(201) 555-0101","DateOfBirth":"1993-04-07 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"sang@tailspintoys.com","PreferredName":"Sang"}, - {"Gender":"Female","FullName":"Bela Nemeth","PersonID":212,"FaxNumber":"(201) 555-0101","DateOfBirth":"1989-10-28 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"bela@tailspintoys.com","PreferredName":"Bela"}, - {"Gender":"Female","FullName":"Eekalabya Bose","PersonID":213,"FaxNumber":"(787) 555-0101","DateOfBirth":"1980-12-14 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"eekalabya@tailspintoys.com","PreferredName":"Eekalabya"}, - {"Gender":"Female","FullName":"Margherita Bucco","PersonID":214,"FaxNumber":"(787) 555-0101","DateOfBirth":"1966-08-24 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"margherita@tailspintoys.com","PreferredName":"Margherita"}, - {"Gender":"Female","FullName":"Tommy Kilpi","PersonID":215,"FaxNumber":"(303) 555-0101","DateOfBirth":"1964-10-23 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"tommy@tailspintoys.com","PreferredName":"Tommy"}, - {"Gender":"Female","FullName":"Giri Bhamidipati","PersonID":216,"FaxNumber":"(303) 555-0101","DateOfBirth":"1971-10-10 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"giri@tailspintoys.com","PreferredName":"Giri"}, - {"Gender":"Female","FullName":"Andrea Ricci","PersonID":217,"FaxNumber":"(216) 555-0101","DateOfBirth":"1969-05-18 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"andrea@tailspintoys.com","PreferredName":"Andrea"}, - {"Gender":"Female","FullName":"Chung-Ho Han","PersonID":218,"FaxNumber":"(216) 555-0101","DateOfBirth":"1992-10-31 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"chung-ho@tailspintoys.com","PreferredName":"Chung-Ho"}, - {"Gender":"Female","FullName":"Isabell Duperre","PersonID":219,"FaxNumber":"(212) 555-0101","DateOfBirth":"1970-07-26 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"isabell @tailspintoys.com","PreferredName":"Isabell "}, - {"Gender":"Female","FullName":"Jasna Vujica","PersonID":220,"FaxNumber":"(212) 555-0101","DateOfBirth":"1960-01-21 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"jasna@tailspintoys.com","PreferredName":"Jasna"}, - {"Gender":"Female","FullName":"Amarendra Ankitham","PersonID":221,"FaxNumber":"(339) 555-0101","DateOfBirth":"1969-12-28 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"amarendra@tailspintoys.com","PreferredName":"Amarendra"}, - {"Gender":"Female","FullName":"Isak Berggren","PersonID":222,"FaxNumber":"(339) 555-0101","DateOfBirth":"1992-05-18 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"isak@tailspintoys.com","PreferredName":"Isak"}, - {"Gender":"Female","FullName":"Aakarsha Nookala","PersonID":223,"FaxNumber":"(201) 555-0101","DateOfBirth":"1992-09-27 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"aakarsha@tailspintoys.com","PreferredName":"Aakarsha"}, - {"Gender":"Female","FullName":"Ilgonis Rozitis","PersonID":224,"FaxNumber":"(201) 555-0101","DateOfBirth":"1992-01-31 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"ilgonis@tailspintoys.com","PreferredName":"Ilgonis"}, - {"Gender":"Female","FullName":"Stanislav Sedlar","PersonID":225,"FaxNumber":"(701) 555-0101","DateOfBirth":"1971-01-04 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"stanislav@tailspintoys.com","PreferredName":"Stanislav"}, - {"Gender":"Female","FullName":"Telma Arvidsson","PersonID":226,"FaxNumber":"(701) 555-0101","DateOfBirth":"1996-12-15 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"telma@tailspintoys.com","PreferredName":"Telma"}, - {"Gender":"Female","FullName":"GokCe Karaca","PersonID":227,"FaxNumber":"(603) 555-0101","DateOfBirth":"1996-07-02 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"gokce@tailspintoys.com","PreferredName":"GokCe"}, - {"Gender":"Female","FullName":"Maria Munteanu","PersonID":228,"FaxNumber":"(603) 555-0101","DateOfBirth":"1991-07-07 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"maria@tailspintoys.com","PreferredName":"Maria"}, - {"Gender":"Female","FullName":"Coralie Emond","PersonID":229,"FaxNumber":"(803) 555-0101","DateOfBirth":"1988-06-19 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"coralie@tailspintoys.com","PreferredName":"Coralie"}, - {"Gender":"Female","FullName":"Cong Trung","PersonID":230,"FaxNumber":"(803) 555-0101","DateOfBirth":"1957-12-23 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"cong@tailspintoys.com","PreferredName":"Cong"}, - {"Gender":"Female","FullName":"Karina Celmina","PersonID":231,"FaxNumber":"(239) 555-0101","DateOfBirth":"1977-05-26 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"karina@tailspintoys.com","PreferredName":"Karina"}, - {"Gender":"Female","FullName":"Nik Stoimenova","PersonID":232,"FaxNumber":"(239) 555-0101","DateOfBirth":"1968-07-26 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"nik@tailspintoys.com","PreferredName":"Nik"}, - {"Gender":"Female","FullName":"Teresa Pisani","PersonID":233,"FaxNumber":"(303) 555-0101","DateOfBirth":"1965-03-05 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"teresa@tailspintoys.com","PreferredName":"Teresa"}, - {"Gender":"Female","FullName":"Murugan Thakur","PersonID":234,"FaxNumber":"(303) 555-0101","DateOfBirth":"1974-02-22 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"murugan@tailspintoys.com","PreferredName":"Murugan"}, - {"Gender":"Female","FullName":"Alba Ponce","PersonID":235,"FaxNumber":"(210) 555-0101","DateOfBirth":"1962-07-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"alba@tailspintoys.com","PreferredName":"Alba"}, - {"Gender":"Female","FullName":"Antra Dzene","PersonID":236,"FaxNumber":"(210) 555-0101","DateOfBirth":"1956-02-28 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"antra@tailspintoys.com","PreferredName":"Antra"}, - {"Gender":"Female","FullName":"Piper Leigh","PersonID":237,"FaxNumber":"(210) 555-0101","DateOfBirth":"1950-04-02 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"piper@tailspintoys.com","PreferredName":"Piper"}, - {"Gender":"Female","FullName":"Jautrite Krievina","PersonID":238,"FaxNumber":"(210) 555-0101","DateOfBirth":"1996-12-31 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"jautrite@tailspintoys.com","PreferredName":"Jautrite"}, - {"Gender":"Female","FullName":"Karie Seymour","PersonID":239,"FaxNumber":"(802) 555-0101","DateOfBirth":"1978-12-16 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"karie@tailspintoys.com","PreferredName":"Karie"}, - {"Gender":"Female","FullName":"Lorenzo Lee","PersonID":240,"FaxNumber":"(802) 555-0101","DateOfBirth":"1956-08-18 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"lorenzo@tailspintoys.com","PreferredName":"Lorenzo"}, - {"Gender":"Female","FullName":"Timea Peto","PersonID":241,"FaxNumber":"(209) 555-0101","DateOfBirth":"1950-05-17 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"timea@tailspintoys.com","PreferredName":"Timea"}, - {"Gender":"Female","FullName":"Amanat Shaker Doust","PersonID":242,"FaxNumber":"(209) 555-0101","DateOfBirth":"1953-09-07 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"amanat@tailspintoys.com","PreferredName":"Amanat"}, - {"Gender":"Female","FullName":"Victoria Ene","PersonID":243,"FaxNumber":"(205) 555-0101","DateOfBirth":"1959-03-20 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"victoria@tailspintoys.com","PreferredName":"Victoria"}, - {"Gender":"Female","FullName":"Panit Meesang","PersonID":244,"FaxNumber":"(205) 555-0101","DateOfBirth":"1964-02-22 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"panit@tailspintoys.com","PreferredName":"Panit"}, - {"Gender":"Female","FullName":"Bhavani Bhowmick","PersonID":245,"FaxNumber":"(215) 555-0101","DateOfBirth":"1959-05-28 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"bhavani@tailspintoys.com","PreferredName":"Bhavani"}, - {"Gender":"Female","FullName":"Ivica Debeljak","PersonID":246,"FaxNumber":"(215) 555-0101","DateOfBirth":"1978-11-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ivica@tailspintoys.com","PreferredName":"Ivica"}, - {"Gender":"Female","FullName":"Yasmine Berggren","PersonID":247,"FaxNumber":"(505) 555-0101","DateOfBirth":"1972-01-21 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"yasmine@tailspintoys.com","PreferredName":"Yasmine"}, - {"Gender":"Female","FullName":"Anima Bagchi","PersonID":248,"FaxNumber":"(505) 555-0101","DateOfBirth":"1998-01-11 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"anima@tailspintoys.com","PreferredName":"Anima"}, - {"Gender":"Female","FullName":"Tea Koppel","PersonID":249,"FaxNumber":"(209) 555-0101","DateOfBirth":"1960-05-17 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"tea@tailspintoys.com","PreferredName":"Tea"}, - {"Gender":"Female","FullName":"Bozena Palatova","PersonID":250,"FaxNumber":"(209) 555-0101","DateOfBirth":"1967-09-14 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bozena@tailspintoys.com","PreferredName":"Bozena"}, - {"Gender":"Female","FullName":"Naseem Radan","PersonID":251,"FaxNumber":"(316) 555-0101","DateOfBirth":"1974-11-16 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"naseem@tailspintoys.com","PreferredName":"Naseem"}, - {"Gender":"Female","FullName":"Geza Olteanu","PersonID":252,"FaxNumber":"(316) 555-0101","DateOfBirth":"1980-04-08 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"geza@tailspintoys.com","PreferredName":"Geza"}, - {"Gender":"Female","FullName":"Laboni Deb","PersonID":253,"FaxNumber":"(207) 555-0101","DateOfBirth":"1978-03-15 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"laboni@tailspintoys.com","PreferredName":"Laboni"}, - {"Gender":"Female","FullName":"Antonin Klaus","PersonID":254,"FaxNumber":"(207) 555-0101","DateOfBirth":"1977-12-18 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"antonin@tailspintoys.com","PreferredName":"Antonin"}, - {"Gender":"Female","FullName":"Sung-Hwan Hwang","PersonID":255,"FaxNumber":"(228) 555-0101","DateOfBirth":"1980-07-21 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"sung-hwan@tailspintoys.com","PreferredName":"Sung-Hwan"}, - {"Gender":"Female","FullName":"Reigo Rebane","PersonID":256,"FaxNumber":"(228) 555-0101","DateOfBirth":"1990-07-27 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"reigo@tailspintoys.com","PreferredName":"Reigo"}, - {"Gender":"Female","FullName":"Shiva Pipalia","PersonID":257,"FaxNumber":"(480) 555-0101","DateOfBirth":"1978-12-05 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"shiva@tailspintoys.com","PreferredName":"Shiva"}, - {"Gender":"Female","FullName":"Aishwarya Beniwal","PersonID":258,"FaxNumber":"(480) 555-0101","DateOfBirth":"1976-12-15 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"aishwarya@tailspintoys.com","PreferredName":"Aishwarya"}, - {"Gender":"Female","FullName":"Karie Mercier","PersonID":259,"FaxNumber":"(209) 555-0101","DateOfBirth":"1989-08-10 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"karie@tailspintoys.com","PreferredName":"Karie"}, - {"Gender":"Female","FullName":"Milada Buresova","PersonID":260,"FaxNumber":"(209) 555-0101","DateOfBirth":"1974-02-05 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"milada@tailspintoys.com","PreferredName":"Milada"}, - {"Gender":"Female","FullName":"Bhanu Thota","PersonID":261,"FaxNumber":"(314) 555-0101","DateOfBirth":"1963-10-26 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"bhanu@tailspintoys.com","PreferredName":"Bhanu"}, - {"Gender":"Female","FullName":"Cyrus Poursokh","PersonID":262,"FaxNumber":"(314) 555-0101","DateOfBirth":"1979-09-24 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"cyrus@tailspintoys.com","PreferredName":"Cyrus"}, - {"Gender":"Female","FullName":"Ae-Cha Joo","PersonID":263,"FaxNumber":"(209) 555-0101","DateOfBirth":"1993-12-23 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"ae-cha@tailspintoys.com","PreferredName":"Ae-Cha"}, - {"Gender":"Female","FullName":"Jawid Pourali","PersonID":264,"FaxNumber":"(209) 555-0101","DateOfBirth":"1964-06-26 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"jawid@tailspintoys.com","PreferredName":"Jawid"}, - {"Gender":"Female","FullName":"Dinara Saparkyzy","PersonID":265,"FaxNumber":"(219) 555-0101","DateOfBirth":"1957-03-06 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"dinara@tailspintoys.com","PreferredName":"Dinara"}, - {"Gender":"Female","FullName":"Karel Sedlar","PersonID":266,"FaxNumber":"(219) 555-0101","DateOfBirth":"1952-06-13 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"karel@tailspintoys.com","PreferredName":"Karel"}, - {"Gender":"Female","FullName":"Adam Dvorak","PersonID":267,"FaxNumber":"(239) 555-0101","DateOfBirth":"1966-07-21 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"adam@tailspintoys.com","PreferredName":"Adam"}, - {"Gender":"Female","FullName":"Dhanishta Vankayala","PersonID":268,"FaxNumber":"(239) 555-0101","DateOfBirth":"1955-03-20 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"dhanishta@tailspintoys.com","PreferredName":"Dhanishta"}, - {"Gender":"Female","FullName":"Ingrida Celmina","PersonID":269,"FaxNumber":"(316) 555-0101","DateOfBirth":"1973-12-23 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"ingrida@tailspintoys.com","PreferredName":"Ingrida"}, - {"Gender":"Female","FullName":"Be Dang","PersonID":270,"FaxNumber":"(316) 555-0101","DateOfBirth":"1997-09-10 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"be@tailspintoys.com","PreferredName":"Be"}, - {"Gender":"Female","FullName":"Jae-Hwa Jang","PersonID":271,"FaxNumber":"(505) 555-0101","DateOfBirth":"1969-07-13 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"jae-hwa@tailspintoys.com","PreferredName":"Jae-Hwa"}, - {"Gender":"Female","FullName":"Clara Cunha","PersonID":272,"FaxNumber":"(505) 555-0101","DateOfBirth":"1984-10-07 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"clara@tailspintoys.com","PreferredName":"Clara"}, - {"Gender":"Female","FullName":"Duck-Hwan Bae","PersonID":273,"FaxNumber":"(803) 555-0101","DateOfBirth":"1962-07-03 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"duck-hwan@tailspintoys.com","PreferredName":"Duck-Hwan"}, - {"Gender":"Female","FullName":"Surya Mishra","PersonID":274,"FaxNumber":"(803) 555-0101","DateOfBirth":"1959-06-15 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"surya@tailspintoys.com","PreferredName":"Surya"}, - {"Gender":"Female","FullName":"Jagoda Vasiljevic","PersonID":275,"FaxNumber":"(252) 555-0101","DateOfBirth":"1953-04-27 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"jagoda@tailspintoys.com","PreferredName":"Jagoda"}, - {"Gender":"Female","FullName":"Eero Raud","PersonID":276,"FaxNumber":"(252) 555-0101","DateOfBirth":"1962-06-29 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"eero@tailspintoys.com","PreferredName":"Eero"}, - {"Gender":"Female","FullName":"Toma Nastase","PersonID":277,"FaxNumber":"(787) 555-0101","DateOfBirth":"1960-12-08 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"toma@tailspintoys.com","PreferredName":"Toma"}, - {"Gender":"Female","FullName":"Arjuna Haldar","PersonID":278,"FaxNumber":"(787) 555-0101","DateOfBirth":"1992-01-12 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"arjuna@tailspintoys.com","PreferredName":"Arjuna"}, - {"Gender":"Female","FullName":"Valerio Cardoso","PersonID":279,"FaxNumber":"(385) 555-0101","DateOfBirth":"1995-02-18 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"valerio@tailspintoys.com","PreferredName":"Valerio"}, - {"Gender":"Female","FullName":"Zac Wintle","PersonID":280,"FaxNumber":"(385) 555-0101","DateOfBirth":"1988-12-02 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"zac@tailspintoys.com","PreferredName":"Zac"}, - {"Gender":"Female","FullName":"Ileana Aguilar","PersonID":281,"FaxNumber":"(207) 555-0101","DateOfBirth":"1975-11-11 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"ileana@tailspintoys.com","PreferredName":"Ileana"}, - {"Gender":"Female","FullName":"Cai Nguyen","PersonID":282,"FaxNumber":"(207) 555-0101","DateOfBirth":"1971-03-20 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"cai@tailspintoys.com","PreferredName":"Cai"}, - {"Gender":"Female","FullName":"Tjasa Weitzer","PersonID":283,"FaxNumber":"(229) 555-0101","DateOfBirth":"1990-08-30 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"tjasa@tailspintoys.com","PreferredName":"Tjasa"}, - {"Gender":"Female","FullName":"Shefali Bose","PersonID":284,"FaxNumber":"(229) 555-0101","DateOfBirth":"1997-02-23 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"shefali@tailspintoys.com","PreferredName":"Shefali"}, - {"Gender":"Female","FullName":"Lucas Van Veenen","PersonID":285,"FaxNumber":"(216) 555-0101","DateOfBirth":"1995-07-02 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"lucas@tailspintoys.com","PreferredName":"Lucas"}, - {"Gender":"Female","FullName":"Farzana Saidi","PersonID":286,"FaxNumber":"(216) 555-0101","DateOfBirth":"1965-07-23 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"farzana@tailspintoys.com","PreferredName":"Farzana"}, - {"Gender":"Female","FullName":"Steven Frasier","PersonID":287,"FaxNumber":"(218) 555-0101","DateOfBirth":"1955-02-24 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"steven@tailspintoys.com","PreferredName":"Steven"}, - {"Gender":"Female","FullName":"Amaranaath Muppavarapu","PersonID":288,"FaxNumber":"(218) 555-0101","DateOfBirth":"1979-03-08 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"amaranaath@tailspintoys.com","PreferredName":"Amaranaath"}, - {"Gender":"Female","FullName":"Mauri Enestam","PersonID":289,"FaxNumber":"(303) 555-0101","DateOfBirth":"1983-01-12 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"mauri@tailspintoys.com","PreferredName":"Mauri"}, - {"Gender":"Female","FullName":"Lakshmi Nair","PersonID":290,"FaxNumber":"(303) 555-0101","DateOfBirth":"1969-04-14 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"lakshmi@tailspintoys.com","PreferredName":"Lakshmi"}, - {"Gender":"Female","FullName":"Ella Zvirbule","PersonID":291,"FaxNumber":"(212) 555-0101","DateOfBirth":"1966-12-06 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"ella@tailspintoys.com","PreferredName":"Ella"}, - {"Gender":"Female","FullName":"Vicente Chávez","PersonID":292,"FaxNumber":"(212) 555-0101","DateOfBirth":"1983-05-06 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"vicente@tailspintoys.com","PreferredName":"Vicente"}, - {"Gender":"Female","FullName":"Sevim Aydın","PersonID":293,"FaxNumber":"(216) 555-0101","DateOfBirth":"1980-12-04 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"sevim@tailspintoys.com","PreferredName":"Sevim"}, - {"Gender":"Female","FullName":"Tamer Ayhan","PersonID":294,"FaxNumber":"(216) 555-0101","DateOfBirth":"1965-01-01 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"tamer@tailspintoys.com","PreferredName":"Tamer"}, - {"Gender":"Female","FullName":"Blanka Stavinohova","PersonID":295,"FaxNumber":"(304) 555-0101","DateOfBirth":"1976-08-15 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"blanka@tailspintoys.com","PreferredName":"Blanka"}, - {"Gender":"Female","FullName":"Josefa Diaz","PersonID":296,"FaxNumber":"(304) 555-0101","DateOfBirth":"1996-05-19 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"josefa@tailspintoys.com","PreferredName":"Josefa"}, - {"Gender":"Female","FullName":"Akanksha Iyengar","PersonID":297,"FaxNumber":"(201) 555-0101","DateOfBirth":"1986-05-30 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"akanksha@tailspintoys.com","PreferredName":"Akanksha"}, - {"Gender":"Female","FullName":"Markus Kantee","PersonID":298,"FaxNumber":"(201) 555-0101","DateOfBirth":"1972-11-09 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"markus@tailspintoys.com","PreferredName":"Markus"}, - {"Gender":"Female","FullName":"Kertu Smirnov","PersonID":299,"FaxNumber":"(206) 555-0101","DateOfBirth":"1958-08-20 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"kertu@tailspintoys.com","PreferredName":"Kertu"}, - {"Gender":"Female","FullName":"Lovro Kulaga","PersonID":300,"FaxNumber":"(206) 555-0101","DateOfBirth":"1969-09-28 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"lovro@tailspintoys.com","PreferredName":"Lovro"}, - {"Gender":"Female","FullName":"Jure Grabensek","PersonID":301,"FaxNumber":"(303) 555-0101","DateOfBirth":"1964-07-31 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"jure@tailspintoys.com","PreferredName":"Jure"}, - {"Gender":"Female","FullName":"Chompunut Jetjirawat","PersonID":302,"FaxNumber":"(303) 555-0101","DateOfBirth":"1966-04-26 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"chompunut@tailspintoys.com","PreferredName":"Chompunut"}, - {"Gender":"Female","FullName":"Javiera Madera","PersonID":303,"FaxNumber":"(231) 555-0101","DateOfBirth":"1965-08-27 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"javiera@tailspintoys.com","PreferredName":"Javiera"}, - {"Gender":"Female","FullName":"Geetanjali Bagchi","PersonID":304,"FaxNumber":"(231) 555-0101","DateOfBirth":"1957-05-07 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"geetanjali@tailspintoys.com","PreferredName":"Geetanjali"}, - {"Gender":"Female","FullName":"Aija Mottola","PersonID":305,"FaxNumber":"(201) 555-0101","DateOfBirth":"1975-10-30 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"aija@tailspintoys.com","PreferredName":"Aija"}, - {"Gender":"Female","FullName":"Elli Berg","PersonID":306,"FaxNumber":"(201) 555-0101","DateOfBirth":"1974-11-19 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"elli@tailspintoys.com","PreferredName":"Elli"}, - {"Gender":"Female","FullName":"Darshan Gupta","PersonID":307,"FaxNumber":"(907) 555-0101","DateOfBirth":"1974-05-12 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"darshan@tailspintoys.com","PreferredName":"Darshan"}, - {"Gender":"Female","FullName":"Prem Reddy","PersonID":308,"FaxNumber":"(907) 555-0101","DateOfBirth":"1997-08-01 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"prem@tailspintoys.com","PreferredName":"Prem"}, - {"Gender":"Female","FullName":"Akanksha Sarma","PersonID":309,"FaxNumber":"(208) 555-0101","DateOfBirth":"1950-10-11 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"akanksha@tailspintoys.com","PreferredName":"Akanksha"}, - {"Gender":"Female","FullName":"Edward Alfred","PersonID":310,"FaxNumber":"(208) 555-0101","DateOfBirth":"1978-07-23 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"edward@tailspintoys.com","PreferredName":"Edward"}, - {"Gender":"Female","FullName":"Aino Kallas","PersonID":311,"FaxNumber":"(212) 555-0101","DateOfBirth":"1976-12-10 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"aino@tailspintoys.com","PreferredName":"Aino"}, - {"Gender":"Female","FullName":"Dhaaruni Vinjamuri","PersonID":312,"FaxNumber":"(212) 555-0101","DateOfBirth":"1977-12-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"dhaaruni@tailspintoys.com","PreferredName":"Dhaaruni"}, - {"Gender":"Female","FullName":"An Dung Phung","PersonID":313,"FaxNumber":"(239) 555-0101","DateOfBirth":"1996-08-05 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"an dung@tailspintoys.com","PreferredName":"An Dung"}, - {"Gender":"Female","FullName":"Ioana Ibanescu","PersonID":314,"FaxNumber":"(239) 555-0101","DateOfBirth":"1966-12-23 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"ioana@tailspintoys.com","PreferredName":"Ioana"}, - {"Gender":"Female","FullName":"Gaurav Sikdar","PersonID":315,"FaxNumber":"(314) 555-0101","DateOfBirth":"1954-08-07 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"gaurav@tailspintoys.com","PreferredName":"Gaurav"}, - {"Gender":"Female","FullName":"Christian Berggren","PersonID":316,"FaxNumber":"(314) 555-0101","DateOfBirth":"1975-08-21 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"christian@tailspintoys.com","PreferredName":"Christian"}, - {"Gender":"Female","FullName":"Anirban Sen","PersonID":317,"FaxNumber":"(702) 555-0101","DateOfBirth":"1991-12-31 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"anirban@tailspintoys.com","PreferredName":"Anirban"}, - {"Gender":"Female","FullName":"Joel Koivisto","PersonID":318,"FaxNumber":"(702) 555-0101","DateOfBirth":"1969-06-04 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"joel@tailspintoys.com","PreferredName":"Joel"}, - {"Gender":"Female","FullName":"Chandrakanta Benjaree","PersonID":319,"FaxNumber":"(385) 555-0101","DateOfBirth":"1966-04-04 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"chandrakanta@tailspintoys.com","PreferredName":"Chandrakanta"}, - {"Gender":"Female","FullName":"Joy Das","PersonID":320,"FaxNumber":"(385) 555-0101","DateOfBirth":"1990-09-15 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"joy@tailspintoys.com","PreferredName":"Joy"}, - {"Gender":"Female","FullName":"Badari Chadalavada","PersonID":321,"FaxNumber":"(252) 555-0101","DateOfBirth":"1981-05-15 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"badari@tailspintoys.com","PreferredName":"Badari"}, - {"Gender":"Female","FullName":"Zala Ude","PersonID":322,"FaxNumber":"(252) 555-0101","DateOfBirth":"1970-12-03 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"zala@tailspintoys.com","PreferredName":"Zala"}, - {"Gender":"Female","FullName":"Gabriele Udinesi","PersonID":323,"FaxNumber":"(803) 555-0101","DateOfBirth":"1994-02-03 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"gabriele@tailspintoys.com","PreferredName":"Gabriele"}, - {"Gender":"Female","FullName":"Murugan Dewangan","PersonID":324,"FaxNumber":"(803) 555-0101","DateOfBirth":"1996-02-10 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"murugan@tailspintoys.com","PreferredName":"Murugan"}, - {"Gender":"Female","FullName":"Malay PrabhupÄda","PersonID":325,"FaxNumber":"(316) 555-0101","DateOfBirth":"1994-06-21 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"malay@tailspintoys.com","PreferredName":"Malay"}, - {"Gender":"Female","FullName":"Nghi Ly","PersonID":326,"FaxNumber":"(316) 555-0101","DateOfBirth":"1981-03-22 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"nghi@tailspintoys.com","PreferredName":"Nghi"}, - {"Gender":"Female","FullName":"Hedi Koppel","PersonID":327,"FaxNumber":"(314) 555-0101","DateOfBirth":"1961-03-18 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"hedi@tailspintoys.com","PreferredName":"Hedi"}, - {"Gender":"Female","FullName":"Teodors Klavins","PersonID":328,"FaxNumber":"(314) 555-0101","DateOfBirth":"1981-03-06 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"teodors@tailspintoys.com","PreferredName":"Teodors"}, - {"Gender":"Female","FullName":"Denisa Ioveanu","PersonID":329,"FaxNumber":"(907) 555-0101","DateOfBirth":"1992-07-11 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"denisa@tailspintoys.com","PreferredName":"Denisa"}, - {"Gender":"Female","FullName":"Cosmin Nutiu","PersonID":330,"FaxNumber":"(907) 555-0101","DateOfBirth":"1992-06-20 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"cosmin@tailspintoys.com","PreferredName":"Cosmin"}, - {"Gender":"Female","FullName":"Vaclav Polaskova","PersonID":331,"FaxNumber":"(216) 555-0101","DateOfBirth":"1952-09-03 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"vaclav@tailspintoys.com","PreferredName":"Vaclav"}, - {"Gender":"Female","FullName":"Georg Valbe","PersonID":332,"FaxNumber":"(216) 555-0101","DateOfBirth":"1970-07-06 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"georg@tailspintoys.com","PreferredName":"Georg"}, - {"Gender":"Female","FullName":"Pramod Nishad","PersonID":333,"FaxNumber":"(225) 555-0101","DateOfBirth":"1951-09-26 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"pramod@tailspintoys.com","PreferredName":"Pramod"}, - {"Gender":"Female","FullName":"Avani Aggarwal","PersonID":334,"FaxNumber":"(225) 555-0101","DateOfBirth":"1973-03-02 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"avani@tailspintoys.com","PreferredName":"Avani"}, - {"Gender":"Female","FullName":"Prasong Tuntayakul","PersonID":335,"FaxNumber":"(201) 555-0101","DateOfBirth":"1996-10-20 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"prasong@tailspintoys.com","PreferredName":"Prasong"}, - {"Gender":"Female","FullName":"Mariela Pasek","PersonID":336,"FaxNumber":"(201) 555-0101","DateOfBirth":"1969-02-13 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"mariela@tailspintoys.com","PreferredName":"Mariela"}, - {"Gender":"Female","FullName":"Aija Zvaigzne","PersonID":337,"FaxNumber":"(205) 555-0101","DateOfBirth":"1950-02-22 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"aija@tailspintoys.com","PreferredName":"Aija"}, - {"Gender":"Female","FullName":"Dharanikumaar Sonti","PersonID":338,"FaxNumber":"(205) 555-0101","DateOfBirth":"1962-08-01 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"dharanikumaar@tailspintoys.com","PreferredName":"Dharanikumaar"}, - {"Gender":"Female","FullName":"Gilbert Pelland","PersonID":339,"FaxNumber":"(406) 555-0101","DateOfBirth":"1960-10-08 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"gilbert@tailspintoys.com","PreferredName":"Gilbert"}, - {"Gender":"Female","FullName":"Ngoc Cao","PersonID":340,"FaxNumber":"(406) 555-0101","DateOfBirth":"1992-11-25 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"ngoc@tailspintoys.com","PreferredName":"Ngoc"}, - {"Gender":"Female","FullName":"Marcella Napolitani","PersonID":341,"FaxNumber":"(262) 555-0101","DateOfBirth":"1966-11-22 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"marcella@tailspintoys.com","PreferredName":"Marcella"}, - {"Gender":"Female","FullName":"Pavol Oravec","PersonID":342,"FaxNumber":"(262) 555-0101","DateOfBirth":"1987-12-17 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"pavol@tailspintoys.com","PreferredName":"Pavol"}, - {"Gender":"Female","FullName":"Femke Hollenberg","PersonID":343,"FaxNumber":"(218) 555-0101","DateOfBirth":"1996-05-25 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"femke@tailspintoys.com","PreferredName":"Femke"}, - {"Gender":"Female","FullName":"Roman Kubat","PersonID":344,"FaxNumber":"(218) 555-0101","DateOfBirth":"1981-12-28 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"roman@tailspintoys.com","PreferredName":"Roman"}, - {"Gender":"Female","FullName":"Brita Jarvi","PersonID":345,"FaxNumber":"(212) 555-0101","DateOfBirth":"1980-11-05 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"brita@tailspintoys.com","PreferredName":"Brita"}, - {"Gender":"Female","FullName":"Lucie Hrdlickova","PersonID":346,"FaxNumber":"(212) 555-0101","DateOfBirth":"1956-04-30 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"lucie@tailspintoys.com","PreferredName":"Lucie"}, - {"Gender":"Female","FullName":"Donato Araujo","PersonID":347,"FaxNumber":"(480) 555-0101","DateOfBirth":"1984-12-28 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"donato@tailspintoys.com","PreferredName":"Donato"}, - {"Gender":"Female","FullName":"Alaine Berthelette","PersonID":348,"FaxNumber":"(480) 555-0101","DateOfBirth":"1964-01-02 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"alaine@tailspintoys.com","PreferredName":"Alaine"}, - {"Gender":"Female","FullName":"Aleksander Jarvi","PersonID":349,"FaxNumber":"(406) 555-0101","DateOfBirth":"1958-03-16 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"aleksander@tailspintoys.com","PreferredName":"Aleksander"}, - {"Gender":"Female","FullName":"Kurt Konecny","PersonID":350,"FaxNumber":"(406) 555-0101","DateOfBirth":"1960-01-02 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"kurt@tailspintoys.com","PreferredName":"Kurt"}, - {"Gender":"Female","FullName":"Malati Shenoy","PersonID":351,"FaxNumber":"(218) 555-0101","DateOfBirth":"1951-06-08 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"malati@tailspintoys.com","PreferredName":"Malati"}, - {"Gender":"Female","FullName":"Duong Duong","PersonID":352,"FaxNumber":"(218) 555-0101","DateOfBirth":"1985-04-28 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"duong@tailspintoys.com","PreferredName":"Duong"}, - {"Gender":"Female","FullName":"Gui-Hyun Ji","PersonID":353,"FaxNumber":"(218) 555-0101","DateOfBirth":"1966-12-23 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"gui-hyun@tailspintoys.com","PreferredName":"Gui-Hyun"}, - {"Gender":"Female","FullName":"Karl Kangur","PersonID":354,"FaxNumber":"(218) 555-0101","DateOfBirth":"1979-03-19 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"karl@tailspintoys.com","PreferredName":"Karl"}, - {"Gender":"Female","FullName":"Michal Polaskova","PersonID":355,"FaxNumber":"(262) 555-0101","DateOfBirth":"1982-08-07 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"michal@tailspintoys.com","PreferredName":"Michal"}, - {"Gender":"Female","FullName":"Debendra Chakraborty","PersonID":356,"FaxNumber":"(262) 555-0101","DateOfBirth":"1972-08-10 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"debendra@tailspintoys.com","PreferredName":"Debendra"}, - {"Gender":"Female","FullName":"Dilara Ayhan","PersonID":357,"FaxNumber":"(210) 555-0101","DateOfBirth":"1963-12-25 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"dilara@tailspintoys.com","PreferredName":"Dilara"}, - {"Gender":"Female","FullName":"Virgiliu Vladu","PersonID":358,"FaxNumber":"(210) 555-0101","DateOfBirth":"1961-07-24 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"virgiliu@tailspintoys.com","PreferredName":"Virgiliu"}, - {"Gender":"Female","FullName":"Peter Macias","PersonID":359,"FaxNumber":"(205) 555-0101","DateOfBirth":"1993-03-23 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"peter@tailspintoys.com","PreferredName":"Peter"}, - {"Gender":"Female","FullName":"Nasrin Fard","PersonID":360,"FaxNumber":"(205) 555-0101","DateOfBirth":"1958-08-19 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"nasrin@tailspintoys.com","PreferredName":"Nasrin"}, - {"Gender":"Female","FullName":"Kurt Lukes","PersonID":361,"FaxNumber":"(225) 555-0101","DateOfBirth":"1974-06-15 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"kurt@tailspintoys.com","PreferredName":"Kurt"}, - {"Gender":"Female","FullName":"Daman Devulapalli","PersonID":362,"FaxNumber":"(225) 555-0101","DateOfBirth":"1975-02-10 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"daman@tailspintoys.com","PreferredName":"Daman"}, - {"Gender":"Female","FullName":"Beatrise Bite","PersonID":363,"FaxNumber":"(218) 555-0101","DateOfBirth":"1954-08-25 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"beatrise@tailspintoys.com","PreferredName":"Beatrise"}, - {"Gender":"Female","FullName":"Hele Semjonov","PersonID":364,"FaxNumber":"(218) 555-0101","DateOfBirth":"1953-11-30 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"hele@tailspintoys.com","PreferredName":"Hele"}, - {"Gender":"Female","FullName":"Bishwanath Ghosh","PersonID":365,"FaxNumber":"(701) 555-0101","DateOfBirth":"1968-09-26 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"bishwanath@tailspintoys.com","PreferredName":"Bishwanath"}, - {"Gender":"Female","FullName":"Gasper Jovicevic","PersonID":366,"FaxNumber":"(701) 555-0101","DateOfBirth":"1972-02-04 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"gasper@tailspintoys.com","PreferredName":"Gasper"}, - {"Gender":"Female","FullName":"Gianguido Lucchesi","PersonID":367,"FaxNumber":"(303) 555-0101","DateOfBirth":"1961-02-04 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"gianguido@tailspintoys.com","PreferredName":"Gianguido"}, - {"Gender":"Female","FullName":"Harihar Chatterjee","PersonID":368,"FaxNumber":"(303) 555-0101","DateOfBirth":"1967-11-01 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"harihar@tailspintoys.com","PreferredName":"Harihar"}, - {"Gender":"Female","FullName":"Nu Bach","PersonID":369,"FaxNumber":"(212) 555-0101","DateOfBirth":"1965-03-25 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"nu@tailspintoys.com","PreferredName":"Nu"}, - {"Gender":"Female","FullName":"Gautama Reddy","PersonID":370,"FaxNumber":"(212) 555-0101","DateOfBirth":"1996-10-20 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"gautama@tailspintoys.com","PreferredName":"Gautama"}, - {"Gender":"Female","FullName":"Ivonna Ene","PersonID":371,"FaxNumber":"(702) 555-0101","DateOfBirth":"1982-12-26 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"ivonna@tailspintoys.com","PreferredName":"Ivonna"}, - {"Gender":"Female","FullName":"Girish Banerjee","PersonID":372,"FaxNumber":"(702) 555-0101","DateOfBirth":"1982-06-08 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"girish@tailspintoys.com","PreferredName":"Girish"}, - {"Gender":"Female","FullName":"Ceyhun sahin","PersonID":373,"FaxNumber":"(215) 555-0101","DateOfBirth":"1989-11-25 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ceyhun@tailspintoys.com","PreferredName":"Ceyhun"}, - {"Gender":"Female","FullName":"Dhir Bhattacharya","PersonID":374,"FaxNumber":"(215) 555-0101","DateOfBirth":"1955-08-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"dhir@tailspintoys.com","PreferredName":"Dhir"}, - {"Gender":"Female","FullName":"Tian Peng","PersonID":375,"FaxNumber":"(203) 555-0101","DateOfBirth":"1953-09-24 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"tian@tailspintoys.com","PreferredName":"Tian"}, - {"Gender":"Female","FullName":"Mariano Costa","PersonID":376,"FaxNumber":"(203) 555-0101","DateOfBirth":"1957-03-20 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"mariano@tailspintoys.com","PreferredName":"Mariano"}, - {"Gender":"Female","FullName":"Vlastimil Bohuslav","PersonID":377,"FaxNumber":"(210) 555-0101","DateOfBirth":"1994-09-16 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"vlastimil@tailspintoys.com","PreferredName":"Vlastimil"}, - {"Gender":"Female","FullName":"Beau Boule","PersonID":378,"FaxNumber":"(210) 555-0101","DateOfBirth":"1975-01-13 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"beau @tailspintoys.com","PreferredName":"Beau "}, - {"Gender":"Female","FullName":"Nejc Vosnik","PersonID":379,"FaxNumber":"(210) 555-0101","DateOfBirth":"1976-08-18 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"nejc@tailspintoys.com","PreferredName":"Nejc"}, - {"Gender":"Female","FullName":"Amalendu Veturi","PersonID":380,"FaxNumber":"(210) 555-0101","DateOfBirth":"1955-12-22 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"amalendu@tailspintoys.com","PreferredName":"Amalendu"}, - {"Gender":"Female","FullName":"Anindo Mazumdar","PersonID":381,"FaxNumber":"(210) 555-0101","DateOfBirth":"1979-01-13 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"anindo@tailspintoys.com","PreferredName":"Anindo"}, - {"Gender":"Female","FullName":"Tarja Saikkonen","PersonID":382,"FaxNumber":"(210) 555-0101","DateOfBirth":"1974-05-13 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"tarja@tailspintoys.com","PreferredName":"Tarja"}, - {"Gender":"Female","FullName":"Nils Balodis","PersonID":383,"FaxNumber":"(307) 555-0101","DateOfBirth":"1972-04-16 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"nils@tailspintoys.com","PreferredName":"Nils"}, - {"Gender":"Female","FullName":"Bernadette Potvin","PersonID":384,"FaxNumber":"(307) 555-0101","DateOfBirth":"1974-10-26 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"bernadette @tailspintoys.com","PreferredName":"Bernadette "}, - {"Gender":"Female","FullName":"Daniella Barbosa","PersonID":385,"FaxNumber":"(212) 555-0101","DateOfBirth":"1974-11-27 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"daniella@tailspintoys.com","PreferredName":"Daniella"}, - {"Gender":"Female","FullName":"Nancy Hansson","PersonID":386,"FaxNumber":"(212) 555-0101","DateOfBirth":"1979-07-15 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"nancy@tailspintoys.com","PreferredName":"Nancy"}, - {"Gender":"Female","FullName":"Raymond Levesque","PersonID":387,"FaxNumber":"(201) 555-0101","DateOfBirth":"1982-09-24 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"raymond@tailspintoys.com","PreferredName":"Raymond"}, - {"Gender":"Female","FullName":"Linda Fisher","PersonID":388,"FaxNumber":"(201) 555-0101","DateOfBirth":"1981-08-26 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"linda@tailspintoys.com","PreferredName":"Linda"}, - {"Gender":"Female","FullName":"Raymond Desforges","PersonID":389,"FaxNumber":"(505) 555-0101","DateOfBirth":"1978-09-27 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"raymond@tailspintoys.com","PreferredName":"Raymond"}, - {"Gender":"Female","FullName":"Stern Neumann","PersonID":390,"FaxNumber":"(505) 555-0101","DateOfBirth":"1950-08-17 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"stern@tailspintoys.com","PreferredName":"Stern"}, - {"Gender":"Female","FullName":"Raju Atluri","PersonID":391,"FaxNumber":"(212) 555-0101","DateOfBirth":"1980-05-19 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"raju@tailspintoys.com","PreferredName":"Raju"}, - {"Gender":"Female","FullName":"Cezar Preda","PersonID":392,"FaxNumber":"(212) 555-0101","DateOfBirth":"1989-01-07 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"cezar@tailspintoys.com","PreferredName":"Cezar"}, - {"Gender":"Female","FullName":"Matyas Bohuslav","PersonID":393,"FaxNumber":"(239) 555-0101","DateOfBirth":"1997-11-27 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"matyas@tailspintoys.com","PreferredName":"Matyas"}, - {"Gender":"Female","FullName":"Ambaajeeraav Ghattamaneni","PersonID":394,"FaxNumber":"(239) 555-0101","DateOfBirth":"1963-07-13 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"ambaajeeraav@tailspintoys.com","PreferredName":"Ambaajeeraav"}, - {"Gender":"Female","FullName":"Julio Correa","PersonID":395,"FaxNumber":"(505) 555-0101","DateOfBirth":"1951-03-28 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"julio@tailspintoys.com","PreferredName":"Julio"}, - {"Gender":"Female","FullName":"Hamsapriya Nandamuri","PersonID":396,"FaxNumber":"(505) 555-0101","DateOfBirth":"1994-12-01 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"hamsapriya@tailspintoys.com","PreferredName":"Hamsapriya"}, - {"Gender":"Female","FullName":"Banshari De","PersonID":397,"FaxNumber":"(206) 555-0101","DateOfBirth":"1955-04-28 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"banshari@tailspintoys.com","PreferredName":"Banshari"}, - {"Gender":"Female","FullName":"Sudhir Yadav","PersonID":398,"FaxNumber":"(206) 555-0101","DateOfBirth":"1959-11-18 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"sudhir@tailspintoys.com","PreferredName":"Sudhir"}, - {"Gender":"Female","FullName":"Ngai Lam","PersonID":399,"FaxNumber":"(215) 555-0101","DateOfBirth":"1952-10-30 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ngai@tailspintoys.com","PreferredName":"Ngai"}, - {"Gender":"Female","FullName":"Camille Hetu","PersonID":400,"FaxNumber":"(215) 555-0101","DateOfBirth":"1951-06-26 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"camille@tailspintoys.com","PreferredName":"Camille"}, - {"Gender":"Female","FullName":"Hyun-Doo Song","PersonID":401,"FaxNumber":"(262) 555-0101","DateOfBirth":"1957-07-21 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"hyun-doo@tailspintoys.com","PreferredName":"Hyun-Doo"}, - {"Gender":"Female","FullName":"Bahadır Korkmaz","PersonID":402,"FaxNumber":"(262) 555-0101","DateOfBirth":"1987-11-04 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"bahad@tailspintoys.com","PreferredName":"Bahadır"}, - {"Gender":"Female","FullName":"Gabriela Srbova","PersonID":403,"FaxNumber":"(319) 555-0101","DateOfBirth":"1960-03-19 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"gabriela@tailspintoys.com","PreferredName":"Gabriela"}, - {"Gender":"Female","FullName":"Priya kaushal","PersonID":404,"FaxNumber":"(319) 555-0101","DateOfBirth":"1994-08-12 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"priya@tailspintoys.com","PreferredName":"Priya"}, - {"Gender":"Female","FullName":"Serkan senturk","PersonID":405,"FaxNumber":"(702) 555-0101","DateOfBirth":"1975-06-21 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"serkan@tailspintoys.com","PreferredName":"Serkan"}, - {"Gender":"Female","FullName":"Fatemeh Javan","PersonID":406,"FaxNumber":"(702) 555-0101","DateOfBirth":"1962-12-20 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"fatemeh@tailspintoys.com","PreferredName":"Fatemeh"}, - {"Gender":"Female","FullName":"Aahlada Thota","PersonID":407,"FaxNumber":"(215) 555-0101","DateOfBirth":"1959-02-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"aahlada@tailspintoys.com","PreferredName":"Aahlada"}, - {"Gender":"Female","FullName":"Marten Keskkula","PersonID":408,"FaxNumber":"(215) 555-0101","DateOfBirth":"1983-06-09 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"marten@tailspintoys.com","PreferredName":"Marten"}, - {"Gender":"Female","FullName":"Ayberk sahin","PersonID":409,"FaxNumber":"(308) 555-0101","DateOfBirth":"1991-07-25 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"ayberk@tailspintoys.com","PreferredName":"Ayberk"}, - {"Gender":"Female","FullName":"Magda Ciora","PersonID":410,"FaxNumber":"(308) 555-0101","DateOfBirth":"1981-08-24 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"magda@tailspintoys.com","PreferredName":"Magda"}, - {"Gender":"Female","FullName":"Kaan Tekin","PersonID":411,"FaxNumber":"(239) 555-0101","DateOfBirth":"1954-04-18 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"kaan@tailspintoys.com","PreferredName":"Kaan"}, - {"Gender":"Female","FullName":"Harshini Kommineni","PersonID":412,"FaxNumber":"(239) 555-0101","DateOfBirth":"1981-08-30 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"harshini@tailspintoys.com","PreferredName":"Harshini"}, - {"Gender":"Female","FullName":"Lata Khandke","PersonID":413,"FaxNumber":"(216) 555-0101","DateOfBirth":"1981-12-01 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"lata@tailspintoys.com","PreferredName":"Lata"}, - {"Gender":"Female","FullName":"Emil Nutiu","PersonID":414,"FaxNumber":"(216) 555-0101","DateOfBirth":"1950-11-05 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"emil@tailspintoys.com","PreferredName":"Emil"}, - {"Gender":"Female","FullName":"Truman Eder","PersonID":415,"FaxNumber":"(225) 555-0101","DateOfBirth":"1966-09-04 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"truman@tailspintoys.com","PreferredName":"Truman"}, - {"Gender":"Female","FullName":"Lale Javan","PersonID":416,"FaxNumber":"(225) 555-0101","DateOfBirth":"1983-03-14 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"lale@tailspintoys.com","PreferredName":"Lale"}, - {"Gender":"Female","FullName":"Lorraine Paulet","PersonID":417,"FaxNumber":"(458) 555-0101","DateOfBirth":"1957-06-10 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"lorraine@tailspintoys.com","PreferredName":"Lorraine"}, - {"Gender":"Female","FullName":"Yusuf Johansson","PersonID":418,"FaxNumber":"(458) 555-0101","DateOfBirth":"1959-10-27 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"yusuf@tailspintoys.com","PreferredName":"Yusuf"}, - {"Gender":"Female","FullName":"Biplab De","PersonID":419,"FaxNumber":"(231) 555-0101","DateOfBirth":"1956-09-30 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"biplab@tailspintoys.com","PreferredName":"Biplab"}, - {"Gender":"Female","FullName":"Dhanishta Kidambi","PersonID":420,"FaxNumber":"(231) 555-0101","DateOfBirth":"1964-06-09 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"dhanishta@tailspintoys.com","PreferredName":"Dhanishta"}, - {"Gender":"Female","FullName":"Rachelle Brasseur","PersonID":421,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-08-03 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"rachelle@tailspintoys.com","PreferredName":"Rachelle"}, - {"Gender":"Female","FullName":"Bholanath Das","PersonID":422,"FaxNumber":"(210) 555-0101","DateOfBirth":"1974-01-10 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"bholanath@tailspintoys.com","PreferredName":"Bholanath"}, - {"Gender":"Female","FullName":"Sara Charlton","PersonID":423,"FaxNumber":"(215) 555-0101","DateOfBirth":"1960-10-31 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"sara@tailspintoys.com","PreferredName":"Sara"}, - {"Gender":"Female","FullName":"Libor safranek","PersonID":424,"FaxNumber":"(215) 555-0101","DateOfBirth":"1975-07-21 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"libor@tailspintoys.com","PreferredName":"Libor"}, - {"Gender":"Female","FullName":"Ramesh Mukherjee","PersonID":425,"FaxNumber":"(217) 555-0101","DateOfBirth":"1991-01-02 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"ramesh@tailspintoys.com","PreferredName":"Ramesh"}, - {"Gender":"Female","FullName":"Byung-Hyun Gwak","PersonID":426,"FaxNumber":"(217) 555-0101","DateOfBirth":"1958-07-08 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"byung-hyun@tailspintoys.com","PreferredName":"Byung-Hyun"}, - {"Gender":"Female","FullName":"Ester Ahmadian","PersonID":427,"FaxNumber":"(229) 555-0101","DateOfBirth":"1986-03-10 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"ester@tailspintoys.com","PreferredName":"Ester"}, - {"Gender":"Female","FullName":"Kanika Mazumdar","PersonID":428,"FaxNumber":"(229) 555-0101","DateOfBirth":"1990-05-19 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"kanika@tailspintoys.com","PreferredName":"Kanika"}, - {"Gender":"Female","FullName":"Daniel Magnusson","PersonID":429,"FaxNumber":"(505) 555-0101","DateOfBirth":"1972-04-05 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"daniel@tailspintoys.com","PreferredName":"Daniel"}, - {"Gender":"Female","FullName":"Cemal Dogan","PersonID":430,"FaxNumber":"(505) 555-0101","DateOfBirth":"1991-11-24 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"cemal@tailspintoys.com","PreferredName":"Cemal"}, - {"Gender":"Female","FullName":"Jack Carpenter","PersonID":431,"FaxNumber":"(270) 555-0101","DateOfBirth":"1987-10-18 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"jack@tailspintoys.com","PreferredName":"Jack"}, - {"Gender":"Female","FullName":"Am Lieu","PersonID":432,"FaxNumber":"(270) 555-0101","DateOfBirth":"1979-03-11 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"am@tailspintoys.com","PreferredName":"Am"}, - {"Gender":"Female","FullName":"Thomas Fischer","PersonID":433,"FaxNumber":"(239) 555-0101","DateOfBirth":"1990-01-30 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"thomas@tailspintoys.com","PreferredName":"Thomas"}, - {"Gender":"Female","FullName":"Neil Logan","PersonID":434,"FaxNumber":"(239) 555-0101","DateOfBirth":"1985-10-26 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"neil@tailspintoys.com","PreferredName":"Neil"}, - {"Gender":"Female","FullName":"Viollette Monty","PersonID":435,"FaxNumber":"(803) 555-0101","DateOfBirth":"1977-09-14 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"viollette@tailspintoys.com","PreferredName":"Viollette"}, - {"Gender":"Female","FullName":"Gita Dutta","PersonID":436,"FaxNumber":"(803) 555-0101","DateOfBirth":"1957-07-04 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"gita@tailspintoys.com","PreferredName":"Gita"}, - {"Gender":"Female","FullName":"Alinne Cardoso","PersonID":437,"FaxNumber":"(308) 555-0101","DateOfBirth":"1975-03-13 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"alinne@tailspintoys.com","PreferredName":"Alinne"}, - {"Gender":"Female","FullName":"Uma Pandit","PersonID":438,"FaxNumber":"(308) 555-0101","DateOfBirth":"1976-04-10 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"uma@tailspintoys.com","PreferredName":"Uma"}, - {"Gender":"Female","FullName":"Mani Poddar","PersonID":439,"FaxNumber":"(209) 555-0101","DateOfBirth":"1967-08-07 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"mani@tailspintoys.com","PreferredName":"Mani"}, - {"Gender":"Female","FullName":"Rama Mukaddam","PersonID":440,"FaxNumber":"(209) 555-0101","DateOfBirth":"1987-10-23 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"rama@tailspintoys.com","PreferredName":"Rama"}, - {"Gender":"Female","FullName":"Deakshitulu Mokkapati","PersonID":441,"FaxNumber":"(314) 555-0101","DateOfBirth":"1985-05-01 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"deakshitulu@tailspintoys.com","PreferredName":"Deakshitulu"}, - {"Gender":"Female","FullName":"Tereza PinÄakova","PersonID":442,"FaxNumber":"(314) 555-0101","DateOfBirth":"1987-04-18 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"tereza@tailspintoys.com","PreferredName":"Tereza"}, - {"Gender":"Female","FullName":"Cezar Pavel","PersonID":443,"FaxNumber":"(303) 555-0101","DateOfBirth":"1959-01-27 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"cezar@tailspintoys.com","PreferredName":"Cezar"}, - {"Gender":"Female","FullName":"Bahaar Yekta","PersonID":444,"FaxNumber":"(303) 555-0101","DateOfBirth":"1966-03-23 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"bahaar@tailspintoys.com","PreferredName":"Bahaar"}, - {"Gender":"Female","FullName":"Fanni Benko","PersonID":445,"FaxNumber":"(385) 555-0101","DateOfBirth":"1974-09-18 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"fanni@tailspintoys.com","PreferredName":"Fanni"}, - {"Gender":"Female","FullName":"Amar Dutta","PersonID":446,"FaxNumber":"(385) 555-0101","DateOfBirth":"1968-10-15 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"amar@tailspintoys.com","PreferredName":"Amar"}, - {"Gender":"Female","FullName":"Brenda Morgan","PersonID":447,"FaxNumber":"(206) 555-0101","DateOfBirth":"1954-01-02 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"brenda@tailspintoys.com","PreferredName":"Brenda"}, - {"Gender":"Female","FullName":"Kamal Nakhtare","PersonID":448,"FaxNumber":"(206) 555-0101","DateOfBirth":"1991-12-01 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"kamal@tailspintoys.com","PreferredName":"Kamal"}, - {"Gender":"Female","FullName":"Olga Alexandrova","PersonID":449,"FaxNumber":"(303) 555-0101","DateOfBirth":"1955-11-24 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"olga@wingtiptoys.com","PreferredName":"Olga"}, - {"Gender":"Female","FullName":"Bibi Javan","PersonID":450,"FaxNumber":"(303) 555-0101","DateOfBirth":"1973-04-16 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"bibi@wingtiptoys.com","PreferredName":"Bibi"}, - {"Gender":"Female","FullName":"Maris Baltins","PersonID":451,"FaxNumber":"(215) 555-0101","DateOfBirth":"1975-05-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"maris@wingtiptoys.com","PreferredName":"Maris"}, - {"Gender":"Female","FullName":"Taneli Hahl","PersonID":452,"FaxNumber":"(215) 555-0101","DateOfBirth":"1987-10-11 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"taneli@wingtiptoys.com","PreferredName":"Taneli"}, - {"Gender":"Female","FullName":"Parsa Reuser","PersonID":453,"FaxNumber":"(480) 555-0101","DateOfBirth":"1969-09-06 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"parsa@wingtiptoys.com","PreferredName":"Parsa"}, - {"Gender":"Female","FullName":"Da-eun Kwak","PersonID":454,"FaxNumber":"(480) 555-0101","DateOfBirth":"1953-04-05 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"da-eun@wingtiptoys.com","PreferredName":"Da-eun"}, - {"Gender":"Female","FullName":"Duleep Srivastava","PersonID":455,"FaxNumber":"(215) 555-0101","DateOfBirth":"1977-11-21 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"duleep@wingtiptoys.com","PreferredName":"Duleep"}, - {"Gender":"Female","FullName":"Kurt Balog","PersonID":456,"FaxNumber":"(215) 555-0101","DateOfBirth":"1996-09-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"kurt@wingtiptoys.com","PreferredName":"Kurt"}, - {"Gender":"Female","FullName":"Miran Nikolic","PersonID":457,"FaxNumber":"(217) 555-0101","DateOfBirth":"1981-10-06 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"miran@wingtiptoys.com","PreferredName":"Miran"}, - {"Gender":"Female","FullName":"Indra Mudaliyar","PersonID":458,"FaxNumber":"(217) 555-0101","DateOfBirth":"1991-05-17 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"indra@wingtiptoys.com","PreferredName":"Indra"}, - {"Gender":"Female","FullName":"Calin Bojin","PersonID":459,"FaxNumber":"(205) 555-0101","DateOfBirth":"1969-10-08 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"calin@wingtiptoys.com","PreferredName":"Calin"}, - {"Gender":"Female","FullName":"Maxime Westerink","PersonID":460,"FaxNumber":"(205) 555-0101","DateOfBirth":"1967-06-25 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"maxime@wingtiptoys.com","PreferredName":"Maxime"}, - {"Gender":"Female","FullName":"Lang Le","PersonID":461,"FaxNumber":"(225) 555-0101","DateOfBirth":"1993-12-09 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"lang@wingtiptoys.com","PreferredName":"Lang"}, - {"Gender":"Female","FullName":"Bozena Divisova","PersonID":462,"FaxNumber":"(225) 555-0101","DateOfBirth":"1984-01-05 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"bozena@wingtiptoys.com","PreferredName":"Bozena"}, - {"Gender":"Female","FullName":"Bhaagyalakshmi Muppavarapu","PersonID":463,"FaxNumber":"(210) 555-0101","DateOfBirth":"1990-02-17 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"bhaagyalakshmi@wingtiptoys.com","PreferredName":"Bhaagyalakshmi"}, - {"Gender":"Female","FullName":"Durjoy Bose","PersonID":464,"FaxNumber":"(210) 555-0101","DateOfBirth":"1982-08-12 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"durjoy@wingtiptoys.com","PreferredName":"Durjoy"}, - {"Gender":"Female","FullName":"Dimitry Nechita","PersonID":465,"FaxNumber":"(209) 555-0101","DateOfBirth":"1976-07-09 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"dimitry@wingtiptoys.com","PreferredName":"Dimitry"}, - {"Gender":"Female","FullName":"Meredith Padilla","PersonID":466,"FaxNumber":"(209) 555-0101","DateOfBirth":"1977-07-06 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"meredith@wingtiptoys.com","PreferredName":"Meredith"}, - {"Gender":"Female","FullName":"Miroslav Kohout","PersonID":467,"FaxNumber":"(210) 555-0101","DateOfBirth":"1979-06-02 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"miroslav@wingtiptoys.com","PreferredName":"Miroslav"}, - {"Gender":"Female","FullName":"Teresa Torres","PersonID":468,"FaxNumber":"(210) 555-0101","DateOfBirth":"1993-01-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"teresa@wingtiptoys.com","PreferredName":"Teresa"}, - {"Gender":"Female","FullName":"Fransje Mutlu","PersonID":469,"FaxNumber":"(262) 555-0101","DateOfBirth":"1977-02-23 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"fransje@wingtiptoys.com","PreferredName":"Fransje"}, - {"Gender":"Female","FullName":"Karel Hybl","PersonID":470,"FaxNumber":"(262) 555-0101","DateOfBirth":"1980-01-10 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"karel@wingtiptoys.com","PreferredName":"Karel"}, - {"Gender":"Female","FullName":"Chati Ornlamai","PersonID":471,"FaxNumber":"(406) 555-0101","DateOfBirth":"1952-06-30 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"chati@wingtiptoys.com","PreferredName":"Chati"}, - {"Gender":"Female","FullName":"Tajana Lovric","PersonID":472,"FaxNumber":"(406) 555-0101","DateOfBirth":"1971-07-03 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"tajana@wingtiptoys.com","PreferredName":"Tajana"}, - {"Gender":"Female","FullName":"Raine Knihtila","PersonID":473,"FaxNumber":"(210) 555-0101","DateOfBirth":"1981-12-19 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"raine@wingtiptoys.com","PreferredName":"Raine"}, - {"Gender":"Female","FullName":"Dhir Mazumdar","PersonID":474,"FaxNumber":"(210) 555-0101","DateOfBirth":"1958-09-27 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"dhir@wingtiptoys.com","PreferredName":"Dhir"}, - {"Gender":"Female","FullName":"Lan Chu","PersonID":475,"FaxNumber":"(215) 555-0101","DateOfBirth":"1962-07-20 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"lan@wingtiptoys.com","PreferredName":"Lan"}, - {"Gender":"Female","FullName":"Tereza Prikrylova","PersonID":476,"FaxNumber":"(215) 555-0101","DateOfBirth":"1957-04-24 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"tereza@wingtiptoys.com","PreferredName":"Tereza"}, - {"Gender":"Female","FullName":"Maurice English","PersonID":477,"FaxNumber":"(229) 555-0101","DateOfBirth":"1952-10-11 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"maurice@wingtiptoys.com","PreferredName":"Maurice"}, - {"Gender":"Female","FullName":"Daniella Ribeiro","PersonID":478,"FaxNumber":"(229) 555-0101","DateOfBirth":"1975-11-22 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"daniella@wingtiptoys.com","PreferredName":"Daniella"}, - {"Gender":"Female","FullName":"Irene Sepp","PersonID":479,"FaxNumber":"(262) 555-0101","DateOfBirth":"1963-04-11 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"irene@wingtiptoys.com","PreferredName":"Irene"}, - {"Gender":"Female","FullName":"Hubert Fields","PersonID":480,"FaxNumber":"(262) 555-0101","DateOfBirth":"1973-02-01 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"hubert@wingtiptoys.com","PreferredName":"Hubert"}, - {"Gender":"Female","FullName":"Chandranath Bose","PersonID":481,"FaxNumber":"(262) 555-0101","DateOfBirth":"1995-08-27 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"chandranath@wingtiptoys.com","PreferredName":"Chandranath"}, - {"Gender":"Female","FullName":"Gaurav Acharya","PersonID":482,"FaxNumber":"(262) 555-0101","DateOfBirth":"1982-01-18 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"gaurav@wingtiptoys.com","PreferredName":"Gaurav"}, - {"Gender":"Female","FullName":"Ana Julijana Isa","PersonID":483,"FaxNumber":"(406) 555-0101","DateOfBirth":"1978-11-02 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"ana julijana@wingtiptoys.com","PreferredName":"Ana Julijana"}, - {"Gender":"Female","FullName":"Libor Klaus","PersonID":484,"FaxNumber":"(406) 555-0101","DateOfBirth":"1970-06-28 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"libor@wingtiptoys.com","PreferredName":"Libor"}, - {"Gender":"Female","FullName":"Gireesh Bhogireddy","PersonID":485,"FaxNumber":"(239) 555-0101","DateOfBirth":"1951-07-24 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"gireesh@wingtiptoys.com","PreferredName":"Gireesh"}, - {"Gender":"Female","FullName":"Stanislav Zeman","PersonID":486,"FaxNumber":"(239) 555-0101","DateOfBirth":"1968-06-06 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"stanislav@wingtiptoys.com","PreferredName":"Stanislav"}, - {"Gender":"Female","FullName":"Premwadee Atitarn","PersonID":487,"FaxNumber":"(209) 555-0101","DateOfBirth":"1988-04-29 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"premwadee@wingtiptoys.com","PreferredName":"Premwadee"}, - {"Gender":"Female","FullName":"Deeptendu Das","PersonID":488,"FaxNumber":"(209) 555-0101","DateOfBirth":"1955-05-10 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"deeptendu@wingtiptoys.com","PreferredName":"Deeptendu"}, - {"Gender":"Female","FullName":"Nishant Patil","PersonID":489,"FaxNumber":"(205) 555-0101","DateOfBirth":"1964-07-05 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"nishant@wingtiptoys.com","PreferredName":"Nishant"}, - {"Gender":"Female","FullName":"Bhaagyalakshmi Rajanala","PersonID":490,"FaxNumber":"(205) 555-0101","DateOfBirth":"1966-09-20 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"bhaagyalakshmi@wingtiptoys.com","PreferredName":"Bhaagyalakshmi"}, - {"Gender":"Female","FullName":"Rohan Das","PersonID":491,"FaxNumber":"(206) 555-0101","DateOfBirth":"1950-04-13 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"rohan@wingtiptoys.com","PreferredName":"Rohan"}, - {"Gender":"Female","FullName":"Bhaanusree Ankitham","PersonID":492,"FaxNumber":"(206) 555-0101","DateOfBirth":"1994-05-04 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"bhaanusree@wingtiptoys.com","PreferredName":"Bhaanusree"}, - {"Gender":"Female","FullName":"Aamdaal Kamasamudram","PersonID":493,"FaxNumber":"(316) 555-0101","DateOfBirth":"1981-04-05 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"aamdaal@wingtiptoys.com","PreferredName":"Aamdaal"}, - {"Gender":"Female","FullName":"Karita Rosberg","PersonID":494,"FaxNumber":"(316) 555-0101","DateOfBirth":"1955-11-02 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"karita@wingtiptoys.com","PreferredName":"Karita"}, - {"Gender":"Female","FullName":"Baebeesarasvati Kamasamudram","PersonID":495,"FaxNumber":"(308) 555-0101","DateOfBirth":"1979-01-29 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"baebeesarasvati@wingtiptoys.com","PreferredName":"Baebeesarasvati"}, - {"Gender":"Female","FullName":"Hana Palatova","PersonID":496,"FaxNumber":"(308) 555-0101","DateOfBirth":"1957-07-10 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"hana@wingtiptoys.com","PreferredName":"Hana"}, - {"Gender":"Female","FullName":"Marcello Dellucci","PersonID":497,"FaxNumber":"(405) 555-0101","DateOfBirth":"1980-11-04 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"marcello@wingtiptoys.com","PreferredName":"Marcello"}, - {"Gender":"Female","FullName":"Shobha Raju","PersonID":498,"FaxNumber":"(405) 555-0101","DateOfBirth":"1964-05-25 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"shobha@wingtiptoys.com","PreferredName":"Shobha"}, - {"Gender":"Female","FullName":"Mee-Kyong Sin","PersonID":499,"FaxNumber":"(480) 555-0101","DateOfBirth":"1953-10-09 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"mee-kyong@wingtiptoys.com","PreferredName":"Mee-Kyong"}, - {"Gender":"Female","FullName":"VÄ›ra Kopecka","PersonID":500,"FaxNumber":"(480) 555-0101","DateOfBirth":"1950-12-10 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"vacra@wingtiptoys.com","PreferredName":"VÄ›ra"}, - {"Gender":"Female","FullName":"Ivica LuÄic","PersonID":501,"FaxNumber":"(212) 555-0101","DateOfBirth":"1984-11-08 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"ivica@wingtiptoys.com","PreferredName":"Ivica"}, - {"Gender":"Female","FullName":"David Svoboda","PersonID":502,"FaxNumber":"(212) 555-0101","DateOfBirth":"1977-01-02 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"david@wingtiptoys.com","PreferredName":"David"}, - {"Gender":"Female","FullName":"Vinicius Correa","PersonID":503,"FaxNumber":"(231) 555-0101","DateOfBirth":"1961-12-17 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"vinicius@wingtiptoys.com","PreferredName":"Vinicius"}, - {"Gender":"Female","FullName":"Surat Pornpipatpong","PersonID":504,"FaxNumber":"(231) 555-0101","DateOfBirth":"1964-11-25 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"surat@wingtiptoys.com","PreferredName":"Surat"}, - {"Gender":"Female","FullName":"Fabio Pena","PersonID":505,"FaxNumber":"(314) 555-0101","DateOfBirth":"1966-03-09 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"fabio@wingtiptoys.com","PreferredName":"Fabio"}, - {"Gender":"Female","FullName":"Kauan Gomes","PersonID":506,"FaxNumber":"(314) 555-0101","DateOfBirth":"1982-04-01 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"kauan@wingtiptoys.com","PreferredName":"Kauan"}, - {"Gender":"Female","FullName":"Lakshmi Roy","PersonID":507,"FaxNumber":"(208) 555-0101","DateOfBirth":"1955-08-21 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"lakshmi@wingtiptoys.com","PreferredName":"Lakshmi"}, - {"Gender":"Female","FullName":"Kersti Mihhailov","PersonID":508,"FaxNumber":"(208) 555-0101","DateOfBirth":"1967-11-15 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"kersti@wingtiptoys.com","PreferredName":"Kersti"}, - {"Gender":"Female","FullName":"Selma Seppanen","PersonID":509,"FaxNumber":"(787) 555-0101","DateOfBirth":"1995-12-21 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"selma@wingtiptoys.com","PreferredName":"Selma"}, - {"Gender":"Female","FullName":"Danielle Brasseur","PersonID":510,"FaxNumber":"(787) 555-0101","DateOfBirth":"1991-10-11 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"danielle @wingtiptoys.com","PreferredName":"Danielle "}, - {"Gender":"Female","FullName":"Bay Ly","PersonID":511,"FaxNumber":"(239) 555-0101","DateOfBirth":"1990-03-29 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"bay@wingtiptoys.com","PreferredName":"Bay"}, - {"Gender":"Female","FullName":"Sanjiv Raina","PersonID":512,"FaxNumber":"(239) 555-0101","DateOfBirth":"1989-08-12 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"sanjiv@wingtiptoys.com","PreferredName":"Sanjiv"}, - {"Gender":"Female","FullName":"Adirake Saenamuang","PersonID":513,"FaxNumber":"(405) 555-0101","DateOfBirth":"1953-04-06 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"adirake@wingtiptoys.com","PreferredName":"Adirake"}, - {"Gender":"Female","FullName":"Leena De","PersonID":514,"FaxNumber":"(405) 555-0101","DateOfBirth":"1988-04-01 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"leena@wingtiptoys.com","PreferredName":"Leena"}, - {"Gender":"Female","FullName":"Tarja Penttila","PersonID":515,"FaxNumber":"(212) 555-0101","DateOfBirth":"1976-06-21 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"tarja@wingtiptoys.com","PreferredName":"Tarja"}, - {"Gender":"Female","FullName":"Gunnar Larsson","PersonID":516,"FaxNumber":"(212) 555-0101","DateOfBirth":"1982-05-08 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"gunnar@wingtiptoys.com","PreferredName":"Gunnar"}, - {"Gender":"Female","FullName":"Devendranath Huq","PersonID":517,"FaxNumber":"(217) 555-0101","DateOfBirth":"1979-09-27 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"devendranath@wingtiptoys.com","PreferredName":"Devendranath"}, - {"Gender":"Female","FullName":"Vicente Cabrera","PersonID":518,"FaxNumber":"(217) 555-0101","DateOfBirth":"1964-02-22 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"vicente@wingtiptoys.com","PreferredName":"Vicente"}, - {"Gender":"Female","FullName":"Enes Olsson","PersonID":519,"FaxNumber":"(276) 555-0101","DateOfBirth":"1953-10-25 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"enes@wingtiptoys.com","PreferredName":"Enes"}, - {"Gender":"Female","FullName":"Milada Kubatova","PersonID":520,"FaxNumber":"(276) 555-0101","DateOfBirth":"1951-10-19 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"milada@wingtiptoys.com","PreferredName":"Milada"}, - {"Gender":"Female","FullName":"Vanja Grgic","PersonID":521,"FaxNumber":"(215) 555-0101","DateOfBirth":"1952-11-17 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"vanja@wingtiptoys.com","PreferredName":"Vanja"}, - {"Gender":"Female","FullName":"Daniela Omelkova","PersonID":522,"FaxNumber":"(215) 555-0101","DateOfBirth":"1971-08-23 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"daniela@wingtiptoys.com","PreferredName":"Daniela"}, - {"Gender":"Female","FullName":"Dayaram Mishra","PersonID":523,"FaxNumber":"(216) 555-0101","DateOfBirth":"1988-02-15 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"dayaram@wingtiptoys.com","PreferredName":"Dayaram"}, - {"Gender":"Female","FullName":"Gal Kokeza","PersonID":524,"FaxNumber":"(216) 555-0101","DateOfBirth":"1951-06-11 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"gal@wingtiptoys.com","PreferredName":"Gal"}, - {"Gender":"Female","FullName":"Mina Omidzadeh","PersonID":525,"FaxNumber":"(262) 555-0101","DateOfBirth":"1963-02-07 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"mina@wingtiptoys.com","PreferredName":"Mina"}, - {"Gender":"Female","FullName":"Adrian Bengtsson","PersonID":526,"FaxNumber":"(262) 555-0101","DateOfBirth":"1985-08-13 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"adrian@wingtiptoys.com","PreferredName":"Adrian"}, - {"Gender":"Female","FullName":"Kadir Usenuly","PersonID":527,"FaxNumber":"(405) 555-0101","DateOfBirth":"1982-07-03 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"kadir@wingtiptoys.com","PreferredName":"Kadir"}, - {"Gender":"Female","FullName":"Rajiv Shasthri","PersonID":528,"FaxNumber":"(405) 555-0101","DateOfBirth":"1988-06-24 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"rajiv@wingtiptoys.com","PreferredName":"Rajiv"}, - {"Gender":"Female","FullName":"Kajsa Jakobsson","PersonID":529,"FaxNumber":"(319) 555-0101","DateOfBirth":"1986-07-21 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"kajsa@wingtiptoys.com","PreferredName":"Kajsa"}, - {"Gender":"Female","FullName":"Elnaz Rahimi","PersonID":530,"FaxNumber":"(319) 555-0101","DateOfBirth":"1987-06-08 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"elnaz@wingtiptoys.com","PreferredName":"Elnaz"}, - {"Gender":"Female","FullName":"Rahul Ghate","PersonID":531,"FaxNumber":"(215) 555-0101","DateOfBirth":"1985-08-19 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"rahul@wingtiptoys.com","PreferredName":"Rahul"}, - {"Gender":"Female","FullName":"Chuan Wongsawat","PersonID":532,"FaxNumber":"(215) 555-0101","DateOfBirth":"1985-05-08 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"chuan@wingtiptoys.com","PreferredName":"Chuan"}, - {"Gender":"Female","FullName":"Lien Banh","PersonID":533,"FaxNumber":"(231) 555-0101","DateOfBirth":"1962-08-15 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"lien@wingtiptoys.com","PreferredName":"Lien"}, - {"Gender":"Female","FullName":"Anshula Mitra","PersonID":534,"FaxNumber":"(231) 555-0101","DateOfBirth":"1984-08-28 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"anshula@wingtiptoys.com","PreferredName":"Anshula"}, - {"Gender":"Female","FullName":"Divyendu Chakraborty","PersonID":535,"FaxNumber":"(605) 555-0101","DateOfBirth":"1983-03-17 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"divyendu@wingtiptoys.com","PreferredName":"Divyendu"}, - {"Gender":"Female","FullName":"Rita Kauppi","PersonID":536,"FaxNumber":"(605) 555-0101","DateOfBirth":"1997-10-01 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"rita@wingtiptoys.com","PreferredName":"Rita"}, - {"Gender":"Female","FullName":"An Dung Ngo","PersonID":537,"FaxNumber":"(303) 555-0101","DateOfBirth":"1954-12-26 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"an dung@wingtiptoys.com","PreferredName":"An Dung"}, - {"Gender":"Female","FullName":"Pranav Yadav","PersonID":538,"FaxNumber":"(303) 555-0101","DateOfBirth":"1993-06-29 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"pranav@wingtiptoys.com","PreferredName":"Pranav"}, - {"Gender":"Female","FullName":"Chetana Kamath","PersonID":539,"FaxNumber":"(225) 555-0101","DateOfBirth":"1997-03-07 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"chetana@wingtiptoys.com","PreferredName":"Chetana"}, - {"Gender":"Female","FullName":"Isabelina Flores","PersonID":540,"FaxNumber":"(225) 555-0101","DateOfBirth":"1978-02-24 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"isabelina@wingtiptoys.com","PreferredName":"Isabelina"}, - {"Gender":"Female","FullName":"Premwadee Saowaluk","PersonID":541,"FaxNumber":"(319) 555-0101","DateOfBirth":"1980-12-11 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"premwadee@wingtiptoys.com","PreferredName":"Premwadee"}, - {"Gender":"Female","FullName":"Adam Balaz","PersonID":542,"FaxNumber":"(319) 555-0101","DateOfBirth":"1988-01-23 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"adam@wingtiptoys.com","PreferredName":"Adam"}, - {"Gender":"Female","FullName":"Jae-Hwa Min","PersonID":543,"FaxNumber":"(702) 555-0101","DateOfBirth":"1992-03-04 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"jae-hwa@wingtiptoys.com","PreferredName":"Jae-Hwa"}, - {"Gender":"Female","FullName":"Rafael Pena","PersonID":544,"FaxNumber":"(702) 555-0101","DateOfBirth":"1950-01-06 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"rafael@wingtiptoys.com","PreferredName":"Rafael"}, - {"Gender":"Female","FullName":"Catalina Nechita","PersonID":545,"FaxNumber":"(304) 555-0101","DateOfBirth":"1993-02-07 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"catalina@wingtiptoys.com","PreferredName":"Catalina"}, - {"Gender":"Female","FullName":"Robert Cosic","PersonID":546,"FaxNumber":"(304) 555-0101","DateOfBirth":"1956-11-17 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"robert@wingtiptoys.com","PreferredName":"Robert"}, - {"Gender":"Female","FullName":"Constanza Laureano","PersonID":547,"FaxNumber":"(219) 555-0101","DateOfBirth":"1996-07-27 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"constanza@wingtiptoys.com","PreferredName":"Constanza"}, - {"Gender":"Female","FullName":"Sunil Nakhtare","PersonID":548,"FaxNumber":"(219) 555-0101","DateOfBirth":"1964-06-01 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"sunil@wingtiptoys.com","PreferredName":"Sunil"}, - {"Gender":"Female","FullName":"Aakriti Bhamidipati","PersonID":549,"FaxNumber":"(307) 555-0101","DateOfBirth":"1987-09-26 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"aakriti@wingtiptoys.com","PreferredName":"Aakriti"}, - {"Gender":"Female","FullName":"Sakchai Supitayaporn","PersonID":550,"FaxNumber":"(307) 555-0101","DateOfBirth":"1957-02-10 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"sakchai@wingtiptoys.com","PreferredName":"Sakchai"}, - {"Gender":"Female","FullName":"Himadri PrabhupÄda","PersonID":551,"FaxNumber":"(209) 555-0101","DateOfBirth":"1966-04-08 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"himadri@wingtiptoys.com","PreferredName":"Himadri"}, - {"Gender":"Female","FullName":"Lukas Kohout","PersonID":552,"FaxNumber":"(209) 555-0101","DateOfBirth":"1984-01-12 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"lukas@wingtiptoys.com","PreferredName":"Lukas"}, - {"Gender":"Female","FullName":"Bryan Helms","PersonID":553,"FaxNumber":"(276) 555-0101","DateOfBirth":"1980-03-22 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"bryan@wingtiptoys.com","PreferredName":"Bryan"}, - {"Gender":"Female","FullName":"Julianna Makay","PersonID":554,"FaxNumber":"(276) 555-0101","DateOfBirth":"1972-06-23 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"julianna@wingtiptoys.com","PreferredName":"Julianna"}, - {"Gender":"Female","FullName":"Harri Kask","PersonID":555,"FaxNumber":"(787) 555-0101","DateOfBirth":"1975-06-17 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"harri@wingtiptoys.com","PreferredName":"Harri"}, - {"Gender":"Female","FullName":"Rakhshinda Mansouri","PersonID":556,"FaxNumber":"(787) 555-0101","DateOfBirth":"1994-11-07 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"rakhshinda@wingtiptoys.com","PreferredName":"Rakhshinda"}, - {"Gender":"Female","FullName":"Ilse Sandell","PersonID":557,"FaxNumber":"(209) 555-0101","DateOfBirth":"1968-05-20 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"ilse@wingtiptoys.com","PreferredName":"Ilse"}, - {"Gender":"Female","FullName":"Tibor Harsanyi","PersonID":558,"FaxNumber":"(209) 555-0101","DateOfBirth":"1981-01-05 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"tibor@wingtiptoys.com","PreferredName":"Tibor"}, - {"Gender":"Female","FullName":"Subhash Matondkar","PersonID":559,"FaxNumber":"(212) 555-0101","DateOfBirth":"1954-05-17 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"subhash@wingtiptoys.com","PreferredName":"Subhash"}, - {"Gender":"Female","FullName":"Gurudas De","PersonID":560,"FaxNumber":"(212) 555-0101","DateOfBirth":"1972-04-08 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"gurudas@wingtiptoys.com","PreferredName":"Gurudas"}, - {"Gender":"Female","FullName":"Eesvaraavu Ankitham","PersonID":561,"FaxNumber":"(505) 555-0101","DateOfBirth":"1956-02-19 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"eesvaraavu@wingtiptoys.com","PreferredName":"Eesvaraavu"}, - {"Gender":"Female","FullName":"Angelina Karlsson","PersonID":562,"FaxNumber":"(505) 555-0101","DateOfBirth":"1992-01-22 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"angelina@wingtiptoys.com","PreferredName":"Angelina"}, - {"Gender":"Female","FullName":"Miguel Paez","PersonID":563,"FaxNumber":"(205) 555-0101","DateOfBirth":"1952-12-18 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"miguel@wingtiptoys.com","PreferredName":"Miguel"}, - {"Gender":"Female","FullName":"Anukul Dey","PersonID":564,"FaxNumber":"(205) 555-0101","DateOfBirth":"1951-03-01 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"anukul@wingtiptoys.com","PreferredName":"Anukul"}, - {"Gender":"Female","FullName":"Tobias Gruber","PersonID":565,"FaxNumber":"(216) 555-0101","DateOfBirth":"1967-10-15 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"tobias@wingtiptoys.com","PreferredName":"Tobias"}, - {"Gender":"Female","FullName":"Jitka Stastna","PersonID":566,"FaxNumber":"(216) 555-0101","DateOfBirth":"1959-08-17 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"jitka@wingtiptoys.com","PreferredName":"Jitka"}, - {"Gender":"Female","FullName":"Daniela Dumina","PersonID":567,"FaxNumber":"(505) 555-0101","DateOfBirth":"1969-10-15 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"daniela@wingtiptoys.com","PreferredName":"Daniela"}, - {"Gender":"Female","FullName":"Fahmidah Fallahi","PersonID":568,"FaxNumber":"(505) 555-0101","DateOfBirth":"1984-01-07 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"fahmidah@wingtiptoys.com","PreferredName":"Fahmidah"}, - {"Gender":"Female","FullName":"Ganesh Mukherjee","PersonID":569,"FaxNumber":"(210) 555-0101","DateOfBirth":"1968-07-17 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"ganesh@wingtiptoys.com","PreferredName":"Ganesh"}, - {"Gender":"Female","FullName":"Hector Parra","PersonID":570,"FaxNumber":"(210) 555-0101","DateOfBirth":"1965-08-22 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"hector@wingtiptoys.com","PreferredName":"Hector"}, - {"Gender":"Female","FullName":"Avanti Nishad","PersonID":571,"FaxNumber":"(505) 555-0101","DateOfBirth":"1997-03-26 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"avanti@wingtiptoys.com","PreferredName":"Avanti"}, - {"Gender":"Female","FullName":"Gino Sal","PersonID":572,"FaxNumber":"(505) 555-0101","DateOfBirth":"1995-12-10 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"gino@wingtiptoys.com","PreferredName":"Gino"}, - {"Gender":"Female","FullName":"Daedeepya Thota","PersonID":573,"FaxNumber":"(405) 555-0101","DateOfBirth":"1961-09-26 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"daedeepya@wingtiptoys.com","PreferredName":"Daedeepya"}, - {"Gender":"Female","FullName":"Lekha Sen","PersonID":574,"FaxNumber":"(405) 555-0101","DateOfBirth":"1968-03-05 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"lekha@wingtiptoys.com","PreferredName":"Lekha"}, - {"Gender":"Female","FullName":"Gabriela Chirila","PersonID":575,"FaxNumber":"(701) 555-0101","DateOfBirth":"1955-02-04 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"gabriela@wingtiptoys.com","PreferredName":"Gabriela"}, - {"Gender":"Female","FullName":"Elina Bite","PersonID":576,"FaxNumber":"(701) 555-0101","DateOfBirth":"1971-11-28 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"elina@wingtiptoys.com","PreferredName":"Elina"}, - {"Gender":"Female","FullName":"Nagur Atluri","PersonID":577,"FaxNumber":"(405) 555-0101","DateOfBirth":"1951-02-04 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"nagur@wingtiptoys.com","PreferredName":"Nagur"}, - {"Gender":"Female","FullName":"Hanita Kamasamudram","PersonID":578,"FaxNumber":"(405) 555-0101","DateOfBirth":"1966-09-13 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"hanita@wingtiptoys.com","PreferredName":"Hanita"}, - {"Gender":"Female","FullName":"Sintja Buecek","PersonID":579,"FaxNumber":"(210) 555-0101","DateOfBirth":"1989-07-26 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"sintja@wingtiptoys.com","PreferredName":"Sintja"}, - {"Gender":"Female","FullName":"Esha Singh","PersonID":580,"FaxNumber":"(210) 555-0101","DateOfBirth":"1995-04-23 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"esha@wingtiptoys.com","PreferredName":"Esha"}, - {"Gender":"Female","FullName":"Pongrit Srisati","PersonID":581,"FaxNumber":"(215) 555-0101","DateOfBirth":"1968-01-19 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"pongrit@wingtiptoys.com","PreferredName":"Pongrit"}, - {"Gender":"Female","FullName":"Hanna Piip","PersonID":582,"FaxNumber":"(215) 555-0101","DateOfBirth":"1958-10-23 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"hanna@wingtiptoys.com","PreferredName":"Hanna"}, - {"Gender":"Female","FullName":"Linda Green","PersonID":583,"FaxNumber":"(218) 555-0101","DateOfBirth":"1990-05-02 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"linda@wingtiptoys.com","PreferredName":"Linda"}, - {"Gender":"Female","FullName":"Baalamurali Kommineni","PersonID":584,"FaxNumber":"(218) 555-0101","DateOfBirth":"1998-01-02 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"baalamurali@wingtiptoys.com","PreferredName":"Baalamurali"}, - {"Gender":"Female","FullName":"Sarmis Skujins","PersonID":585,"FaxNumber":"(270) 555-0101","DateOfBirth":"1987-12-16 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"sarmis@wingtiptoys.com","PreferredName":"Sarmis"}, - {"Gender":"Female","FullName":"Amporn Jetjirawat","PersonID":586,"FaxNumber":"(270) 555-0101","DateOfBirth":"1969-07-23 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"amporn@wingtiptoys.com","PreferredName":"Amporn"}, - {"Gender":"Female","FullName":"Libuse Srbova","PersonID":587,"FaxNumber":"(210) 555-0101","DateOfBirth":"1974-12-07 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"libuse@wingtiptoys.com","PreferredName":"Libuse"}, - {"Gender":"Female","FullName":"Jimme Harmsen","PersonID":588,"FaxNumber":"(210) 555-0101","DateOfBirth":"1960-08-30 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"jimme@wingtiptoys.com","PreferredName":"Jimme"}, - {"Gender":"Female","FullName":"Viktorie Stejskalova","PersonID":589,"FaxNumber":"(209) 555-0101","DateOfBirth":"1990-11-22 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"viktorie@wingtiptoys.com","PreferredName":"Viktorie"}, - {"Gender":"Female","FullName":"Bishnu Bandopadhyay","PersonID":590,"FaxNumber":"(209) 555-0101","DateOfBirth":"1995-11-02 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bishnu@wingtiptoys.com","PreferredName":"Bishnu"}, - {"Gender":"Female","FullName":"Slavko Pavlovic","PersonID":591,"FaxNumber":"(209) 555-0101","DateOfBirth":"1977-06-02 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"slavko@wingtiptoys.com","PreferredName":"Slavko"}, - {"Gender":"Female","FullName":"Malorie Dupuy","PersonID":592,"FaxNumber":"(209) 555-0101","DateOfBirth":"1977-05-18 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"malorie@wingtiptoys.com","PreferredName":"Malorie"}, - {"Gender":"Female","FullName":"Doru Munteanu","PersonID":593,"FaxNumber":"(209) 555-0101","DateOfBirth":"1965-01-15 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"doru@wingtiptoys.com","PreferredName":"Doru"}, - {"Gender":"Female","FullName":"Ankita Mittal","PersonID":594,"FaxNumber":"(209) 555-0101","DateOfBirth":"1963-09-19 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"ankita@wingtiptoys.com","PreferredName":"Ankita"}, - {"Gender":"Female","FullName":"Aile Aasmae","PersonID":595,"FaxNumber":"(239) 555-0101","DateOfBirth":"1988-09-05 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"aile@wingtiptoys.com","PreferredName":"Aile"}, - {"Gender":"Female","FullName":"Ezgi Kaya","PersonID":596,"FaxNumber":"(239) 555-0101","DateOfBirth":"1989-10-18 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"ezgi@wingtiptoys.com","PreferredName":"Ezgi"}, - {"Gender":"Female","FullName":"Ava Edden","PersonID":597,"FaxNumber":"(479) 555-0101","DateOfBirth":"1956-03-25 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"ava@wingtiptoys.com","PreferredName":"Ava"}, - {"Gender":"Female","FullName":"Adirake Narkbunnum","PersonID":598,"FaxNumber":"(479) 555-0101","DateOfBirth":"1968-12-02 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"adirake@wingtiptoys.com","PreferredName":"Adirake"}, - {"Gender":"Female","FullName":"Manali Bose","PersonID":599,"FaxNumber":"(215) 555-0101","DateOfBirth":"1989-04-16 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"manali@wingtiptoys.com","PreferredName":"Manali"}, - {"Gender":"Female","FullName":"Ji-min Jun","PersonID":600,"FaxNumber":"(215) 555-0101","DateOfBirth":"1950-11-06 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ji-min@wingtiptoys.com","PreferredName":"Ji-min"}, - {"Gender":"Female","FullName":"Astrid Poisson","PersonID":601,"FaxNumber":"(228) 555-0101","DateOfBirth":"1974-03-25 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"astrid@wingtiptoys.com","PreferredName":"Astrid"}, - {"Gender":"Female","FullName":"Timotej stakne","PersonID":602,"FaxNumber":"(228) 555-0101","DateOfBirth":"1995-01-11 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"timotej@wingtiptoys.com","PreferredName":"Timotej"}, - {"Gender":"Female","FullName":"Gi-Suk Heo","PersonID":603,"FaxNumber":"(215) 555-0101","DateOfBirth":"1977-11-01 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"gi-suk@wingtiptoys.com","PreferredName":"Gi-Suk"}, - {"Gender":"Female","FullName":"Roman Tomek","PersonID":604,"FaxNumber":"(215) 555-0101","DateOfBirth":"1980-07-23 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"roman@wingtiptoys.com","PreferredName":"Roman"}, - {"Gender":"Female","FullName":"Irma Kruze","PersonID":605,"FaxNumber":"(219) 555-0101","DateOfBirth":"1980-10-06 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"irma@wingtiptoys.com","PreferredName":"Irma"}, - {"Gender":"Female","FullName":"VÄ›ra Stejskalova","PersonID":606,"FaxNumber":"(219) 555-0101","DateOfBirth":"1965-11-10 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"vicra@wingtiptoys.com","PreferredName":"VÄ›ra"}, - {"Gender":"Female","FullName":"Dhaeraemdranaadh Pamulaparthi","PersonID":607,"FaxNumber":"(458) 555-0101","DateOfBirth":"1965-02-02 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"dhaeraemdranaadh@wingtiptoys.com","PreferredName":"Dhaeraemdranaadh"}, - {"Gender":"Female","FullName":"Victoria Brezeanu","PersonID":608,"FaxNumber":"(458) 555-0101","DateOfBirth":"1994-01-03 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"victoria@wingtiptoys.com","PreferredName":"Victoria"}, - {"Gender":"Female","FullName":"Agrita Kalnina","PersonID":609,"FaxNumber":"(314) 555-0101","DateOfBirth":"1968-02-26 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"agrita@wingtiptoys.com","PreferredName":"Agrita"}, - {"Gender":"Female","FullName":"Burak ozden","PersonID":610,"FaxNumber":"(314) 555-0101","DateOfBirth":"1954-02-16 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"burak@wingtiptoys.com","PreferredName":"Burak"}, - {"Gender":"Female","FullName":"Ravindra Sandhu","PersonID":611,"FaxNumber":"(212) 555-0101","DateOfBirth":"1992-11-30 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"ravindra@wingtiptoys.com","PreferredName":"Ravindra"}, - {"Gender":"Female","FullName":"Iulia Nechita","PersonID":612,"FaxNumber":"(212) 555-0101","DateOfBirth":"1980-08-14 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"iulia@wingtiptoys.com","PreferredName":"Iulia"}, - {"Gender":"Female","FullName":"Klara Rakus","PersonID":613,"FaxNumber":"(803) 555-0101","DateOfBirth":"1968-11-18 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"klara@wingtiptoys.com","PreferredName":"Klara"}, - {"Gender":"Female","FullName":"Razeena Rezaei","PersonID":614,"FaxNumber":"(803) 555-0101","DateOfBirth":"1970-09-29 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"razeena@wingtiptoys.com","PreferredName":"Razeena"}, - {"Gender":"Female","FullName":"Am Lo","PersonID":615,"FaxNumber":"(803) 555-0101","DateOfBirth":"1978-08-14 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"am@wingtiptoys.com","PreferredName":"Am"}, - {"Gender":"Female","FullName":"Edmee Schol","PersonID":616,"FaxNumber":"(803) 555-0101","DateOfBirth":"1977-06-28 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"edmee@wingtiptoys.com","PreferredName":"Edmee"}, - {"Gender":"Female","FullName":"Sophie Van Lier","PersonID":617,"FaxNumber":"(316) 555-0101","DateOfBirth":"1952-08-12 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"sophie@wingtiptoys.com","PreferredName":"Sophie"}, - {"Gender":"Female","FullName":"Shiva Nair","PersonID":618,"FaxNumber":"(316) 555-0101","DateOfBirth":"1976-07-01 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"shiva@wingtiptoys.com","PreferredName":"Shiva"}, - {"Gender":"Female","FullName":"Dimitry Profis","PersonID":619,"FaxNumber":"(216) 555-0101","DateOfBirth":"1993-12-30 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"dimitry@wingtiptoys.com","PreferredName":"Dimitry"}, - {"Gender":"Female","FullName":"Manindra Desai","PersonID":620,"FaxNumber":"(216) 555-0101","DateOfBirth":"1962-02-06 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"manindra@wingtiptoys.com","PreferredName":"Manindra"}, - {"Gender":"Female","FullName":"Jan Zeman","PersonID":621,"FaxNumber":"(215) 555-0101","DateOfBirth":"1967-03-28 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jan@wingtiptoys.com","PreferredName":"Jan"}, - {"Gender":"Female","FullName":"Jukka-Pekk Saarijarvi","PersonID":622,"FaxNumber":"(215) 555-0101","DateOfBirth":"1978-03-11 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jukka-pekk@wingtiptoys.com","PreferredName":"Jukka-Pekk"}, - {"Gender":"Female","FullName":"Ranjit Dikshit","PersonID":623,"FaxNumber":"(787) 555-0101","DateOfBirth":"1972-02-24 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"ranjit@wingtiptoys.com","PreferredName":"Ranjit"}, - {"Gender":"Female","FullName":"Marek Blaho","PersonID":624,"FaxNumber":"(787) 555-0101","DateOfBirth":"1975-01-10 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"marek@wingtiptoys.com","PreferredName":"Marek"}, - {"Gender":"Female","FullName":"Varuna Ganguly","PersonID":625,"FaxNumber":"(262) 555-0101","DateOfBirth":"1971-09-29 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"varuna@wingtiptoys.com","PreferredName":"Varuna"}, - {"Gender":"Female","FullName":"Natalia Pokorna","PersonID":626,"FaxNumber":"(262) 555-0101","DateOfBirth":"1957-03-06 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"natalia@wingtiptoys.com","PreferredName":"Natalia"}, - {"Gender":"Female","FullName":"Basak Tekin","PersonID":627,"FaxNumber":"(207) 555-0101","DateOfBirth":"1963-07-05 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"basak@wingtiptoys.com","PreferredName":"Basak"}, - {"Gender":"Female","FullName":"Nicole Martinez","PersonID":628,"FaxNumber":"(207) 555-0101","DateOfBirth":"1975-04-08 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"nicole@wingtiptoys.com","PreferredName":"Nicole"}, - {"Gender":"Female","FullName":"Doru Tirlea","PersonID":629,"FaxNumber":"(217) 555-0101","DateOfBirth":"1976-02-11 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"doru@wingtiptoys.com","PreferredName":"Doru"}, - {"Gender":"Female","FullName":"Hema Jujjavarapu","PersonID":630,"FaxNumber":"(217) 555-0101","DateOfBirth":"1997-03-21 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"hema@wingtiptoys.com","PreferredName":"Hema"}, - {"Gender":"Female","FullName":"Jessica Perrine","PersonID":631,"FaxNumber":"(217) 555-0101","DateOfBirth":"1951-04-08 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"jessica@wingtiptoys.com","PreferredName":"Jessica"}, - {"Gender":"Female","FullName":"Mukta Sarkar","PersonID":632,"FaxNumber":"(217) 555-0101","DateOfBirth":"1996-07-10 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"mukta@wingtiptoys.com","PreferredName":"Mukta"}, - {"Gender":"Female","FullName":"Yavuz Cetinkaya","PersonID":633,"FaxNumber":"(240) 555-0101","DateOfBirth":"1975-10-22 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"yavuz@wingtiptoys.com","PreferredName":"Yavuz"}, - {"Gender":"Female","FullName":"Jaydeb Ganguly","PersonID":634,"FaxNumber":"(240) 555-0101","DateOfBirth":"1966-01-09 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"jaydeb@wingtiptoys.com","PreferredName":"Jaydeb"}, - {"Gender":"Female","FullName":"Sirirat Kongpaisarn","PersonID":635,"FaxNumber":"(303) 555-0101","DateOfBirth":"1962-11-08 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"sirirat@wingtiptoys.com","PreferredName":"Sirirat"}, - {"Gender":"Female","FullName":"Himani Sanyal","PersonID":636,"FaxNumber":"(303) 555-0101","DateOfBirth":"1976-04-05 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"himani@wingtiptoys.com","PreferredName":"Himani"}, - {"Gender":"Female","FullName":"Claude Bonsaint","PersonID":637,"FaxNumber":"(215) 555-0101","DateOfBirth":"1993-07-08 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"claude@wingtiptoys.com","PreferredName":"Claude"}, - {"Gender":"Female","FullName":"Gopal Thakur","PersonID":638,"FaxNumber":"(215) 555-0101","DateOfBirth":"1992-09-06 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"gopal@wingtiptoys.com","PreferredName":"Gopal"}, - {"Gender":"Female","FullName":"Roman Pajer","PersonID":639,"FaxNumber":"(209) 555-0101","DateOfBirth":"1966-01-13 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"roman@wingtiptoys.com","PreferredName":"Roman"}, - {"Gender":"Female","FullName":"Floris Veenhuizen","PersonID":640,"FaxNumber":"(209) 555-0101","DateOfBirth":"1988-01-21 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"floris@wingtiptoys.com","PreferredName":"Floris"}, - {"Gender":"Female","FullName":"Vitezslav Holy","PersonID":641,"FaxNumber":"(803) 555-0101","DateOfBirth":"1961-10-27 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"vitezslav@wingtiptoys.com","PreferredName":"Vitezslav"}, - {"Gender":"Female","FullName":"Paul Valbe","PersonID":642,"FaxNumber":"(803) 555-0101","DateOfBirth":"1969-10-02 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"paul@wingtiptoys.com","PreferredName":"Paul"}, - {"Gender":"Female","FullName":"Devi Dewangan","PersonID":643,"FaxNumber":"(216) 555-0101","DateOfBirth":"1974-08-24 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"devi@wingtiptoys.com","PreferredName":"Devi"}, - {"Gender":"Female","FullName":"William Bordelon","PersonID":644,"FaxNumber":"(216) 555-0101","DateOfBirth":"1963-11-07 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"william@wingtiptoys.com","PreferredName":"William"}, - {"Gender":"Female","FullName":"Masa Buecek","PersonID":645,"FaxNumber":"(216) 555-0101","DateOfBirth":"1981-02-16 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"masa@wingtiptoys.com","PreferredName":"Masa"}, - {"Gender":"Female","FullName":"Nguyet Trang","PersonID":646,"FaxNumber":"(216) 555-0101","DateOfBirth":"1972-12-18 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"nguyet@wingtiptoys.com","PreferredName":"Nguyet"}, - {"Gender":"Female","FullName":"Bipin Modi","PersonID":647,"FaxNumber":"(423) 555-0101","DateOfBirth":"1950-01-07 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"bipin@wingtiptoys.com","PreferredName":"Bipin"}, - {"Gender":"Female","FullName":"Dattaatraeya Vangapandu","PersonID":648,"FaxNumber":"(423) 555-0101","DateOfBirth":"1955-07-09 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"dattaatraeya@wingtiptoys.com","PreferredName":"Dattaatraeya"}, - {"Gender":"Female","FullName":"Rahul Sarma","PersonID":649,"FaxNumber":"(802) 555-0101","DateOfBirth":"1986-03-19 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"rahul@wingtiptoys.com","PreferredName":"Rahul"}, - {"Gender":"Female","FullName":"Deeba Hemmati","PersonID":650,"FaxNumber":"(802) 555-0101","DateOfBirth":"1954-04-07 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"deeba@wingtiptoys.com","PreferredName":"Deeba"}, - {"Gender":"Female","FullName":"Alejandro Escobar","PersonID":651,"FaxNumber":"(218) 555-0101","DateOfBirth":"1971-07-02 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"alejandro@wingtiptoys.com","PreferredName":"Alejandro"}, - {"Gender":"Female","FullName":"Milada Hadrabova","PersonID":652,"FaxNumber":"(218) 555-0101","DateOfBirth":"1972-08-24 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"milada@wingtiptoys.com","PreferredName":"Milada"}, - {"Gender":"Female","FullName":"Andris Vitols","PersonID":653,"FaxNumber":"(252) 555-0101","DateOfBirth":"1953-12-13 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"andris@wingtiptoys.com","PreferredName":"Andris"}, - {"Gender":"Female","FullName":"Lana Larsson","PersonID":654,"FaxNumber":"(252) 555-0101","DateOfBirth":"1966-02-20 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"lana@wingtiptoys.com","PreferredName":"Lana"}, - {"Gender":"Female","FullName":"Mariela Weitzer","PersonID":655,"FaxNumber":"(207) 555-0101","DateOfBirth":"1981-10-15 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"mariela@wingtiptoys.com","PreferredName":"Mariela"}, - {"Gender":"Female","FullName":"David Lanctot","PersonID":656,"FaxNumber":"(207) 555-0101","DateOfBirth":"1952-12-15 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"david@wingtiptoys.com","PreferredName":"David"}, - {"Gender":"Female","FullName":"Alain Pelland","PersonID":657,"FaxNumber":"(303) 555-0101","DateOfBirth":"1981-04-23 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"alain@wingtiptoys.com","PreferredName":"Alain"}, - {"Gender":"Female","FullName":"Ik-Soo Jo","PersonID":658,"FaxNumber":"(303) 555-0101","DateOfBirth":"1986-10-09 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"ik-soo@wingtiptoys.com","PreferredName":"Ik-Soo"}, - {"Gender":"Female","FullName":"Milica Stojkovic","PersonID":659,"FaxNumber":"(201) 555-0101","DateOfBirth":"1973-07-19 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"milica@wingtiptoys.com","PreferredName":"Milica"}, - {"Gender":"Female","FullName":"Teemu Yli-Sirnio","PersonID":660,"FaxNumber":"(201) 555-0101","DateOfBirth":"1962-02-17 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"teemu@wingtiptoys.com","PreferredName":"Teemu"}, - {"Gender":"Female","FullName":"Natalie Horackova","PersonID":661,"FaxNumber":"(215) 555-0101","DateOfBirth":"1951-02-28 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"natalie@wingtiptoys.com","PreferredName":"Natalie"}, - {"Gender":"Female","FullName":"Francesca Greece","PersonID":662,"FaxNumber":"(215) 555-0101","DateOfBirth":"1976-06-28 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"francesca@wingtiptoys.com","PreferredName":"Francesca"}, - {"Gender":"Female","FullName":"Baalaaditya Rallapalli","PersonID":663,"FaxNumber":"(314) 555-0101","DateOfBirth":"1971-07-26 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"baalaaditya@wingtiptoys.com","PreferredName":"Baalaaditya"}, - {"Gender":"Female","FullName":"Antonin Holy","PersonID":664,"FaxNumber":"(314) 555-0101","DateOfBirth":"1950-09-18 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"antonin@wingtiptoys.com","PreferredName":"Antonin"}, - {"Gender":"Female","FullName":"Matej Formanek","PersonID":665,"FaxNumber":"(303) 555-0101","DateOfBirth":"1980-02-05 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"matej@wingtiptoys.com","PreferredName":"Matej"}, - {"Gender":"Female","FullName":"Mary Eder","PersonID":666,"FaxNumber":"(303) 555-0101","DateOfBirth":"1974-01-10 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"mary@wingtiptoys.com","PreferredName":"Mary"}, - {"Gender":"Female","FullName":"Manish Ghosh","PersonID":667,"FaxNumber":"(219) 555-0101","DateOfBirth":"1996-08-15 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"manish@wingtiptoys.com","PreferredName":"Manish"}, - {"Gender":"Female","FullName":"Anish Naidu","PersonID":668,"FaxNumber":"(219) 555-0101","DateOfBirth":"1960-12-16 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"anish@wingtiptoys.com","PreferredName":"Anish"}, - {"Gender":"Female","FullName":"Pracha Nantakarn","PersonID":669,"FaxNumber":"(231) 555-0101","DateOfBirth":"1982-08-15 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"pracha@wingtiptoys.com","PreferredName":"Pracha"}, - {"Gender":"Female","FullName":"Malee Charoenkul","PersonID":670,"FaxNumber":"(231) 555-0101","DateOfBirth":"1979-04-12 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"malee@wingtiptoys.com","PreferredName":"Malee"}, - {"Gender":"Female","FullName":"Charline Flamand","PersonID":671,"FaxNumber":"(605) 555-0101","DateOfBirth":"1977-05-23 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"charline@wingtiptoys.com","PreferredName":"Charline"}, - {"Gender":"Female","FullName":"Dhavala Alladi","PersonID":672,"FaxNumber":"(605) 555-0101","DateOfBirth":"1953-09-04 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"dhavala@wingtiptoys.com","PreferredName":"Dhavala"}, - {"Gender":"Female","FullName":"Teodor Vlad","PersonID":673,"FaxNumber":"(219) 555-0101","DateOfBirth":"1962-09-06 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"teodor@wingtiptoys.com","PreferredName":"Teodor"}, - {"Gender":"Female","FullName":"Peeter Keskula","PersonID":674,"FaxNumber":"(219) 555-0101","DateOfBirth":"1972-04-30 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"peeter@wingtiptoys.com","PreferredName":"Peeter"}, - {"Gender":"Female","FullName":"Anda Liepa","PersonID":675,"FaxNumber":"(603) 555-0101","DateOfBirth":"1985-07-30 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"anda@wingtiptoys.com","PreferredName":"Anda"}, - {"Gender":"Female","FullName":"Deakshitulu Paruchuri","PersonID":676,"FaxNumber":"(603) 555-0101","DateOfBirth":"1960-07-01 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"deakshitulu@wingtiptoys.com","PreferredName":"Deakshitulu"}, - {"Gender":"Female","FullName":"Jelena Utjesenovic","PersonID":677,"FaxNumber":"(210) 555-0101","DateOfBirth":"1964-02-07 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"jelena@wingtiptoys.com","PreferredName":"Jelena"}, - {"Gender":"Female","FullName":"Debbie Clark","PersonID":678,"FaxNumber":"(210) 555-0101","DateOfBirth":"1971-10-31 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"debbie@wingtiptoys.com","PreferredName":"Debbie"}, - {"Gender":"Female","FullName":"Adriana Horackova","PersonID":679,"FaxNumber":"(252) 555-0101","DateOfBirth":"1998-03-24 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"adriana@wingtiptoys.com","PreferredName":"Adriana"}, - {"Gender":"Female","FullName":"Suniti Bhat","PersonID":680,"FaxNumber":"(252) 555-0101","DateOfBirth":"1987-05-11 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"suniti@wingtiptoys.com","PreferredName":"Suniti"}, - {"Gender":"Female","FullName":"Miika Putkonen","PersonID":681,"FaxNumber":"(314) 555-0101","DateOfBirth":"1956-05-21 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"miika@wingtiptoys.com","PreferredName":"Miika"}, - {"Gender":"Female","FullName":"Jose Williams","PersonID":682,"FaxNumber":"(314) 555-0101","DateOfBirth":"1966-05-22 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"jose@wingtiptoys.com","PreferredName":"Jose"}, - {"Gender":"Female","FullName":"Padma Iyer","PersonID":683,"FaxNumber":"(505) 555-0101","DateOfBirth":"1990-06-09 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"padma@wingtiptoys.com","PreferredName":"Padma"}, - {"Gender":"Female","FullName":"Cai Cao","PersonID":684,"FaxNumber":"(505) 555-0101","DateOfBirth":"1957-05-30 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"cai@wingtiptoys.com","PreferredName":"Cai"}, - {"Gender":"Female","FullName":"Åšani Sen","PersonID":685,"FaxNumber":"(405) 555-0101","DateOfBirth":"1979-09-03 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"aani@wingtiptoys.com","PreferredName":"Åšani"}, - {"Gender":"Female","FullName":"Ngu Hoa","PersonID":686,"FaxNumber":"(405) 555-0101","DateOfBirth":"1975-10-06 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"ngu@wingtiptoys.com","PreferredName":"Ngu"}, - {"Gender":"Female","FullName":"Helene Dupuy","PersonID":687,"FaxNumber":"(270) 555-0101","DateOfBirth":"1971-05-02 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"helene@wingtiptoys.com","PreferredName":"Helene"}, - {"Gender":"Female","FullName":"Antonio Trentini","PersonID":688,"FaxNumber":"(270) 555-0101","DateOfBirth":"1994-02-06 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"antonio@wingtiptoys.com","PreferredName":"Antonio"}, - {"Gender":"Female","FullName":"omer ozbek","PersonID":689,"FaxNumber":"(205) 555-0101","DateOfBirth":"1985-01-10 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"omer@wingtiptoys.com","PreferredName":"omer"}, - {"Gender":"Female","FullName":"Andrei Bratianu","PersonID":690,"FaxNumber":"(205) 555-0101","DateOfBirth":"1985-06-07 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"andrei@wingtiptoys.com","PreferredName":"Andrei"}, - {"Gender":"Female","FullName":"Akshayakeerti Jandhyala","PersonID":691,"FaxNumber":"(240) 555-0101","DateOfBirth":"1996-10-22 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"akshayakeerti@wingtiptoys.com","PreferredName":"Akshayakeerti"}, - {"Gender":"Female","FullName":"Tereza Stolinova","PersonID":692,"FaxNumber":"(240) 555-0101","DateOfBirth":"1970-02-01 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"tereza@wingtiptoys.com","PreferredName":"Tereza"}, - {"Gender":"Female","FullName":"Ankolika Sen","PersonID":693,"FaxNumber":"(304) 555-0101","DateOfBirth":"1958-02-20 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"ankolika@wingtiptoys.com","PreferredName":"Ankolika"}, - {"Gender":"Female","FullName":"Kristophe Couet","PersonID":694,"FaxNumber":"(304) 555-0101","DateOfBirth":"1997-04-14 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"kristophe @wingtiptoys.com","PreferredName":"Kristophe "}, - {"Gender":"Female","FullName":"Baalaamani Veturi","PersonID":695,"FaxNumber":"(218) 555-0101","DateOfBirth":"1976-12-15 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"baalaamani@wingtiptoys.com","PreferredName":"Baalaamani"}, - {"Gender":"Female","FullName":"Gustav Korjus","PersonID":696,"FaxNumber":"(218) 555-0101","DateOfBirth":"1971-03-03 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"gustav@wingtiptoys.com","PreferredName":"Gustav"}, - {"Gender":"Female","FullName":"Julia Konecna","PersonID":697,"FaxNumber":"(314) 555-0101","DateOfBirth":"1958-08-22 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"julia@wingtiptoys.com","PreferredName":"Julia"}, - {"Gender":"Female","FullName":"Birgit Saar","PersonID":698,"FaxNumber":"(314) 555-0101","DateOfBirth":"1979-07-19 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"birgit@wingtiptoys.com","PreferredName":"Birgit"}, - {"Gender":"Female","FullName":"Madelaine Paulet","PersonID":699,"FaxNumber":"(212) 555-0101","DateOfBirth":"1992-05-21 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"madelaine @wingtiptoys.com","PreferredName":"Madelaine "}, - {"Gender":"Female","FullName":"Arundhati Bhowmick","PersonID":700,"FaxNumber":"(212) 555-0101","DateOfBirth":"1980-11-30 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"arundhati@wingtiptoys.com","PreferredName":"Arundhati"}, - {"Gender":"Female","FullName":"Mario Jogi","PersonID":701,"FaxNumber":"(212) 555-0101","DateOfBirth":"1970-06-24 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"mario@wingtiptoys.com","PreferredName":"Mario"}, - {"Gender":"Female","FullName":"Martina Omelkova","PersonID":702,"FaxNumber":"(212) 555-0101","DateOfBirth":"1989-09-09 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"martina@wingtiptoys.com","PreferredName":"Martina"}, - {"Gender":"Female","FullName":"Kaya ozbek","PersonID":703,"FaxNumber":"(276) 555-0101","DateOfBirth":"1981-09-25 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"kaya@wingtiptoys.com","PreferredName":"Kaya"}, - {"Gender":"Female","FullName":"Lan Klanjcar","PersonID":704,"FaxNumber":"(276) 555-0101","DateOfBirth":"1965-04-06 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"lan@wingtiptoys.com","PreferredName":"Lan"}, - {"Gender":"Female","FullName":"Seo-yeon Rim","PersonID":705,"FaxNumber":"(229) 555-0101","DateOfBirth":"1972-05-09 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"seo-yeon@wingtiptoys.com","PreferredName":"Seo-yeon"}, - {"Gender":"Female","FullName":"Giovanna Araujo","PersonID":706,"FaxNumber":"(229) 555-0101","DateOfBirth":"1980-09-14 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"giovanna@wingtiptoys.com","PreferredName":"Giovanna"}, - {"Gender":"Female","FullName":"Sitara Benjaree","PersonID":707,"FaxNumber":"(210) 555-0101","DateOfBirth":"1976-08-20 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"sitara@wingtiptoys.com","PreferredName":"Sitara"}, - {"Gender":"Female","FullName":"Roberts Sprogis","PersonID":708,"FaxNumber":"(210) 555-0101","DateOfBirth":"1960-10-15 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"roberts@wingtiptoys.com","PreferredName":"Roberts"}, - {"Gender":"Female","FullName":"Javier Caraballo","PersonID":709,"FaxNumber":"(231) 555-0101","DateOfBirth":"1977-09-23 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"javier@wingtiptoys.com","PreferredName":"Javier"}, - {"Gender":"Female","FullName":"Coralie Brasseur","PersonID":710,"FaxNumber":"(231) 555-0101","DateOfBirth":"1984-09-01 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"coralie@wingtiptoys.com","PreferredName":"Coralie"}, - {"Gender":"Female","FullName":"Akhtar Shahrestaani","PersonID":711,"FaxNumber":"(229) 555-0101","DateOfBirth":"1967-01-07 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"akhtar@wingtiptoys.com","PreferredName":"Akhtar"}, - {"Gender":"Female","FullName":"Priya Joshi","PersonID":712,"FaxNumber":"(229) 555-0101","DateOfBirth":"1976-02-29 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"priya@wingtiptoys.com","PreferredName":"Priya"}, - {"Gender":"Female","FullName":"Vanita Bhowmick","PersonID":713,"FaxNumber":"(405) 555-0101","DateOfBirth":"1950-08-24 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"vanita@wingtiptoys.com","PreferredName":"Vanita"}, - {"Gender":"Female","FullName":"Bruna Cavalcante","PersonID":714,"FaxNumber":"(405) 555-0101","DateOfBirth":"1979-06-09 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"bruna@wingtiptoys.com","PreferredName":"Bruna"}, - {"Gender":"Female","FullName":"Nishant Menon","PersonID":715,"FaxNumber":"(225) 555-0101","DateOfBirth":"1959-05-03 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"nishant@wingtiptoys.com","PreferredName":"Nishant"}, - {"Gender":"Female","FullName":"Ratnam Singh","PersonID":716,"FaxNumber":"(225) 555-0101","DateOfBirth":"1961-01-08 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"ratnam@wingtiptoys.com","PreferredName":"Ratnam"}, - {"Gender":"Female","FullName":"Josef Benda","PersonID":717,"FaxNumber":"(304) 555-0101","DateOfBirth":"1997-06-28 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"josef@wingtiptoys.com","PreferredName":"Josef"}, - {"Gender":"Female","FullName":"Trishna Benipal","PersonID":718,"FaxNumber":"(304) 555-0101","DateOfBirth":"1974-08-12 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"trishna@wingtiptoys.com","PreferredName":"Trishna"}, - {"Gender":"Female","FullName":"Teresa Bender","PersonID":719,"FaxNumber":"(605) 555-0101","DateOfBirth":"1953-08-03 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"teresa@wingtiptoys.com","PreferredName":"Teresa"}, - {"Gender":"Female","FullName":"Diego Buccho","PersonID":720,"FaxNumber":"(605) 555-0101","DateOfBirth":"1958-01-17 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"diego@wingtiptoys.com","PreferredName":"Diego"}, - {"Gender":"Female","FullName":"Deepesh Bose","PersonID":721,"FaxNumber":"(907) 555-0101","DateOfBirth":"1964-11-30 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"deepesh@wingtiptoys.com","PreferredName":"Deepesh"}, - {"Gender":"Female","FullName":"Ambareesh Madhunapantula","PersonID":722,"FaxNumber":"(907) 555-0101","DateOfBirth":"1997-01-26 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"ambareesh@wingtiptoys.com","PreferredName":"Ambareesh"}, - {"Gender":"Female","FullName":"Madhavi Gupta","PersonID":723,"FaxNumber":"(228) 555-0101","DateOfBirth":"1967-02-09 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"madhavi@wingtiptoys.com","PreferredName":"Madhavi"}, - {"Gender":"Female","FullName":"Indu Chowdary","PersonID":724,"FaxNumber":"(228) 555-0101","DateOfBirth":"1996-06-02 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"indu@wingtiptoys.com","PreferredName":"Indu"}, - {"Gender":"Female","FullName":"Bich Banh","PersonID":725,"FaxNumber":"(215) 555-0101","DateOfBirth":"1957-08-09 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"bich@wingtiptoys.com","PreferredName":"Bich"}, - {"Gender":"Female","FullName":"Lennart Kask","PersonID":726,"FaxNumber":"(215) 555-0101","DateOfBirth":"1954-02-06 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"lennart@wingtiptoys.com","PreferredName":"Lennart"}, - {"Gender":"Female","FullName":"Åšani Nair","PersonID":727,"FaxNumber":"(207) 555-0101","DateOfBirth":"1960-04-06 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"aaani@wingtiptoys.com","PreferredName":"Åšani"}, - {"Gender":"Female","FullName":"Cuc Tu","PersonID":728,"FaxNumber":"(207) 555-0101","DateOfBirth":"1964-01-09 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"cuc@wingtiptoys.com","PreferredName":"Cuc"}, - {"Gender":"Female","FullName":"Angelina Gormanston","PersonID":729,"FaxNumber":"(201) 555-0101","DateOfBirth":"1951-06-24 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"angelina@wingtiptoys.com","PreferredName":"Angelina"}, - {"Gender":"Female","FullName":"Prasanna Shetty","PersonID":730,"FaxNumber":"(201) 555-0101","DateOfBirth":"1996-12-15 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"prasanna@wingtiptoys.com","PreferredName":"Prasanna"}, - {"Gender":"Female","FullName":"Prasert Supitayaporn","PersonID":731,"FaxNumber":"(219) 555-0101","DateOfBirth":"1975-01-19 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"prasert@wingtiptoys.com","PreferredName":"Prasert"}, - {"Gender":"Female","FullName":"Gulzar Parkar","PersonID":732,"FaxNumber":"(219) 555-0101","DateOfBirth":"1995-06-25 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"gulzar@wingtiptoys.com","PreferredName":"Gulzar"}, - {"Gender":"Female","FullName":"Abhaya Rambhatla","PersonID":733,"FaxNumber":"(231) 555-0101","DateOfBirth":"1978-01-12 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"abhaya@wingtiptoys.com","PreferredName":"Abhaya"}, - {"Gender":"Female","FullName":"Naveed Alizadeh","PersonID":734,"FaxNumber":"(231) 555-0101","DateOfBirth":"1976-01-23 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"naveed@wingtiptoys.com","PreferredName":"Naveed"}, - {"Gender":"Female","FullName":"Lalit Ogra","PersonID":735,"FaxNumber":"(205) 555-0101","DateOfBirth":"1971-04-26 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"lalit@wingtiptoys.com","PreferredName":"Lalit"}, - {"Gender":"Female","FullName":"Badanika Vankayala","PersonID":736,"FaxNumber":"(205) 555-0101","DateOfBirth":"1975-04-25 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"badanika@wingtiptoys.com","PreferredName":"Badanika"}, - {"Gender":"Female","FullName":"Mina Bagheri","PersonID":737,"FaxNumber":"(319) 555-0101","DateOfBirth":"1972-06-05 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"mina@wingtiptoys.com","PreferredName":"Mina"}, - {"Gender":"Female","FullName":"Lien Lo","PersonID":738,"FaxNumber":"(319) 555-0101","DateOfBirth":"1975-04-06 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"lien@wingtiptoys.com","PreferredName":"Lien"}, - {"Gender":"Female","FullName":"Debraj Sanyal","PersonID":739,"FaxNumber":"(239) 555-0101","DateOfBirth":"1991-11-16 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"debraj@wingtiptoys.com","PreferredName":"Debraj"}, - {"Gender":"Female","FullName":"Tara KlanCisar","PersonID":740,"FaxNumber":"(239) 555-0101","DateOfBirth":"1955-05-15 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"tara@wingtiptoys.com","PreferredName":"Tara"}, - {"Gender":"Female","FullName":"Marco Costa","PersonID":741,"FaxNumber":"(701) 555-0101","DateOfBirth":"1973-06-01 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"marco@wingtiptoys.com","PreferredName":"Marco"}, - {"Gender":"Female","FullName":"Alessandra Gallo","PersonID":742,"FaxNumber":"(701) 555-0101","DateOfBirth":"1952-04-03 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"alessandra@wingtiptoys.com","PreferredName":"Alessandra"}, - {"Gender":"Female","FullName":"Crina Nechita","PersonID":743,"FaxNumber":"(217) 555-0101","DateOfBirth":"1995-03-14 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"crina@wingtiptoys.com","PreferredName":"Crina"}, - {"Gender":"Female","FullName":"Yi Min Zhong","PersonID":744,"FaxNumber":"(217) 555-0101","DateOfBirth":"1959-04-28 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"yi min@wingtiptoys.com","PreferredName":"Yi Min"}, - {"Gender":"Female","FullName":"Zala Ibrahimagic","PersonID":745,"FaxNumber":"(212) 555-0101","DateOfBirth":"1971-06-20 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"zala@wingtiptoys.com","PreferredName":"Zala"}, - {"Gender":"Female","FullName":"Wander Ellenbroek","PersonID":746,"FaxNumber":"(212) 555-0101","DateOfBirth":"1962-05-28 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"wander@wingtiptoys.com","PreferredName":"Wander"}, - {"Gender":"Female","FullName":"Gundega Kundzina","PersonID":747,"FaxNumber":"(479) 555-0101","DateOfBirth":"1965-07-31 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"gundega@wingtiptoys.com","PreferredName":"Gundega"}, - {"Gender":"Female","FullName":"Damyanti Byrraju","PersonID":748,"FaxNumber":"(479) 555-0101","DateOfBirth":"1967-10-10 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"damyanti@wingtiptoys.com","PreferredName":"Damyanti"}, - {"Gender":"Female","FullName":"Parveen Haldar","PersonID":749,"FaxNumber":"(219) 555-0101","DateOfBirth":"1972-08-09 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"parveen@wingtiptoys.com","PreferredName":"Parveen"}, - {"Gender":"Female","FullName":"Chau Chu","PersonID":750,"FaxNumber":"(219) 555-0101","DateOfBirth":"1978-05-08 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"chau@wingtiptoys.com","PreferredName":"Chau"}, - {"Gender":"Female","FullName":"Noel Cartier","PersonID":751,"FaxNumber":"(215) 555-0101","DateOfBirth":"1996-06-05 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"noel@wingtiptoys.com","PreferredName":"Noel"}, - {"Gender":"Female","FullName":"Aet Kasesalu","PersonID":752,"FaxNumber":"(215) 555-0101","DateOfBirth":"1993-06-02 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"aet@wingtiptoys.com","PreferredName":"Aet"}, - {"Gender":"Female","FullName":"Ilgonis Dzenis","PersonID":753,"FaxNumber":"(210) 555-0101","DateOfBirth":"1989-07-26 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"ilgonis@wingtiptoys.com","PreferredName":"Ilgonis"}, - {"Gender":"Female","FullName":"Emine Gungor","PersonID":754,"FaxNumber":"(210) 555-0101","DateOfBirth":"1976-05-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"emine@wingtiptoys.com","PreferredName":"Emine"}, - {"Gender":"Female","FullName":"Ondrej Tomek","PersonID":755,"FaxNumber":"(219) 555-0101","DateOfBirth":"1986-07-07 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"ondrej@wingtiptoys.com","PreferredName":"Ondrej"}, - {"Gender":"Female","FullName":"Ngon Ta","PersonID":756,"FaxNumber":"(219) 555-0101","DateOfBirth":"1962-09-12 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"ngon@wingtiptoys.com","PreferredName":"Ngon"}, - {"Gender":"Female","FullName":"Mohini Kaul","PersonID":757,"FaxNumber":"(240) 555-0101","DateOfBirth":"1951-09-22 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"mohini@wingtiptoys.com","PreferredName":"Mohini"}, - {"Gender":"Female","FullName":"Alejandro Baeza","PersonID":758,"FaxNumber":"(240) 555-0101","DateOfBirth":"1951-12-27 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"alejandro@wingtiptoys.com","PreferredName":"Alejandro"}, - {"Gender":"Female","FullName":"Arnab Malakar","PersonID":759,"FaxNumber":"(210) 555-0101","DateOfBirth":"1997-02-14 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"arnab@wingtiptoys.com","PreferredName":"Arnab"}, - {"Gender":"Female","FullName":"Anupam Majumdar","PersonID":760,"FaxNumber":"(210) 555-0101","DateOfBirth":"1991-11-25 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"anupam@wingtiptoys.com","PreferredName":"Anupam"}, - {"Gender":"Female","FullName":"Mary Barney","PersonID":761,"FaxNumber":"(505) 555-0101","DateOfBirth":"1986-02-23 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"mary@wingtiptoys.com","PreferredName":"Mary"}, - {"Gender":"Female","FullName":"Amit Ghatak","PersonID":762,"FaxNumber":"(505) 555-0101","DateOfBirth":"1987-06-23 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"amit@wingtiptoys.com","PreferredName":"Amit"}, - {"Gender":"Female","FullName":"Dhaeraemdranaadh Allu","PersonID":763,"FaxNumber":"(216) 555-0101","DateOfBirth":"1990-09-04 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"dhaeraemdranaadh@wingtiptoys.com","PreferredName":"Dhaeraemdranaadh"}, - {"Gender":"Female","FullName":"Abel Pirvu","PersonID":764,"FaxNumber":"(216) 555-0101","DateOfBirth":"1974-03-05 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"abel@wingtiptoys.com","PreferredName":"Abel"}, - {"Gender":"Female","FullName":"Paola Greece","PersonID":765,"FaxNumber":"(210) 555-0101","DateOfBirth":"1967-09-22 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"paola@wingtiptoys.com","PreferredName":"Paola"}, - {"Gender":"Female","FullName":"Izabella Baltina","PersonID":766,"FaxNumber":"(210) 555-0101","DateOfBirth":"1957-05-26 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"izabella@wingtiptoys.com","PreferredName":"Izabella"}, - {"Gender":"Female","FullName":"Flora Olofsson","PersonID":767,"FaxNumber":"(787) 555-0101","DateOfBirth":"1974-03-24 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"flora@wingtiptoys.com","PreferredName":"Flora"}, - {"Gender":"Female","FullName":"Vitezslav Drdla","PersonID":768,"FaxNumber":"(787) 555-0101","DateOfBirth":"1994-12-05 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"vitezslav@wingtiptoys.com","PreferredName":"Vitezslav"}, - {"Gender":"Female","FullName":"Nguyet Bach","PersonID":769,"FaxNumber":"(205) 555-0101","DateOfBirth":"1969-01-09 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"nguyet@wingtiptoys.com","PreferredName":"Nguyet"}, - {"Gender":"Female","FullName":"Ratnam Sidhu","PersonID":770,"FaxNumber":"(205) 555-0101","DateOfBirth":"1993-04-29 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"ratnam@wingtiptoys.com","PreferredName":"Ratnam"}, - {"Gender":"Female","FullName":"Jyoti Karnik","PersonID":771,"FaxNumber":"(803) 555-0101","DateOfBirth":"1972-07-25 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"jyoti@wingtiptoys.com","PreferredName":"Jyoti"}, - {"Gender":"Female","FullName":"Dattu Gummadi","PersonID":772,"FaxNumber":"(803) 555-0101","DateOfBirth":"1954-12-06 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"dattu@wingtiptoys.com","PreferredName":"Dattu"}, - {"Gender":"Female","FullName":"Samuel Almaraz","PersonID":773,"FaxNumber":"(458) 555-0101","DateOfBirth":"1986-10-16 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"samuel@wingtiptoys.com","PreferredName":"Samuel"}, - {"Gender":"Female","FullName":"Filip Bunderla","PersonID":774,"FaxNumber":"(458) 555-0101","DateOfBirth":"1959-05-29 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"filip@wingtiptoys.com","PreferredName":"Filip"}, - {"Gender":"Female","FullName":"Zuzana Kuchtova","PersonID":775,"FaxNumber":"(262) 555-0101","DateOfBirth":"1976-04-09 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"zuzana@wingtiptoys.com","PreferredName":"Zuzana"}, - {"Gender":"Female","FullName":"Elias Niemi","PersonID":776,"FaxNumber":"(262) 555-0101","DateOfBirth":"1973-01-11 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"elias@wingtiptoys.com","PreferredName":"Elias"}, - {"Gender":"Female","FullName":"Mark Ruutel","PersonID":777,"FaxNumber":"(307) 555-0101","DateOfBirth":"1972-05-19 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"mark@wingtiptoys.com","PreferredName":"Mark"}, - {"Gender":"Female","FullName":"Carla Osorio","PersonID":778,"FaxNumber":"(307) 555-0101","DateOfBirth":"1953-10-01 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"carla@wingtiptoys.com","PreferredName":"Carla"}, - {"Gender":"Female","FullName":"Corneliu Vladu","PersonID":779,"FaxNumber":"(480) 555-0101","DateOfBirth":"1974-11-12 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"corneliu@wingtiptoys.com","PreferredName":"Corneliu"}, - {"Gender":"Female","FullName":"Ivo Valek","PersonID":780,"FaxNumber":"(480) 555-0101","DateOfBirth":"1978-01-27 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"ivo@wingtiptoys.com","PreferredName":"Ivo"}, - {"Gender":"Female","FullName":"Severins Polis","PersonID":781,"FaxNumber":"(216) 555-0101","DateOfBirth":"1970-02-01 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"severins@wingtiptoys.com","PreferredName":"Severins"}, - {"Gender":"Female","FullName":"Chandran Bhattacharya","PersonID":782,"FaxNumber":"(216) 555-0101","DateOfBirth":"1957-04-24 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"chandran@wingtiptoys.com","PreferredName":"Chandran"}, - {"Gender":"Female","FullName":"Linda Ledezma","PersonID":783,"FaxNumber":"(210) 555-0101","DateOfBirth":"1971-03-20 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"linda@wingtiptoys.com","PreferredName":"Linda"}, - {"Gender":"Female","FullName":"Zbynek Vacha","PersonID":784,"FaxNumber":"(210) 555-0101","DateOfBirth":"1954-07-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"zbynek@wingtiptoys.com","PreferredName":"Zbynek"}, - {"Gender":"Female","FullName":"Halit Gunes","PersonID":785,"FaxNumber":"(239) 555-0101","DateOfBirth":"1954-05-26 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"halit@wingtiptoys.com","PreferredName":"Halit"}, - {"Gender":"Female","FullName":"Indu Nambiar","PersonID":786,"FaxNumber":"(239) 555-0101","DateOfBirth":"1977-11-01 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"indu@wingtiptoys.com","PreferredName":"Indu"}, - {"Gender":"Female","FullName":"Vallo Vesik","PersonID":787,"FaxNumber":"(205) 555-0101","DateOfBirth":"1997-10-23 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"vallo@wingtiptoys.com","PreferredName":"Vallo"}, - {"Gender":"Female","FullName":"Dayaram Raut","PersonID":788,"FaxNumber":"(205) 555-0101","DateOfBirth":"1980-12-01 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"dayaram@wingtiptoys.com","PreferredName":"Dayaram"}, - {"Gender":"Female","FullName":"Dana Mrazova","PersonID":789,"FaxNumber":"(802) 555-0101","DateOfBirth":"1964-08-16 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"dana@wingtiptoys.com","PreferredName":"Dana"}, - {"Gender":"Female","FullName":"Saraswati Beniwal","PersonID":790,"FaxNumber":"(802) 555-0101","DateOfBirth":"1976-03-18 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"saraswati@wingtiptoys.com","PreferredName":"Saraswati"}, - {"Gender":"Female","FullName":"Ema Slosar","PersonID":791,"FaxNumber":"(215) 555-0101","DateOfBirth":"1961-06-11 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ema@wingtiptoys.com","PreferredName":"Ema"}, - {"Gender":"Female","FullName":"Arto Heikkinen","PersonID":792,"FaxNumber":"(215) 555-0101","DateOfBirth":"1983-01-15 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"arto@wingtiptoys.com","PreferredName":"Arto"}, - {"Gender":"Female","FullName":"Hemchandra Debnath","PersonID":793,"FaxNumber":"(209) 555-0101","DateOfBirth":"1954-06-01 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"hemchandra@wingtiptoys.com","PreferredName":"Hemchandra"}, - {"Gender":"Female","FullName":"Bala Ogra","PersonID":794,"FaxNumber":"(209) 555-0101","DateOfBirth":"1986-05-31 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bala@wingtiptoys.com","PreferredName":"Bala"}, - {"Gender":"Female","FullName":"Monika Valentova","PersonID":795,"FaxNumber":"(458) 555-0101","DateOfBirth":"1961-12-02 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"monika@wingtiptoys.com","PreferredName":"Monika"}, - {"Gender":"Female","FullName":"Anuj Sonkar","PersonID":796,"FaxNumber":"(458) 555-0101","DateOfBirth":"1983-02-16 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"anuj@wingtiptoys.com","PreferredName":"Anuj"}, - {"Gender":"Female","FullName":"Dattaatraeya Tottempudi","PersonID":797,"FaxNumber":"(212) 555-0101","DateOfBirth":"1970-08-07 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"dattaatraeya@wingtiptoys.com","PreferredName":"Dattaatraeya"}, - {"Gender":"Female","FullName":"Emilia Samaniego","PersonID":798,"FaxNumber":"(212) 555-0101","DateOfBirth":"1967-12-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"emilia@wingtiptoys.com","PreferredName":"Emilia"}, - {"Gender":"Female","FullName":"Kahkushan Shakiba","PersonID":799,"FaxNumber":"(217) 555-0101","DateOfBirth":"1996-06-25 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"kahkushan@wingtiptoys.com","PreferredName":"Kahkushan"}, - {"Gender":"Female","FullName":"Lindsey Allen","PersonID":800,"FaxNumber":"(217) 555-0101","DateOfBirth":"1975-12-20 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"lindseya@contosomotors.com","PreferredName":"Lindsey"}, - {"Gender":"Female","FullName":"Perry Skountrianos","PersonID":801,"FaxNumber":"(212) 555-0101","DateOfBirth":"1978-10-18 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"perrys@contosomotors.com","PreferredName":"Perry"}, - {"Gender":"Female","FullName":"Birol Arslan","PersonID":802,"FaxNumber":"(212) 555-0101","DateOfBirth":"1972-07-02 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"birol@wingtiptoys.com","PreferredName":"Birol"}, - {"Gender":"Female","FullName":"Abhra Thakur","PersonID":803,"FaxNumber":"(215) 555-0101","DateOfBirth":"1989-05-31 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"abhra@wingtiptoys.com","PreferredName":"Abhra"}, - {"Gender":"Female","FullName":"Uma Khalsa","PersonID":804,"FaxNumber":"(215) 555-0101","DateOfBirth":"1968-08-08 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"uma@wingtiptoys.com","PreferredName":"Uma"}, - {"Gender":"Female","FullName":"Dunja Radoncis","PersonID":805,"FaxNumber":"(215) 555-0101","DateOfBirth":"1953-10-25 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"dunja@wingtiptoys.com","PreferredName":"Dunja"}, - {"Gender":"Female","FullName":"Olya Seleznyov","PersonID":806,"FaxNumber":"(215) 555-0101","DateOfBirth":"1951-11-23 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"olya@wingtiptoys.com","PreferredName":"Olya"}, - {"Gender":"Female","FullName":"Darakhshan Javaherian","PersonID":807,"FaxNumber":"(215) 555-0101","DateOfBirth":"1965-06-10 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"darakhshan@wingtiptoys.com","PreferredName":"Darakhshan"}, - {"Gender":"Female","FullName":"Alexandre L'Angelier","PersonID":808,"FaxNumber":"(215) 555-0101","DateOfBirth":"1951-07-18 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"alexandre @wingtiptoys.com","PreferredName":"Alexandre "}, - {"Gender":"Female","FullName":"Youssef Eriksson","PersonID":809,"FaxNumber":"(701) 555-0101","DateOfBirth":"1994-09-05 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"youssef@wingtiptoys.com","PreferredName":"Youssef"}, - {"Gender":"Female","FullName":"Arunima Ganguly","PersonID":810,"FaxNumber":"(701) 555-0101","DateOfBirth":"1987-08-25 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"arunima@wingtiptoys.com","PreferredName":"Arunima"}, - {"Gender":"Female","FullName":"Pavel Bohuslav","PersonID":811,"FaxNumber":"(505) 555-0101","DateOfBirth":"1979-05-21 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"pavel@wingtiptoys.com","PreferredName":"Pavel"}, - {"Gender":"Female","FullName":"Mahendra Trivedi","PersonID":812,"FaxNumber":"(505) 555-0101","DateOfBirth":"1992-02-14 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"mahendra@wingtiptoys.com","PreferredName":"Mahendra"}, - {"Gender":"Female","FullName":"Jiri Vacha","PersonID":813,"FaxNumber":"(209) 555-0101","DateOfBirth":"1951-09-29 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"jiri@wingtiptoys.com","PreferredName":"Jiri"}, - {"Gender":"Female","FullName":"Constanta Dita","PersonID":814,"FaxNumber":"(209) 555-0101","DateOfBirth":"1964-06-25 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"constanta@wingtiptoys.com","PreferredName":"Constanta"}, - {"Gender":"Female","FullName":"Magdalena Cervenkova","PersonID":815,"FaxNumber":"(405) 555-0101","DateOfBirth":"1991-07-21 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"magdalena@wingtiptoys.com","PreferredName":"Magdalena"}, - {"Gender":"Female","FullName":"Sylvie Panetier","PersonID":816,"FaxNumber":"(405) 555-0101","DateOfBirth":"1996-02-20 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"sylvie@wingtiptoys.com","PreferredName":"Sylvie"}, - {"Gender":"Female","FullName":"Asha Mudigonda","PersonID":817,"FaxNumber":"(201) 555-0101","DateOfBirth":"1990-08-14 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"asha@wingtiptoys.com","PreferredName":"Asha"}, - {"Gender":"Female","FullName":"Jaya Benjaree","PersonID":818,"FaxNumber":"(201) 555-0101","DateOfBirth":"1979-03-24 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"jaya@wingtiptoys.com","PreferredName":"Jaya"}, - {"Gender":"Female","FullName":"Anete Kundzina","PersonID":819,"FaxNumber":"(239) 555-0101","DateOfBirth":"1996-03-18 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"anete@wingtiptoys.com","PreferredName":"Anete"}, - {"Gender":"Female","FullName":"John Kane","PersonID":820,"FaxNumber":"(239) 555-0101","DateOfBirth":"1977-02-25 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"johnk@contosomotors.com","PreferredName":"Jonny"}, - {"Gender":"Female","FullName":"Laurent Bonnet","PersonID":821,"FaxNumber":"(210) 555-0101","DateOfBirth":"1970-01-16 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"laurentb@wingtiptoys.com","PreferredName":"Laurent"}, - {"Gender":"Female","FullName":"Kunal Nakhtare","PersonID":822,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-12-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"kunal@wingtiptoys.com","PreferredName":"Kunal"}, - {"Gender":"Female","FullName":"Duangrat Atitarn","PersonID":823,"FaxNumber":"(210) 555-0101","DateOfBirth":"1958-02-20 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"duangrat@wingtiptoys.com","PreferredName":"Duangrat"}, - {"Gender":"Female","FullName":"Ella Celmina","PersonID":824,"FaxNumber":"(210) 555-0101","DateOfBirth":"1953-07-30 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"ella@wingtiptoys.com","PreferredName":"Ella"}, - {"Gender":"Female","FullName":"Deviprasad PrabhupÄda","PersonID":825,"FaxNumber":"(605) 555-0101","DateOfBirth":"1968-04-17 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"deviprasad@wingtiptoys.com","PreferredName":"Deviprasad"}, - {"Gender":"Female","FullName":"Tess Seegers","PersonID":826,"FaxNumber":"(605) 555-0101","DateOfBirth":"1981-03-10 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"tess@wingtiptoys.com","PreferredName":"Tess"}, - {"Gender":"Female","FullName":"Aija Lukstina","PersonID":827,"FaxNumber":"(252) 555-0101","DateOfBirth":"1984-01-04 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"aija@wingtiptoys.com","PreferredName":"Aija"}, - {"Gender":"Female","FullName":"Sanjay Cheema","PersonID":828,"FaxNumber":"(252) 555-0101","DateOfBirth":"1955-03-27 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"sanjay@wingtiptoys.com","PreferredName":"Sanjay"}, - {"Gender":"Female","FullName":"Hoc Le","PersonID":829,"FaxNumber":"(208) 555-0101","DateOfBirth":"1964-04-16 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"hoc@wingtiptoys.com","PreferredName":"Hoc"}, - {"Gender":"Female","FullName":"Blagoje Pavlovic","PersonID":830,"FaxNumber":"(208) 555-0101","DateOfBirth":"1969-06-29 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"blagoje@wingtiptoys.com","PreferredName":"Blagoje"}, - {"Gender":"Female","FullName":"Bhairaam Kidambi","PersonID":831,"FaxNumber":"(319) 555-0101","DateOfBirth":"1975-11-30 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"bhairaam@wingtiptoys.com","PreferredName":"Bhairaam"}, - {"Gender":"Female","FullName":"Aleksandrs Cirulis","PersonID":832,"FaxNumber":"(319) 555-0101","DateOfBirth":"1982-03-29 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"aleksandrs@wingtiptoys.com","PreferredName":"Aleksandrs"}, - {"Gender":"Female","FullName":"Jae-Hwa Shin","PersonID":833,"FaxNumber":"(505) 555-0101","DateOfBirth":"1994-09-22 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"jae-hwa@wingtiptoys.com","PreferredName":"Jae-Hwa"}, - {"Gender":"Female","FullName":"Mala Naicker","PersonID":834,"FaxNumber":"(505) 555-0101","DateOfBirth":"1965-10-31 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"mala@wingtiptoys.com","PreferredName":"Mala"}, - {"Gender":"Female","FullName":"Caterina Fallaci","PersonID":835,"FaxNumber":"(210) 555-0101","DateOfBirth":"1988-02-21 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"caterina@wingtiptoys.com","PreferredName":"Caterina"}, - {"Gender":"Female","FullName":"Brayden Macnamara","PersonID":836,"FaxNumber":"(210) 555-0101","DateOfBirth":"1970-04-04 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"brayden@wingtiptoys.com","PreferredName":"Brayden"}, - {"Gender":"Female","FullName":"Baanuraekha Voleti","PersonID":837,"FaxNumber":"(276) 555-0101","DateOfBirth":"1989-02-16 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"baanuraekha@wingtiptoys.com","PreferredName":"Baanuraekha"}, - {"Gender":"Female","FullName":"Renata Alva","PersonID":838,"FaxNumber":"(276) 555-0101","DateOfBirth":"1981-11-25 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"renata@wingtiptoys.com","PreferredName":"Renata"}, - {"Gender":"Female","FullName":"Ranjeet Haldar","PersonID":839,"FaxNumber":"(203) 555-0101","DateOfBirth":"1996-01-19 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"ranjeet@wingtiptoys.com","PreferredName":"Ranjeet"}, - {"Gender":"Female","FullName":"Mandeep Desai","PersonID":840,"FaxNumber":"(203) 555-0101","DateOfBirth":"1965-10-14 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"mandeep@wingtiptoys.com","PreferredName":"Mandeep"}, - {"Gender":"Female","FullName":"Bhaamini Kanaparthi","PersonID":841,"FaxNumber":"(907) 555-0101","DateOfBirth":"1967-08-26 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"bhaamini@wingtiptoys.com","PreferredName":"Bhaamini"}, - {"Gender":"Female","FullName":"Sun-Hi Oh","PersonID":842,"FaxNumber":"(907) 555-0101","DateOfBirth":"1965-02-15 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"sun-hi@wingtiptoys.com","PreferredName":"Sun-Hi"}, - {"Gender":"Female","FullName":"Margit Molnar","PersonID":843,"FaxNumber":"(808) 555-0101","DateOfBirth":"1961-04-03 00:00:00","PhoneNumber":"(808) 555-0100","EmailAddress":"margit@wingtiptoys.com","PreferredName":"Margit"}, - {"Gender":"Female","FullName":"Amanda Kaulina","PersonID":844,"FaxNumber":"(808) 555-0101","DateOfBirth":"1966-09-09 00:00:00","PhoneNumber":"(808) 555-0100","EmailAddress":"amanda@wingtiptoys.com","PreferredName":"Amanda"}, - {"Gender":"Female","FullName":"Chandni Jandhyala","PersonID":845,"FaxNumber":"(210) 555-0101","DateOfBirth":"1977-10-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"chandni@wingtiptoys.com","PreferredName":"Chandni"}, - {"Gender":"Female","FullName":"Verona Sykorova","PersonID":846,"FaxNumber":"(210) 555-0101","DateOfBirth":"1972-09-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"verona@wingtiptoys.com","PreferredName":"Verona"}, - {"Gender":"Female","FullName":"Ljubomir Nesic","PersonID":847,"FaxNumber":"(231) 555-0101","DateOfBirth":"1978-08-22 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"ljubomir@wingtiptoys.com","PreferredName":"Ljubomir"}, - {"Gender":"Female","FullName":"Jennifer Kim","PersonID":848,"FaxNumber":"(231) 555-0101","DateOfBirth":"1968-09-06 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"jenniferk@contosomotors.com","PreferredName":"Jennifer"}, - {"Gender":"Female","FullName":"Telma Hermansson","PersonID":849,"FaxNumber":"(240) 555-0101","DateOfBirth":"1951-05-31 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"telma@wingtiptoys.com","PreferredName":"Telma"}, - {"Gender":"Female","FullName":"Lubomir Spousta","PersonID":850,"FaxNumber":"(240) 555-0101","DateOfBirth":"1991-07-23 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"lubomir@wingtiptoys.com","PreferredName":"Lubomir"}, - {"Gender":"Female","FullName":"Eric Torres","PersonID":851,"FaxNumber":"(307) 555-0101","DateOfBirth":"1975-07-14 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"eric@example.com","PreferredName":"Eric"}, - {"Gender":"Female","FullName":"Cosmina Vlad","PersonID":852,"FaxNumber":"(505) 555-0101","DateOfBirth":"1973-01-20 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"cosmina@example.com","PreferredName":"Cosmina"}, - {"Gender":"Female","FullName":"Bala Dixit","PersonID":853,"FaxNumber":"(209) 555-0101","DateOfBirth":"1997-11-18 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bala@example.com","PreferredName":"Bala"}, - {"Gender":"Female","FullName":"Aleksandrs Riekstins","PersonID":854,"FaxNumber":"(605) 555-0101","DateOfBirth":"1985-04-20 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"aleksandrs@example.com","PreferredName":"Aleksandrs"}, - {"Gender":"Female","FullName":"Ratan Poddar","PersonID":855,"FaxNumber":"(907) 555-0101","DateOfBirth":"1968-02-17 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"ratan@example.com","PreferredName":"Ratan"}, - {"Gender":"Female","FullName":"Shi Tu","PersonID":856,"FaxNumber":"(307) 555-0101","DateOfBirth":"1981-08-10 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"shi@example.com","PreferredName":"Shi"}, - {"Gender":"Female","FullName":"Gunnar Lohmus","PersonID":857,"FaxNumber":"(201) 555-0101","DateOfBirth":"1963-01-15 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"gunnar@example.com","PreferredName":"Gunnar"}, - {"Gender":"Female","FullName":"Jackson Kolios","PersonID":858,"FaxNumber":"(209) 555-0101","DateOfBirth":"1978-03-26 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"jackson@example.com","PreferredName":"Jackson"}, - {"Gender":"Female","FullName":"Madhu Dwivedi","PersonID":859,"FaxNumber":"(802) 555-0101","DateOfBirth":"1995-01-08 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"madhu@example.com","PreferredName":"Madhu"}, - {"Gender":"Female","FullName":"Alena Kellnerova","PersonID":860,"FaxNumber":"(303) 555-0101","DateOfBirth":"1988-06-09 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"alena@example.com","PreferredName":"Alena"}, - {"Gender":"Female","FullName":"Surendra Sahu","PersonID":861,"FaxNumber":"(210) 555-0101","DateOfBirth":"1994-04-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"surendra@example.com","PreferredName":"Surendra"}, - {"Gender":"Female","FullName":"Celica Barajas","PersonID":862,"FaxNumber":"(270) 555-0101","DateOfBirth":"1988-03-04 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"celica@example.com","PreferredName":"Celica"}, - {"Gender":"Female","FullName":"Shyam Poddar","PersonID":863,"FaxNumber":"(218) 555-0101","DateOfBirth":"1968-12-08 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"shyam@example.com","PreferredName":"Shyam"}, - {"Gender":"Female","FullName":"Johanna Hoornstra","PersonID":864,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-12-14 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"johanna@example.com","PreferredName":"Johanna"}, - {"Gender":"Female","FullName":"Libuse Valentova","PersonID":865,"FaxNumber":"(270) 555-0101","DateOfBirth":"1968-10-23 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"libuse@example.com","PreferredName":"Libuse"}, - {"Gender":"Female","FullName":"Harsha Huq","PersonID":866,"FaxNumber":"(314) 555-0101","DateOfBirth":"1961-04-24 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"harsha@example.com","PreferredName":"Harsha"}, - {"Gender":"Female","FullName":"Agrita Kanepa","PersonID":867,"FaxNumber":"(201) 555-0101","DateOfBirth":"1976-02-03 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"agrita@example.com","PreferredName":"Agrita"}, - {"Gender":"Female","FullName":"Liia Orav","PersonID":868,"FaxNumber":"(252) 555-0101","DateOfBirth":"1963-07-26 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"liia@example.com","PreferredName":"Liia"}, - {"Gender":"Female","FullName":"Santiago Vera","PersonID":869,"FaxNumber":"(304) 555-0101","DateOfBirth":"1988-09-19 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"santiago@example.com","PreferredName":"Santiago"}, - {"Gender":"Female","FullName":"Knut Svensson","PersonID":870,"FaxNumber":"(201) 555-0101","DateOfBirth":"1963-09-25 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"knut@example.com","PreferredName":"Knut"}, - {"Gender":"Female","FullName":"Kwanjai Saowaluk","PersonID":871,"FaxNumber":"(787) 555-0101","DateOfBirth":"1972-04-22 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"kwanjai@example.com","PreferredName":"Kwanjai"}, - {"Gender":"Female","FullName":"Suparna Bhattacharya","PersonID":872,"FaxNumber":"(314) 555-0101","DateOfBirth":"1975-05-31 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"suparna@example.com","PreferredName":"Suparna"}, - {"Gender":"Female","FullName":"Francisca Laureano","PersonID":873,"FaxNumber":"(319) 555-0101","DateOfBirth":"1998-01-09 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"francisca@example.com","PreferredName":"Francisca"}, - {"Gender":"Female","FullName":"Risto Valbe","PersonID":874,"FaxNumber":"(205) 555-0101","DateOfBirth":"1990-05-04 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"risto@example.com","PreferredName":"Risto"}, - {"Gender":"Female","FullName":"Jayanta Thakur","PersonID":875,"FaxNumber":"(276) 555-0101","DateOfBirth":"1979-03-09 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"jayanta@example.com","PreferredName":"Jayanta"}, - {"Gender":"Female","FullName":"Leila Carvalho","PersonID":876,"FaxNumber":"(217) 555-0101","DateOfBirth":"1969-10-20 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"leila@example.com","PreferredName":"Leila"}, - {"Gender":"Female","FullName":"Crina Grasu","PersonID":877,"FaxNumber":"(308) 555-0101","DateOfBirth":"1966-02-11 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"crina@example.com","PreferredName":"Crina"}, - {"Gender":"Female","FullName":"Sercan Celik","PersonID":878,"FaxNumber":"(217) 555-0101","DateOfBirth":"1963-03-12 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"sercan@example.com","PreferredName":"Sercan"}, - {"Gender":"Female","FullName":"Jack Walker","PersonID":879,"FaxNumber":"(316) 555-0101","DateOfBirth":"1996-05-19 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"jack@example.com","PreferredName":"Jack"}, - {"Gender":"Female","FullName":"Jana Fialova","PersonID":880,"FaxNumber":"(215) 555-0101","DateOfBirth":"1978-03-31 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jana@example.com","PreferredName":"Jana"}, - {"Gender":"Female","FullName":"Bhaavan Rai","PersonID":881,"FaxNumber":"(308) 555-0101","DateOfBirth":"1950-03-07 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"bhaavan@example.com","PreferredName":"Bhaavan"}, - {"Gender":"Female","FullName":"Aakriti Byrraju","PersonID":882,"FaxNumber":"(216) 555-0101","DateOfBirth":"1951-05-26 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"aakriti@example.com","PreferredName":"Aakriti"}, - {"Gender":"Female","FullName":"Devraj Rao","PersonID":883,"FaxNumber":"(385) 555-0101","DateOfBirth":"1986-01-16 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"devraj@example.com","PreferredName":"Devraj"}, - {"Gender":"Female","FullName":"Cong Hoa","PersonID":884,"FaxNumber":"(212) 555-0101","DateOfBirth":"1973-04-25 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"cong@example.com","PreferredName":"Cong"}, - {"Gender":"Female","FullName":"Dominic Davignon","PersonID":885,"FaxNumber":"(209) 555-0101","DateOfBirth":"1968-07-11 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"dominic@example.com","PreferredName":"Dominic"}, - {"Gender":"Female","FullName":"Abel Spirlea","PersonID":886,"FaxNumber":"(218) 555-0101","DateOfBirth":"1958-02-19 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"abel@example.com","PreferredName":"Abel"}, - {"Gender":"Female","FullName":"Anil Sarkar","PersonID":887,"FaxNumber":"(215) 555-0101","DateOfBirth":"1966-11-02 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"anil@example.com","PreferredName":"Anil"}, - {"Gender":"Female","FullName":"Steve Schmidt","PersonID":888,"FaxNumber":"(339) 555-0101","DateOfBirth":"1975-04-07 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"steves@contosomotors.com","PreferredName":"Pavel"}, - {"Gender":"Female","FullName":"Juan Morse","PersonID":889,"FaxNumber":"(423) 555-0101","DateOfBirth":"1963-08-17 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"juan@example.com","PreferredName":"Juan"}, - {"Gender":"Female","FullName":"Rodrigo Figueiredo","PersonID":890,"FaxNumber":"(803) 555-0101","DateOfBirth":"1975-04-15 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"rodrigo@example.com","PreferredName":"Rodrigo"}, - {"Gender":"Female","FullName":"Camille Authier","PersonID":891,"FaxNumber":"(252) 555-0101","DateOfBirth":"1974-04-12 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"camille@example.com","PreferredName":"Camille"}, - {"Gender":"Female","FullName":"Biju Deb","PersonID":892,"FaxNumber":"(218) 555-0101","DateOfBirth":"1957-07-12 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"biju@example.com","PreferredName":"Biju"}, - {"Gender":"Female","FullName":"Marija Justina Pasek","PersonID":893,"FaxNumber":"(215) 555-0101","DateOfBirth":"1959-08-10 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"marija justina@example.com","PreferredName":"Marija Justina"}, - {"Gender":"Female","FullName":"Durdanah Abbasi","PersonID":894,"FaxNumber":"(201) 555-0101","DateOfBirth":"1958-02-24 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"durdanah@example.com","PreferredName":"Durdanah"}, - {"Gender":"Female","FullName":"Emilie Hrdlickova","PersonID":895,"FaxNumber":"(803) 555-0101","DateOfBirth":"1954-11-01 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"emilie@example.com","PreferredName":"Emilie"}, - {"Gender":"Female","FullName":"Malorie Bousquet","PersonID":896,"FaxNumber":"(209) 555-0101","DateOfBirth":"1984-11-15 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"malorie@example.com","PreferredName":"Malorie"}, - {"Gender":"Female","FullName":"Kristiina Ivanov","PersonID":897,"FaxNumber":"(605) 555-0101","DateOfBirth":"1972-05-26 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"kristiina@example.com","PreferredName":"Kristiina"}, - {"Gender":"Female","FullName":"Alvin Bollinger","PersonID":898,"FaxNumber":"(270) 555-0101","DateOfBirth":"1984-11-21 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"alvin@example.com","PreferredName":"Alvin"}, - {"Gender":"Female","FullName":"Sabine Zalite","PersonID":899,"FaxNumber":"(210) 555-0101","DateOfBirth":"1954-12-16 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"sabine@example.com","PreferredName":"Sabine"}, - {"Gender":"Female","FullName":"Daakshaayaani Sankaramanchi","PersonID":900,"FaxNumber":"(319) 555-0101","DateOfBirth":"1969-06-11 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"daakshaayaani@example.com","PreferredName":"Daakshaayaani"}, - {"Gender":"Female","FullName":"Ebru Erdogan","PersonID":901,"FaxNumber":"(405) 555-0101","DateOfBirth":"1991-11-29 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"ebru@example.com","PreferredName":"Ebru"}, - {"Gender":"Female","FullName":"Bhagavaan Atluri","PersonID":902,"FaxNumber":"(229) 555-0101","DateOfBirth":"1971-04-23 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"bhagavaan@example.com","PreferredName":"Bhagavaan"}, - {"Gender":"Female","FullName":"Caterina Pinto","PersonID":903,"FaxNumber":"(907) 555-0101","DateOfBirth":"1969-03-13 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"caterina@example.com","PreferredName":"Caterina"}, - {"Gender":"Female","FullName":"Daakshaayaani Kommineni","PersonID":904,"FaxNumber":"(239) 555-0101","DateOfBirth":"1972-09-02 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"daakshaayaani@example.com","PreferredName":"Daakshaayaani"}, - {"Gender":"Female","FullName":"Anna Mazzanti","PersonID":905,"FaxNumber":"(314) 555-0101","DateOfBirth":"1996-05-12 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"anna@example.com","PreferredName":"Anna"}, - {"Gender":"Female","FullName":"Satish Mittal","PersonID":906,"FaxNumber":"(215) 555-0101","DateOfBirth":"1966-09-19 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"satish@example.com","PreferredName":"Satish"}, - {"Gender":"Female","FullName":"Clarissa Manfrin","PersonID":907,"FaxNumber":"(210) 555-0101","DateOfBirth":"1964-02-28 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"clarissa@example.com","PreferredName":"Clarissa"}, - {"Gender":"Female","FullName":"Bimla PrabhupÄda","PersonID":908,"FaxNumber":"(209) 555-0101","DateOfBirth":"1987-10-26 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bimla@example.com","PreferredName":"Bimla"}, - {"Gender":"Female","FullName":"Shah Alizadeh","PersonID":909,"FaxNumber":"(304) 555-0101","DateOfBirth":"1996-08-15 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"shah@example.com","PreferredName":"Shah"}, - {"Gender":"Female","FullName":"Marcela Lucescu","PersonID":910,"FaxNumber":"(231) 555-0101","DateOfBirth":"1985-05-19 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"marcela@example.com","PreferredName":"Marcela"}, - {"Gender":"Female","FullName":"Amarasimha Vinjamuri","PersonID":911,"FaxNumber":"(339) 555-0101","DateOfBirth":"1973-06-30 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"amarasimha@example.com","PreferredName":"Amarasimha"}, - {"Gender":"Female","FullName":"Lana Goransson","PersonID":912,"FaxNumber":"(212) 555-0101","DateOfBirth":"1982-05-13 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"lana@example.com","PreferredName":"Lana"}, - {"Gender":"Female","FullName":"Jakub Lukes","PersonID":913,"FaxNumber":"(212) 555-0101","DateOfBirth":"1977-08-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"jakub@example.com","PreferredName":"Jakub"}, - {"Gender":"Female","FullName":"Mikhail Degtyarev","PersonID":914,"FaxNumber":"(218) 555-0101","DateOfBirth":"1984-03-14 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"mikhail@example.com","PreferredName":"Mikhail"}, - {"Gender":"Female","FullName":"Bijoya Thakur","PersonID":915,"FaxNumber":"(225) 555-0101","DateOfBirth":"1978-07-23 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"bijoya@example.com","PreferredName":"Bijoya"}, - {"Gender":"Female","FullName":"Jay Bhuiyan","PersonID":916,"FaxNumber":"(215) 555-0101","DateOfBirth":"1996-01-27 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jay@example.com","PreferredName":"Jay"}, - {"Gender":"Female","FullName":"Jasna Cerkez","PersonID":917,"FaxNumber":"(304) 555-0101","DateOfBirth":"1956-05-11 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"jasna@example.com","PreferredName":"Jasna"}, - {"Gender":"Female","FullName":"Laura Sykorova","PersonID":918,"FaxNumber":"(316) 555-0101","DateOfBirth":"1981-01-24 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"laura@example.com","PreferredName":"Laura"}, - {"Gender":"Female","FullName":"Abel Tatarescu","PersonID":919,"FaxNumber":"(217) 555-0101","DateOfBirth":"1970-01-27 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"abel@example.com","PreferredName":"Abel"}, - {"Gender":"Female","FullName":"In-Su Bae","PersonID":920,"FaxNumber":"(206) 555-0101","DateOfBirth":"1991-01-18 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"in-su@example.com","PreferredName":"In-Su"}, - {"Gender":"Female","FullName":"Darshana Madhunapantula","PersonID":921,"FaxNumber":"(240) 555-0101","DateOfBirth":"1984-06-07 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"darshana@example.com","PreferredName":"Darshana"}, - {"Gender":"Female","FullName":"Katerina Hadrabova","PersonID":922,"FaxNumber":"(219) 555-0101","DateOfBirth":"1984-04-30 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"katerina@example.com","PreferredName":"Katerina"}, - {"Gender":"Female","FullName":"Hana Hlouskova","PersonID":923,"FaxNumber":"(505) 555-0101","DateOfBirth":"1989-03-04 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"hana@example.com","PreferredName":"Hana"}, - {"Gender":"Female","FullName":"Daniel Martensson","PersonID":924,"FaxNumber":"(225) 555-0101","DateOfBirth":"1959-06-25 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"daniel@example.com","PreferredName":"Daniel"}, - {"Gender":"Female","FullName":"Philip Walker","PersonID":925,"FaxNumber":"(216) 555-0101","DateOfBirth":"1963-05-31 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"philip@example.com","PreferredName":"Philip"}, - {"Gender":"Female","FullName":"Marie LeBatelier","PersonID":926,"FaxNumber":"(210) 555-0101","DateOfBirth":"1990-05-20 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"marie@example.com","PreferredName":"Marie"}, - {"Gender":"Female","FullName":"Leyla Siavashi","PersonID":927,"FaxNumber":"(201) 555-0101","DateOfBirth":"1962-08-17 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"leyla@example.com","PreferredName":"Leyla"}, - {"Gender":"Female","FullName":"Miriam House","PersonID":928,"FaxNumber":"(701) 555-0101","DateOfBirth":"1972-01-29 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"miriam@example.com","PreferredName":"Miriam"}, - {"Gender":"Female","FullName":"Jitka Necesana","PersonID":929,"FaxNumber":"(212) 555-0101","DateOfBirth":"1964-09-08 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"jitka@example.com","PreferredName":"Jitka"}, - {"Gender":"Female","FullName":"Edmee Glissen","PersonID":930,"FaxNumber":"(208) 555-0101","DateOfBirth":"1979-02-08 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"edmee@example.com","PreferredName":"Edmee"}, - {"Gender":"Female","FullName":"Magdalena Michnova","PersonID":931,"FaxNumber":"(907) 555-0101","DateOfBirth":"1952-04-02 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"magdalena@example.com","PreferredName":"Magdalena"}, - {"Gender":"Female","FullName":"Maryann Huddleston","PersonID":932,"FaxNumber":"(304) 555-0101","DateOfBirth":"1955-03-19 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"maryann@example.com","PreferredName":"Maryann"}, - {"Gender":"Female","FullName":"Radha Barua","PersonID":933,"FaxNumber":"(405) 555-0101","DateOfBirth":"1995-08-23 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"radha@example.com","PreferredName":"Radha"}, - {"Gender":"Female","FullName":"Anindya Ghatak","PersonID":934,"FaxNumber":"(219) 555-0101","DateOfBirth":"1950-09-20 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"anindya@example.com","PreferredName":"Anindya"}, - {"Gender":"Female","FullName":"Chandrashekhar Dasgupta","PersonID":935,"FaxNumber":"(208) 555-0101","DateOfBirth":"1976-08-11 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"chandrashekhar@example.com","PreferredName":"Chandrashekhar"}, - {"Gender":"Female","FullName":"Debbie Molina","PersonID":936,"FaxNumber":"(270) 555-0101","DateOfBirth":"1980-03-21 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"debbie@example.com","PreferredName":"Debbie"}, - {"Gender":"Female","FullName":"Baran Jonsson","PersonID":937,"FaxNumber":"(458) 555-0101","DateOfBirth":"1996-03-18 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"baran@example.com","PreferredName":"Baran"}, - {"Gender":"Female","FullName":"Jai Lamble","PersonID":938,"FaxNumber":"(479) 555-0101","DateOfBirth":"1968-04-27 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"jai@example.com","PreferredName":"Jai"}, - {"Gender":"Female","FullName":"Sointu Savonheimo","PersonID":939,"FaxNumber":"(701) 555-0101","DateOfBirth":"1967-02-07 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"sointu@example.com","PreferredName":"Sointu"}, - {"Gender":"Female","FullName":"Olya Izmaylov","PersonID":940,"FaxNumber":"(210) 555-0101","DateOfBirth":"1997-06-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"olya@example.com","PreferredName":"Olya"}, - {"Gender":"Female","FullName":"Taneli Riutta","PersonID":941,"FaxNumber":"(276) 555-0101","DateOfBirth":"1991-03-10 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"taneli@example.com","PreferredName":"Taneli"}, - {"Gender":"Female","FullName":"Bahaar Asef zade","PersonID":942,"FaxNumber":"(225) 555-0101","DateOfBirth":"1978-08-11 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"bahaar@example.com","PreferredName":"Bahaar"}, - {"Gender":"Female","FullName":"Leyla Asef zade","PersonID":943,"FaxNumber":"(216) 555-0101","DateOfBirth":"1982-09-26 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"leyla@example.com","PreferredName":"Leyla"}, - {"Gender":"Female","FullName":"Gabriela Hernandes","PersonID":944,"FaxNumber":"(239) 555-0101","DateOfBirth":"1983-01-11 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"gabriela@example.com","PreferredName":"Gabriela"}, - {"Gender":"Female","FullName":"Geza Roman","PersonID":945,"FaxNumber":"(215) 555-0101","DateOfBirth":"1962-08-25 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"geza@example.com","PreferredName":"Geza"}, - {"Gender":"Female","FullName":"Leonardo Folliero","PersonID":946,"FaxNumber":"(339) 555-0101","DateOfBirth":"1980-03-24 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"leonardo@example.com","PreferredName":"Leonardo"}, - {"Gender":"Female","FullName":"Allan Mannik","PersonID":947,"FaxNumber":"(218) 555-0101","DateOfBirth":"1983-10-22 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"allan@example.com","PreferredName":"Allan"}, - {"Gender":"Female","FullName":"Gopalgobinda Sikdar","PersonID":948,"FaxNumber":"(307) 555-0101","DateOfBirth":"1996-09-10 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"gopalgobinda@example.com","PreferredName":"Gopalgobinda"}, - {"Gender":"Female","FullName":"Chin-Sun Chang","PersonID":949,"FaxNumber":"(605) 555-0101","DateOfBirth":"1953-08-02 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"chin-sun@example.com","PreferredName":"Chin-Sun"}, - {"Gender":"Female","FullName":"Lilli Sokk","PersonID":950,"FaxNumber":"(229) 555-0101","DateOfBirth":"1953-08-07 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"lilli@example.com","PreferredName":"Lilli"}, - {"Gender":"Female","FullName":"Adrian Andreasson","PersonID":951,"FaxNumber":"(217) 555-0101","DateOfBirth":"1957-07-17 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"adrian@example.com","PreferredName":"Adrian"}, - {"Gender":"Female","FullName":"Kamila Michnova","PersonID":952,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-12-04 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"kamila@example.com","PreferredName":"Kamila"}, - {"Gender":"Female","FullName":"Bing Han","PersonID":953,"FaxNumber":"(228) 555-0101","DateOfBirth":"1986-05-12 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"bing@example.com","PreferredName":"Bing"}, - {"Gender":"Female","FullName":"Olafs Rozitis","PersonID":954,"FaxNumber":"(316) 555-0101","DateOfBirth":"1980-06-09 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"olafs@example.com","PreferredName":"Olafs"}, - {"Gender":"Female","FullName":"Sara Huiting","PersonID":955,"FaxNumber":"(218) 555-0101","DateOfBirth":"1954-11-05 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"sara@example.com","PreferredName":"Sara"}, - {"Gender":"Female","FullName":"Ajitaab Pakalapati","PersonID":956,"FaxNumber":"(209) 555-0101","DateOfBirth":"1980-03-30 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"ajitaab@example.com","PreferredName":"Ajitaab"}, - {"Gender":"Female","FullName":"Eugen Agafitei","PersonID":957,"FaxNumber":"(252) 555-0101","DateOfBirth":"1989-11-12 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"eugen@example.com","PreferredName":"Eugen"}, - {"Gender":"Female","FullName":"Sumati Bhat","PersonID":958,"FaxNumber":"(206) 555-0101","DateOfBirth":"1970-07-18 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"sumati@example.com","PreferredName":"Sumati"}, - {"Gender":"Female","FullName":"Dena Glissen","PersonID":959,"FaxNumber":"(316) 555-0101","DateOfBirth":"1952-10-27 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"dena@example.com","PreferredName":"Dena"}, - {"Gender":"Female","FullName":"Elina Kaleja","PersonID":960,"FaxNumber":"(225) 555-0101","DateOfBirth":"1973-11-04 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"elina@example.com","PreferredName":"Elina"}, - {"Gender":"Female","FullName":"Liidia Lepp","PersonID":961,"FaxNumber":"(276) 555-0101","DateOfBirth":"1984-03-10 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"liidia@example.com","PreferredName":"Liidia"}, - {"Gender":"Female","FullName":"Volkan senturk","PersonID":962,"FaxNumber":"(276) 555-0101","DateOfBirth":"1963-04-28 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"volkan@example.com","PreferredName":"Volkan"}, - {"Gender":"Female","FullName":"Violetta KlanCisar","PersonID":963,"FaxNumber":"(225) 555-0101","DateOfBirth":"1957-05-22 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"violetta@example.com","PreferredName":"Violetta"}, - {"Gender":"Female","FullName":"Chandana Shasthri","PersonID":964,"FaxNumber":"(803) 555-0101","DateOfBirth":"1997-01-26 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"chandana@example.com","PreferredName":"Chandana"}, - {"Gender":"Female","FullName":"Ana Florea","PersonID":965,"FaxNumber":"(210) 555-0101","DateOfBirth":"1996-04-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"ana@example.com","PreferredName":"Ana"}, - {"Gender":"Female","FullName":"Pinja Jantunen","PersonID":966,"FaxNumber":"(308) 555-0101","DateOfBirth":"1957-08-23 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"pinja@example.com","PreferredName":"Pinja"}, - {"Gender":"Female","FullName":"Pari Hosseini","PersonID":967,"FaxNumber":"(505) 555-0101","DateOfBirth":"1971-11-15 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"pari@example.com","PreferredName":"Pari"}, - {"Gender":"Female","FullName":"Isidora Morales","PersonID":968,"FaxNumber":"(406) 555-0101","DateOfBirth":"1990-02-20 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"isidora@example.com","PreferredName":"Isidora"}, - {"Gender":"Female","FullName":"Kertu Sokk","PersonID":969,"FaxNumber":"(212) 555-0101","DateOfBirth":"1973-08-26 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"kertu@example.com","PreferredName":"Kertu"}, - {"Gender":"Female","FullName":"Gayatri Gajula","PersonID":970,"FaxNumber":"(212) 555-0101","DateOfBirth":"1959-12-28 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"gayatri@example.com","PreferredName":"Gayatri"}, - {"Gender":"Female","FullName":"Victoria Lacusta","PersonID":971,"FaxNumber":"(212) 555-0101","DateOfBirth":"1987-12-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"victoria@example.com","PreferredName":"Victoria"}, - {"Gender":"Female","FullName":"Sumati Chatterjee","PersonID":972,"FaxNumber":"(231) 555-0101","DateOfBirth":"1989-04-12 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"sumati@example.com","PreferredName":"Sumati"}, - {"Gender":"Female","FullName":"Tai Bach","PersonID":973,"FaxNumber":"(219) 555-0101","DateOfBirth":"1959-02-25 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"tai@example.com","PreferredName":"Tai"}, - {"Gender":"Female","FullName":"Eva Schulteisz","PersonID":974,"FaxNumber":"(252) 555-0101","DateOfBirth":"1951-12-27 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"eva@example.com","PreferredName":"Eva"}, - {"Gender":"Female","FullName":"Can ozcan","PersonID":975,"FaxNumber":"(215) 555-0101","DateOfBirth":"1973-07-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"can@example.com","PreferredName":"Can"}, - {"Gender":"Female","FullName":"Richard Friar","PersonID":976,"FaxNumber":"(339) 555-0101","DateOfBirth":"1973-07-24 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"richard@example.com","PreferredName":"Richard"}, - {"Gender":"Female","FullName":"Matyas Sedlar","PersonID":977,"FaxNumber":"(270) 555-0101","DateOfBirth":"1979-02-16 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"matyas@example.com","PreferredName":"Matyas"}, - {"Gender":"Female","FullName":"Arijit Bhuiyan","PersonID":978,"FaxNumber":"(212) 555-0101","DateOfBirth":"1992-04-29 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"arijit@example.com","PreferredName":"Arijit"}, - {"Gender":"Female","FullName":"Vladimir Henzl","PersonID":979,"FaxNumber":"(907) 555-0101","DateOfBirth":"1972-08-25 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"vladimir@example.com","PreferredName":"Vladimir"}, - {"Gender":"Female","FullName":"Shantanu Huq","PersonID":980,"FaxNumber":"(252) 555-0101","DateOfBirth":"1985-10-23 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"shantanu@example.com","PreferredName":"Shantanu"}, - {"Gender":"Female","FullName":"Nada Jovanovic","PersonID":981,"FaxNumber":"(215) 555-0101","DateOfBirth":"1985-09-10 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"nada@example.com","PreferredName":"Nada"}, - {"Gender":"Female","FullName":"Nicolo Cattaneo","PersonID":982,"FaxNumber":"(212) 555-0101","DateOfBirth":"1972-05-15 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"nicolo@example.com","PreferredName":"Nicolo"}, - {"Gender":"Female","FullName":"Joel Carrillo","PersonID":983,"FaxNumber":"(405) 555-0101","DateOfBirth":"1974-04-12 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"joel@example.com","PreferredName":"Joel"}, - {"Gender":"Female","FullName":"Ivan Sepulveda","PersonID":984,"FaxNumber":"(218) 555-0101","DateOfBirth":"1987-04-10 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"ivan@example.com","PreferredName":"Ivan"}, - {"Gender":"Female","FullName":"Daevasree Samavedam","PersonID":985,"FaxNumber":"(201) 555-0101","DateOfBirth":"1962-08-14 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"daevasree@example.com","PreferredName":"Daevasree"}, - {"Gender":"Female","FullName":"Ludmila Smidova","PersonID":986,"FaxNumber":"(480) 555-0101","DateOfBirth":"1973-04-21 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"ludmila@example.com","PreferredName":"Ludmila"}, - {"Gender":"Female","FullName":"Manca Hrastovsek","PersonID":987,"FaxNumber":"(205) 555-0101","DateOfBirth":"1959-10-13 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"manca@example.com","PreferredName":"Manca"}, - {"Gender":"Female","FullName":"Anna Gyarmathi","PersonID":988,"FaxNumber":"(252) 555-0101","DateOfBirth":"1961-10-09 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"anna@example.com","PreferredName":"Anna"}, - {"Gender":"Female","FullName":"Ioana Florea","PersonID":989,"FaxNumber":"(339) 555-0101","DateOfBirth":"1975-11-03 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"ioana@example.com","PreferredName":"Ioana"}, - {"Gender":"Female","FullName":"Lorin Astrom","PersonID":990,"FaxNumber":"(210) 555-0101","DateOfBirth":"1978-10-28 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"lorin@example.com","PreferredName":"Lorin"}, - {"Gender":"Female","FullName":"Bishwa Chatterjee","PersonID":991,"FaxNumber":"(239) 555-0101","DateOfBirth":"1960-12-13 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"bishwa@example.com","PreferredName":"Bishwa"}, - {"Gender":"Female","FullName":"Chaayaadaevi Sonti","PersonID":992,"FaxNumber":"(217) 555-0101","DateOfBirth":"1954-05-29 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"chaayaadaevi@example.com","PreferredName":"Chaayaadaevi"}, - {"Gender":"Female","FullName":"Drazenka Jelic","PersonID":993,"FaxNumber":"(803) 555-0101","DateOfBirth":"1955-12-17 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"drazenka@example.com","PreferredName":"Drazenka"}, - {"Gender":"Female","FullName":"Ida Celma","PersonID":994,"FaxNumber":"(319) 555-0101","DateOfBirth":"1977-08-06 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"ida@example.com","PreferredName":"Ida"}, - {"Gender":"Female","FullName":"Hoc Tran","PersonID":995,"FaxNumber":"(339) 555-0101","DateOfBirth":"1965-02-13 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"hoc@example.com","PreferredName":"Hoc"}, - {"Gender":"Female","FullName":"David safranek","PersonID":996,"FaxNumber":"(215) 555-0101","DateOfBirth":"1992-02-21 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"david@example.com","PreferredName":"David"}, - {"Gender":"Female","FullName":"Svetlana Todorovic","PersonID":997,"FaxNumber":"(206) 555-0101","DateOfBirth":"1966-10-11 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"svetlana@example.com","PreferredName":"Svetlana"}, - {"Gender":"Female","FullName":"Richard Zahradnicek","PersonID":998,"FaxNumber":"(314) 555-0101","DateOfBirth":"1961-03-02 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"richard@example.com","PreferredName":"Richard"}, - {"Gender":"Female","FullName":"Seo-yun Paik","PersonID":999,"FaxNumber":"(210) 555-0101","DateOfBirth":"1968-07-18 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"seo-yun@example.com","PreferredName":"Seo-yun"}, - {"Gender":"Female","FullName":"Emily Whittle","PersonID":1000,"FaxNumber":"(231) 555-0101","DateOfBirth":"1962-11-25 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"emily@example.com","PreferredName":"Emily"} diff --git a/person.json b/person.json deleted file mode 100644 index 6f1e73f978..0000000000 --- a/person.json +++ /dev/null @@ -1,998 +0,0 @@ - {"Gender":"Female","FullName":"Agrita Abele","PersonID":1,"FaxNumber":"(415) 555-0103","DateOfBirth":"1957-12-19 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"agrita@example.com","PreferredName":"Agrita"}, - {"Gender":"Female","FullName":"Kayla Woodcock","PersonID":2,"FaxNumber":"(415) 555-0103","DateOfBirth":"1989-01-25 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"kaylaw@wideworldimporters.com","PreferredName":"Kayla"}, - {"Gender":"Male","FullName":"Hudson Onslow","PersonID":3,"FaxNumber":"(415) 555-0103","DateOfBirth":"1995-11-09 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"hudsono@wideworldimporters.com","PreferredName":"Hudson"}, - {"Gender":"Female","FullName":"Isabella Rupp","PersonID":4,"FaxNumber":"(415) 555-0103","DateOfBirth":"1983-06-09 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"isabellar@wideworldimporters.com","PreferredName":"Isabella"}, - {"Gender":"Female","FullName":"Eva Muirden","PersonID":5,"FaxNumber":"(415) 555-0103","DateOfBirth":"1991-05-23 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"evam@wideworldimporters.com","PreferredName":"Eva"}, - {"Gender":"Female","FullName":"Sophia Hinton","PersonID":6,"FaxNumber":"(415) 555-0103","DateOfBirth":"1993-02-03 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"sophiah@wideworldimporters.com","PreferredName":"Sophia"}, - {"Gender":"Female","FullName":"Amy Trefl","PersonID":7,"FaxNumber":"(415) 555-0103","DateOfBirth":"1990-05-20 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"amyt@wideworldimporters.com","PreferredName":"Amy"}, - {"Gender":"Female","FullName":"Anthony Grosse","PersonID":8,"FaxNumber":"(415) 555-0103","DateOfBirth":"1961-02-14 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"anthonyg@wideworldimporters.com","PreferredName":"Anthony"}, - {"Gender":"Female","FullName":"Alica Fatnowna","PersonID":9,"FaxNumber":"(415) 555-0103","DateOfBirth":"1993-06-14 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"alicaf@wideworldimporters.com","PreferredName":"Alica"}, - {"Gender":"Female","FullName":"Stella Rosenhain","PersonID":10,"FaxNumber":"(415) 555-0103","DateOfBirth":"1988-09-29 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"stellar@wideworldimporters.com","PreferredName":"Stella"}, - {"Gender":"Male","FullName":"Ethan Onslow","PersonID":11,"FaxNumber":"(415) 555-0103","DateOfBirth":"1997-03-18 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"ethano@wideworldimporters.com","PreferredName":"Ethan"}, - {"Gender":"Male","FullName":"Henry Forlonge","PersonID":12,"FaxNumber":"(415) 555-0103","DateOfBirth":"1950-03-11 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"henryf@wideworldimporters.com","PreferredName":"Henry"}, - {"Gender":"Male","FullName":"Hudson Hollinworth","PersonID":13,"FaxNumber":"(415) 555-0103","DateOfBirth":"1972-06-15 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"hudsonh@wideworldimporters.com","PreferredName":"Hudson"}, - {"Gender":"Female","FullName":"Lily Code","PersonID":14,"FaxNumber":"(415) 555-0103","DateOfBirth":"1957-05-17 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"lilyc@wideworldimporters.com","PreferredName":"Lily"}, - {"Gender":"Male","FullName":"Taj Shand","PersonID":15,"FaxNumber":"(415) 555-0103","DateOfBirth":"1978-10-24 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"tajs@wideworldimporters.com","PreferredName":"Taj"}, - {"Gender":"Male","FullName":"Archer Lamble","PersonID":16,"FaxNumber":"(415) 555-0103","DateOfBirth":"1969-12-12 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"archerl@wideworldimporters.com","PreferredName":"Archer"}, - {"Gender":"Male","FullName":"Piper Koch","PersonID":17,"FaxNumber":"(415) 555-0103","DateOfBirth":"1954-11-08 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"piperk@wideworldimporters.com","PreferredName":"Piper"}, - {"Gender":"Female","FullName":"Katie Darwin","PersonID":18,"FaxNumber":"(415) 555-0103","DateOfBirth":"1960-06-16 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"katied@wideworldimporters.com","PreferredName":"Katie"}, - {"Gender":"Female","FullName":"Jai Shand","PersonID":19,"FaxNumber":"(415) 555-0103","DateOfBirth":"1981-05-02 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"jais@wideworldimporters.com","PreferredName":"Jai"}, - {"Gender":"Male","FullName":"Jack Potter","PersonID":20,"FaxNumber":"(415) 555-0103","DateOfBirth":"1955-12-27 00:00:00","PhoneNumber":"(415) 555-0102","EmailAddress":"jackp@wideworldimporters.com","PreferredName":"Jack"}, - {"Gender":"Male","FullName":"Reio Kabin","PersonID":21,"FaxNumber":"(847) 555-0101","DateOfBirth":"1958-08-15 00:00:00","PhoneNumber":"(847) 555-0100","EmailAddress":"reio@adatum.com","PreferredName":"Reio"}, - {"Gender":"Male","FullName":"Oliver Kivi","PersonID":22,"FaxNumber":"(847) 555-0101","DateOfBirth":"1987-01-10 00:00:00","PhoneNumber":"(847) 555-0100","EmailAddress":"olly@adatum.com","PreferredName":"Olly"}, - {"Gender":"Female","FullName":"Hanna Mihhailov","PersonID":23,"FaxNumber":"(360) 555-0101","DateOfBirth":"1967-03-08 00:00:00","PhoneNumber":"(360) 555-0100","EmailAddress":"hannam@Contoso Motors.com","PreferredName":"Hanna"}, - {"Gender":"Female","FullName":"Paulus Lippmaa","PersonID":24,"FaxNumber":"(360) 555-0101","DateOfBirth":"1993-07-29 00:00:00","PhoneNumber":"(360) 555-0100","EmailAddress":"paulusl@Contoso Motors.com","PreferredName":"Paulus"}, - {"Gender":"Female","FullName":"Kerstin Parn","PersonID":25,"FaxNumber":"(415) 555-0101","DateOfBirth":"1981-03-29 00:00:00","PhoneNumber":"(415) 555-0100","EmailAddress":"kerstin@consolidatedmessenger.com","PreferredName":"Kerstin"}, - {"Gender":"Female","FullName":"Helen Ahven","PersonID":26,"FaxNumber":"(415) 555-0101","DateOfBirth":"1980-02-28 00:00:00","PhoneNumber":"(415) 555-0100","EmailAddress":"helen@consolidatedmessenger.com","PreferredName":"Helen"}, - {"Gender":"Female","FullName":"Bill Lawson","PersonID":27,"FaxNumber":"(203) 555-0107","DateOfBirth":"1980-04-27 00:00:00","PhoneNumber":"(203) 555-0107","EmailAddress":"billl@fabrikam.com","PreferredName":"Bill"}, - {"Gender":"Female","FullName":"Helen Moore","PersonID":28,"FaxNumber":"(203) 555-0107","DateOfBirth":"1991-12-05 00:00:00","PhoneNumber":"(203) 555-0104","EmailAddress":"helenm@fabrikam.com","PreferredName":"Helen"}, - {"Gender":"Female","FullName":"Penny Buck","PersonID":29,"FaxNumber":"(406) 555-0109","DateOfBirth":"1961-10-09 00:00:00","PhoneNumber":"(406) 555-0107","EmailAddress":"pennyb@graphicdesigninstitute.com","PreferredName":"Penny"}, - {"Gender":"Female","FullName":"Donna Smith","PersonID":30,"FaxNumber":"(406) 555-0109","DateOfBirth":"1979-01-18 00:00:00","PhoneNumber":"(406) 555-0101","EmailAddress":"donnas@graphicdesigninstitute.com","PreferredName":"Donna"}, - {"Gender":"Female","FullName":"Annette Talon","PersonID":32,"FaxNumber":"(423) 555-0100","DateOfBirth":"1973-09-03 00:00:00","PhoneNumber":"(423) 555-0106","EmailAddress":"annettet@humongousinsurance.com","PreferredName":"Annette"}, - {"Gender":"Female","FullName":"Elias Myllari","PersonID":33,"FaxNumber":"(209) 555-0106","DateOfBirth":"1992-09-24 00:00:00","PhoneNumber":"(209) 555-0101","EmailAddress":"eliasm@litwareinc.com","PreferredName":"Elias"}, - {"Gender":"Female","FullName":"Vilma Niva","PersonID":34,"FaxNumber":"(209) 555-0106","DateOfBirth":"1963-03-31 00:00:00","PhoneNumber":"(209) 555-0103","EmailAddress":"vilman@litwareinc.com","PreferredName":"Vilma"}, - {"Gender":"Female","FullName":"Prem Prabhu","PersonID":35,"FaxNumber":"(423) 555-0108","DateOfBirth":"1965-05-19 00:00:00","PhoneNumber":"(423) 555-0102","EmailAddress":"premp@lucernepublishing.com","PreferredName":"Prem"}, - {"Gender":"Female","FullName":"Sunita Jadhav","PersonID":36,"FaxNumber":"(423) 555-0108","DateOfBirth":"1990-01-19 00:00:00","PhoneNumber":"(423) 555-0101","EmailAddress":"sunitaj@lucernepublishing.com","PreferredName":"Sunita"}, - {"Gender":"Female","FullName":"Marcos Costa","PersonID":37,"FaxNumber":"(252) 555-0101","DateOfBirth":"1960-12-13 00:00:00","PhoneNumber":"(252) 555-0106","EmailAddress":"marcosc@nodpublishers.com","PreferredName":"Marcos"}, - {"Gender":"Female","FullName":"Matheus Oliveira","PersonID":38,"FaxNumber":"(252) 555-0101","DateOfBirth":"1951-06-22 00:00:00","PhoneNumber":"(252) 555-0107","EmailAddress":"matheuso@nodpublishers.com","PreferredName":"Matheus"}, - {"Gender":"Female","FullName":"Eliza Soderberg","PersonID":39,"FaxNumber":"(201) 555-0106","DateOfBirth":"1973-04-11 00:00:00","PhoneNumber":"(201) 555-0101","EmailAddress":"elizas@northwindelectriccars.com","PreferredName":"Eliza"}, - {"Gender":"Female","FullName":"Sara Karlsson","PersonID":40,"FaxNumber":"(201) 555-0106","DateOfBirth":"1961-04-07 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"sarak@northwindelectriccars.com","PreferredName":"Sara"}, - {"Gender":"Female","FullName":"Donald Jones","PersonID":41,"FaxNumber":"(605) 555-0101","DateOfBirth":"1990-03-05 00:00:00","PhoneNumber":"(605) 555-0101","EmailAddress":"donaldj@treyresearch.net","PreferredName":"Donald"}, - {"Gender":"Female","FullName":"Sharon Graham","PersonID":42,"FaxNumber":"(605) 555-0101","DateOfBirth":"1978-08-18 00:00:00","PhoneNumber":"(605) 555-0106","EmailAddress":"sharong@treyresearch.net","PreferredName":"Sharon"}, - {"Gender":"Female","FullName":"Hai Dam","PersonID":43,"FaxNumber":"(218) 555-0108","DateOfBirth":"1964-08-10 00:00:00","PhoneNumber":"(218) 555-0101","EmailAddress":"haid@thephone-company.com","PreferredName":"Hai"}, - {"Gender":"Female","FullName":"Thanh Dinh","PersonID":44,"FaxNumber":"(218) 555-0108","DateOfBirth":"1959-06-11 00:00:00","PhoneNumber":"(218) 555-0104","EmailAddress":"thanhd@thephone-company.com","PreferredName":"Thanh"}, - {"Gender":"Female","FullName":"Hubert Helms","PersonID":45,"FaxNumber":"(415) 555-0104","DateOfBirth":"1964-08-19 00:00:00","PhoneNumber":"(415) 555-0103","EmailAddress":"huberth@woodgrovebank.com","PreferredName":"Hubert"}, - {"Gender":"Female","FullName":"Donald Small","PersonID":46,"FaxNumber":"(415) 555-0104","DateOfBirth":"1998-02-08 00:00:00","PhoneNumber":"(415) 555-0105","EmailAddress":"donalds@woodgrovebank.com","PreferredName":"Donald"}, - {"Gender":"Female","FullName":"Waldemar Fisar","PersonID":47,"FaxNumber":"(308) 555-0101","DateOfBirth":"1952-01-23 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"waldemar@tailspintoys.com","PreferredName":"Waldemar"}, - {"Gender":"Female","FullName":"Laimonis Berzins","PersonID":48,"FaxNumber":"(308) 555-0101","DateOfBirth":"1964-03-26 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"laimonis@tailspintoys.com","PreferredName":"Laimonis"}, - {"Gender":"Female","FullName":"Lorena Cindric","PersonID":49,"FaxNumber":"(406) 555-0101","DateOfBirth":"1960-12-10 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"lorena@tailspintoys.com","PreferredName":"Lorena"}, - {"Gender":"Female","FullName":"Hung Van Groesen","PersonID":50,"FaxNumber":"(406) 555-0101","DateOfBirth":"1976-05-16 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"hung@tailspintoys.com","PreferredName":"Hung"}, - {"Gender":"Female","FullName":"Bhaargav Rambhatla","PersonID":51,"FaxNumber":"(480) 555-0101","DateOfBirth":"1983-03-18 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"bhaargav@tailspintoys.com","PreferredName":"Bhaargav"}, - {"Gender":"Female","FullName":"Mudar Jevtic","PersonID":52,"FaxNumber":"(480) 555-0101","DateOfBirth":"1997-10-27 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"mudar@tailspintoys.com","PreferredName":"Mudar"}, - {"Gender":"Female","FullName":"Daniel Roman","PersonID":53,"FaxNumber":"(316) 555-0101","DateOfBirth":"1989-03-17 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"daniel@tailspintoys.com","PreferredName":"Daniel"}, - {"Gender":"Female","FullName":"Leyla Radnia","PersonID":54,"FaxNumber":"(316) 555-0101","DateOfBirth":"1974-05-12 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"leyla@tailspintoys.com","PreferredName":"Leyla"}, - {"Gender":"Female","FullName":"Johanna Huiting","PersonID":55,"FaxNumber":"(212) 555-0101","DateOfBirth":"1995-06-27 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"johanna@tailspintoys.com","PreferredName":"Johanna"}, - {"Gender":"Female","FullName":"Robert Ruutli","PersonID":56,"FaxNumber":"(212) 555-0101","DateOfBirth":"1972-08-22 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"robert@tailspintoys.com","PreferredName":"Robert"}, - {"Gender":"Female","FullName":"Biswajeet Thakur","PersonID":57,"FaxNumber":"(701) 555-0101","DateOfBirth":"1982-04-29 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"biswajeet@tailspintoys.com","PreferredName":"Biswajeet"}, - {"Gender":"Female","FullName":"Radha Shah","PersonID":58,"FaxNumber":"(701) 555-0101","DateOfBirth":"1980-07-31 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"radha@tailspintoys.com","PreferredName":"Radha"}, - {"Gender":"Female","FullName":"Kalidas Nadar","PersonID":59,"FaxNumber":"(423) 555-0101","DateOfBirth":"1978-12-13 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"kalidas@tailspintoys.com","PreferredName":"Kalidas"}, - {"Gender":"Female","FullName":"Filip Nedvidek","PersonID":60,"FaxNumber":"(423) 555-0101","DateOfBirth":"1979-10-30 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"filip@tailspintoys.com","PreferredName":"Filip"}, - {"Gender":"Female","FullName":"Kanti Kotadia","PersonID":61,"FaxNumber":"(303) 555-0101","DateOfBirth":"1967-05-23 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"kanti@tailspintoys.com","PreferredName":"Kanti"}, - {"Gender":"Female","FullName":"Hoa Cu","PersonID":62,"FaxNumber":"(303) 555-0101","DateOfBirth":"1976-04-29 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"hoa@tailspintoys.com","PreferredName":"Hoa"}, - {"Gender":"Female","FullName":"Sointu Aalto","PersonID":63,"FaxNumber":"(201) 555-0101","DateOfBirth":"1991-03-26 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"sointu@tailspintoys.com","PreferredName":"Sointu"}, - {"Gender":"Female","FullName":"Jae-Gon Min","PersonID":64,"FaxNumber":"(201) 555-0101","DateOfBirth":"1977-07-21 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"jae-gon@tailspintoys.com","PreferredName":"Jae-Gon"}, - {"Gender":"Female","FullName":"Paula Matos","PersonID":66,"FaxNumber":"(701) 555-0101","DateOfBirth":"1977-01-23 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"paula@tailspintoys.com","PreferredName":"Paula"}, - {"Gender":"Female","FullName":"Elnaz Javan","PersonID":67,"FaxNumber":"(215) 555-0101","DateOfBirth":"1974-06-06 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"elnaz@tailspintoys.com","PreferredName":"Elnaz"}, - {"Gender":"Female","FullName":"Jayashish Ghatak","PersonID":68,"FaxNumber":"(215) 555-0101","DateOfBirth":"1972-11-09 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jayashish@tailspintoys.com","PreferredName":"Jayashish"}, - {"Gender":"Female","FullName":"Heloisa Fernandes","PersonID":69,"FaxNumber":"(218) 555-0101","DateOfBirth":"1956-01-02 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"heloisa@tailspintoys.com","PreferredName":"Heloisa"}, - {"Gender":"Female","FullName":"Amornrat Rattanaporn","PersonID":70,"FaxNumber":"(218) 555-0101","DateOfBirth":"1988-07-17 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"amornrat@tailspintoys.com","PreferredName":"Amornrat"}, - {"Gender":"Female","FullName":"Razeena Hosseini","PersonID":71,"FaxNumber":"(217) 555-0101","DateOfBirth":"1955-12-02 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"razeena@tailspintoys.com","PreferredName":"Razeena"}, - {"Gender":"Female","FullName":"Leticia Ribeiro","PersonID":72,"FaxNumber":"(217) 555-0101","DateOfBirth":"1997-09-20 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"leticia@tailspintoys.com","PreferredName":"Leticia"}, - {"Gender":"Female","FullName":"Tereza Valentova","PersonID":73,"FaxNumber":"(240) 555-0101","DateOfBirth":"1984-03-14 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"tereza@tailspintoys.com","PreferredName":"Tereza"}, - {"Gender":"Female","FullName":"Brijesh Ganguly","PersonID":74,"FaxNumber":"(240) 555-0101","DateOfBirth":"1986-08-02 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"brijesh@tailspintoys.com","PreferredName":"Brijesh"}, - {"Gender":"Female","FullName":"Filips Jaunzems","PersonID":75,"FaxNumber":"(210) 555-0101","DateOfBirth":"1959-09-06 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"filips@tailspintoys.com","PreferredName":"Filips"}, - {"Gender":"Female","FullName":"Bharati Bhowmick","PersonID":76,"FaxNumber":"(210) 555-0101","DateOfBirth":"1956-11-10 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"bharati@tailspintoys.com","PreferredName":"Bharati"}, - {"Gender":"Female","FullName":"Nitin Matondkar","PersonID":77,"FaxNumber":"(314) 555-0101","DateOfBirth":"1953-08-14 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"nitin@tailspintoys.com","PreferredName":"Nitin"}, - {"Gender":"Female","FullName":"Joy Dutta","PersonID":78,"FaxNumber":"(314) 555-0101","DateOfBirth":"1976-05-04 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"joy@tailspintoys.com","PreferredName":"Joy"}, - {"Gender":"Female","FullName":"Adam Kubat","PersonID":79,"FaxNumber":"(216) 555-0101","DateOfBirth":"1986-09-18 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"adam@tailspintoys.com","PreferredName":"Adam"}, - {"Gender":"Female","FullName":"Gulzar Naidu","PersonID":80,"FaxNumber":"(216) 555-0101","DateOfBirth":"1976-03-04 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"gulzar@tailspintoys.com","PreferredName":"Gulzar"}, - {"Gender":"Female","FullName":"Rohan Kumar","PersonID":81,"FaxNumber":"(603) 555-0101","DateOfBirth":"1979-03-03 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"rohank@contosomotors.com","PreferredName":"Rohan"}, - {"Gender":"Female","FullName":"Prakash Sarma","PersonID":82,"FaxNumber":"(603) 555-0101","DateOfBirth":"1975-11-30 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"prakash@tailspintoys.com","PreferredName":"Prakash"}, - {"Gender":"Female","FullName":"Mithun Bhattacharya","PersonID":83,"FaxNumber":"(907) 555-0101","DateOfBirth":"1976-05-01 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"mithun@tailspintoys.com","PreferredName":"Mithun"}, - {"Gender":"Female","FullName":"Sandhya Raju","PersonID":84,"FaxNumber":"(907) 555-0101","DateOfBirth":"1969-01-17 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"sandhya@tailspintoys.com","PreferredName":"Sandhya"}, - {"Gender":"Female","FullName":"Shreya Verma","PersonID":85,"FaxNumber":"(206) 555-0101","DateOfBirth":"1983-02-14 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"shreyav@contosomotors.com","PreferredName":"Shreya"}, - {"Gender":"Female","FullName":"Ravindra Parkar","PersonID":86,"FaxNumber":"(206) 555-0101","DateOfBirth":"1977-03-23 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"ravindra@tailspintoys.com","PreferredName":"Ravindra"}, - {"Gender":"Female","FullName":"Duleep Raju","PersonID":87,"FaxNumber":"(215) 555-0101","DateOfBirth":"1993-10-18 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"duleep@tailspintoys.com","PreferredName":"Duleep"}, - {"Gender":"Female","FullName":"Vlatka Duvnjak","PersonID":88,"FaxNumber":"(215) 555-0101","DateOfBirth":"1978-12-21 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"vlatka@tailspintoys.com","PreferredName":"Vlatka"}, - {"Gender":"Female","FullName":"Cristina Longo","PersonID":89,"FaxNumber":"(239) 555-0101","DateOfBirth":"1950-07-21 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"cristina@tailspintoys.com","PreferredName":"Cristina"}, - {"Gender":"Female","FullName":"Antonio Lucchese","PersonID":90,"FaxNumber":"(239) 555-0101","DateOfBirth":"1958-06-29 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"antonio@tailspintoys.com","PreferredName":"Antonio"}, - {"Gender":"Female","FullName":"Hang Tang","PersonID":91,"FaxNumber":"(907) 555-0101","DateOfBirth":"1991-11-23 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"hang@tailspintoys.com","PreferredName":"Hang"}, - {"Gender":"Female","FullName":"Hong Ang","PersonID":92,"FaxNumber":"(907) 555-0101","DateOfBirth":"1966-09-15 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"hong@tailspintoys.com","PreferredName":"Hong"}, - {"Gender":"Female","FullName":"Intira Mookjai","PersonID":93,"FaxNumber":"(252) 555-0101","DateOfBirth":"1962-12-25 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"intira@tailspintoys.com","PreferredName":"Intira"}, - {"Gender":"Female","FullName":"Young-Tae Kim","PersonID":94,"FaxNumber":"(252) 555-0101","DateOfBirth":"1965-03-14 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"young-tae@tailspintoys.com","PreferredName":"Young-Tae"}, - {"Gender":"Female","FullName":"Sulabha Khalsa","PersonID":95,"FaxNumber":"(209) 555-0101","DateOfBirth":"1950-09-24 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"sulabha@tailspintoys.com","PreferredName":"Sulabha"}, - {"Gender":"Female","FullName":"Alessandro Milano","PersonID":96,"FaxNumber":"(209) 555-0101","DateOfBirth":"1952-02-17 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"alessandro@tailspintoys.com","PreferredName":"Alessandro"}, - {"Gender":"Female","FullName":"Dhanishta Majji","PersonID":97,"FaxNumber":"(319) 555-0101","DateOfBirth":"1962-04-28 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"dhanishta@tailspintoys.com","PreferredName":"Dhanishta"}, - {"Gender":"Female","FullName":"Nils Podnieks","PersonID":98,"FaxNumber":"(319) 555-0101","DateOfBirth":"1979-01-06 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"nils@tailspintoys.com","PreferredName":"Nils"}, - {"Gender":"Female","FullName":"Paula Gonzales","PersonID":99,"FaxNumber":"(218) 555-0101","DateOfBirth":"1981-08-17 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"paula@tailspintoys.com","PreferredName":"Paula"}, - {"Gender":"Female","FullName":"Chetana Dewangan","PersonID":100,"FaxNumber":"(218) 555-0101","DateOfBirth":"1987-01-11 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"chetana@tailspintoys.com","PreferredName":"Chetana"}, - {"Gender":"Female","FullName":"Tatjana Utjesenovic","PersonID":101,"FaxNumber":"(212) 555-0101","DateOfBirth":"1976-05-09 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"tatjana@tailspintoys.com","PreferredName":"Tatjana"}, - {"Gender":"Female","FullName":"Theresa Boose","PersonID":102,"FaxNumber":"(212) 555-0101","DateOfBirth":"1995-08-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"theresa@tailspintoys.com","PreferredName":"Theresa"}, - {"Gender":"Female","FullName":"Karel Hanak","PersonID":103,"FaxNumber":"(205) 555-0101","DateOfBirth":"1958-05-23 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"karel@tailspintoys.com","PreferredName":"Karel"}, - {"Gender":"Female","FullName":"Fernanda Fierro","PersonID":104,"FaxNumber":"(205) 555-0101","DateOfBirth":"1986-02-01 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"fernanda@tailspintoys.com","PreferredName":"Fernanda"}, - {"Gender":"Female","FullName":"Odessa Schneider","PersonID":105,"FaxNumber":"(206) 555-0101","DateOfBirth":"1987-11-01 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"odessa@tailspintoys.com","PreferredName":"Odessa"}, - {"Gender":"Female","FullName":"Konrads Sprogis","PersonID":106,"FaxNumber":"(206) 555-0101","DateOfBirth":"1978-05-08 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"konrads@tailspintoys.com","PreferredName":"Konrads"}, - {"Gender":"Female","FullName":"Kimberly Pace","PersonID":107,"FaxNumber":"(206) 555-0101","DateOfBirth":"1969-03-23 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"kimberly@tailspintoys.com","PreferredName":"Kimberly"}, - {"Gender":"Female","FullName":"Shobha Gupta","PersonID":108,"FaxNumber":"(206) 555-0101","DateOfBirth":"1993-05-13 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"shobha@tailspintoys.com","PreferredName":"Shobha"}, - {"Gender":"Female","FullName":"Nikolajs Kalejs","PersonID":109,"FaxNumber":"(210) 555-0101","DateOfBirth":"1987-07-24 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"nikolajs@tailspintoys.com","PreferredName":"Nikolajs"}, - {"Gender":"Female","FullName":"Philippe Lamy","PersonID":110,"FaxNumber":"(210) 555-0101","DateOfBirth":"1951-05-11 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"philippe@tailspintoys.com","PreferredName":"Philippe"}, - {"Gender":"Female","FullName":"Haasini Rai","PersonID":111,"FaxNumber":"(803) 555-0101","DateOfBirth":"1991-04-26 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"haasini@tailspintoys.com","PreferredName":"Haasini"}, - {"Gender":"Female","FullName":"Viktorie Melicharova","PersonID":112,"FaxNumber":"(803) 555-0101","DateOfBirth":"1992-08-22 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"viktorie@tailspintoys.com","PreferredName":"Viktorie"}, - {"Gender":"Female","FullName":"Anjali Asthana","PersonID":113,"FaxNumber":"(210) 555-0101","DateOfBirth":"1975-04-11 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"anjali@tailspintoys.com","PreferredName":"Anjali"}, - {"Gender":"Female","FullName":"Hanuman Negi","PersonID":114,"FaxNumber":"(210) 555-0101","DateOfBirth":"1950-03-07 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"hanuman@tailspintoys.com","PreferredName":"Hanuman"}, - {"Gender":"Female","FullName":"Shah Omidi","PersonID":115,"FaxNumber":"(304) 555-0101","DateOfBirth":"1975-11-20 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"shah@tailspintoys.com","PreferredName":"Shah"}, - {"Gender":"Female","FullName":"Chandra Mittal","PersonID":116,"FaxNumber":"(304) 555-0101","DateOfBirth":"1995-05-20 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"chandra@tailspintoys.com","PreferredName":"Chandra"}, - {"Gender":"Female","FullName":"Ferhat Celik","PersonID":117,"FaxNumber":"(270) 555-0101","DateOfBirth":"1985-11-30 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"ferhat@tailspintoys.com","PreferredName":"Ferhat"}, - {"Gender":"Female","FullName":"Leyla Celik","PersonID":118,"FaxNumber":"(270) 555-0101","DateOfBirth":"1996-05-03 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"leyla@tailspintoys.com","PreferredName":"Leyla"}, - {"Gender":"Female","FullName":"Dayarama Kamei","PersonID":119,"FaxNumber":"(458) 555-0101","DateOfBirth":"1993-04-07 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"dayarama@tailspintoys.com","PreferredName":"Dayarama"}, - {"Gender":"Female","FullName":"Elisabeth Flamand","PersonID":120,"FaxNumber":"(458) 555-0101","DateOfBirth":"1959-01-27 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"elisabeth@tailspintoys.com","PreferredName":"Elisabeth"}, - {"Gender":"Female","FullName":"Nils Kalnins","PersonID":121,"FaxNumber":"(314) 555-0101","DateOfBirth":"1988-12-06 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"nils@tailspintoys.com","PreferredName":"Nils"}, - {"Gender":"Female","FullName":"Rajiv Kotadia","PersonID":122,"FaxNumber":"(314) 555-0101","DateOfBirth":"1976-12-30 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"rajiv@tailspintoys.com","PreferredName":"Rajiv"}, - {"Gender":"Female","FullName":"Ashish Acharya","PersonID":123,"FaxNumber":"(270) 555-0101","DateOfBirth":"1995-07-11 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"ashish@tailspintoys.com","PreferredName":"Ashish"}, - {"Gender":"Female","FullName":"Filip Sedlar","PersonID":124,"FaxNumber":"(270) 555-0101","DateOfBirth":"1963-05-20 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"filip@tailspintoys.com","PreferredName":"Filip"}, - {"Gender":"Female","FullName":"Alena Prikrylova","PersonID":125,"FaxNumber":"(210) 555-0101","DateOfBirth":"1971-12-16 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"alena@tailspintoys.com","PreferredName":"Alena"}, - {"Gender":"Female","FullName":"Catina Bojin","PersonID":126,"FaxNumber":"(210) 555-0101","DateOfBirth":"1955-12-05 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"catina@tailspintoys.com","PreferredName":"Catina"}, - {"Gender":"Female","FullName":"Lana Rozej","PersonID":127,"FaxNumber":"(314) 555-0101","DateOfBirth":"1963-05-22 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"lana@tailspintoys.com","PreferredName":"Lana"}, - {"Gender":"Female","FullName":"Kalpana Mukherjee","PersonID":128,"FaxNumber":"(314) 555-0101","DateOfBirth":"1980-10-25 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"kalpana@tailspintoys.com","PreferredName":"Kalpana"}, - {"Gender":"Female","FullName":"Chandrakanta Raut","PersonID":129,"FaxNumber":"(212) 555-0101","DateOfBirth":"1993-03-10 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"chandrakanta@tailspintoys.com","PreferredName":"Chandrakanta"}, - {"Gender":"Female","FullName":"Ivan Castellanos","PersonID":130,"FaxNumber":"(212) 555-0101","DateOfBirth":"1975-02-02 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"ivan@tailspintoys.com","PreferredName":"Ivan"}, - {"Gender":"Female","FullName":"Ganapati Gadiyaram","PersonID":131,"FaxNumber":"(206) 555-0101","DateOfBirth":"1988-09-16 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"ganapati@tailspintoys.com","PreferredName":"Ganapati"}, - {"Gender":"Female","FullName":"Parsa Blijleven","PersonID":132,"FaxNumber":"(206) 555-0101","DateOfBirth":"1979-03-02 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"parsa@tailspintoys.com","PreferredName":"Parsa"}, - {"Gender":"Female","FullName":"Adrijana Blagojevic","PersonID":133,"FaxNumber":"(206) 555-0101","DateOfBirth":"1959-01-08 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"adrijana@tailspintoys.com","PreferredName":"Adrijana"}, - {"Gender":"Female","FullName":"Lina Martins","PersonID":134,"FaxNumber":"(206) 555-0101","DateOfBirth":"1984-05-26 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"lina@tailspintoys.com","PreferredName":"Lina"}, - {"Gender":"Female","FullName":"Lap Dinh","PersonID":135,"FaxNumber":"(240) 555-0101","DateOfBirth":"1956-11-08 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"lap@tailspintoys.com","PreferredName":"Lap"}, - {"Gender":"Female","FullName":"August Astrom","PersonID":136,"FaxNumber":"(240) 555-0101","DateOfBirth":"1989-06-28 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"august@tailspintoys.com","PreferredName":"August"}, - {"Gender":"Female","FullName":"Didem ozCelik","PersonID":137,"FaxNumber":"(205) 555-0101","DateOfBirth":"1996-01-12 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"didem@tailspintoys.com","PreferredName":"Didem"}, - {"Gender":"Female","FullName":"Krista Andrejev","PersonID":138,"FaxNumber":"(205) 555-0101","DateOfBirth":"1965-07-06 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"krista@tailspintoys.com","PreferredName":"Krista"}, - {"Gender":"Female","FullName":"Serhat Akbulut","PersonID":139,"FaxNumber":"(209) 555-0101","DateOfBirth":"1985-06-23 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"serhat@tailspintoys.com","PreferredName":"Serhat"}, - {"Gender":"Female","FullName":"Nadja Johansson","PersonID":140,"FaxNumber":"(209) 555-0101","DateOfBirth":"1972-04-06 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"nadja@tailspintoys.com","PreferredName":"Nadja"}, - {"Gender":"Female","FullName":"Daniela Barrios","PersonID":141,"FaxNumber":"(206) 555-0101","DateOfBirth":"1987-04-28 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"daniela@tailspintoys.com","PreferredName":"Daniela"}, - {"Gender":"Female","FullName":"Daina Celma","PersonID":142,"FaxNumber":"(206) 555-0101","DateOfBirth":"1984-08-18 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"daina@tailspintoys.com","PreferredName":"Daina"}, - {"Gender":"Female","FullName":"Julia Slobodova","PersonID":143,"FaxNumber":"(231) 555-0101","DateOfBirth":"1987-10-09 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"julia@tailspintoys.com","PreferredName":"Julia"}, - {"Gender":"Female","FullName":"Raimonds Kalnins","PersonID":144,"FaxNumber":"(231) 555-0101","DateOfBirth":"1952-09-17 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"raimonds@tailspintoys.com","PreferredName":"Raimonds"}, - {"Gender":"Female","FullName":"Marcela Jankova","PersonID":145,"FaxNumber":"(304) 555-0101","DateOfBirth":"1980-04-09 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"marcela@tailspintoys.com","PreferredName":"Marcela"}, - {"Gender":"Female","FullName":"Predrag Stojanovic","PersonID":146,"FaxNumber":"(304) 555-0101","DateOfBirth":"1979-12-31 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"predrag@tailspintoys.com","PreferredName":"Predrag"}, - {"Gender":"Female","FullName":"Dipali Sonkar","PersonID":147,"FaxNumber":"(201) 555-0101","DateOfBirth":"1978-01-11 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"dipali@tailspintoys.com","PreferredName":"Dipali"}, - {"Gender":"Female","FullName":"Mariana Apodaca","PersonID":148,"FaxNumber":"(201) 555-0101","DateOfBirth":"1963-07-19 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"mariana@tailspintoys.com","PreferredName":"Mariana"}, - {"Gender":"Female","FullName":"Bansidhar Mitra","PersonID":149,"FaxNumber":"(209) 555-0101","DateOfBirth":"1958-10-20 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bansidhar@tailspintoys.com","PreferredName":"Bansidhar"}, - {"Gender":"Female","FullName":"Liia Mae","PersonID":150,"FaxNumber":"(209) 555-0101","DateOfBirth":"1997-12-20 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"liia@tailspintoys.com","PreferredName":"Liia"}, - {"Gender":"Female","FullName":"Gunnar Persson","PersonID":151,"FaxNumber":"(205) 555-0101","DateOfBirth":"1985-10-05 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"gunnar@tailspintoys.com","PreferredName":"Gunnar"}, - {"Gender":"Female","FullName":"Parvati Modi","PersonID":152,"FaxNumber":"(205) 555-0101","DateOfBirth":"1965-06-13 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"parvati@tailspintoys.com","PreferredName":"Parvati"}, - {"Gender":"Female","FullName":"Vitezslav Rehak","PersonID":153,"FaxNumber":"(215) 555-0101","DateOfBirth":"1963-06-04 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"vitezslav@tailspintoys.com","PreferredName":"Vitezslav"}, - {"Gender":"Female","FullName":"Parsa Van Vossen","PersonID":154,"FaxNumber":"(215) 555-0101","DateOfBirth":"1962-05-16 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"parsa@tailspintoys.com","PreferredName":"Parsa"}, - {"Gender":"Female","FullName":"Bharat Sikdar","PersonID":155,"FaxNumber":"(229) 555-0101","DateOfBirth":"1990-05-08 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"bharat@tailspintoys.com","PreferredName":"Bharat"}, - {"Gender":"Female","FullName":"Alain Aupry","PersonID":156,"FaxNumber":"(229) 555-0101","DateOfBirth":"1970-08-06 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"alain@tailspintoys.com","PreferredName":"Alain"}, - {"Gender":"Female","FullName":"Juan Bezanson","PersonID":157,"FaxNumber":"(206) 555-0101","DateOfBirth":"1964-07-19 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"juan@tailspintoys.com","PreferredName":"Juan"}, - {"Gender":"Female","FullName":"Ruby Charlton","PersonID":158,"FaxNumber":"(206) 555-0101","DateOfBirth":"1960-09-05 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"ruby@tailspintoys.com","PreferredName":"Ruby"}, - {"Gender":"Female","FullName":"Aile Mae","PersonID":159,"FaxNumber":"(216) 555-0101","DateOfBirth":"1972-09-07 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"aile@tailspintoys.com","PreferredName":"Aile"}, - {"Gender":"Female","FullName":"Margherita Lucchesi","PersonID":160,"FaxNumber":"(216) 555-0101","DateOfBirth":"1963-03-05 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"margherita@tailspintoys.com","PreferredName":"Margherita"}, - {"Gender":"Female","FullName":"Pratap Varghese","PersonID":161,"FaxNumber":"(276) 555-0101","DateOfBirth":"1994-11-03 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"pratap@tailspintoys.com","PreferredName":"Pratap"}, - {"Gender":"Female","FullName":"Marcel Marquis","PersonID":162,"FaxNumber":"(276) 555-0101","DateOfBirth":"1972-04-02 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"marcel@tailspintoys.com","PreferredName":"Marcel"}, - {"Gender":"Female","FullName":"Margita Kopecka","PersonID":163,"FaxNumber":"(339) 555-0101","DateOfBirth":"1996-03-14 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"margita@tailspintoys.com","PreferredName":"Margita"}, - {"Gender":"Female","FullName":"Mirjam Johansson","PersonID":164,"FaxNumber":"(339) 555-0101","DateOfBirth":"1989-12-19 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"mirjam@tailspintoys.com","PreferredName":"Mirjam"}, - {"Gender":"Female","FullName":"Lekha Mitra","PersonID":165,"FaxNumber":"(304) 555-0101","DateOfBirth":"1982-01-11 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"lekha@tailspintoys.com","PreferredName":"Lekha"}, - {"Gender":"Female","FullName":"Seeta Bose","PersonID":166,"FaxNumber":"(304) 555-0101","DateOfBirth":"1985-09-08 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"seeta@tailspintoys.com","PreferredName":"Seeta"}, - {"Gender":"Female","FullName":"Abhoy PrabhupÄda","PersonID":167,"FaxNumber":"(423) 555-0101","DateOfBirth":"1957-09-04 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"abhoy@tailspintoys.com","PreferredName":"Abhoy"}, - {"Gender":"Female","FullName":"Seok-Ho Jeon","PersonID":168,"FaxNumber":"(423) 555-0101","DateOfBirth":"1997-10-04 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"seok-ho@tailspintoys.com","PreferredName":"Seok-Ho"}, - {"Gender":"Female","FullName":"Alida Caune","PersonID":169,"FaxNumber":"(212) 555-0101","DateOfBirth":"1971-01-24 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"alida@tailspintoys.com","PreferredName":"Alida"}, - {"Gender":"Female","FullName":"Indiana Fritzsche","PersonID":170,"FaxNumber":"(212) 555-0101","DateOfBirth":"1985-12-01 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"indiana@tailspintoys.com","PreferredName":"Indiana"}, - {"Gender":"Female","FullName":"Agnes Szolosy","PersonID":171,"FaxNumber":"(209) 555-0101","DateOfBirth":"1956-08-28 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"agnes@tailspintoys.com","PreferredName":"Agnes"}, - {"Gender":"Female","FullName":"Yu-jin Jee","PersonID":172,"FaxNumber":"(209) 555-0101","DateOfBirth":"1978-07-28 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"yu-jin@tailspintoys.com","PreferredName":"Yu-jin"}, - {"Gender":"Female","FullName":"Rohana Kaskar","PersonID":173,"FaxNumber":"(207) 555-0101","DateOfBirth":"1965-09-15 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"rohana@tailspintoys.com","PreferredName":"Rohana"}, - {"Gender":"Female","FullName":"Grieta Kalnina","PersonID":174,"FaxNumber":"(207) 555-0101","DateOfBirth":"1966-12-13 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"grieta@tailspintoys.com","PreferredName":"Grieta"}, - {"Gender":"Female","FullName":"Hanuman Dubey","PersonID":175,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-11-06 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"hanuman@tailspintoys.com","PreferredName":"Hanuman"}, - {"Gender":"Female","FullName":"Paola Loggia","PersonID":176,"FaxNumber":"(210) 555-0101","DateOfBirth":"1995-01-17 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"paola@tailspintoys.com","PreferredName":"Paola"}, - {"Gender":"Female","FullName":"Bao Dao","PersonID":177,"FaxNumber":"(339) 555-0101","DateOfBirth":"1986-07-30 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"bao@tailspintoys.com","PreferredName":"Bao"}, - {"Gender":"Female","FullName":"Viljo Lampsa","PersonID":178,"FaxNumber":"(339) 555-0101","DateOfBirth":"1990-05-22 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"viljo@tailspintoys.com","PreferredName":"Viljo"}, - {"Gender":"Female","FullName":"Preyakshna Aluri","PersonID":179,"FaxNumber":"(701) 555-0101","DateOfBirth":"1997-01-01 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"preyakshna@tailspintoys.com","PreferredName":"Preyakshna"}, - {"Gender":"Female","FullName":"Chandan Raut","PersonID":180,"FaxNumber":"(701) 555-0101","DateOfBirth":"1969-09-05 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"chandan@tailspintoys.com","PreferredName":"Chandan"}, - {"Gender":"Female","FullName":"Valentina Conti","PersonID":181,"FaxNumber":"(225) 555-0101","DateOfBirth":"1984-05-31 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"valentina@tailspintoys.com","PreferredName":"Valentina"}, - {"Gender":"Female","FullName":"Narayan Mukherjee","PersonID":182,"FaxNumber":"(225) 555-0101","DateOfBirth":"1964-07-02 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"narayan@tailspintoys.com","PreferredName":"Narayan"}, - {"Gender":"Female","FullName":"Theodore Saucier","PersonID":183,"FaxNumber":"(209) 555-0101","DateOfBirth":"1974-09-17 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"theodore@tailspintoys.com","PreferredName":"Theodore"}, - {"Gender":"Female","FullName":"Chaowalit Pornpipatpong","PersonID":184,"FaxNumber":"(209) 555-0101","DateOfBirth":"1990-11-21 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"chaowalit@tailspintoys.com","PreferredName":"Chaowalit"}, - {"Gender":"Female","FullName":"Mariana Fierro","PersonID":185,"FaxNumber":"(217) 555-0101","DateOfBirth":"1983-02-18 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"mariana@tailspintoys.com","PreferredName":"Mariana"}, - {"Gender":"Female","FullName":"Ivana Kozakova","PersonID":186,"FaxNumber":"(217) 555-0101","DateOfBirth":"1994-03-03 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"ivana@tailspintoys.com","PreferredName":"Ivana"}, - {"Gender":"Female","FullName":"Afshin Djalili","PersonID":187,"FaxNumber":"(231) 555-0101","DateOfBirth":"1984-06-30 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"afshin@tailspintoys.com","PreferredName":"Afshin"}, - {"Gender":"Female","FullName":"Vaclav Holy","PersonID":188,"FaxNumber":"(231) 555-0101","DateOfBirth":"1992-01-09 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"vaclav@tailspintoys.com","PreferredName":"Vaclav"}, - {"Gender":"Female","FullName":"Bianh Phan","PersonID":189,"FaxNumber":"(480) 555-0101","DateOfBirth":"1970-10-24 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"bianh@tailspintoys.com","PreferredName":"Bianh"}, - {"Gender":"Female","FullName":"Kanti Pipalia","PersonID":190,"FaxNumber":"(480) 555-0101","DateOfBirth":"1995-12-16 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"kanti@tailspintoys.com","PreferredName":"Kanti"}, - {"Gender":"Female","FullName":"Koknesis Vitols","PersonID":191,"FaxNumber":"(218) 555-0101","DateOfBirth":"1961-07-21 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"koknesis@tailspintoys.com","PreferredName":"Koknesis"}, - {"Gender":"Female","FullName":"Malle Sepp","PersonID":192,"FaxNumber":"(218) 555-0101","DateOfBirth":"1992-01-01 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"malle@tailspintoys.com","PreferredName":"Malle"}, - {"Gender":"Female","FullName":"Roxane Rastgu","PersonID":193,"FaxNumber":"(787) 555-0101","DateOfBirth":"1961-01-07 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"roxane@tailspintoys.com","PreferredName":"Roxane"}, - {"Gender":"Female","FullName":"Hue Chu","PersonID":194,"FaxNumber":"(787) 555-0101","DateOfBirth":"1955-09-27 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"hue@tailspintoys.com","PreferredName":"Hue"}, - {"Gender":"Female","FullName":"Vlasta Srbova","PersonID":195,"FaxNumber":"(203) 555-0101","DateOfBirth":"1959-04-22 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"vlasta@tailspintoys.com","PreferredName":"Vlasta"}, - {"Gender":"Female","FullName":"Gadhar Ghosh","PersonID":196,"FaxNumber":"(203) 555-0101","DateOfBirth":"1961-10-18 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"gadhar@tailspintoys.com","PreferredName":"Gadhar"}, - {"Gender":"Female","FullName":"Lata Babu","PersonID":197,"FaxNumber":"(405) 555-0101","DateOfBirth":"1972-12-08 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"lata@tailspintoys.com","PreferredName":"Lata"}, - {"Gender":"Female","FullName":"Chandra De","PersonID":198,"FaxNumber":"(405) 555-0101","DateOfBirth":"1980-07-12 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"chandra@tailspintoys.com","PreferredName":"Chandra"}, - {"Gender":"Female","FullName":"Airi Vassiljev","PersonID":199,"FaxNumber":"(229) 555-0101","DateOfBirth":"1995-04-29 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"airi@tailspintoys.com","PreferredName":"Airi"}, - {"Gender":"Female","FullName":"Hoang La","PersonID":200,"FaxNumber":"(229) 555-0101","DateOfBirth":"1995-09-01 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"hoang@tailspintoys.com","PreferredName":"Hoang"}, - {"Gender":"Female","FullName":"Duleep Walia","PersonID":201,"FaxNumber":"(206) 555-0101","DateOfBirth":"1959-11-07 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"duleep@tailspintoys.com","PreferredName":"Duleep"}, - {"Gender":"Female","FullName":"Satish Gill","PersonID":202,"FaxNumber":"(206) 555-0101","DateOfBirth":"1982-11-17 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"satish@tailspintoys.com","PreferredName":"Satish"}, - {"Gender":"Female","FullName":"Matyas Macek","PersonID":203,"FaxNumber":"(316) 555-0101","DateOfBirth":"1997-10-01 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"matyas@tailspintoys.com","PreferredName":"Matyas"}, - {"Gender":"Female","FullName":"Ethan Hopkins","PersonID":204,"FaxNumber":"(316) 555-0101","DateOfBirth":"1970-05-03 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"ethan@tailspintoys.com","PreferredName":"Ethan"}, - {"Gender":"Female","FullName":"Bharat Ankitham","PersonID":205,"FaxNumber":"(252) 555-0101","DateOfBirth":"1991-02-22 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"bharat@tailspintoys.com","PreferredName":"Bharat"}, - {"Gender":"Female","FullName":"Be Phan","PersonID":206,"FaxNumber":"(252) 555-0101","DateOfBirth":"1975-12-15 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"be@tailspintoys.com","PreferredName":"Be"}, - {"Gender":"Female","FullName":"Vera Kubatova","PersonID":207,"FaxNumber":"(212) 555-0101","DateOfBirth":"1978-03-09 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"vera@tailspintoys.com","PreferredName":"Vera"}, - {"Gender":"Female","FullName":"Diego Almeida","PersonID":208,"FaxNumber":"(212) 555-0101","DateOfBirth":"1950-12-27 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"diego@tailspintoys.com","PreferredName":"Diego"}, - {"Gender":"Female","FullName":"Rakesh Nishad","PersonID":209,"FaxNumber":"(505) 555-0101","DateOfBirth":"1973-01-08 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"rakesh@tailspintoys.com","PreferredName":"Rakesh"}, - {"Gender":"Female","FullName":"Huu Hoa","PersonID":210,"FaxNumber":"(505) 555-0101","DateOfBirth":"1978-05-11 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"huu@tailspintoys.com","PreferredName":"Huu"}, - {"Gender":"Female","FullName":"Sang Tran","PersonID":211,"FaxNumber":"(201) 555-0101","DateOfBirth":"1993-04-07 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"sang@tailspintoys.com","PreferredName":"Sang"}, - {"Gender":"Female","FullName":"Bela Nemeth","PersonID":212,"FaxNumber":"(201) 555-0101","DateOfBirth":"1989-10-28 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"bela@tailspintoys.com","PreferredName":"Bela"}, - {"Gender":"Female","FullName":"Eekalabya Bose","PersonID":213,"FaxNumber":"(787) 555-0101","DateOfBirth":"1980-12-14 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"eekalabya@tailspintoys.com","PreferredName":"Eekalabya"}, - {"Gender":"Female","FullName":"Margherita Bucco","PersonID":214,"FaxNumber":"(787) 555-0101","DateOfBirth":"1966-08-24 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"margherita@tailspintoys.com","PreferredName":"Margherita"}, - {"Gender":"Female","FullName":"Tommy Kilpi","PersonID":215,"FaxNumber":"(303) 555-0101","DateOfBirth":"1964-10-23 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"tommy@tailspintoys.com","PreferredName":"Tommy"}, - {"Gender":"Female","FullName":"Giri Bhamidipati","PersonID":216,"FaxNumber":"(303) 555-0101","DateOfBirth":"1971-10-10 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"giri@tailspintoys.com","PreferredName":"Giri"}, - {"Gender":"Female","FullName":"Andrea Ricci","PersonID":217,"FaxNumber":"(216) 555-0101","DateOfBirth":"1969-05-18 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"andrea@tailspintoys.com","PreferredName":"Andrea"}, - {"Gender":"Female","FullName":"Chung-Ho Han","PersonID":218,"FaxNumber":"(216) 555-0101","DateOfBirth":"1992-10-31 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"chung-ho@tailspintoys.com","PreferredName":"Chung-Ho"}, - {"Gender":"Female","FullName":"Isabell Duperre","PersonID":219,"FaxNumber":"(212) 555-0101","DateOfBirth":"1970-07-26 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"isabell @tailspintoys.com","PreferredName":"Isabell "}, - {"Gender":"Female","FullName":"Jasna Vujica","PersonID":220,"FaxNumber":"(212) 555-0101","DateOfBirth":"1960-01-21 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"jasna@tailspintoys.com","PreferredName":"Jasna"}, - {"Gender":"Female","FullName":"Amarendra Ankitham","PersonID":221,"FaxNumber":"(339) 555-0101","DateOfBirth":"1969-12-28 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"amarendra@tailspintoys.com","PreferredName":"Amarendra"}, - {"Gender":"Female","FullName":"Isak Berggren","PersonID":222,"FaxNumber":"(339) 555-0101","DateOfBirth":"1992-05-18 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"isak@tailspintoys.com","PreferredName":"Isak"}, - {"Gender":"Female","FullName":"Aakarsha Nookala","PersonID":223,"FaxNumber":"(201) 555-0101","DateOfBirth":"1992-09-27 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"aakarsha@tailspintoys.com","PreferredName":"Aakarsha"}, - {"Gender":"Female","FullName":"Ilgonis Rozitis","PersonID":224,"FaxNumber":"(201) 555-0101","DateOfBirth":"1992-01-31 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"ilgonis@tailspintoys.com","PreferredName":"Ilgonis"}, - {"Gender":"Female","FullName":"Stanislav Sedlar","PersonID":225,"FaxNumber":"(701) 555-0101","DateOfBirth":"1971-01-04 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"stanislav@tailspintoys.com","PreferredName":"Stanislav"}, - {"Gender":"Female","FullName":"Telma Arvidsson","PersonID":226,"FaxNumber":"(701) 555-0101","DateOfBirth":"1996-12-15 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"telma@tailspintoys.com","PreferredName":"Telma"}, - {"Gender":"Female","FullName":"GokCe Karaca","PersonID":227,"FaxNumber":"(603) 555-0101","DateOfBirth":"1996-07-02 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"gokce@tailspintoys.com","PreferredName":"GokCe"}, - {"Gender":"Female","FullName":"Maria Munteanu","PersonID":228,"FaxNumber":"(603) 555-0101","DateOfBirth":"1991-07-07 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"maria@tailspintoys.com","PreferredName":"Maria"}, - {"Gender":"Female","FullName":"Coralie Emond","PersonID":229,"FaxNumber":"(803) 555-0101","DateOfBirth":"1988-06-19 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"coralie@tailspintoys.com","PreferredName":"Coralie"}, - {"Gender":"Female","FullName":"Cong Trung","PersonID":230,"FaxNumber":"(803) 555-0101","DateOfBirth":"1957-12-23 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"cong@tailspintoys.com","PreferredName":"Cong"}, - {"Gender":"Female","FullName":"Karina Celmina","PersonID":231,"FaxNumber":"(239) 555-0101","DateOfBirth":"1977-05-26 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"karina@tailspintoys.com","PreferredName":"Karina"}, - {"Gender":"Female","FullName":"Nik Stoimenova","PersonID":232,"FaxNumber":"(239) 555-0101","DateOfBirth":"1968-07-26 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"nik@tailspintoys.com","PreferredName":"Nik"}, - {"Gender":"Female","FullName":"Teresa Pisani","PersonID":233,"FaxNumber":"(303) 555-0101","DateOfBirth":"1965-03-05 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"teresa@tailspintoys.com","PreferredName":"Teresa"}, - {"Gender":"Female","FullName":"Murugan Thakur","PersonID":234,"FaxNumber":"(303) 555-0101","DateOfBirth":"1974-02-22 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"murugan@tailspintoys.com","PreferredName":"Murugan"}, - {"Gender":"Female","FullName":"Alba Ponce","PersonID":235,"FaxNumber":"(210) 555-0101","DateOfBirth":"1962-07-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"alba@tailspintoys.com","PreferredName":"Alba"}, - {"Gender":"Female","FullName":"Antra Dzene","PersonID":236,"FaxNumber":"(210) 555-0101","DateOfBirth":"1956-02-28 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"antra@tailspintoys.com","PreferredName":"Antra"}, - {"Gender":"Female","FullName":"Piper Leigh","PersonID":237,"FaxNumber":"(210) 555-0101","DateOfBirth":"1950-04-02 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"piper@tailspintoys.com","PreferredName":"Piper"}, - {"Gender":"Female","FullName":"Jautrite Krievina","PersonID":238,"FaxNumber":"(210) 555-0101","DateOfBirth":"1996-12-31 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"jautrite@tailspintoys.com","PreferredName":"Jautrite"}, - {"Gender":"Female","FullName":"Karie Seymour","PersonID":239,"FaxNumber":"(802) 555-0101","DateOfBirth":"1978-12-16 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"karie@tailspintoys.com","PreferredName":"Karie"}, - {"Gender":"Female","FullName":"Lorenzo Lee","PersonID":240,"FaxNumber":"(802) 555-0101","DateOfBirth":"1956-08-18 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"lorenzo@tailspintoys.com","PreferredName":"Lorenzo"}, - {"Gender":"Female","FullName":"Timea Peto","PersonID":241,"FaxNumber":"(209) 555-0101","DateOfBirth":"1950-05-17 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"timea@tailspintoys.com","PreferredName":"Timea"}, - {"Gender":"Female","FullName":"Amanat Shaker Doust","PersonID":242,"FaxNumber":"(209) 555-0101","DateOfBirth":"1953-09-07 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"amanat@tailspintoys.com","PreferredName":"Amanat"}, - {"Gender":"Female","FullName":"Victoria Ene","PersonID":243,"FaxNumber":"(205) 555-0101","DateOfBirth":"1959-03-20 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"victoria@tailspintoys.com","PreferredName":"Victoria"}, - {"Gender":"Female","FullName":"Panit Meesang","PersonID":244,"FaxNumber":"(205) 555-0101","DateOfBirth":"1964-02-22 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"panit@tailspintoys.com","PreferredName":"Panit"}, - {"Gender":"Female","FullName":"Bhavani Bhowmick","PersonID":245,"FaxNumber":"(215) 555-0101","DateOfBirth":"1959-05-28 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"bhavani@tailspintoys.com","PreferredName":"Bhavani"}, - {"Gender":"Female","FullName":"Ivica Debeljak","PersonID":246,"FaxNumber":"(215) 555-0101","DateOfBirth":"1978-11-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ivica@tailspintoys.com","PreferredName":"Ivica"}, - {"Gender":"Female","FullName":"Yasmine Berggren","PersonID":247,"FaxNumber":"(505) 555-0101","DateOfBirth":"1972-01-21 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"yasmine@tailspintoys.com","PreferredName":"Yasmine"}, - {"Gender":"Female","FullName":"Anima Bagchi","PersonID":248,"FaxNumber":"(505) 555-0101","DateOfBirth":"1998-01-11 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"anima@tailspintoys.com","PreferredName":"Anima"}, - {"Gender":"Female","FullName":"Tea Koppel","PersonID":249,"FaxNumber":"(209) 555-0101","DateOfBirth":"1960-05-17 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"tea@tailspintoys.com","PreferredName":"Tea"}, - {"Gender":"Female","FullName":"Bozena Palatova","PersonID":250,"FaxNumber":"(209) 555-0101","DateOfBirth":"1967-09-14 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bozena@tailspintoys.com","PreferredName":"Bozena"}, - {"Gender":"Female","FullName":"Naseem Radan","PersonID":251,"FaxNumber":"(316) 555-0101","DateOfBirth":"1974-11-16 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"naseem@tailspintoys.com","PreferredName":"Naseem"}, - {"Gender":"Female","FullName":"Geza Olteanu","PersonID":252,"FaxNumber":"(316) 555-0101","DateOfBirth":"1980-04-08 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"geza@tailspintoys.com","PreferredName":"Geza"}, - {"Gender":"Female","FullName":"Laboni Deb","PersonID":253,"FaxNumber":"(207) 555-0101","DateOfBirth":"1978-03-15 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"laboni@tailspintoys.com","PreferredName":"Laboni"}, - {"Gender":"Female","FullName":"Antonin Klaus","PersonID":254,"FaxNumber":"(207) 555-0101","DateOfBirth":"1977-12-18 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"antonin@tailspintoys.com","PreferredName":"Antonin"}, - {"Gender":"Female","FullName":"Sung-Hwan Hwang","PersonID":255,"FaxNumber":"(228) 555-0101","DateOfBirth":"1980-07-21 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"sung-hwan@tailspintoys.com","PreferredName":"Sung-Hwan"}, - {"Gender":"Female","FullName":"Reigo Rebane","PersonID":256,"FaxNumber":"(228) 555-0101","DateOfBirth":"1990-07-27 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"reigo@tailspintoys.com","PreferredName":"Reigo"}, - {"Gender":"Female","FullName":"Shiva Pipalia","PersonID":257,"FaxNumber":"(480) 555-0101","DateOfBirth":"1978-12-05 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"shiva@tailspintoys.com","PreferredName":"Shiva"}, - {"Gender":"Female","FullName":"Aishwarya Beniwal","PersonID":258,"FaxNumber":"(480) 555-0101","DateOfBirth":"1976-12-15 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"aishwarya@tailspintoys.com","PreferredName":"Aishwarya"}, - {"Gender":"Female","FullName":"Karie Mercier","PersonID":259,"FaxNumber":"(209) 555-0101","DateOfBirth":"1989-08-10 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"karie@tailspintoys.com","PreferredName":"Karie"}, - {"Gender":"Female","FullName":"Milada Buresova","PersonID":260,"FaxNumber":"(209) 555-0101","DateOfBirth":"1974-02-05 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"milada@tailspintoys.com","PreferredName":"Milada"}, - {"Gender":"Female","FullName":"Bhanu Thota","PersonID":261,"FaxNumber":"(314) 555-0101","DateOfBirth":"1963-10-26 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"bhanu@tailspintoys.com","PreferredName":"Bhanu"}, - {"Gender":"Female","FullName":"Cyrus Poursokh","PersonID":262,"FaxNumber":"(314) 555-0101","DateOfBirth":"1979-09-24 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"cyrus@tailspintoys.com","PreferredName":"Cyrus"}, - {"Gender":"Female","FullName":"Ae-Cha Joo","PersonID":263,"FaxNumber":"(209) 555-0101","DateOfBirth":"1993-12-23 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"ae-cha@tailspintoys.com","PreferredName":"Ae-Cha"}, - {"Gender":"Female","FullName":"Jawid Pourali","PersonID":264,"FaxNumber":"(209) 555-0101","DateOfBirth":"1964-06-26 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"jawid@tailspintoys.com","PreferredName":"Jawid"}, - {"Gender":"Female","FullName":"Dinara Saparkyzy","PersonID":265,"FaxNumber":"(219) 555-0101","DateOfBirth":"1957-03-06 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"dinara@tailspintoys.com","PreferredName":"Dinara"}, - {"Gender":"Female","FullName":"Karel Sedlar","PersonID":266,"FaxNumber":"(219) 555-0101","DateOfBirth":"1952-06-13 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"karel@tailspintoys.com","PreferredName":"Karel"}, - {"Gender":"Female","FullName":"Adam Dvorak","PersonID":267,"FaxNumber":"(239) 555-0101","DateOfBirth":"1966-07-21 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"adam@tailspintoys.com","PreferredName":"Adam"}, - {"Gender":"Female","FullName":"Dhanishta Vankayala","PersonID":268,"FaxNumber":"(239) 555-0101","DateOfBirth":"1955-03-20 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"dhanishta@tailspintoys.com","PreferredName":"Dhanishta"}, - {"Gender":"Female","FullName":"Ingrida Celmina","PersonID":269,"FaxNumber":"(316) 555-0101","DateOfBirth":"1973-12-23 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"ingrida@tailspintoys.com","PreferredName":"Ingrida"}, - {"Gender":"Female","FullName":"Be Dang","PersonID":270,"FaxNumber":"(316) 555-0101","DateOfBirth":"1997-09-10 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"be@tailspintoys.com","PreferredName":"Be"}, - {"Gender":"Female","FullName":"Jae-Hwa Jang","PersonID":271,"FaxNumber":"(505) 555-0101","DateOfBirth":"1969-07-13 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"jae-hwa@tailspintoys.com","PreferredName":"Jae-Hwa"}, - {"Gender":"Female","FullName":"Clara Cunha","PersonID":272,"FaxNumber":"(505) 555-0101","DateOfBirth":"1984-10-07 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"clara@tailspintoys.com","PreferredName":"Clara"}, - {"Gender":"Female","FullName":"Duck-Hwan Bae","PersonID":273,"FaxNumber":"(803) 555-0101","DateOfBirth":"1962-07-03 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"duck-hwan@tailspintoys.com","PreferredName":"Duck-Hwan"}, - {"Gender":"Female","FullName":"Surya Mishra","PersonID":274,"FaxNumber":"(803) 555-0101","DateOfBirth":"1959-06-15 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"surya@tailspintoys.com","PreferredName":"Surya"}, - {"Gender":"Female","FullName":"Jagoda Vasiljevic","PersonID":275,"FaxNumber":"(252) 555-0101","DateOfBirth":"1953-04-27 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"jagoda@tailspintoys.com","PreferredName":"Jagoda"}, - {"Gender":"Female","FullName":"Eero Raud","PersonID":276,"FaxNumber":"(252) 555-0101","DateOfBirth":"1962-06-29 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"eero@tailspintoys.com","PreferredName":"Eero"}, - {"Gender":"Female","FullName":"Toma Nastase","PersonID":277,"FaxNumber":"(787) 555-0101","DateOfBirth":"1960-12-08 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"toma@tailspintoys.com","PreferredName":"Toma"}, - {"Gender":"Female","FullName":"Arjuna Haldar","PersonID":278,"FaxNumber":"(787) 555-0101","DateOfBirth":"1992-01-12 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"arjuna@tailspintoys.com","PreferredName":"Arjuna"}, - {"Gender":"Female","FullName":"Valerio Cardoso","PersonID":279,"FaxNumber":"(385) 555-0101","DateOfBirth":"1995-02-18 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"valerio@tailspintoys.com","PreferredName":"Valerio"}, - {"Gender":"Female","FullName":"Zac Wintle","PersonID":280,"FaxNumber":"(385) 555-0101","DateOfBirth":"1988-12-02 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"zac@tailspintoys.com","PreferredName":"Zac"}, - {"Gender":"Female","FullName":"Ileana Aguilar","PersonID":281,"FaxNumber":"(207) 555-0101","DateOfBirth":"1975-11-11 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"ileana@tailspintoys.com","PreferredName":"Ileana"}, - {"Gender":"Female","FullName":"Cai Nguyen","PersonID":282,"FaxNumber":"(207) 555-0101","DateOfBirth":"1971-03-20 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"cai@tailspintoys.com","PreferredName":"Cai"}, - {"Gender":"Female","FullName":"Tjasa Weitzer","PersonID":283,"FaxNumber":"(229) 555-0101","DateOfBirth":"1990-08-30 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"tjasa@tailspintoys.com","PreferredName":"Tjasa"}, - {"Gender":"Female","FullName":"Shefali Bose","PersonID":284,"FaxNumber":"(229) 555-0101","DateOfBirth":"1997-02-23 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"shefali@tailspintoys.com","PreferredName":"Shefali"}, - {"Gender":"Female","FullName":"Lucas Van Veenen","PersonID":285,"FaxNumber":"(216) 555-0101","DateOfBirth":"1995-07-02 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"lucas@tailspintoys.com","PreferredName":"Lucas"}, - {"Gender":"Female","FullName":"Farzana Saidi","PersonID":286,"FaxNumber":"(216) 555-0101","DateOfBirth":"1965-07-23 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"farzana@tailspintoys.com","PreferredName":"Farzana"}, - {"Gender":"Female","FullName":"Steven Frasier","PersonID":287,"FaxNumber":"(218) 555-0101","DateOfBirth":"1955-02-24 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"steven@tailspintoys.com","PreferredName":"Steven"}, - {"Gender":"Female","FullName":"Amaranaath Muppavarapu","PersonID":288,"FaxNumber":"(218) 555-0101","DateOfBirth":"1979-03-08 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"amaranaath@tailspintoys.com","PreferredName":"Amaranaath"}, - {"Gender":"Female","FullName":"Mauri Enestam","PersonID":289,"FaxNumber":"(303) 555-0101","DateOfBirth":"1983-01-12 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"mauri@tailspintoys.com","PreferredName":"Mauri"}, - {"Gender":"Female","FullName":"Lakshmi Nair","PersonID":290,"FaxNumber":"(303) 555-0101","DateOfBirth":"1969-04-14 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"lakshmi@tailspintoys.com","PreferredName":"Lakshmi"}, - {"Gender":"Female","FullName":"Ella Zvirbule","PersonID":291,"FaxNumber":"(212) 555-0101","DateOfBirth":"1966-12-06 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"ella@tailspintoys.com","PreferredName":"Ella"}, - {"Gender":"Female","FullName":"Vicente Chávez","PersonID":292,"FaxNumber":"(212) 555-0101","DateOfBirth":"1983-05-06 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"vicente@tailspintoys.com","PreferredName":"Vicente"}, - {"Gender":"Female","FullName":"Sevim Aydın","PersonID":293,"FaxNumber":"(216) 555-0101","DateOfBirth":"1980-12-04 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"sevim@tailspintoys.com","PreferredName":"Sevim"}, - {"Gender":"Female","FullName":"Tamer Ayhan","PersonID":294,"FaxNumber":"(216) 555-0101","DateOfBirth":"1965-01-01 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"tamer@tailspintoys.com","PreferredName":"Tamer"}, - {"Gender":"Female","FullName":"Blanka Stavinohova","PersonID":295,"FaxNumber":"(304) 555-0101","DateOfBirth":"1976-08-15 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"blanka@tailspintoys.com","PreferredName":"Blanka"}, - {"Gender":"Female","FullName":"Josefa Diaz","PersonID":296,"FaxNumber":"(304) 555-0101","DateOfBirth":"1996-05-19 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"josefa@tailspintoys.com","PreferredName":"Josefa"}, - {"Gender":"Female","FullName":"Akanksha Iyengar","PersonID":297,"FaxNumber":"(201) 555-0101","DateOfBirth":"1986-05-30 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"akanksha@tailspintoys.com","PreferredName":"Akanksha"}, - {"Gender":"Female","FullName":"Markus Kantee","PersonID":298,"FaxNumber":"(201) 555-0101","DateOfBirth":"1972-11-09 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"markus@tailspintoys.com","PreferredName":"Markus"}, - {"Gender":"Female","FullName":"Kertu Smirnov","PersonID":299,"FaxNumber":"(206) 555-0101","DateOfBirth":"1958-08-20 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"kertu@tailspintoys.com","PreferredName":"Kertu"}, - {"Gender":"Female","FullName":"Lovro Kulaga","PersonID":300,"FaxNumber":"(206) 555-0101","DateOfBirth":"1969-09-28 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"lovro@tailspintoys.com","PreferredName":"Lovro"}, - {"Gender":"Female","FullName":"Jure Grabensek","PersonID":301,"FaxNumber":"(303) 555-0101","DateOfBirth":"1964-07-31 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"jure@tailspintoys.com","PreferredName":"Jure"}, - {"Gender":"Female","FullName":"Chompunut Jetjirawat","PersonID":302,"FaxNumber":"(303) 555-0101","DateOfBirth":"1966-04-26 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"chompunut@tailspintoys.com","PreferredName":"Chompunut"}, - {"Gender":"Female","FullName":"Javiera Madera","PersonID":303,"FaxNumber":"(231) 555-0101","DateOfBirth":"1965-08-27 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"javiera@tailspintoys.com","PreferredName":"Javiera"}, - {"Gender":"Female","FullName":"Geetanjali Bagchi","PersonID":304,"FaxNumber":"(231) 555-0101","DateOfBirth":"1957-05-07 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"geetanjali@tailspintoys.com","PreferredName":"Geetanjali"}, - {"Gender":"Female","FullName":"Aija Mottola","PersonID":305,"FaxNumber":"(201) 555-0101","DateOfBirth":"1975-10-30 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"aija@tailspintoys.com","PreferredName":"Aija"}, - {"Gender":"Female","FullName":"Elli Berg","PersonID":306,"FaxNumber":"(201) 555-0101","DateOfBirth":"1974-11-19 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"elli@tailspintoys.com","PreferredName":"Elli"}, - {"Gender":"Female","FullName":"Darshan Gupta","PersonID":307,"FaxNumber":"(907) 555-0101","DateOfBirth":"1974-05-12 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"darshan@tailspintoys.com","PreferredName":"Darshan"}, - {"Gender":"Female","FullName":"Prem Reddy","PersonID":308,"FaxNumber":"(907) 555-0101","DateOfBirth":"1997-08-01 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"prem@tailspintoys.com","PreferredName":"Prem"}, - {"Gender":"Female","FullName":"Akanksha Sarma","PersonID":309,"FaxNumber":"(208) 555-0101","DateOfBirth":"1950-10-11 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"akanksha@tailspintoys.com","PreferredName":"Akanksha"}, - {"Gender":"Female","FullName":"Edward Alfred","PersonID":310,"FaxNumber":"(208) 555-0101","DateOfBirth":"1978-07-23 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"edward@tailspintoys.com","PreferredName":"Edward"}, - {"Gender":"Female","FullName":"Aino Kallas","PersonID":311,"FaxNumber":"(212) 555-0101","DateOfBirth":"1976-12-10 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"aino@tailspintoys.com","PreferredName":"Aino"}, - {"Gender":"Female","FullName":"Dhaaruni Vinjamuri","PersonID":312,"FaxNumber":"(212) 555-0101","DateOfBirth":"1977-12-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"dhaaruni@tailspintoys.com","PreferredName":"Dhaaruni"}, - {"Gender":"Female","FullName":"An Dung Phung","PersonID":313,"FaxNumber":"(239) 555-0101","DateOfBirth":"1996-08-05 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"an dung@tailspintoys.com","PreferredName":"An Dung"}, - {"Gender":"Female","FullName":"Ioana Ibanescu","PersonID":314,"FaxNumber":"(239) 555-0101","DateOfBirth":"1966-12-23 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"ioana@tailspintoys.com","PreferredName":"Ioana"}, - {"Gender":"Female","FullName":"Gaurav Sikdar","PersonID":315,"FaxNumber":"(314) 555-0101","DateOfBirth":"1954-08-07 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"gaurav@tailspintoys.com","PreferredName":"Gaurav"}, - {"Gender":"Female","FullName":"Christian Berggren","PersonID":316,"FaxNumber":"(314) 555-0101","DateOfBirth":"1975-08-21 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"christian@tailspintoys.com","PreferredName":"Christian"}, - {"Gender":"Female","FullName":"Anirban Sen","PersonID":317,"FaxNumber":"(702) 555-0101","DateOfBirth":"1991-12-31 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"anirban@tailspintoys.com","PreferredName":"Anirban"}, - {"Gender":"Female","FullName":"Joel Koivisto","PersonID":318,"FaxNumber":"(702) 555-0101","DateOfBirth":"1969-06-04 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"joel@tailspintoys.com","PreferredName":"Joel"}, - {"Gender":"Female","FullName":"Chandrakanta Benjaree","PersonID":319,"FaxNumber":"(385) 555-0101","DateOfBirth":"1966-04-04 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"chandrakanta@tailspintoys.com","PreferredName":"Chandrakanta"}, - {"Gender":"Female","FullName":"Joy Das","PersonID":320,"FaxNumber":"(385) 555-0101","DateOfBirth":"1990-09-15 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"joy@tailspintoys.com","PreferredName":"Joy"}, - {"Gender":"Female","FullName":"Badari Chadalavada","PersonID":321,"FaxNumber":"(252) 555-0101","DateOfBirth":"1981-05-15 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"badari@tailspintoys.com","PreferredName":"Badari"}, - {"Gender":"Female","FullName":"Zala Ude","PersonID":322,"FaxNumber":"(252) 555-0101","DateOfBirth":"1970-12-03 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"zala@tailspintoys.com","PreferredName":"Zala"}, - {"Gender":"Female","FullName":"Gabriele Udinesi","PersonID":323,"FaxNumber":"(803) 555-0101","DateOfBirth":"1994-02-03 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"gabriele@tailspintoys.com","PreferredName":"Gabriele"}, - {"Gender":"Female","FullName":"Murugan Dewangan","PersonID":324,"FaxNumber":"(803) 555-0101","DateOfBirth":"1996-02-10 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"murugan@tailspintoys.com","PreferredName":"Murugan"}, - {"Gender":"Female","FullName":"Malay PrabhupÄda","PersonID":325,"FaxNumber":"(316) 555-0101","DateOfBirth":"1994-06-21 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"malay@tailspintoys.com","PreferredName":"Malay"}, - {"Gender":"Female","FullName":"Nghi Ly","PersonID":326,"FaxNumber":"(316) 555-0101","DateOfBirth":"1981-03-22 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"nghi@tailspintoys.com","PreferredName":"Nghi"}, - {"Gender":"Female","FullName":"Hedi Koppel","PersonID":327,"FaxNumber":"(314) 555-0101","DateOfBirth":"1961-03-18 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"hedi@tailspintoys.com","PreferredName":"Hedi"}, - {"Gender":"Female","FullName":"Teodors Klavins","PersonID":328,"FaxNumber":"(314) 555-0101","DateOfBirth":"1981-03-06 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"teodors@tailspintoys.com","PreferredName":"Teodors"}, - {"Gender":"Female","FullName":"Denisa Ioveanu","PersonID":329,"FaxNumber":"(907) 555-0101","DateOfBirth":"1992-07-11 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"denisa@tailspintoys.com","PreferredName":"Denisa"}, - {"Gender":"Female","FullName":"Cosmin Nutiu","PersonID":330,"FaxNumber":"(907) 555-0101","DateOfBirth":"1992-06-20 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"cosmin@tailspintoys.com","PreferredName":"Cosmin"}, - {"Gender":"Female","FullName":"Vaclav Polaskova","PersonID":331,"FaxNumber":"(216) 555-0101","DateOfBirth":"1952-09-03 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"vaclav@tailspintoys.com","PreferredName":"Vaclav"}, - {"Gender":"Female","FullName":"Georg Valbe","PersonID":332,"FaxNumber":"(216) 555-0101","DateOfBirth":"1970-07-06 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"georg@tailspintoys.com","PreferredName":"Georg"}, - {"Gender":"Female","FullName":"Pramod Nishad","PersonID":333,"FaxNumber":"(225) 555-0101","DateOfBirth":"1951-09-26 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"pramod@tailspintoys.com","PreferredName":"Pramod"}, - {"Gender":"Female","FullName":"Avani Aggarwal","PersonID":334,"FaxNumber":"(225) 555-0101","DateOfBirth":"1973-03-02 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"avani@tailspintoys.com","PreferredName":"Avani"}, - {"Gender":"Female","FullName":"Prasong Tuntayakul","PersonID":335,"FaxNumber":"(201) 555-0101","DateOfBirth":"1996-10-20 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"prasong@tailspintoys.com","PreferredName":"Prasong"}, - {"Gender":"Female","FullName":"Mariela Pasek","PersonID":336,"FaxNumber":"(201) 555-0101","DateOfBirth":"1969-02-13 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"mariela@tailspintoys.com","PreferredName":"Mariela"}, - {"Gender":"Female","FullName":"Aija Zvaigzne","PersonID":337,"FaxNumber":"(205) 555-0101","DateOfBirth":"1950-02-22 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"aija@tailspintoys.com","PreferredName":"Aija"}, - {"Gender":"Female","FullName":"Dharanikumaar Sonti","PersonID":338,"FaxNumber":"(205) 555-0101","DateOfBirth":"1962-08-01 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"dharanikumaar@tailspintoys.com","PreferredName":"Dharanikumaar"}, - {"Gender":"Female","FullName":"Gilbert Pelland","PersonID":339,"FaxNumber":"(406) 555-0101","DateOfBirth":"1960-10-08 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"gilbert@tailspintoys.com","PreferredName":"Gilbert"}, - {"Gender":"Female","FullName":"Ngoc Cao","PersonID":340,"FaxNumber":"(406) 555-0101","DateOfBirth":"1992-11-25 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"ngoc@tailspintoys.com","PreferredName":"Ngoc"}, - {"Gender":"Female","FullName":"Marcella Napolitani","PersonID":341,"FaxNumber":"(262) 555-0101","DateOfBirth":"1966-11-22 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"marcella@tailspintoys.com","PreferredName":"Marcella"}, - {"Gender":"Female","FullName":"Pavol Oravec","PersonID":342,"FaxNumber":"(262) 555-0101","DateOfBirth":"1987-12-17 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"pavol@tailspintoys.com","PreferredName":"Pavol"}, - {"Gender":"Female","FullName":"Femke Hollenberg","PersonID":343,"FaxNumber":"(218) 555-0101","DateOfBirth":"1996-05-25 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"femke@tailspintoys.com","PreferredName":"Femke"}, - {"Gender":"Female","FullName":"Roman Kubat","PersonID":344,"FaxNumber":"(218) 555-0101","DateOfBirth":"1981-12-28 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"roman@tailspintoys.com","PreferredName":"Roman"}, - {"Gender":"Female","FullName":"Brita Jarvi","PersonID":345,"FaxNumber":"(212) 555-0101","DateOfBirth":"1980-11-05 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"brita@tailspintoys.com","PreferredName":"Brita"}, - {"Gender":"Female","FullName":"Lucie Hrdlickova","PersonID":346,"FaxNumber":"(212) 555-0101","DateOfBirth":"1956-04-30 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"lucie@tailspintoys.com","PreferredName":"Lucie"}, - {"Gender":"Female","FullName":"Donato Araujo","PersonID":347,"FaxNumber":"(480) 555-0101","DateOfBirth":"1984-12-28 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"donato@tailspintoys.com","PreferredName":"Donato"}, - {"Gender":"Female","FullName":"Alaine Berthelette","PersonID":348,"FaxNumber":"(480) 555-0101","DateOfBirth":"1964-01-02 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"alaine@tailspintoys.com","PreferredName":"Alaine"}, - {"Gender":"Female","FullName":"Aleksander Jarvi","PersonID":349,"FaxNumber":"(406) 555-0101","DateOfBirth":"1958-03-16 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"aleksander@tailspintoys.com","PreferredName":"Aleksander"}, - {"Gender":"Female","FullName":"Kurt Konecny","PersonID":350,"FaxNumber":"(406) 555-0101","DateOfBirth":"1960-01-02 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"kurt@tailspintoys.com","PreferredName":"Kurt"}, - {"Gender":"Female","FullName":"Malati Shenoy","PersonID":351,"FaxNumber":"(218) 555-0101","DateOfBirth":"1951-06-08 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"malati@tailspintoys.com","PreferredName":"Malati"}, - {"Gender":"Female","FullName":"Duong Duong","PersonID":352,"FaxNumber":"(218) 555-0101","DateOfBirth":"1985-04-28 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"duong@tailspintoys.com","PreferredName":"Duong"}, - {"Gender":"Female","FullName":"Gui-Hyun Ji","PersonID":353,"FaxNumber":"(218) 555-0101","DateOfBirth":"1966-12-23 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"gui-hyun@tailspintoys.com","PreferredName":"Gui-Hyun"}, - {"Gender":"Female","FullName":"Karl Kangur","PersonID":354,"FaxNumber":"(218) 555-0101","DateOfBirth":"1979-03-19 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"karl@tailspintoys.com","PreferredName":"Karl"}, - {"Gender":"Female","FullName":"Michal Polaskova","PersonID":355,"FaxNumber":"(262) 555-0101","DateOfBirth":"1982-08-07 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"michal@tailspintoys.com","PreferredName":"Michal"}, - {"Gender":"Female","FullName":"Debendra Chakraborty","PersonID":356,"FaxNumber":"(262) 555-0101","DateOfBirth":"1972-08-10 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"debendra@tailspintoys.com","PreferredName":"Debendra"}, - {"Gender":"Female","FullName":"Dilara Ayhan","PersonID":357,"FaxNumber":"(210) 555-0101","DateOfBirth":"1963-12-25 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"dilara@tailspintoys.com","PreferredName":"Dilara"}, - {"Gender":"Female","FullName":"Virgiliu Vladu","PersonID":358,"FaxNumber":"(210) 555-0101","DateOfBirth":"1961-07-24 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"virgiliu@tailspintoys.com","PreferredName":"Virgiliu"}, - {"Gender":"Female","FullName":"Peter Macias","PersonID":359,"FaxNumber":"(205) 555-0101","DateOfBirth":"1993-03-23 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"peter@tailspintoys.com","PreferredName":"Peter"}, - {"Gender":"Female","FullName":"Nasrin Fard","PersonID":360,"FaxNumber":"(205) 555-0101","DateOfBirth":"1958-08-19 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"nasrin@tailspintoys.com","PreferredName":"Nasrin"}, - {"Gender":"Female","FullName":"Kurt Lukes","PersonID":361,"FaxNumber":"(225) 555-0101","DateOfBirth":"1974-06-15 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"kurt@tailspintoys.com","PreferredName":"Kurt"}, - {"Gender":"Female","FullName":"Daman Devulapalli","PersonID":362,"FaxNumber":"(225) 555-0101","DateOfBirth":"1975-02-10 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"daman@tailspintoys.com","PreferredName":"Daman"}, - {"Gender":"Female","FullName":"Beatrise Bite","PersonID":363,"FaxNumber":"(218) 555-0101","DateOfBirth":"1954-08-25 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"beatrise@tailspintoys.com","PreferredName":"Beatrise"}, - {"Gender":"Female","FullName":"Hele Semjonov","PersonID":364,"FaxNumber":"(218) 555-0101","DateOfBirth":"1953-11-30 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"hele@tailspintoys.com","PreferredName":"Hele"}, - {"Gender":"Female","FullName":"Bishwanath Ghosh","PersonID":365,"FaxNumber":"(701) 555-0101","DateOfBirth":"1968-09-26 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"bishwanath@tailspintoys.com","PreferredName":"Bishwanath"}, - {"Gender":"Female","FullName":"Gasper Jovicevic","PersonID":366,"FaxNumber":"(701) 555-0101","DateOfBirth":"1972-02-04 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"gasper@tailspintoys.com","PreferredName":"Gasper"}, - {"Gender":"Female","FullName":"Gianguido Lucchesi","PersonID":367,"FaxNumber":"(303) 555-0101","DateOfBirth":"1961-02-04 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"gianguido@tailspintoys.com","PreferredName":"Gianguido"}, - {"Gender":"Female","FullName":"Harihar Chatterjee","PersonID":368,"FaxNumber":"(303) 555-0101","DateOfBirth":"1967-11-01 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"harihar@tailspintoys.com","PreferredName":"Harihar"}, - {"Gender":"Female","FullName":"Nu Bach","PersonID":369,"FaxNumber":"(212) 555-0101","DateOfBirth":"1965-03-25 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"nu@tailspintoys.com","PreferredName":"Nu"}, - {"Gender":"Female","FullName":"Gautama Reddy","PersonID":370,"FaxNumber":"(212) 555-0101","DateOfBirth":"1996-10-20 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"gautama@tailspintoys.com","PreferredName":"Gautama"}, - {"Gender":"Female","FullName":"Ivonna Ene","PersonID":371,"FaxNumber":"(702) 555-0101","DateOfBirth":"1982-12-26 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"ivonna@tailspintoys.com","PreferredName":"Ivonna"}, - {"Gender":"Female","FullName":"Girish Banerjee","PersonID":372,"FaxNumber":"(702) 555-0101","DateOfBirth":"1982-06-08 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"girish@tailspintoys.com","PreferredName":"Girish"}, - {"Gender":"Female","FullName":"Ceyhun sahin","PersonID":373,"FaxNumber":"(215) 555-0101","DateOfBirth":"1989-11-25 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ceyhun@tailspintoys.com","PreferredName":"Ceyhun"}, - {"Gender":"Female","FullName":"Dhir Bhattacharya","PersonID":374,"FaxNumber":"(215) 555-0101","DateOfBirth":"1955-08-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"dhir@tailspintoys.com","PreferredName":"Dhir"}, - {"Gender":"Female","FullName":"Tian Peng","PersonID":375,"FaxNumber":"(203) 555-0101","DateOfBirth":"1953-09-24 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"tian@tailspintoys.com","PreferredName":"Tian"}, - {"Gender":"Female","FullName":"Mariano Costa","PersonID":376,"FaxNumber":"(203) 555-0101","DateOfBirth":"1957-03-20 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"mariano@tailspintoys.com","PreferredName":"Mariano"}, - {"Gender":"Female","FullName":"Vlastimil Bohuslav","PersonID":377,"FaxNumber":"(210) 555-0101","DateOfBirth":"1994-09-16 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"vlastimil@tailspintoys.com","PreferredName":"Vlastimil"}, - {"Gender":"Female","FullName":"Beau Boule","PersonID":378,"FaxNumber":"(210) 555-0101","DateOfBirth":"1975-01-13 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"beau @tailspintoys.com","PreferredName":"Beau "}, - {"Gender":"Female","FullName":"Nejc Vosnik","PersonID":379,"FaxNumber":"(210) 555-0101","DateOfBirth":"1976-08-18 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"nejc@tailspintoys.com","PreferredName":"Nejc"}, - {"Gender":"Female","FullName":"Amalendu Veturi","PersonID":380,"FaxNumber":"(210) 555-0101","DateOfBirth":"1955-12-22 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"amalendu@tailspintoys.com","PreferredName":"Amalendu"}, - {"Gender":"Female","FullName":"Anindo Mazumdar","PersonID":381,"FaxNumber":"(210) 555-0101","DateOfBirth":"1979-01-13 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"anindo@tailspintoys.com","PreferredName":"Anindo"}, - {"Gender":"Female","FullName":"Tarja Saikkonen","PersonID":382,"FaxNumber":"(210) 555-0101","DateOfBirth":"1974-05-13 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"tarja@tailspintoys.com","PreferredName":"Tarja"}, - {"Gender":"Female","FullName":"Nils Balodis","PersonID":383,"FaxNumber":"(307) 555-0101","DateOfBirth":"1972-04-16 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"nils@tailspintoys.com","PreferredName":"Nils"}, - {"Gender":"Female","FullName":"Bernadette Potvin","PersonID":384,"FaxNumber":"(307) 555-0101","DateOfBirth":"1974-10-26 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"bernadette @tailspintoys.com","PreferredName":"Bernadette "}, - {"Gender":"Female","FullName":"Daniella Barbosa","PersonID":385,"FaxNumber":"(212) 555-0101","DateOfBirth":"1974-11-27 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"daniella@tailspintoys.com","PreferredName":"Daniella"}, - {"Gender":"Female","FullName":"Nancy Hansson","PersonID":386,"FaxNumber":"(212) 555-0101","DateOfBirth":"1979-07-15 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"nancy@tailspintoys.com","PreferredName":"Nancy"}, - {"Gender":"Female","FullName":"Raymond Levesque","PersonID":387,"FaxNumber":"(201) 555-0101","DateOfBirth":"1982-09-24 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"raymond@tailspintoys.com","PreferredName":"Raymond"}, - {"Gender":"Female","FullName":"Linda Fisher","PersonID":388,"FaxNumber":"(201) 555-0101","DateOfBirth":"1981-08-26 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"linda@tailspintoys.com","PreferredName":"Linda"}, - {"Gender":"Female","FullName":"Raymond Desforges","PersonID":389,"FaxNumber":"(505) 555-0101","DateOfBirth":"1978-09-27 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"raymond@tailspintoys.com","PreferredName":"Raymond"}, - {"Gender":"Female","FullName":"Stern Neumann","PersonID":390,"FaxNumber":"(505) 555-0101","DateOfBirth":"1950-08-17 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"stern@tailspintoys.com","PreferredName":"Stern"}, - {"Gender":"Female","FullName":"Raju Atluri","PersonID":391,"FaxNumber":"(212) 555-0101","DateOfBirth":"1980-05-19 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"raju@tailspintoys.com","PreferredName":"Raju"}, - {"Gender":"Female","FullName":"Cezar Preda","PersonID":392,"FaxNumber":"(212) 555-0101","DateOfBirth":"1989-01-07 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"cezar@tailspintoys.com","PreferredName":"Cezar"}, - {"Gender":"Female","FullName":"Matyas Bohuslav","PersonID":393,"FaxNumber":"(239) 555-0101","DateOfBirth":"1997-11-27 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"matyas@tailspintoys.com","PreferredName":"Matyas"}, - {"Gender":"Female","FullName":"Ambaajeeraav Ghattamaneni","PersonID":394,"FaxNumber":"(239) 555-0101","DateOfBirth":"1963-07-13 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"ambaajeeraav@tailspintoys.com","PreferredName":"Ambaajeeraav"}, - {"Gender":"Female","FullName":"Julio Correa","PersonID":395,"FaxNumber":"(505) 555-0101","DateOfBirth":"1951-03-28 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"julio@tailspintoys.com","PreferredName":"Julio"}, - {"Gender":"Female","FullName":"Hamsapriya Nandamuri","PersonID":396,"FaxNumber":"(505) 555-0101","DateOfBirth":"1994-12-01 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"hamsapriya@tailspintoys.com","PreferredName":"Hamsapriya"}, - {"Gender":"Female","FullName":"Banshari De","PersonID":397,"FaxNumber":"(206) 555-0101","DateOfBirth":"1955-04-28 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"banshari@tailspintoys.com","PreferredName":"Banshari"}, - {"Gender":"Female","FullName":"Sudhir Yadav","PersonID":398,"FaxNumber":"(206) 555-0101","DateOfBirth":"1959-11-18 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"sudhir@tailspintoys.com","PreferredName":"Sudhir"}, - {"Gender":"Female","FullName":"Ngai Lam","PersonID":399,"FaxNumber":"(215) 555-0101","DateOfBirth":"1952-10-30 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ngai@tailspintoys.com","PreferredName":"Ngai"}, - {"Gender":"Female","FullName":"Camille Hetu","PersonID":400,"FaxNumber":"(215) 555-0101","DateOfBirth":"1951-06-26 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"camille@tailspintoys.com","PreferredName":"Camille"}, - {"Gender":"Female","FullName":"Hyun-Doo Song","PersonID":401,"FaxNumber":"(262) 555-0101","DateOfBirth":"1957-07-21 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"hyun-doo@tailspintoys.com","PreferredName":"Hyun-Doo"}, - {"Gender":"Female","FullName":"Bahadır Korkmaz","PersonID":402,"FaxNumber":"(262) 555-0101","DateOfBirth":"1987-11-04 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"bahad@tailspintoys.com","PreferredName":"Bahadır"}, - {"Gender":"Female","FullName":"Gabriela Srbova","PersonID":403,"FaxNumber":"(319) 555-0101","DateOfBirth":"1960-03-19 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"gabriela@tailspintoys.com","PreferredName":"Gabriela"}, - {"Gender":"Female","FullName":"Priya kaushal","PersonID":404,"FaxNumber":"(319) 555-0101","DateOfBirth":"1994-08-12 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"priya@tailspintoys.com","PreferredName":"Priya"}, - {"Gender":"Female","FullName":"Serkan senturk","PersonID":405,"FaxNumber":"(702) 555-0101","DateOfBirth":"1975-06-21 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"serkan@tailspintoys.com","PreferredName":"Serkan"}, - {"Gender":"Female","FullName":"Fatemeh Javan","PersonID":406,"FaxNumber":"(702) 555-0101","DateOfBirth":"1962-12-20 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"fatemeh@tailspintoys.com","PreferredName":"Fatemeh"}, - {"Gender":"Female","FullName":"Aahlada Thota","PersonID":407,"FaxNumber":"(215) 555-0101","DateOfBirth":"1959-02-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"aahlada@tailspintoys.com","PreferredName":"Aahlada"}, - {"Gender":"Female","FullName":"Marten Keskkula","PersonID":408,"FaxNumber":"(215) 555-0101","DateOfBirth":"1983-06-09 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"marten@tailspintoys.com","PreferredName":"Marten"}, - {"Gender":"Female","FullName":"Ayberk sahin","PersonID":409,"FaxNumber":"(308) 555-0101","DateOfBirth":"1991-07-25 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"ayberk@tailspintoys.com","PreferredName":"Ayberk"}, - {"Gender":"Female","FullName":"Magda Ciora","PersonID":410,"FaxNumber":"(308) 555-0101","DateOfBirth":"1981-08-24 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"magda@tailspintoys.com","PreferredName":"Magda"}, - {"Gender":"Female","FullName":"Kaan Tekin","PersonID":411,"FaxNumber":"(239) 555-0101","DateOfBirth":"1954-04-18 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"kaan@tailspintoys.com","PreferredName":"Kaan"}, - {"Gender":"Female","FullName":"Harshini Kommineni","PersonID":412,"FaxNumber":"(239) 555-0101","DateOfBirth":"1981-08-30 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"harshini@tailspintoys.com","PreferredName":"Harshini"}, - {"Gender":"Female","FullName":"Lata Khandke","PersonID":413,"FaxNumber":"(216) 555-0101","DateOfBirth":"1981-12-01 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"lata@tailspintoys.com","PreferredName":"Lata"}, - {"Gender":"Female","FullName":"Emil Nutiu","PersonID":414,"FaxNumber":"(216) 555-0101","DateOfBirth":"1950-11-05 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"emil@tailspintoys.com","PreferredName":"Emil"}, - {"Gender":"Female","FullName":"Truman Eder","PersonID":415,"FaxNumber":"(225) 555-0101","DateOfBirth":"1966-09-04 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"truman@tailspintoys.com","PreferredName":"Truman"}, - {"Gender":"Female","FullName":"Lale Javan","PersonID":416,"FaxNumber":"(225) 555-0101","DateOfBirth":"1983-03-14 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"lale@tailspintoys.com","PreferredName":"Lale"}, - {"Gender":"Female","FullName":"Lorraine Paulet","PersonID":417,"FaxNumber":"(458) 555-0101","DateOfBirth":"1957-06-10 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"lorraine@tailspintoys.com","PreferredName":"Lorraine"}, - {"Gender":"Female","FullName":"Yusuf Johansson","PersonID":418,"FaxNumber":"(458) 555-0101","DateOfBirth":"1959-10-27 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"yusuf@tailspintoys.com","PreferredName":"Yusuf"}, - {"Gender":"Female","FullName":"Biplab De","PersonID":419,"FaxNumber":"(231) 555-0101","DateOfBirth":"1956-09-30 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"biplab@tailspintoys.com","PreferredName":"Biplab"}, - {"Gender":"Female","FullName":"Dhanishta Kidambi","PersonID":420,"FaxNumber":"(231) 555-0101","DateOfBirth":"1964-06-09 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"dhanishta@tailspintoys.com","PreferredName":"Dhanishta"}, - {"Gender":"Female","FullName":"Rachelle Brasseur","PersonID":421,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-08-03 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"rachelle@tailspintoys.com","PreferredName":"Rachelle"}, - {"Gender":"Female","FullName":"Bholanath Das","PersonID":422,"FaxNumber":"(210) 555-0101","DateOfBirth":"1974-01-10 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"bholanath@tailspintoys.com","PreferredName":"Bholanath"}, - {"Gender":"Female","FullName":"Sara Charlton","PersonID":423,"FaxNumber":"(215) 555-0101","DateOfBirth":"1960-10-31 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"sara@tailspintoys.com","PreferredName":"Sara"}, - {"Gender":"Female","FullName":"Libor safranek","PersonID":424,"FaxNumber":"(215) 555-0101","DateOfBirth":"1975-07-21 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"libor@tailspintoys.com","PreferredName":"Libor"}, - {"Gender":"Female","FullName":"Ramesh Mukherjee","PersonID":425,"FaxNumber":"(217) 555-0101","DateOfBirth":"1991-01-02 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"ramesh@tailspintoys.com","PreferredName":"Ramesh"}, - {"Gender":"Female","FullName":"Byung-Hyun Gwak","PersonID":426,"FaxNumber":"(217) 555-0101","DateOfBirth":"1958-07-08 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"byung-hyun@tailspintoys.com","PreferredName":"Byung-Hyun"}, - {"Gender":"Female","FullName":"Ester Ahmadian","PersonID":427,"FaxNumber":"(229) 555-0101","DateOfBirth":"1986-03-10 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"ester@tailspintoys.com","PreferredName":"Ester"}, - {"Gender":"Female","FullName":"Kanika Mazumdar","PersonID":428,"FaxNumber":"(229) 555-0101","DateOfBirth":"1990-05-19 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"kanika@tailspintoys.com","PreferredName":"Kanika"}, - {"Gender":"Female","FullName":"Daniel Magnusson","PersonID":429,"FaxNumber":"(505) 555-0101","DateOfBirth":"1972-04-05 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"daniel@tailspintoys.com","PreferredName":"Daniel"}, - {"Gender":"Female","FullName":"Cemal Dogan","PersonID":430,"FaxNumber":"(505) 555-0101","DateOfBirth":"1991-11-24 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"cemal@tailspintoys.com","PreferredName":"Cemal"}, - {"Gender":"Female","FullName":"Jack Carpenter","PersonID":431,"FaxNumber":"(270) 555-0101","DateOfBirth":"1987-10-18 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"jack@tailspintoys.com","PreferredName":"Jack"}, - {"Gender":"Female","FullName":"Am Lieu","PersonID":432,"FaxNumber":"(270) 555-0101","DateOfBirth":"1979-03-11 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"am@tailspintoys.com","PreferredName":"Am"}, - {"Gender":"Female","FullName":"Thomas Fischer","PersonID":433,"FaxNumber":"(239) 555-0101","DateOfBirth":"1990-01-30 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"thomas@tailspintoys.com","PreferredName":"Thomas"}, - {"Gender":"Female","FullName":"Neil Logan","PersonID":434,"FaxNumber":"(239) 555-0101","DateOfBirth":"1985-10-26 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"neil@tailspintoys.com","PreferredName":"Neil"}, - {"Gender":"Female","FullName":"Viollette Monty","PersonID":435,"FaxNumber":"(803) 555-0101","DateOfBirth":"1977-09-14 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"viollette@tailspintoys.com","PreferredName":"Viollette"}, - {"Gender":"Female","FullName":"Gita Dutta","PersonID":436,"FaxNumber":"(803) 555-0101","DateOfBirth":"1957-07-04 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"gita@tailspintoys.com","PreferredName":"Gita"}, - {"Gender":"Female","FullName":"Alinne Cardoso","PersonID":437,"FaxNumber":"(308) 555-0101","DateOfBirth":"1975-03-13 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"alinne@tailspintoys.com","PreferredName":"Alinne"}, - {"Gender":"Female","FullName":"Uma Pandit","PersonID":438,"FaxNumber":"(308) 555-0101","DateOfBirth":"1976-04-10 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"uma@tailspintoys.com","PreferredName":"Uma"}, - {"Gender":"Female","FullName":"Mani Poddar","PersonID":439,"FaxNumber":"(209) 555-0101","DateOfBirth":"1967-08-07 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"mani@tailspintoys.com","PreferredName":"Mani"}, - {"Gender":"Female","FullName":"Rama Mukaddam","PersonID":440,"FaxNumber":"(209) 555-0101","DateOfBirth":"1987-10-23 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"rama@tailspintoys.com","PreferredName":"Rama"}, - {"Gender":"Female","FullName":"Deakshitulu Mokkapati","PersonID":441,"FaxNumber":"(314) 555-0101","DateOfBirth":"1985-05-01 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"deakshitulu@tailspintoys.com","PreferredName":"Deakshitulu"}, - {"Gender":"Female","FullName":"Tereza PinÄakova","PersonID":442,"FaxNumber":"(314) 555-0101","DateOfBirth":"1987-04-18 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"tereza@tailspintoys.com","PreferredName":"Tereza"}, - {"Gender":"Female","FullName":"Cezar Pavel","PersonID":443,"FaxNumber":"(303) 555-0101","DateOfBirth":"1959-01-27 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"cezar@tailspintoys.com","PreferredName":"Cezar"}, - {"Gender":"Female","FullName":"Bahaar Yekta","PersonID":444,"FaxNumber":"(303) 555-0101","DateOfBirth":"1966-03-23 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"bahaar@tailspintoys.com","PreferredName":"Bahaar"}, - {"Gender":"Female","FullName":"Fanni Benko","PersonID":445,"FaxNumber":"(385) 555-0101","DateOfBirth":"1974-09-18 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"fanni@tailspintoys.com","PreferredName":"Fanni"}, - {"Gender":"Female","FullName":"Amar Dutta","PersonID":446,"FaxNumber":"(385) 555-0101","DateOfBirth":"1968-10-15 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"amar@tailspintoys.com","PreferredName":"Amar"}, - {"Gender":"Female","FullName":"Brenda Morgan","PersonID":447,"FaxNumber":"(206) 555-0101","DateOfBirth":"1954-01-02 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"brenda@tailspintoys.com","PreferredName":"Brenda"}, - {"Gender":"Female","FullName":"Kamal Nakhtare","PersonID":448,"FaxNumber":"(206) 555-0101","DateOfBirth":"1991-12-01 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"kamal@tailspintoys.com","PreferredName":"Kamal"}, - {"Gender":"Female","FullName":"Olga Alexandrova","PersonID":449,"FaxNumber":"(303) 555-0101","DateOfBirth":"1955-11-24 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"olga@wingtiptoys.com","PreferredName":"Olga"}, - {"Gender":"Female","FullName":"Bibi Javan","PersonID":450,"FaxNumber":"(303) 555-0101","DateOfBirth":"1973-04-16 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"bibi@wingtiptoys.com","PreferredName":"Bibi"}, - {"Gender":"Female","FullName":"Maris Baltins","PersonID":451,"FaxNumber":"(215) 555-0101","DateOfBirth":"1975-05-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"maris@wingtiptoys.com","PreferredName":"Maris"}, - {"Gender":"Female","FullName":"Taneli Hahl","PersonID":452,"FaxNumber":"(215) 555-0101","DateOfBirth":"1987-10-11 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"taneli@wingtiptoys.com","PreferredName":"Taneli"}, - {"Gender":"Female","FullName":"Parsa Reuser","PersonID":453,"FaxNumber":"(480) 555-0101","DateOfBirth":"1969-09-06 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"parsa@wingtiptoys.com","PreferredName":"Parsa"}, - {"Gender":"Female","FullName":"Da-eun Kwak","PersonID":454,"FaxNumber":"(480) 555-0101","DateOfBirth":"1953-04-05 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"da-eun@wingtiptoys.com","PreferredName":"Da-eun"}, - {"Gender":"Female","FullName":"Duleep Srivastava","PersonID":455,"FaxNumber":"(215) 555-0101","DateOfBirth":"1977-11-21 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"duleep@wingtiptoys.com","PreferredName":"Duleep"}, - {"Gender":"Female","FullName":"Kurt Balog","PersonID":456,"FaxNumber":"(215) 555-0101","DateOfBirth":"1996-09-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"kurt@wingtiptoys.com","PreferredName":"Kurt"}, - {"Gender":"Female","FullName":"Miran Nikolic","PersonID":457,"FaxNumber":"(217) 555-0101","DateOfBirth":"1981-10-06 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"miran@wingtiptoys.com","PreferredName":"Miran"}, - {"Gender":"Female","FullName":"Indra Mudaliyar","PersonID":458,"FaxNumber":"(217) 555-0101","DateOfBirth":"1991-05-17 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"indra@wingtiptoys.com","PreferredName":"Indra"}, - {"Gender":"Female","FullName":"Calin Bojin","PersonID":459,"FaxNumber":"(205) 555-0101","DateOfBirth":"1969-10-08 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"calin@wingtiptoys.com","PreferredName":"Calin"}, - {"Gender":"Female","FullName":"Maxime Westerink","PersonID":460,"FaxNumber":"(205) 555-0101","DateOfBirth":"1967-06-25 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"maxime@wingtiptoys.com","PreferredName":"Maxime"}, - {"Gender":"Female","FullName":"Lang Le","PersonID":461,"FaxNumber":"(225) 555-0101","DateOfBirth":"1993-12-09 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"lang@wingtiptoys.com","PreferredName":"Lang"}, - {"Gender":"Female","FullName":"Bozena Divisova","PersonID":462,"FaxNumber":"(225) 555-0101","DateOfBirth":"1984-01-05 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"bozena@wingtiptoys.com","PreferredName":"Bozena"}, - {"Gender":"Female","FullName":"Bhaagyalakshmi Muppavarapu","PersonID":463,"FaxNumber":"(210) 555-0101","DateOfBirth":"1990-02-17 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"bhaagyalakshmi@wingtiptoys.com","PreferredName":"Bhaagyalakshmi"}, - {"Gender":"Female","FullName":"Durjoy Bose","PersonID":464,"FaxNumber":"(210) 555-0101","DateOfBirth":"1982-08-12 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"durjoy@wingtiptoys.com","PreferredName":"Durjoy"}, - {"Gender":"Female","FullName":"Dimitry Nechita","PersonID":465,"FaxNumber":"(209) 555-0101","DateOfBirth":"1976-07-09 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"dimitry@wingtiptoys.com","PreferredName":"Dimitry"}, - {"Gender":"Female","FullName":"Meredith Padilla","PersonID":466,"FaxNumber":"(209) 555-0101","DateOfBirth":"1977-07-06 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"meredith@wingtiptoys.com","PreferredName":"Meredith"}, - {"Gender":"Female","FullName":"Miroslav Kohout","PersonID":467,"FaxNumber":"(210) 555-0101","DateOfBirth":"1979-06-02 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"miroslav@wingtiptoys.com","PreferredName":"Miroslav"}, - {"Gender":"Female","FullName":"Teresa Torres","PersonID":468,"FaxNumber":"(210) 555-0101","DateOfBirth":"1993-01-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"teresa@wingtiptoys.com","PreferredName":"Teresa"}, - {"Gender":"Female","FullName":"Fransje Mutlu","PersonID":469,"FaxNumber":"(262) 555-0101","DateOfBirth":"1977-02-23 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"fransje@wingtiptoys.com","PreferredName":"Fransje"}, - {"Gender":"Female","FullName":"Karel Hybl","PersonID":470,"FaxNumber":"(262) 555-0101","DateOfBirth":"1980-01-10 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"karel@wingtiptoys.com","PreferredName":"Karel"}, - {"Gender":"Female","FullName":"Chati Ornlamai","PersonID":471,"FaxNumber":"(406) 555-0101","DateOfBirth":"1952-06-30 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"chati@wingtiptoys.com","PreferredName":"Chati"}, - {"Gender":"Female","FullName":"Tajana Lovric","PersonID":472,"FaxNumber":"(406) 555-0101","DateOfBirth":"1971-07-03 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"tajana@wingtiptoys.com","PreferredName":"Tajana"}, - {"Gender":"Female","FullName":"Raine Knihtila","PersonID":473,"FaxNumber":"(210) 555-0101","DateOfBirth":"1981-12-19 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"raine@wingtiptoys.com","PreferredName":"Raine"}, - {"Gender":"Female","FullName":"Dhir Mazumdar","PersonID":474,"FaxNumber":"(210) 555-0101","DateOfBirth":"1958-09-27 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"dhir@wingtiptoys.com","PreferredName":"Dhir"}, - {"Gender":"Female","FullName":"Lan Chu","PersonID":475,"FaxNumber":"(215) 555-0101","DateOfBirth":"1962-07-20 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"lan@wingtiptoys.com","PreferredName":"Lan"}, - {"Gender":"Female","FullName":"Tereza Prikrylova","PersonID":476,"FaxNumber":"(215) 555-0101","DateOfBirth":"1957-04-24 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"tereza@wingtiptoys.com","PreferredName":"Tereza"}, - {"Gender":"Female","FullName":"Maurice English","PersonID":477,"FaxNumber":"(229) 555-0101","DateOfBirth":"1952-10-11 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"maurice@wingtiptoys.com","PreferredName":"Maurice"}, - {"Gender":"Female","FullName":"Daniella Ribeiro","PersonID":478,"FaxNumber":"(229) 555-0101","DateOfBirth":"1975-11-22 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"daniella@wingtiptoys.com","PreferredName":"Daniella"}, - {"Gender":"Female","FullName":"Irene Sepp","PersonID":479,"FaxNumber":"(262) 555-0101","DateOfBirth":"1963-04-11 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"irene@wingtiptoys.com","PreferredName":"Irene"}, - {"Gender":"Female","FullName":"Hubert Fields","PersonID":480,"FaxNumber":"(262) 555-0101","DateOfBirth":"1973-02-01 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"hubert@wingtiptoys.com","PreferredName":"Hubert"}, - {"Gender":"Female","FullName":"Chandranath Bose","PersonID":481,"FaxNumber":"(262) 555-0101","DateOfBirth":"1995-08-27 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"chandranath@wingtiptoys.com","PreferredName":"Chandranath"}, - {"Gender":"Female","FullName":"Gaurav Acharya","PersonID":482,"FaxNumber":"(262) 555-0101","DateOfBirth":"1982-01-18 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"gaurav@wingtiptoys.com","PreferredName":"Gaurav"}, - {"Gender":"Female","FullName":"Ana Julijana Isa","PersonID":483,"FaxNumber":"(406) 555-0101","DateOfBirth":"1978-11-02 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"ana julijana@wingtiptoys.com","PreferredName":"Ana Julijana"}, - {"Gender":"Female","FullName":"Libor Klaus","PersonID":484,"FaxNumber":"(406) 555-0101","DateOfBirth":"1970-06-28 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"libor@wingtiptoys.com","PreferredName":"Libor"}, - {"Gender":"Female","FullName":"Gireesh Bhogireddy","PersonID":485,"FaxNumber":"(239) 555-0101","DateOfBirth":"1951-07-24 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"gireesh@wingtiptoys.com","PreferredName":"Gireesh"}, - {"Gender":"Female","FullName":"Stanislav Zeman","PersonID":486,"FaxNumber":"(239) 555-0101","DateOfBirth":"1968-06-06 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"stanislav@wingtiptoys.com","PreferredName":"Stanislav"}, - {"Gender":"Female","FullName":"Premwadee Atitarn","PersonID":487,"FaxNumber":"(209) 555-0101","DateOfBirth":"1988-04-29 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"premwadee@wingtiptoys.com","PreferredName":"Premwadee"}, - {"Gender":"Female","FullName":"Deeptendu Das","PersonID":488,"FaxNumber":"(209) 555-0101","DateOfBirth":"1955-05-10 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"deeptendu@wingtiptoys.com","PreferredName":"Deeptendu"}, - {"Gender":"Female","FullName":"Nishant Patil","PersonID":489,"FaxNumber":"(205) 555-0101","DateOfBirth":"1964-07-05 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"nishant@wingtiptoys.com","PreferredName":"Nishant"}, - {"Gender":"Female","FullName":"Bhaagyalakshmi Rajanala","PersonID":490,"FaxNumber":"(205) 555-0101","DateOfBirth":"1966-09-20 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"bhaagyalakshmi@wingtiptoys.com","PreferredName":"Bhaagyalakshmi"}, - {"Gender":"Female","FullName":"Rohan Das","PersonID":491,"FaxNumber":"(206) 555-0101","DateOfBirth":"1950-04-13 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"rohan@wingtiptoys.com","PreferredName":"Rohan"}, - {"Gender":"Female","FullName":"Bhaanusree Ankitham","PersonID":492,"FaxNumber":"(206) 555-0101","DateOfBirth":"1994-05-04 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"bhaanusree@wingtiptoys.com","PreferredName":"Bhaanusree"}, - {"Gender":"Female","FullName":"Aamdaal Kamasamudram","PersonID":493,"FaxNumber":"(316) 555-0101","DateOfBirth":"1981-04-05 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"aamdaal@wingtiptoys.com","PreferredName":"Aamdaal"}, - {"Gender":"Female","FullName":"Karita Rosberg","PersonID":494,"FaxNumber":"(316) 555-0101","DateOfBirth":"1955-11-02 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"karita@wingtiptoys.com","PreferredName":"Karita"}, - {"Gender":"Female","FullName":"Baebeesarasvati Kamasamudram","PersonID":495,"FaxNumber":"(308) 555-0101","DateOfBirth":"1979-01-29 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"baebeesarasvati@wingtiptoys.com","PreferredName":"Baebeesarasvati"}, - {"Gender":"Female","FullName":"Hana Palatova","PersonID":496,"FaxNumber":"(308) 555-0101","DateOfBirth":"1957-07-10 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"hana@wingtiptoys.com","PreferredName":"Hana"}, - {"Gender":"Female","FullName":"Marcello Dellucci","PersonID":497,"FaxNumber":"(405) 555-0101","DateOfBirth":"1980-11-04 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"marcello@wingtiptoys.com","PreferredName":"Marcello"}, - {"Gender":"Female","FullName":"Shobha Raju","PersonID":498,"FaxNumber":"(405) 555-0101","DateOfBirth":"1964-05-25 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"shobha@wingtiptoys.com","PreferredName":"Shobha"}, - {"Gender":"Female","FullName":"Mee-Kyong Sin","PersonID":499,"FaxNumber":"(480) 555-0101","DateOfBirth":"1953-10-09 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"mee-kyong@wingtiptoys.com","PreferredName":"Mee-Kyong"}, - {"Gender":"Female","FullName":"VÄ›ra Kopecka","PersonID":500,"FaxNumber":"(480) 555-0101","DateOfBirth":"1950-12-10 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"vacra@wingtiptoys.com","PreferredName":"VÄ›ra"}, - {"Gender":"Female","FullName":"Ivica LuÄic","PersonID":501,"FaxNumber":"(212) 555-0101","DateOfBirth":"1984-11-08 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"ivica@wingtiptoys.com","PreferredName":"Ivica"}, - {"Gender":"Female","FullName":"David Svoboda","PersonID":502,"FaxNumber":"(212) 555-0101","DateOfBirth":"1977-01-02 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"david@wingtiptoys.com","PreferredName":"David"}, - {"Gender":"Female","FullName":"Vinicius Correa","PersonID":503,"FaxNumber":"(231) 555-0101","DateOfBirth":"1961-12-17 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"vinicius@wingtiptoys.com","PreferredName":"Vinicius"}, - {"Gender":"Female","FullName":"Surat Pornpipatpong","PersonID":504,"FaxNumber":"(231) 555-0101","DateOfBirth":"1964-11-25 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"surat@wingtiptoys.com","PreferredName":"Surat"}, - {"Gender":"Female","FullName":"Fabio Pena","PersonID":505,"FaxNumber":"(314) 555-0101","DateOfBirth":"1966-03-09 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"fabio@wingtiptoys.com","PreferredName":"Fabio"}, - {"Gender":"Female","FullName":"Kauan Gomes","PersonID":506,"FaxNumber":"(314) 555-0101","DateOfBirth":"1982-04-01 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"kauan@wingtiptoys.com","PreferredName":"Kauan"}, - {"Gender":"Female","FullName":"Lakshmi Roy","PersonID":507,"FaxNumber":"(208) 555-0101","DateOfBirth":"1955-08-21 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"lakshmi@wingtiptoys.com","PreferredName":"Lakshmi"}, - {"Gender":"Female","FullName":"Kersti Mihhailov","PersonID":508,"FaxNumber":"(208) 555-0101","DateOfBirth":"1967-11-15 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"kersti@wingtiptoys.com","PreferredName":"Kersti"}, - {"Gender":"Female","FullName":"Selma Seppanen","PersonID":509,"FaxNumber":"(787) 555-0101","DateOfBirth":"1995-12-21 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"selma@wingtiptoys.com","PreferredName":"Selma"}, - {"Gender":"Female","FullName":"Danielle Brasseur","PersonID":510,"FaxNumber":"(787) 555-0101","DateOfBirth":"1991-10-11 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"danielle @wingtiptoys.com","PreferredName":"Danielle "}, - {"Gender":"Female","FullName":"Bay Ly","PersonID":511,"FaxNumber":"(239) 555-0101","DateOfBirth":"1990-03-29 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"bay@wingtiptoys.com","PreferredName":"Bay"}, - {"Gender":"Female","FullName":"Sanjiv Raina","PersonID":512,"FaxNumber":"(239) 555-0101","DateOfBirth":"1989-08-12 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"sanjiv@wingtiptoys.com","PreferredName":"Sanjiv"}, - {"Gender":"Female","FullName":"Adirake Saenamuang","PersonID":513,"FaxNumber":"(405) 555-0101","DateOfBirth":"1953-04-06 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"adirake@wingtiptoys.com","PreferredName":"Adirake"}, - {"Gender":"Female","FullName":"Leena De","PersonID":514,"FaxNumber":"(405) 555-0101","DateOfBirth":"1988-04-01 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"leena@wingtiptoys.com","PreferredName":"Leena"}, - {"Gender":"Female","FullName":"Tarja Penttila","PersonID":515,"FaxNumber":"(212) 555-0101","DateOfBirth":"1976-06-21 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"tarja@wingtiptoys.com","PreferredName":"Tarja"}, - {"Gender":"Female","FullName":"Gunnar Larsson","PersonID":516,"FaxNumber":"(212) 555-0101","DateOfBirth":"1982-05-08 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"gunnar@wingtiptoys.com","PreferredName":"Gunnar"}, - {"Gender":"Female","FullName":"Devendranath Huq","PersonID":517,"FaxNumber":"(217) 555-0101","DateOfBirth":"1979-09-27 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"devendranath@wingtiptoys.com","PreferredName":"Devendranath"}, - {"Gender":"Female","FullName":"Vicente Cabrera","PersonID":518,"FaxNumber":"(217) 555-0101","DateOfBirth":"1964-02-22 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"vicente@wingtiptoys.com","PreferredName":"Vicente"}, - {"Gender":"Female","FullName":"Enes Olsson","PersonID":519,"FaxNumber":"(276) 555-0101","DateOfBirth":"1953-10-25 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"enes@wingtiptoys.com","PreferredName":"Enes"}, - {"Gender":"Female","FullName":"Milada Kubatova","PersonID":520,"FaxNumber":"(276) 555-0101","DateOfBirth":"1951-10-19 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"milada@wingtiptoys.com","PreferredName":"Milada"}, - {"Gender":"Female","FullName":"Vanja Grgic","PersonID":521,"FaxNumber":"(215) 555-0101","DateOfBirth":"1952-11-17 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"vanja@wingtiptoys.com","PreferredName":"Vanja"}, - {"Gender":"Female","FullName":"Daniela Omelkova","PersonID":522,"FaxNumber":"(215) 555-0101","DateOfBirth":"1971-08-23 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"daniela@wingtiptoys.com","PreferredName":"Daniela"}, - {"Gender":"Female","FullName":"Dayaram Mishra","PersonID":523,"FaxNumber":"(216) 555-0101","DateOfBirth":"1988-02-15 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"dayaram@wingtiptoys.com","PreferredName":"Dayaram"}, - {"Gender":"Female","FullName":"Gal Kokeza","PersonID":524,"FaxNumber":"(216) 555-0101","DateOfBirth":"1951-06-11 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"gal@wingtiptoys.com","PreferredName":"Gal"}, - {"Gender":"Female","FullName":"Mina Omidzadeh","PersonID":525,"FaxNumber":"(262) 555-0101","DateOfBirth":"1963-02-07 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"mina@wingtiptoys.com","PreferredName":"Mina"}, - {"Gender":"Female","FullName":"Adrian Bengtsson","PersonID":526,"FaxNumber":"(262) 555-0101","DateOfBirth":"1985-08-13 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"adrian@wingtiptoys.com","PreferredName":"Adrian"}, - {"Gender":"Female","FullName":"Kadir Usenuly","PersonID":527,"FaxNumber":"(405) 555-0101","DateOfBirth":"1982-07-03 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"kadir@wingtiptoys.com","PreferredName":"Kadir"}, - {"Gender":"Female","FullName":"Rajiv Shasthri","PersonID":528,"FaxNumber":"(405) 555-0101","DateOfBirth":"1988-06-24 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"rajiv@wingtiptoys.com","PreferredName":"Rajiv"}, - {"Gender":"Female","FullName":"Kajsa Jakobsson","PersonID":529,"FaxNumber":"(319) 555-0101","DateOfBirth":"1986-07-21 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"kajsa@wingtiptoys.com","PreferredName":"Kajsa"}, - {"Gender":"Female","FullName":"Elnaz Rahimi","PersonID":530,"FaxNumber":"(319) 555-0101","DateOfBirth":"1987-06-08 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"elnaz@wingtiptoys.com","PreferredName":"Elnaz"}, - {"Gender":"Female","FullName":"Rahul Ghate","PersonID":531,"FaxNumber":"(215) 555-0101","DateOfBirth":"1985-08-19 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"rahul@wingtiptoys.com","PreferredName":"Rahul"}, - {"Gender":"Female","FullName":"Chuan Wongsawat","PersonID":532,"FaxNumber":"(215) 555-0101","DateOfBirth":"1985-05-08 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"chuan@wingtiptoys.com","PreferredName":"Chuan"}, - {"Gender":"Female","FullName":"Lien Banh","PersonID":533,"FaxNumber":"(231) 555-0101","DateOfBirth":"1962-08-15 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"lien@wingtiptoys.com","PreferredName":"Lien"}, - {"Gender":"Female","FullName":"Anshula Mitra","PersonID":534,"FaxNumber":"(231) 555-0101","DateOfBirth":"1984-08-28 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"anshula@wingtiptoys.com","PreferredName":"Anshula"}, - {"Gender":"Female","FullName":"Divyendu Chakraborty","PersonID":535,"FaxNumber":"(605) 555-0101","DateOfBirth":"1983-03-17 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"divyendu@wingtiptoys.com","PreferredName":"Divyendu"}, - {"Gender":"Female","FullName":"Rita Kauppi","PersonID":536,"FaxNumber":"(605) 555-0101","DateOfBirth":"1997-10-01 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"rita@wingtiptoys.com","PreferredName":"Rita"}, - {"Gender":"Female","FullName":"An Dung Ngo","PersonID":537,"FaxNumber":"(303) 555-0101","DateOfBirth":"1954-12-26 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"an dung@wingtiptoys.com","PreferredName":"An Dung"}, - {"Gender":"Female","FullName":"Pranav Yadav","PersonID":538,"FaxNumber":"(303) 555-0101","DateOfBirth":"1993-06-29 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"pranav@wingtiptoys.com","PreferredName":"Pranav"}, - {"Gender":"Female","FullName":"Chetana Kamath","PersonID":539,"FaxNumber":"(225) 555-0101","DateOfBirth":"1997-03-07 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"chetana@wingtiptoys.com","PreferredName":"Chetana"}, - {"Gender":"Female","FullName":"Isabelina Flores","PersonID":540,"FaxNumber":"(225) 555-0101","DateOfBirth":"1978-02-24 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"isabelina@wingtiptoys.com","PreferredName":"Isabelina"}, - {"Gender":"Female","FullName":"Premwadee Saowaluk","PersonID":541,"FaxNumber":"(319) 555-0101","DateOfBirth":"1980-12-11 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"premwadee@wingtiptoys.com","PreferredName":"Premwadee"}, - {"Gender":"Female","FullName":"Adam Balaz","PersonID":542,"FaxNumber":"(319) 555-0101","DateOfBirth":"1988-01-23 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"adam@wingtiptoys.com","PreferredName":"Adam"}, - {"Gender":"Female","FullName":"Jae-Hwa Min","PersonID":543,"FaxNumber":"(702) 555-0101","DateOfBirth":"1992-03-04 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"jae-hwa@wingtiptoys.com","PreferredName":"Jae-Hwa"}, - {"Gender":"Female","FullName":"Rafael Pena","PersonID":544,"FaxNumber":"(702) 555-0101","DateOfBirth":"1950-01-06 00:00:00","PhoneNumber":"(702) 555-0100","EmailAddress":"rafael@wingtiptoys.com","PreferredName":"Rafael"}, - {"Gender":"Female","FullName":"Catalina Nechita","PersonID":545,"FaxNumber":"(304) 555-0101","DateOfBirth":"1993-02-07 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"catalina@wingtiptoys.com","PreferredName":"Catalina"}, - {"Gender":"Female","FullName":"Robert Cosic","PersonID":546,"FaxNumber":"(304) 555-0101","DateOfBirth":"1956-11-17 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"robert@wingtiptoys.com","PreferredName":"Robert"}, - {"Gender":"Female","FullName":"Constanza Laureano","PersonID":547,"FaxNumber":"(219) 555-0101","DateOfBirth":"1996-07-27 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"constanza@wingtiptoys.com","PreferredName":"Constanza"}, - {"Gender":"Female","FullName":"Sunil Nakhtare","PersonID":548,"FaxNumber":"(219) 555-0101","DateOfBirth":"1964-06-01 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"sunil@wingtiptoys.com","PreferredName":"Sunil"}, - {"Gender":"Female","FullName":"Aakriti Bhamidipati","PersonID":549,"FaxNumber":"(307) 555-0101","DateOfBirth":"1987-09-26 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"aakriti@wingtiptoys.com","PreferredName":"Aakriti"}, - {"Gender":"Female","FullName":"Sakchai Supitayaporn","PersonID":550,"FaxNumber":"(307) 555-0101","DateOfBirth":"1957-02-10 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"sakchai@wingtiptoys.com","PreferredName":"Sakchai"}, - {"Gender":"Female","FullName":"Himadri PrabhupÄda","PersonID":551,"FaxNumber":"(209) 555-0101","DateOfBirth":"1966-04-08 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"himadri@wingtiptoys.com","PreferredName":"Himadri"}, - {"Gender":"Female","FullName":"Lukas Kohout","PersonID":552,"FaxNumber":"(209) 555-0101","DateOfBirth":"1984-01-12 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"lukas@wingtiptoys.com","PreferredName":"Lukas"}, - {"Gender":"Female","FullName":"Bryan Helms","PersonID":553,"FaxNumber":"(276) 555-0101","DateOfBirth":"1980-03-22 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"bryan@wingtiptoys.com","PreferredName":"Bryan"}, - {"Gender":"Female","FullName":"Julianna Makay","PersonID":554,"FaxNumber":"(276) 555-0101","DateOfBirth":"1972-06-23 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"julianna@wingtiptoys.com","PreferredName":"Julianna"}, - {"Gender":"Female","FullName":"Harri Kask","PersonID":555,"FaxNumber":"(787) 555-0101","DateOfBirth":"1975-06-17 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"harri@wingtiptoys.com","PreferredName":"Harri"}, - {"Gender":"Female","FullName":"Rakhshinda Mansouri","PersonID":556,"FaxNumber":"(787) 555-0101","DateOfBirth":"1994-11-07 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"rakhshinda@wingtiptoys.com","PreferredName":"Rakhshinda"}, - {"Gender":"Female","FullName":"Ilse Sandell","PersonID":557,"FaxNumber":"(209) 555-0101","DateOfBirth":"1968-05-20 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"ilse@wingtiptoys.com","PreferredName":"Ilse"}, - {"Gender":"Female","FullName":"Tibor Harsanyi","PersonID":558,"FaxNumber":"(209) 555-0101","DateOfBirth":"1981-01-05 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"tibor@wingtiptoys.com","PreferredName":"Tibor"}, - {"Gender":"Female","FullName":"Subhash Matondkar","PersonID":559,"FaxNumber":"(212) 555-0101","DateOfBirth":"1954-05-17 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"subhash@wingtiptoys.com","PreferredName":"Subhash"}, - {"Gender":"Female","FullName":"Gurudas De","PersonID":560,"FaxNumber":"(212) 555-0101","DateOfBirth":"1972-04-08 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"gurudas@wingtiptoys.com","PreferredName":"Gurudas"}, - {"Gender":"Female","FullName":"Eesvaraavu Ankitham","PersonID":561,"FaxNumber":"(505) 555-0101","DateOfBirth":"1956-02-19 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"eesvaraavu@wingtiptoys.com","PreferredName":"Eesvaraavu"}, - {"Gender":"Female","FullName":"Angelina Karlsson","PersonID":562,"FaxNumber":"(505) 555-0101","DateOfBirth":"1992-01-22 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"angelina@wingtiptoys.com","PreferredName":"Angelina"}, - {"Gender":"Female","FullName":"Miguel Paez","PersonID":563,"FaxNumber":"(205) 555-0101","DateOfBirth":"1952-12-18 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"miguel@wingtiptoys.com","PreferredName":"Miguel"}, - {"Gender":"Female","FullName":"Anukul Dey","PersonID":564,"FaxNumber":"(205) 555-0101","DateOfBirth":"1951-03-01 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"anukul@wingtiptoys.com","PreferredName":"Anukul"}, - {"Gender":"Female","FullName":"Tobias Gruber","PersonID":565,"FaxNumber":"(216) 555-0101","DateOfBirth":"1967-10-15 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"tobias@wingtiptoys.com","PreferredName":"Tobias"}, - {"Gender":"Female","FullName":"Jitka Stastna","PersonID":566,"FaxNumber":"(216) 555-0101","DateOfBirth":"1959-08-17 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"jitka@wingtiptoys.com","PreferredName":"Jitka"}, - {"Gender":"Female","FullName":"Daniela Dumina","PersonID":567,"FaxNumber":"(505) 555-0101","DateOfBirth":"1969-10-15 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"daniela@wingtiptoys.com","PreferredName":"Daniela"}, - {"Gender":"Female","FullName":"Fahmidah Fallahi","PersonID":568,"FaxNumber":"(505) 555-0101","DateOfBirth":"1984-01-07 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"fahmidah@wingtiptoys.com","PreferredName":"Fahmidah"}, - {"Gender":"Female","FullName":"Ganesh Mukherjee","PersonID":569,"FaxNumber":"(210) 555-0101","DateOfBirth":"1968-07-17 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"ganesh@wingtiptoys.com","PreferredName":"Ganesh"}, - {"Gender":"Female","FullName":"Hector Parra","PersonID":570,"FaxNumber":"(210) 555-0101","DateOfBirth":"1965-08-22 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"hector@wingtiptoys.com","PreferredName":"Hector"}, - {"Gender":"Female","FullName":"Avanti Nishad","PersonID":571,"FaxNumber":"(505) 555-0101","DateOfBirth":"1997-03-26 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"avanti@wingtiptoys.com","PreferredName":"Avanti"}, - {"Gender":"Female","FullName":"Gino Sal","PersonID":572,"FaxNumber":"(505) 555-0101","DateOfBirth":"1995-12-10 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"gino@wingtiptoys.com","PreferredName":"Gino"}, - {"Gender":"Female","FullName":"Daedeepya Thota","PersonID":573,"FaxNumber":"(405) 555-0101","DateOfBirth":"1961-09-26 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"daedeepya@wingtiptoys.com","PreferredName":"Daedeepya"}, - {"Gender":"Female","FullName":"Lekha Sen","PersonID":574,"FaxNumber":"(405) 555-0101","DateOfBirth":"1968-03-05 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"lekha@wingtiptoys.com","PreferredName":"Lekha"}, - {"Gender":"Female","FullName":"Gabriela Chirila","PersonID":575,"FaxNumber":"(701) 555-0101","DateOfBirth":"1955-02-04 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"gabriela@wingtiptoys.com","PreferredName":"Gabriela"}, - {"Gender":"Female","FullName":"Elina Bite","PersonID":576,"FaxNumber":"(701) 555-0101","DateOfBirth":"1971-11-28 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"elina@wingtiptoys.com","PreferredName":"Elina"}, - {"Gender":"Female","FullName":"Nagur Atluri","PersonID":577,"FaxNumber":"(405) 555-0101","DateOfBirth":"1951-02-04 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"nagur@wingtiptoys.com","PreferredName":"Nagur"}, - {"Gender":"Female","FullName":"Hanita Kamasamudram","PersonID":578,"FaxNumber":"(405) 555-0101","DateOfBirth":"1966-09-13 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"hanita@wingtiptoys.com","PreferredName":"Hanita"}, - {"Gender":"Female","FullName":"Sintja Buecek","PersonID":579,"FaxNumber":"(210) 555-0101","DateOfBirth":"1989-07-26 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"sintja@wingtiptoys.com","PreferredName":"Sintja"}, - {"Gender":"Female","FullName":"Esha Singh","PersonID":580,"FaxNumber":"(210) 555-0101","DateOfBirth":"1995-04-23 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"esha@wingtiptoys.com","PreferredName":"Esha"}, - {"Gender":"Female","FullName":"Pongrit Srisati","PersonID":581,"FaxNumber":"(215) 555-0101","DateOfBirth":"1968-01-19 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"pongrit@wingtiptoys.com","PreferredName":"Pongrit"}, - {"Gender":"Female","FullName":"Hanna Piip","PersonID":582,"FaxNumber":"(215) 555-0101","DateOfBirth":"1958-10-23 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"hanna@wingtiptoys.com","PreferredName":"Hanna"}, - {"Gender":"Female","FullName":"Linda Green","PersonID":583,"FaxNumber":"(218) 555-0101","DateOfBirth":"1990-05-02 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"linda@wingtiptoys.com","PreferredName":"Linda"}, - {"Gender":"Female","FullName":"Baalamurali Kommineni","PersonID":584,"FaxNumber":"(218) 555-0101","DateOfBirth":"1998-01-02 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"baalamurali@wingtiptoys.com","PreferredName":"Baalamurali"}, - {"Gender":"Female","FullName":"Sarmis Skujins","PersonID":585,"FaxNumber":"(270) 555-0101","DateOfBirth":"1987-12-16 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"sarmis@wingtiptoys.com","PreferredName":"Sarmis"}, - {"Gender":"Female","FullName":"Amporn Jetjirawat","PersonID":586,"FaxNumber":"(270) 555-0101","DateOfBirth":"1969-07-23 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"amporn@wingtiptoys.com","PreferredName":"Amporn"}, - {"Gender":"Female","FullName":"Libuse Srbova","PersonID":587,"FaxNumber":"(210) 555-0101","DateOfBirth":"1974-12-07 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"libuse@wingtiptoys.com","PreferredName":"Libuse"}, - {"Gender":"Female","FullName":"Jimme Harmsen","PersonID":588,"FaxNumber":"(210) 555-0101","DateOfBirth":"1960-08-30 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"jimme@wingtiptoys.com","PreferredName":"Jimme"}, - {"Gender":"Female","FullName":"Viktorie Stejskalova","PersonID":589,"FaxNumber":"(209) 555-0101","DateOfBirth":"1990-11-22 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"viktorie@wingtiptoys.com","PreferredName":"Viktorie"}, - {"Gender":"Female","FullName":"Bishnu Bandopadhyay","PersonID":590,"FaxNumber":"(209) 555-0101","DateOfBirth":"1995-11-02 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bishnu@wingtiptoys.com","PreferredName":"Bishnu"}, - {"Gender":"Female","FullName":"Slavko Pavlovic","PersonID":591,"FaxNumber":"(209) 555-0101","DateOfBirth":"1977-06-02 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"slavko@wingtiptoys.com","PreferredName":"Slavko"}, - {"Gender":"Female","FullName":"Malorie Dupuy","PersonID":592,"FaxNumber":"(209) 555-0101","DateOfBirth":"1977-05-18 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"malorie@wingtiptoys.com","PreferredName":"Malorie"}, - {"Gender":"Female","FullName":"Doru Munteanu","PersonID":593,"FaxNumber":"(209) 555-0101","DateOfBirth":"1965-01-15 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"doru@wingtiptoys.com","PreferredName":"Doru"}, - {"Gender":"Female","FullName":"Ankita Mittal","PersonID":594,"FaxNumber":"(209) 555-0101","DateOfBirth":"1963-09-19 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"ankita@wingtiptoys.com","PreferredName":"Ankita"}, - {"Gender":"Female","FullName":"Aile Aasmae","PersonID":595,"FaxNumber":"(239) 555-0101","DateOfBirth":"1988-09-05 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"aile@wingtiptoys.com","PreferredName":"Aile"}, - {"Gender":"Female","FullName":"Ezgi Kaya","PersonID":596,"FaxNumber":"(239) 555-0101","DateOfBirth":"1989-10-18 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"ezgi@wingtiptoys.com","PreferredName":"Ezgi"}, - {"Gender":"Female","FullName":"Ava Edden","PersonID":597,"FaxNumber":"(479) 555-0101","DateOfBirth":"1956-03-25 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"ava@wingtiptoys.com","PreferredName":"Ava"}, - {"Gender":"Female","FullName":"Adirake Narkbunnum","PersonID":598,"FaxNumber":"(479) 555-0101","DateOfBirth":"1968-12-02 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"adirake@wingtiptoys.com","PreferredName":"Adirake"}, - {"Gender":"Female","FullName":"Manali Bose","PersonID":599,"FaxNumber":"(215) 555-0101","DateOfBirth":"1989-04-16 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"manali@wingtiptoys.com","PreferredName":"Manali"}, - {"Gender":"Female","FullName":"Ji-min Jun","PersonID":600,"FaxNumber":"(215) 555-0101","DateOfBirth":"1950-11-06 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ji-min@wingtiptoys.com","PreferredName":"Ji-min"}, - {"Gender":"Female","FullName":"Astrid Poisson","PersonID":601,"FaxNumber":"(228) 555-0101","DateOfBirth":"1974-03-25 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"astrid@wingtiptoys.com","PreferredName":"Astrid"}, - {"Gender":"Female","FullName":"Timotej stakne","PersonID":602,"FaxNumber":"(228) 555-0101","DateOfBirth":"1995-01-11 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"timotej@wingtiptoys.com","PreferredName":"Timotej"}, - {"Gender":"Female","FullName":"Gi-Suk Heo","PersonID":603,"FaxNumber":"(215) 555-0101","DateOfBirth":"1977-11-01 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"gi-suk@wingtiptoys.com","PreferredName":"Gi-Suk"}, - {"Gender":"Female","FullName":"Roman Tomek","PersonID":604,"FaxNumber":"(215) 555-0101","DateOfBirth":"1980-07-23 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"roman@wingtiptoys.com","PreferredName":"Roman"}, - {"Gender":"Female","FullName":"Irma Kruze","PersonID":605,"FaxNumber":"(219) 555-0101","DateOfBirth":"1980-10-06 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"irma@wingtiptoys.com","PreferredName":"Irma"}, - {"Gender":"Female","FullName":"VÄ›ra Stejskalova","PersonID":606,"FaxNumber":"(219) 555-0101","DateOfBirth":"1965-11-10 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"vicra@wingtiptoys.com","PreferredName":"VÄ›ra"}, - {"Gender":"Female","FullName":"Dhaeraemdranaadh Pamulaparthi","PersonID":607,"FaxNumber":"(458) 555-0101","DateOfBirth":"1965-02-02 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"dhaeraemdranaadh@wingtiptoys.com","PreferredName":"Dhaeraemdranaadh"}, - {"Gender":"Female","FullName":"Victoria Brezeanu","PersonID":608,"FaxNumber":"(458) 555-0101","DateOfBirth":"1994-01-03 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"victoria@wingtiptoys.com","PreferredName":"Victoria"}, - {"Gender":"Female","FullName":"Agrita Kalnina","PersonID":609,"FaxNumber":"(314) 555-0101","DateOfBirth":"1968-02-26 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"agrita@wingtiptoys.com","PreferredName":"Agrita"}, - {"Gender":"Female","FullName":"Burak ozden","PersonID":610,"FaxNumber":"(314) 555-0101","DateOfBirth":"1954-02-16 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"burak@wingtiptoys.com","PreferredName":"Burak"}, - {"Gender":"Female","FullName":"Ravindra Sandhu","PersonID":611,"FaxNumber":"(212) 555-0101","DateOfBirth":"1992-11-30 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"ravindra@wingtiptoys.com","PreferredName":"Ravindra"}, - {"Gender":"Female","FullName":"Iulia Nechita","PersonID":612,"FaxNumber":"(212) 555-0101","DateOfBirth":"1980-08-14 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"iulia@wingtiptoys.com","PreferredName":"Iulia"}, - {"Gender":"Female","FullName":"Klara Rakus","PersonID":613,"FaxNumber":"(803) 555-0101","DateOfBirth":"1968-11-18 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"klara@wingtiptoys.com","PreferredName":"Klara"}, - {"Gender":"Female","FullName":"Razeena Rezaei","PersonID":614,"FaxNumber":"(803) 555-0101","DateOfBirth":"1970-09-29 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"razeena@wingtiptoys.com","PreferredName":"Razeena"}, - {"Gender":"Female","FullName":"Am Lo","PersonID":615,"FaxNumber":"(803) 555-0101","DateOfBirth":"1978-08-14 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"am@wingtiptoys.com","PreferredName":"Am"}, - {"Gender":"Female","FullName":"Edmee Schol","PersonID":616,"FaxNumber":"(803) 555-0101","DateOfBirth":"1977-06-28 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"edmee@wingtiptoys.com","PreferredName":"Edmee"}, - {"Gender":"Female","FullName":"Sophie Van Lier","PersonID":617,"FaxNumber":"(316) 555-0101","DateOfBirth":"1952-08-12 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"sophie@wingtiptoys.com","PreferredName":"Sophie"}, - {"Gender":"Female","FullName":"Shiva Nair","PersonID":618,"FaxNumber":"(316) 555-0101","DateOfBirth":"1976-07-01 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"shiva@wingtiptoys.com","PreferredName":"Shiva"}, - {"Gender":"Female","FullName":"Dimitry Profis","PersonID":619,"FaxNumber":"(216) 555-0101","DateOfBirth":"1993-12-30 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"dimitry@wingtiptoys.com","PreferredName":"Dimitry"}, - {"Gender":"Female","FullName":"Manindra Desai","PersonID":620,"FaxNumber":"(216) 555-0101","DateOfBirth":"1962-02-06 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"manindra@wingtiptoys.com","PreferredName":"Manindra"}, - {"Gender":"Female","FullName":"Jan Zeman","PersonID":621,"FaxNumber":"(215) 555-0101","DateOfBirth":"1967-03-28 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jan@wingtiptoys.com","PreferredName":"Jan"}, - {"Gender":"Female","FullName":"Jukka-Pekk Saarijarvi","PersonID":622,"FaxNumber":"(215) 555-0101","DateOfBirth":"1978-03-11 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jukka-pekk@wingtiptoys.com","PreferredName":"Jukka-Pekk"}, - {"Gender":"Female","FullName":"Ranjit Dikshit","PersonID":623,"FaxNumber":"(787) 555-0101","DateOfBirth":"1972-02-24 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"ranjit@wingtiptoys.com","PreferredName":"Ranjit"}, - {"Gender":"Female","FullName":"Marek Blaho","PersonID":624,"FaxNumber":"(787) 555-0101","DateOfBirth":"1975-01-10 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"marek@wingtiptoys.com","PreferredName":"Marek"}, - {"Gender":"Female","FullName":"Varuna Ganguly","PersonID":625,"FaxNumber":"(262) 555-0101","DateOfBirth":"1971-09-29 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"varuna@wingtiptoys.com","PreferredName":"Varuna"}, - {"Gender":"Female","FullName":"Natalia Pokorna","PersonID":626,"FaxNumber":"(262) 555-0101","DateOfBirth":"1957-03-06 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"natalia@wingtiptoys.com","PreferredName":"Natalia"}, - {"Gender":"Female","FullName":"Basak Tekin","PersonID":627,"FaxNumber":"(207) 555-0101","DateOfBirth":"1963-07-05 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"basak@wingtiptoys.com","PreferredName":"Basak"}, - {"Gender":"Female","FullName":"Nicole Martinez","PersonID":628,"FaxNumber":"(207) 555-0101","DateOfBirth":"1975-04-08 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"nicole@wingtiptoys.com","PreferredName":"Nicole"}, - {"Gender":"Female","FullName":"Doru Tirlea","PersonID":629,"FaxNumber":"(217) 555-0101","DateOfBirth":"1976-02-11 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"doru@wingtiptoys.com","PreferredName":"Doru"}, - {"Gender":"Female","FullName":"Hema Jujjavarapu","PersonID":630,"FaxNumber":"(217) 555-0101","DateOfBirth":"1997-03-21 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"hema@wingtiptoys.com","PreferredName":"Hema"}, - {"Gender":"Female","FullName":"Jessica Perrine","PersonID":631,"FaxNumber":"(217) 555-0101","DateOfBirth":"1951-04-08 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"jessica@wingtiptoys.com","PreferredName":"Jessica"}, - {"Gender":"Female","FullName":"Mukta Sarkar","PersonID":632,"FaxNumber":"(217) 555-0101","DateOfBirth":"1996-07-10 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"mukta@wingtiptoys.com","PreferredName":"Mukta"}, - {"Gender":"Female","FullName":"Yavuz Cetinkaya","PersonID":633,"FaxNumber":"(240) 555-0101","DateOfBirth":"1975-10-22 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"yavuz@wingtiptoys.com","PreferredName":"Yavuz"}, - {"Gender":"Female","FullName":"Jaydeb Ganguly","PersonID":634,"FaxNumber":"(240) 555-0101","DateOfBirth":"1966-01-09 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"jaydeb@wingtiptoys.com","PreferredName":"Jaydeb"}, - {"Gender":"Female","FullName":"Sirirat Kongpaisarn","PersonID":635,"FaxNumber":"(303) 555-0101","DateOfBirth":"1962-11-08 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"sirirat@wingtiptoys.com","PreferredName":"Sirirat"}, - {"Gender":"Female","FullName":"Himani Sanyal","PersonID":636,"FaxNumber":"(303) 555-0101","DateOfBirth":"1976-04-05 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"himani@wingtiptoys.com","PreferredName":"Himani"}, - {"Gender":"Female","FullName":"Claude Bonsaint","PersonID":637,"FaxNumber":"(215) 555-0101","DateOfBirth":"1993-07-08 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"claude@wingtiptoys.com","PreferredName":"Claude"}, - {"Gender":"Female","FullName":"Gopal Thakur","PersonID":638,"FaxNumber":"(215) 555-0101","DateOfBirth":"1992-09-06 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"gopal@wingtiptoys.com","PreferredName":"Gopal"}, - {"Gender":"Female","FullName":"Roman Pajer","PersonID":639,"FaxNumber":"(209) 555-0101","DateOfBirth":"1966-01-13 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"roman@wingtiptoys.com","PreferredName":"Roman"}, - {"Gender":"Female","FullName":"Floris Veenhuizen","PersonID":640,"FaxNumber":"(209) 555-0101","DateOfBirth":"1988-01-21 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"floris@wingtiptoys.com","PreferredName":"Floris"}, - {"Gender":"Female","FullName":"Vitezslav Holy","PersonID":641,"FaxNumber":"(803) 555-0101","DateOfBirth":"1961-10-27 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"vitezslav@wingtiptoys.com","PreferredName":"Vitezslav"}, - {"Gender":"Female","FullName":"Paul Valbe","PersonID":642,"FaxNumber":"(803) 555-0101","DateOfBirth":"1969-10-02 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"paul@wingtiptoys.com","PreferredName":"Paul"}, - {"Gender":"Female","FullName":"Devi Dewangan","PersonID":643,"FaxNumber":"(216) 555-0101","DateOfBirth":"1974-08-24 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"devi@wingtiptoys.com","PreferredName":"Devi"}, - {"Gender":"Female","FullName":"William Bordelon","PersonID":644,"FaxNumber":"(216) 555-0101","DateOfBirth":"1963-11-07 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"william@wingtiptoys.com","PreferredName":"William"}, - {"Gender":"Female","FullName":"Masa Buecek","PersonID":645,"FaxNumber":"(216) 555-0101","DateOfBirth":"1981-02-16 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"masa@wingtiptoys.com","PreferredName":"Masa"}, - {"Gender":"Female","FullName":"Nguyet Trang","PersonID":646,"FaxNumber":"(216) 555-0101","DateOfBirth":"1972-12-18 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"nguyet@wingtiptoys.com","PreferredName":"Nguyet"}, - {"Gender":"Female","FullName":"Bipin Modi","PersonID":647,"FaxNumber":"(423) 555-0101","DateOfBirth":"1950-01-07 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"bipin@wingtiptoys.com","PreferredName":"Bipin"}, - {"Gender":"Female","FullName":"Dattaatraeya Vangapandu","PersonID":648,"FaxNumber":"(423) 555-0101","DateOfBirth":"1955-07-09 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"dattaatraeya@wingtiptoys.com","PreferredName":"Dattaatraeya"}, - {"Gender":"Female","FullName":"Rahul Sarma","PersonID":649,"FaxNumber":"(802) 555-0101","DateOfBirth":"1986-03-19 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"rahul@wingtiptoys.com","PreferredName":"Rahul"}, - {"Gender":"Female","FullName":"Deeba Hemmati","PersonID":650,"FaxNumber":"(802) 555-0101","DateOfBirth":"1954-04-07 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"deeba@wingtiptoys.com","PreferredName":"Deeba"}, - {"Gender":"Female","FullName":"Alejandro Escobar","PersonID":651,"FaxNumber":"(218) 555-0101","DateOfBirth":"1971-07-02 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"alejandro@wingtiptoys.com","PreferredName":"Alejandro"}, - {"Gender":"Female","FullName":"Milada Hadrabova","PersonID":652,"FaxNumber":"(218) 555-0101","DateOfBirth":"1972-08-24 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"milada@wingtiptoys.com","PreferredName":"Milada"}, - {"Gender":"Female","FullName":"Andris Vitols","PersonID":653,"FaxNumber":"(252) 555-0101","DateOfBirth":"1953-12-13 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"andris@wingtiptoys.com","PreferredName":"Andris"}, - {"Gender":"Female","FullName":"Lana Larsson","PersonID":654,"FaxNumber":"(252) 555-0101","DateOfBirth":"1966-02-20 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"lana@wingtiptoys.com","PreferredName":"Lana"}, - {"Gender":"Female","FullName":"Mariela Weitzer","PersonID":655,"FaxNumber":"(207) 555-0101","DateOfBirth":"1981-10-15 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"mariela@wingtiptoys.com","PreferredName":"Mariela"}, - {"Gender":"Female","FullName":"David Lanctot","PersonID":656,"FaxNumber":"(207) 555-0101","DateOfBirth":"1952-12-15 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"david@wingtiptoys.com","PreferredName":"David"}, - {"Gender":"Female","FullName":"Alain Pelland","PersonID":657,"FaxNumber":"(303) 555-0101","DateOfBirth":"1981-04-23 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"alain@wingtiptoys.com","PreferredName":"Alain"}, - {"Gender":"Female","FullName":"Ik-Soo Jo","PersonID":658,"FaxNumber":"(303) 555-0101","DateOfBirth":"1986-10-09 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"ik-soo@wingtiptoys.com","PreferredName":"Ik-Soo"}, - {"Gender":"Female","FullName":"Milica Stojkovic","PersonID":659,"FaxNumber":"(201) 555-0101","DateOfBirth":"1973-07-19 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"milica@wingtiptoys.com","PreferredName":"Milica"}, - {"Gender":"Female","FullName":"Teemu Yli-Sirnio","PersonID":660,"FaxNumber":"(201) 555-0101","DateOfBirth":"1962-02-17 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"teemu@wingtiptoys.com","PreferredName":"Teemu"}, - {"Gender":"Female","FullName":"Natalie Horackova","PersonID":661,"FaxNumber":"(215) 555-0101","DateOfBirth":"1951-02-28 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"natalie@wingtiptoys.com","PreferredName":"Natalie"}, - {"Gender":"Female","FullName":"Francesca Greece","PersonID":662,"FaxNumber":"(215) 555-0101","DateOfBirth":"1976-06-28 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"francesca@wingtiptoys.com","PreferredName":"Francesca"}, - {"Gender":"Female","FullName":"Baalaaditya Rallapalli","PersonID":663,"FaxNumber":"(314) 555-0101","DateOfBirth":"1971-07-26 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"baalaaditya@wingtiptoys.com","PreferredName":"Baalaaditya"}, - {"Gender":"Female","FullName":"Antonin Holy","PersonID":664,"FaxNumber":"(314) 555-0101","DateOfBirth":"1950-09-18 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"antonin@wingtiptoys.com","PreferredName":"Antonin"}, - {"Gender":"Female","FullName":"Matej Formanek","PersonID":665,"FaxNumber":"(303) 555-0101","DateOfBirth":"1980-02-05 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"matej@wingtiptoys.com","PreferredName":"Matej"}, - {"Gender":"Female","FullName":"Mary Eder","PersonID":666,"FaxNumber":"(303) 555-0101","DateOfBirth":"1974-01-10 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"mary@wingtiptoys.com","PreferredName":"Mary"}, - {"Gender":"Female","FullName":"Manish Ghosh","PersonID":667,"FaxNumber":"(219) 555-0101","DateOfBirth":"1996-08-15 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"manish@wingtiptoys.com","PreferredName":"Manish"}, - {"Gender":"Female","FullName":"Anish Naidu","PersonID":668,"FaxNumber":"(219) 555-0101","DateOfBirth":"1960-12-16 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"anish@wingtiptoys.com","PreferredName":"Anish"}, - {"Gender":"Female","FullName":"Pracha Nantakarn","PersonID":669,"FaxNumber":"(231) 555-0101","DateOfBirth":"1982-08-15 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"pracha@wingtiptoys.com","PreferredName":"Pracha"}, - {"Gender":"Female","FullName":"Malee Charoenkul","PersonID":670,"FaxNumber":"(231) 555-0101","DateOfBirth":"1979-04-12 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"malee@wingtiptoys.com","PreferredName":"Malee"}, - {"Gender":"Female","FullName":"Charline Flamand","PersonID":671,"FaxNumber":"(605) 555-0101","DateOfBirth":"1977-05-23 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"charline@wingtiptoys.com","PreferredName":"Charline"}, - {"Gender":"Female","FullName":"Dhavala Alladi","PersonID":672,"FaxNumber":"(605) 555-0101","DateOfBirth":"1953-09-04 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"dhavala@wingtiptoys.com","PreferredName":"Dhavala"}, - {"Gender":"Female","FullName":"Teodor Vlad","PersonID":673,"FaxNumber":"(219) 555-0101","DateOfBirth":"1962-09-06 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"teodor@wingtiptoys.com","PreferredName":"Teodor"}, - {"Gender":"Female","FullName":"Peeter Keskula","PersonID":674,"FaxNumber":"(219) 555-0101","DateOfBirth":"1972-04-30 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"peeter@wingtiptoys.com","PreferredName":"Peeter"}, - {"Gender":"Female","FullName":"Anda Liepa","PersonID":675,"FaxNumber":"(603) 555-0101","DateOfBirth":"1985-07-30 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"anda@wingtiptoys.com","PreferredName":"Anda"}, - {"Gender":"Female","FullName":"Deakshitulu Paruchuri","PersonID":676,"FaxNumber":"(603) 555-0101","DateOfBirth":"1960-07-01 00:00:00","PhoneNumber":"(603) 555-0100","EmailAddress":"deakshitulu@wingtiptoys.com","PreferredName":"Deakshitulu"}, - {"Gender":"Female","FullName":"Jelena Utjesenovic","PersonID":677,"FaxNumber":"(210) 555-0101","DateOfBirth":"1964-02-07 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"jelena@wingtiptoys.com","PreferredName":"Jelena"}, - {"Gender":"Female","FullName":"Debbie Clark","PersonID":678,"FaxNumber":"(210) 555-0101","DateOfBirth":"1971-10-31 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"debbie@wingtiptoys.com","PreferredName":"Debbie"}, - {"Gender":"Female","FullName":"Adriana Horackova","PersonID":679,"FaxNumber":"(252) 555-0101","DateOfBirth":"1998-03-24 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"adriana@wingtiptoys.com","PreferredName":"Adriana"}, - {"Gender":"Female","FullName":"Suniti Bhat","PersonID":680,"FaxNumber":"(252) 555-0101","DateOfBirth":"1987-05-11 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"suniti@wingtiptoys.com","PreferredName":"Suniti"}, - {"Gender":"Female","FullName":"Miika Putkonen","PersonID":681,"FaxNumber":"(314) 555-0101","DateOfBirth":"1956-05-21 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"miika@wingtiptoys.com","PreferredName":"Miika"}, - {"Gender":"Female","FullName":"Jose Williams","PersonID":682,"FaxNumber":"(314) 555-0101","DateOfBirth":"1966-05-22 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"jose@wingtiptoys.com","PreferredName":"Jose"}, - {"Gender":"Female","FullName":"Padma Iyer","PersonID":683,"FaxNumber":"(505) 555-0101","DateOfBirth":"1990-06-09 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"padma@wingtiptoys.com","PreferredName":"Padma"}, - {"Gender":"Female","FullName":"Cai Cao","PersonID":684,"FaxNumber":"(505) 555-0101","DateOfBirth":"1957-05-30 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"cai@wingtiptoys.com","PreferredName":"Cai"}, - {"Gender":"Female","FullName":"Åšani Sen","PersonID":685,"FaxNumber":"(405) 555-0101","DateOfBirth":"1979-09-03 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"aani@wingtiptoys.com","PreferredName":"Åšani"}, - {"Gender":"Female","FullName":"Ngu Hoa","PersonID":686,"FaxNumber":"(405) 555-0101","DateOfBirth":"1975-10-06 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"ngu@wingtiptoys.com","PreferredName":"Ngu"}, - {"Gender":"Female","FullName":"Helene Dupuy","PersonID":687,"FaxNumber":"(270) 555-0101","DateOfBirth":"1971-05-02 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"helene@wingtiptoys.com","PreferredName":"Helene"}, - {"Gender":"Female","FullName":"Antonio Trentini","PersonID":688,"FaxNumber":"(270) 555-0101","DateOfBirth":"1994-02-06 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"antonio@wingtiptoys.com","PreferredName":"Antonio"}, - {"Gender":"Female","FullName":"omer ozbek","PersonID":689,"FaxNumber":"(205) 555-0101","DateOfBirth":"1985-01-10 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"omer@wingtiptoys.com","PreferredName":"omer"}, - {"Gender":"Female","FullName":"Andrei Bratianu","PersonID":690,"FaxNumber":"(205) 555-0101","DateOfBirth":"1985-06-07 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"andrei@wingtiptoys.com","PreferredName":"Andrei"}, - {"Gender":"Female","FullName":"Akshayakeerti Jandhyala","PersonID":691,"FaxNumber":"(240) 555-0101","DateOfBirth":"1996-10-22 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"akshayakeerti@wingtiptoys.com","PreferredName":"Akshayakeerti"}, - {"Gender":"Female","FullName":"Tereza Stolinova","PersonID":692,"FaxNumber":"(240) 555-0101","DateOfBirth":"1970-02-01 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"tereza@wingtiptoys.com","PreferredName":"Tereza"}, - {"Gender":"Female","FullName":"Ankolika Sen","PersonID":693,"FaxNumber":"(304) 555-0101","DateOfBirth":"1958-02-20 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"ankolika@wingtiptoys.com","PreferredName":"Ankolika"}, - {"Gender":"Female","FullName":"Kristophe Couet","PersonID":694,"FaxNumber":"(304) 555-0101","DateOfBirth":"1997-04-14 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"kristophe @wingtiptoys.com","PreferredName":"Kristophe "}, - {"Gender":"Female","FullName":"Baalaamani Veturi","PersonID":695,"FaxNumber":"(218) 555-0101","DateOfBirth":"1976-12-15 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"baalaamani@wingtiptoys.com","PreferredName":"Baalaamani"}, - {"Gender":"Female","FullName":"Gustav Korjus","PersonID":696,"FaxNumber":"(218) 555-0101","DateOfBirth":"1971-03-03 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"gustav@wingtiptoys.com","PreferredName":"Gustav"}, - {"Gender":"Female","FullName":"Julia Konecna","PersonID":697,"FaxNumber":"(314) 555-0101","DateOfBirth":"1958-08-22 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"julia@wingtiptoys.com","PreferredName":"Julia"}, - {"Gender":"Female","FullName":"Birgit Saar","PersonID":698,"FaxNumber":"(314) 555-0101","DateOfBirth":"1979-07-19 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"birgit@wingtiptoys.com","PreferredName":"Birgit"}, - {"Gender":"Female","FullName":"Madelaine Paulet","PersonID":699,"FaxNumber":"(212) 555-0101","DateOfBirth":"1992-05-21 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"madelaine @wingtiptoys.com","PreferredName":"Madelaine "}, - {"Gender":"Female","FullName":"Arundhati Bhowmick","PersonID":700,"FaxNumber":"(212) 555-0101","DateOfBirth":"1980-11-30 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"arundhati@wingtiptoys.com","PreferredName":"Arundhati"}, - {"Gender":"Female","FullName":"Mario Jogi","PersonID":701,"FaxNumber":"(212) 555-0101","DateOfBirth":"1970-06-24 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"mario@wingtiptoys.com","PreferredName":"Mario"}, - {"Gender":"Female","FullName":"Martina Omelkova","PersonID":702,"FaxNumber":"(212) 555-0101","DateOfBirth":"1989-09-09 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"martina@wingtiptoys.com","PreferredName":"Martina"}, - {"Gender":"Female","FullName":"Kaya ozbek","PersonID":703,"FaxNumber":"(276) 555-0101","DateOfBirth":"1981-09-25 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"kaya@wingtiptoys.com","PreferredName":"Kaya"}, - {"Gender":"Female","FullName":"Lan Klanjcar","PersonID":704,"FaxNumber":"(276) 555-0101","DateOfBirth":"1965-04-06 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"lan@wingtiptoys.com","PreferredName":"Lan"}, - {"Gender":"Female","FullName":"Seo-yeon Rim","PersonID":705,"FaxNumber":"(229) 555-0101","DateOfBirth":"1972-05-09 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"seo-yeon@wingtiptoys.com","PreferredName":"Seo-yeon"}, - {"Gender":"Female","FullName":"Giovanna Araujo","PersonID":706,"FaxNumber":"(229) 555-0101","DateOfBirth":"1980-09-14 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"giovanna@wingtiptoys.com","PreferredName":"Giovanna"}, - {"Gender":"Female","FullName":"Sitara Benjaree","PersonID":707,"FaxNumber":"(210) 555-0101","DateOfBirth":"1976-08-20 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"sitara@wingtiptoys.com","PreferredName":"Sitara"}, - {"Gender":"Female","FullName":"Roberts Sprogis","PersonID":708,"FaxNumber":"(210) 555-0101","DateOfBirth":"1960-10-15 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"roberts@wingtiptoys.com","PreferredName":"Roberts"}, - {"Gender":"Female","FullName":"Javier Caraballo","PersonID":709,"FaxNumber":"(231) 555-0101","DateOfBirth":"1977-09-23 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"javier@wingtiptoys.com","PreferredName":"Javier"}, - {"Gender":"Female","FullName":"Coralie Brasseur","PersonID":710,"FaxNumber":"(231) 555-0101","DateOfBirth":"1984-09-01 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"coralie@wingtiptoys.com","PreferredName":"Coralie"}, - {"Gender":"Female","FullName":"Akhtar Shahrestaani","PersonID":711,"FaxNumber":"(229) 555-0101","DateOfBirth":"1967-01-07 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"akhtar@wingtiptoys.com","PreferredName":"Akhtar"}, - {"Gender":"Female","FullName":"Priya Joshi","PersonID":712,"FaxNumber":"(229) 555-0101","DateOfBirth":"1976-02-29 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"priya@wingtiptoys.com","PreferredName":"Priya"}, - {"Gender":"Female","FullName":"Vanita Bhowmick","PersonID":713,"FaxNumber":"(405) 555-0101","DateOfBirth":"1950-08-24 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"vanita@wingtiptoys.com","PreferredName":"Vanita"}, - {"Gender":"Female","FullName":"Bruna Cavalcante","PersonID":714,"FaxNumber":"(405) 555-0101","DateOfBirth":"1979-06-09 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"bruna@wingtiptoys.com","PreferredName":"Bruna"}, - {"Gender":"Female","FullName":"Nishant Menon","PersonID":715,"FaxNumber":"(225) 555-0101","DateOfBirth":"1959-05-03 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"nishant@wingtiptoys.com","PreferredName":"Nishant"}, - {"Gender":"Female","FullName":"Ratnam Singh","PersonID":716,"FaxNumber":"(225) 555-0101","DateOfBirth":"1961-01-08 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"ratnam@wingtiptoys.com","PreferredName":"Ratnam"}, - {"Gender":"Female","FullName":"Josef Benda","PersonID":717,"FaxNumber":"(304) 555-0101","DateOfBirth":"1997-06-28 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"josef@wingtiptoys.com","PreferredName":"Josef"}, - {"Gender":"Female","FullName":"Trishna Benipal","PersonID":718,"FaxNumber":"(304) 555-0101","DateOfBirth":"1974-08-12 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"trishna@wingtiptoys.com","PreferredName":"Trishna"}, - {"Gender":"Female","FullName":"Teresa Bender","PersonID":719,"FaxNumber":"(605) 555-0101","DateOfBirth":"1953-08-03 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"teresa@wingtiptoys.com","PreferredName":"Teresa"}, - {"Gender":"Female","FullName":"Diego Buccho","PersonID":720,"FaxNumber":"(605) 555-0101","DateOfBirth":"1958-01-17 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"diego@wingtiptoys.com","PreferredName":"Diego"}, - {"Gender":"Female","FullName":"Deepesh Bose","PersonID":721,"FaxNumber":"(907) 555-0101","DateOfBirth":"1964-11-30 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"deepesh@wingtiptoys.com","PreferredName":"Deepesh"}, - {"Gender":"Female","FullName":"Ambareesh Madhunapantula","PersonID":722,"FaxNumber":"(907) 555-0101","DateOfBirth":"1997-01-26 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"ambareesh@wingtiptoys.com","PreferredName":"Ambareesh"}, - {"Gender":"Female","FullName":"Madhavi Gupta","PersonID":723,"FaxNumber":"(228) 555-0101","DateOfBirth":"1967-02-09 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"madhavi@wingtiptoys.com","PreferredName":"Madhavi"}, - {"Gender":"Female","FullName":"Indu Chowdary","PersonID":724,"FaxNumber":"(228) 555-0101","DateOfBirth":"1996-06-02 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"indu@wingtiptoys.com","PreferredName":"Indu"}, - {"Gender":"Female","FullName":"Bich Banh","PersonID":725,"FaxNumber":"(215) 555-0101","DateOfBirth":"1957-08-09 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"bich@wingtiptoys.com","PreferredName":"Bich"}, - {"Gender":"Female","FullName":"Lennart Kask","PersonID":726,"FaxNumber":"(215) 555-0101","DateOfBirth":"1954-02-06 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"lennart@wingtiptoys.com","PreferredName":"Lennart"}, - {"Gender":"Female","FullName":"Åšani Nair","PersonID":727,"FaxNumber":"(207) 555-0101","DateOfBirth":"1960-04-06 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"aaani@wingtiptoys.com","PreferredName":"Åšani"}, - {"Gender":"Female","FullName":"Cuc Tu","PersonID":728,"FaxNumber":"(207) 555-0101","DateOfBirth":"1964-01-09 00:00:00","PhoneNumber":"(207) 555-0100","EmailAddress":"cuc@wingtiptoys.com","PreferredName":"Cuc"}, - {"Gender":"Female","FullName":"Angelina Gormanston","PersonID":729,"FaxNumber":"(201) 555-0101","DateOfBirth":"1951-06-24 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"angelina@wingtiptoys.com","PreferredName":"Angelina"}, - {"Gender":"Female","FullName":"Prasanna Shetty","PersonID":730,"FaxNumber":"(201) 555-0101","DateOfBirth":"1996-12-15 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"prasanna@wingtiptoys.com","PreferredName":"Prasanna"}, - {"Gender":"Female","FullName":"Prasert Supitayaporn","PersonID":731,"FaxNumber":"(219) 555-0101","DateOfBirth":"1975-01-19 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"prasert@wingtiptoys.com","PreferredName":"Prasert"}, - {"Gender":"Female","FullName":"Gulzar Parkar","PersonID":732,"FaxNumber":"(219) 555-0101","DateOfBirth":"1995-06-25 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"gulzar@wingtiptoys.com","PreferredName":"Gulzar"}, - {"Gender":"Female","FullName":"Abhaya Rambhatla","PersonID":733,"FaxNumber":"(231) 555-0101","DateOfBirth":"1978-01-12 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"abhaya@wingtiptoys.com","PreferredName":"Abhaya"}, - {"Gender":"Female","FullName":"Naveed Alizadeh","PersonID":734,"FaxNumber":"(231) 555-0101","DateOfBirth":"1976-01-23 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"naveed@wingtiptoys.com","PreferredName":"Naveed"}, - {"Gender":"Female","FullName":"Lalit Ogra","PersonID":735,"FaxNumber":"(205) 555-0101","DateOfBirth":"1971-04-26 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"lalit@wingtiptoys.com","PreferredName":"Lalit"}, - {"Gender":"Female","FullName":"Badanika Vankayala","PersonID":736,"FaxNumber":"(205) 555-0101","DateOfBirth":"1975-04-25 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"badanika@wingtiptoys.com","PreferredName":"Badanika"}, - {"Gender":"Female","FullName":"Mina Bagheri","PersonID":737,"FaxNumber":"(319) 555-0101","DateOfBirth":"1972-06-05 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"mina@wingtiptoys.com","PreferredName":"Mina"}, - {"Gender":"Female","FullName":"Lien Lo","PersonID":738,"FaxNumber":"(319) 555-0101","DateOfBirth":"1975-04-06 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"lien@wingtiptoys.com","PreferredName":"Lien"}, - {"Gender":"Female","FullName":"Debraj Sanyal","PersonID":739,"FaxNumber":"(239) 555-0101","DateOfBirth":"1991-11-16 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"debraj@wingtiptoys.com","PreferredName":"Debraj"}, - {"Gender":"Female","FullName":"Tara KlanCisar","PersonID":740,"FaxNumber":"(239) 555-0101","DateOfBirth":"1955-05-15 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"tara@wingtiptoys.com","PreferredName":"Tara"}, - {"Gender":"Female","FullName":"Marco Costa","PersonID":741,"FaxNumber":"(701) 555-0101","DateOfBirth":"1973-06-01 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"marco@wingtiptoys.com","PreferredName":"Marco"}, - {"Gender":"Female","FullName":"Alessandra Gallo","PersonID":742,"FaxNumber":"(701) 555-0101","DateOfBirth":"1952-04-03 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"alessandra@wingtiptoys.com","PreferredName":"Alessandra"}, - {"Gender":"Female","FullName":"Crina Nechita","PersonID":743,"FaxNumber":"(217) 555-0101","DateOfBirth":"1995-03-14 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"crina@wingtiptoys.com","PreferredName":"Crina"}, - {"Gender":"Female","FullName":"Yi Min Zhong","PersonID":744,"FaxNumber":"(217) 555-0101","DateOfBirth":"1959-04-28 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"yi min@wingtiptoys.com","PreferredName":"Yi Min"}, - {"Gender":"Female","FullName":"Zala Ibrahimagic","PersonID":745,"FaxNumber":"(212) 555-0101","DateOfBirth":"1971-06-20 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"zala@wingtiptoys.com","PreferredName":"Zala"}, - {"Gender":"Female","FullName":"Wander Ellenbroek","PersonID":746,"FaxNumber":"(212) 555-0101","DateOfBirth":"1962-05-28 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"wander@wingtiptoys.com","PreferredName":"Wander"}, - {"Gender":"Female","FullName":"Gundega Kundzina","PersonID":747,"FaxNumber":"(479) 555-0101","DateOfBirth":"1965-07-31 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"gundega@wingtiptoys.com","PreferredName":"Gundega"}, - {"Gender":"Female","FullName":"Damyanti Byrraju","PersonID":748,"FaxNumber":"(479) 555-0101","DateOfBirth":"1967-10-10 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"damyanti@wingtiptoys.com","PreferredName":"Damyanti"}, - {"Gender":"Female","FullName":"Parveen Haldar","PersonID":749,"FaxNumber":"(219) 555-0101","DateOfBirth":"1972-08-09 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"parveen@wingtiptoys.com","PreferredName":"Parveen"}, - {"Gender":"Female","FullName":"Chau Chu","PersonID":750,"FaxNumber":"(219) 555-0101","DateOfBirth":"1978-05-08 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"chau@wingtiptoys.com","PreferredName":"Chau"}, - {"Gender":"Female","FullName":"Noel Cartier","PersonID":751,"FaxNumber":"(215) 555-0101","DateOfBirth":"1996-06-05 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"noel@wingtiptoys.com","PreferredName":"Noel"}, - {"Gender":"Female","FullName":"Aet Kasesalu","PersonID":752,"FaxNumber":"(215) 555-0101","DateOfBirth":"1993-06-02 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"aet@wingtiptoys.com","PreferredName":"Aet"}, - {"Gender":"Female","FullName":"Ilgonis Dzenis","PersonID":753,"FaxNumber":"(210) 555-0101","DateOfBirth":"1989-07-26 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"ilgonis@wingtiptoys.com","PreferredName":"Ilgonis"}, - {"Gender":"Female","FullName":"Emine Gungor","PersonID":754,"FaxNumber":"(210) 555-0101","DateOfBirth":"1976-05-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"emine@wingtiptoys.com","PreferredName":"Emine"}, - {"Gender":"Female","FullName":"Ondrej Tomek","PersonID":755,"FaxNumber":"(219) 555-0101","DateOfBirth":"1986-07-07 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"ondrej@wingtiptoys.com","PreferredName":"Ondrej"}, - {"Gender":"Female","FullName":"Ngon Ta","PersonID":756,"FaxNumber":"(219) 555-0101","DateOfBirth":"1962-09-12 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"ngon@wingtiptoys.com","PreferredName":"Ngon"}, - {"Gender":"Female","FullName":"Mohini Kaul","PersonID":757,"FaxNumber":"(240) 555-0101","DateOfBirth":"1951-09-22 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"mohini@wingtiptoys.com","PreferredName":"Mohini"}, - {"Gender":"Female","FullName":"Alejandro Baeza","PersonID":758,"FaxNumber":"(240) 555-0101","DateOfBirth":"1951-12-27 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"alejandro@wingtiptoys.com","PreferredName":"Alejandro"}, - {"Gender":"Female","FullName":"Arnab Malakar","PersonID":759,"FaxNumber":"(210) 555-0101","DateOfBirth":"1997-02-14 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"arnab@wingtiptoys.com","PreferredName":"Arnab"}, - {"Gender":"Female","FullName":"Anupam Majumdar","PersonID":760,"FaxNumber":"(210) 555-0101","DateOfBirth":"1991-11-25 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"anupam@wingtiptoys.com","PreferredName":"Anupam"}, - {"Gender":"Female","FullName":"Mary Barney","PersonID":761,"FaxNumber":"(505) 555-0101","DateOfBirth":"1986-02-23 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"mary@wingtiptoys.com","PreferredName":"Mary"}, - {"Gender":"Female","FullName":"Amit Ghatak","PersonID":762,"FaxNumber":"(505) 555-0101","DateOfBirth":"1987-06-23 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"amit@wingtiptoys.com","PreferredName":"Amit"}, - {"Gender":"Female","FullName":"Dhaeraemdranaadh Allu","PersonID":763,"FaxNumber":"(216) 555-0101","DateOfBirth":"1990-09-04 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"dhaeraemdranaadh@wingtiptoys.com","PreferredName":"Dhaeraemdranaadh"}, - {"Gender":"Female","FullName":"Abel Pirvu","PersonID":764,"FaxNumber":"(216) 555-0101","DateOfBirth":"1974-03-05 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"abel@wingtiptoys.com","PreferredName":"Abel"}, - {"Gender":"Female","FullName":"Paola Greece","PersonID":765,"FaxNumber":"(210) 555-0101","DateOfBirth":"1967-09-22 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"paola@wingtiptoys.com","PreferredName":"Paola"}, - {"Gender":"Female","FullName":"Izabella Baltina","PersonID":766,"FaxNumber":"(210) 555-0101","DateOfBirth":"1957-05-26 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"izabella@wingtiptoys.com","PreferredName":"Izabella"}, - {"Gender":"Female","FullName":"Flora Olofsson","PersonID":767,"FaxNumber":"(787) 555-0101","DateOfBirth":"1974-03-24 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"flora@wingtiptoys.com","PreferredName":"Flora"}, - {"Gender":"Female","FullName":"Vitezslav Drdla","PersonID":768,"FaxNumber":"(787) 555-0101","DateOfBirth":"1994-12-05 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"vitezslav@wingtiptoys.com","PreferredName":"Vitezslav"}, - {"Gender":"Female","FullName":"Nguyet Bach","PersonID":769,"FaxNumber":"(205) 555-0101","DateOfBirth":"1969-01-09 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"nguyet@wingtiptoys.com","PreferredName":"Nguyet"}, - {"Gender":"Female","FullName":"Ratnam Sidhu","PersonID":770,"FaxNumber":"(205) 555-0101","DateOfBirth":"1993-04-29 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"ratnam@wingtiptoys.com","PreferredName":"Ratnam"}, - {"Gender":"Female","FullName":"Jyoti Karnik","PersonID":771,"FaxNumber":"(803) 555-0101","DateOfBirth":"1972-07-25 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"jyoti@wingtiptoys.com","PreferredName":"Jyoti"}, - {"Gender":"Female","FullName":"Dattu Gummadi","PersonID":772,"FaxNumber":"(803) 555-0101","DateOfBirth":"1954-12-06 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"dattu@wingtiptoys.com","PreferredName":"Dattu"}, - {"Gender":"Female","FullName":"Samuel Almaraz","PersonID":773,"FaxNumber":"(458) 555-0101","DateOfBirth":"1986-10-16 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"samuel@wingtiptoys.com","PreferredName":"Samuel"}, - {"Gender":"Female","FullName":"Filip Bunderla","PersonID":774,"FaxNumber":"(458) 555-0101","DateOfBirth":"1959-05-29 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"filip@wingtiptoys.com","PreferredName":"Filip"}, - {"Gender":"Female","FullName":"Zuzana Kuchtova","PersonID":775,"FaxNumber":"(262) 555-0101","DateOfBirth":"1976-04-09 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"zuzana@wingtiptoys.com","PreferredName":"Zuzana"}, - {"Gender":"Female","FullName":"Elias Niemi","PersonID":776,"FaxNumber":"(262) 555-0101","DateOfBirth":"1973-01-11 00:00:00","PhoneNumber":"(262) 555-0100","EmailAddress":"elias@wingtiptoys.com","PreferredName":"Elias"}, - {"Gender":"Female","FullName":"Mark Ruutel","PersonID":777,"FaxNumber":"(307) 555-0101","DateOfBirth":"1972-05-19 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"mark@wingtiptoys.com","PreferredName":"Mark"}, - {"Gender":"Female","FullName":"Carla Osorio","PersonID":778,"FaxNumber":"(307) 555-0101","DateOfBirth":"1953-10-01 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"carla@wingtiptoys.com","PreferredName":"Carla"}, - {"Gender":"Female","FullName":"Corneliu Vladu","PersonID":779,"FaxNumber":"(480) 555-0101","DateOfBirth":"1974-11-12 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"corneliu@wingtiptoys.com","PreferredName":"Corneliu"}, - {"Gender":"Female","FullName":"Ivo Valek","PersonID":780,"FaxNumber":"(480) 555-0101","DateOfBirth":"1978-01-27 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"ivo@wingtiptoys.com","PreferredName":"Ivo"}, - {"Gender":"Female","FullName":"Severins Polis","PersonID":781,"FaxNumber":"(216) 555-0101","DateOfBirth":"1970-02-01 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"severins@wingtiptoys.com","PreferredName":"Severins"}, - {"Gender":"Female","FullName":"Chandran Bhattacharya","PersonID":782,"FaxNumber":"(216) 555-0101","DateOfBirth":"1957-04-24 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"chandran@wingtiptoys.com","PreferredName":"Chandran"}, - {"Gender":"Female","FullName":"Linda Ledezma","PersonID":783,"FaxNumber":"(210) 555-0101","DateOfBirth":"1971-03-20 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"linda@wingtiptoys.com","PreferredName":"Linda"}, - {"Gender":"Female","FullName":"Zbynek Vacha","PersonID":784,"FaxNumber":"(210) 555-0101","DateOfBirth":"1954-07-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"zbynek@wingtiptoys.com","PreferredName":"Zbynek"}, - {"Gender":"Female","FullName":"Halit Gunes","PersonID":785,"FaxNumber":"(239) 555-0101","DateOfBirth":"1954-05-26 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"halit@wingtiptoys.com","PreferredName":"Halit"}, - {"Gender":"Female","FullName":"Indu Nambiar","PersonID":786,"FaxNumber":"(239) 555-0101","DateOfBirth":"1977-11-01 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"indu@wingtiptoys.com","PreferredName":"Indu"}, - {"Gender":"Female","FullName":"Vallo Vesik","PersonID":787,"FaxNumber":"(205) 555-0101","DateOfBirth":"1997-10-23 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"vallo@wingtiptoys.com","PreferredName":"Vallo"}, - {"Gender":"Female","FullName":"Dayaram Raut","PersonID":788,"FaxNumber":"(205) 555-0101","DateOfBirth":"1980-12-01 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"dayaram@wingtiptoys.com","PreferredName":"Dayaram"}, - {"Gender":"Female","FullName":"Dana Mrazova","PersonID":789,"FaxNumber":"(802) 555-0101","DateOfBirth":"1964-08-16 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"dana@wingtiptoys.com","PreferredName":"Dana"}, - {"Gender":"Female","FullName":"Saraswati Beniwal","PersonID":790,"FaxNumber":"(802) 555-0101","DateOfBirth":"1976-03-18 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"saraswati@wingtiptoys.com","PreferredName":"Saraswati"}, - {"Gender":"Female","FullName":"Ema Slosar","PersonID":791,"FaxNumber":"(215) 555-0101","DateOfBirth":"1961-06-11 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"ema@wingtiptoys.com","PreferredName":"Ema"}, - {"Gender":"Female","FullName":"Arto Heikkinen","PersonID":792,"FaxNumber":"(215) 555-0101","DateOfBirth":"1983-01-15 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"arto@wingtiptoys.com","PreferredName":"Arto"}, - {"Gender":"Female","FullName":"Hemchandra Debnath","PersonID":793,"FaxNumber":"(209) 555-0101","DateOfBirth":"1954-06-01 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"hemchandra@wingtiptoys.com","PreferredName":"Hemchandra"}, - {"Gender":"Female","FullName":"Bala Ogra","PersonID":794,"FaxNumber":"(209) 555-0101","DateOfBirth":"1986-05-31 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bala@wingtiptoys.com","PreferredName":"Bala"}, - {"Gender":"Female","FullName":"Monika Valentova","PersonID":795,"FaxNumber":"(458) 555-0101","DateOfBirth":"1961-12-02 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"monika@wingtiptoys.com","PreferredName":"Monika"}, - {"Gender":"Female","FullName":"Anuj Sonkar","PersonID":796,"FaxNumber":"(458) 555-0101","DateOfBirth":"1983-02-16 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"anuj@wingtiptoys.com","PreferredName":"Anuj"}, - {"Gender":"Female","FullName":"Dattaatraeya Tottempudi","PersonID":797,"FaxNumber":"(212) 555-0101","DateOfBirth":"1970-08-07 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"dattaatraeya@wingtiptoys.com","PreferredName":"Dattaatraeya"}, - {"Gender":"Female","FullName":"Emilia Samaniego","PersonID":798,"FaxNumber":"(212) 555-0101","DateOfBirth":"1967-12-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"emilia@wingtiptoys.com","PreferredName":"Emilia"}, - {"Gender":"Female","FullName":"Kahkushan Shakiba","PersonID":799,"FaxNumber":"(217) 555-0101","DateOfBirth":"1996-06-25 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"kahkushan@wingtiptoys.com","PreferredName":"Kahkushan"}, - {"Gender":"Female","FullName":"Lindsey Allen","PersonID":800,"FaxNumber":"(217) 555-0101","DateOfBirth":"1975-12-20 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"lindseya@contosomotors.com","PreferredName":"Lindsey"}, - {"Gender":"Female","FullName":"Perry Skountrianos","PersonID":801,"FaxNumber":"(212) 555-0101","DateOfBirth":"1978-10-18 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"perrys@contosomotors.com","PreferredName":"Perry"}, - {"Gender":"Female","FullName":"Birol Arslan","PersonID":802,"FaxNumber":"(212) 555-0101","DateOfBirth":"1972-07-02 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"birol@wingtiptoys.com","PreferredName":"Birol"}, - {"Gender":"Female","FullName":"Abhra Thakur","PersonID":803,"FaxNumber":"(215) 555-0101","DateOfBirth":"1989-05-31 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"abhra@wingtiptoys.com","PreferredName":"Abhra"}, - {"Gender":"Female","FullName":"Uma Khalsa","PersonID":804,"FaxNumber":"(215) 555-0101","DateOfBirth":"1968-08-08 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"uma@wingtiptoys.com","PreferredName":"Uma"}, - {"Gender":"Female","FullName":"Dunja Radoncis","PersonID":805,"FaxNumber":"(215) 555-0101","DateOfBirth":"1953-10-25 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"dunja@wingtiptoys.com","PreferredName":"Dunja"}, - {"Gender":"Female","FullName":"Olya Seleznyov","PersonID":806,"FaxNumber":"(215) 555-0101","DateOfBirth":"1951-11-23 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"olya@wingtiptoys.com","PreferredName":"Olya"}, - {"Gender":"Female","FullName":"Darakhshan Javaherian","PersonID":807,"FaxNumber":"(215) 555-0101","DateOfBirth":"1965-06-10 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"darakhshan@wingtiptoys.com","PreferredName":"Darakhshan"}, - {"Gender":"Female","FullName":"Alexandre L'Angelier","PersonID":808,"FaxNumber":"(215) 555-0101","DateOfBirth":"1951-07-18 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"alexandre @wingtiptoys.com","PreferredName":"Alexandre "}, - {"Gender":"Female","FullName":"Youssef Eriksson","PersonID":809,"FaxNumber":"(701) 555-0101","DateOfBirth":"1994-09-05 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"youssef@wingtiptoys.com","PreferredName":"Youssef"}, - {"Gender":"Female","FullName":"Arunima Ganguly","PersonID":810,"FaxNumber":"(701) 555-0101","DateOfBirth":"1987-08-25 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"arunima@wingtiptoys.com","PreferredName":"Arunima"}, - {"Gender":"Female","FullName":"Pavel Bohuslav","PersonID":811,"FaxNumber":"(505) 555-0101","DateOfBirth":"1979-05-21 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"pavel@wingtiptoys.com","PreferredName":"Pavel"}, - {"Gender":"Female","FullName":"Mahendra Trivedi","PersonID":812,"FaxNumber":"(505) 555-0101","DateOfBirth":"1992-02-14 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"mahendra@wingtiptoys.com","PreferredName":"Mahendra"}, - {"Gender":"Female","FullName":"Jiri Vacha","PersonID":813,"FaxNumber":"(209) 555-0101","DateOfBirth":"1951-09-29 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"jiri@wingtiptoys.com","PreferredName":"Jiri"}, - {"Gender":"Female","FullName":"Constanta Dita","PersonID":814,"FaxNumber":"(209) 555-0101","DateOfBirth":"1964-06-25 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"constanta@wingtiptoys.com","PreferredName":"Constanta"}, - {"Gender":"Female","FullName":"Magdalena Cervenkova","PersonID":815,"FaxNumber":"(405) 555-0101","DateOfBirth":"1991-07-21 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"magdalena@wingtiptoys.com","PreferredName":"Magdalena"}, - {"Gender":"Female","FullName":"Sylvie Panetier","PersonID":816,"FaxNumber":"(405) 555-0101","DateOfBirth":"1996-02-20 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"sylvie@wingtiptoys.com","PreferredName":"Sylvie"}, - {"Gender":"Female","FullName":"Asha Mudigonda","PersonID":817,"FaxNumber":"(201) 555-0101","DateOfBirth":"1990-08-14 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"asha@wingtiptoys.com","PreferredName":"Asha"}, - {"Gender":"Female","FullName":"Jaya Benjaree","PersonID":818,"FaxNumber":"(201) 555-0101","DateOfBirth":"1979-03-24 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"jaya@wingtiptoys.com","PreferredName":"Jaya"}, - {"Gender":"Female","FullName":"Anete Kundzina","PersonID":819,"FaxNumber":"(239) 555-0101","DateOfBirth":"1996-03-18 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"anete@wingtiptoys.com","PreferredName":"Anete"}, - {"Gender":"Female","FullName":"John Kane","PersonID":820,"FaxNumber":"(239) 555-0101","DateOfBirth":"1977-02-25 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"johnk@contosomotors.com","PreferredName":"Jonny"}, - {"Gender":"Female","FullName":"Laurent Bonnet","PersonID":821,"FaxNumber":"(210) 555-0101","DateOfBirth":"1970-01-16 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"laurentb@wingtiptoys.com","PreferredName":"Laurent"}, - {"Gender":"Female","FullName":"Kunal Nakhtare","PersonID":822,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-12-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"kunal@wingtiptoys.com","PreferredName":"Kunal"}, - {"Gender":"Female","FullName":"Duangrat Atitarn","PersonID":823,"FaxNumber":"(210) 555-0101","DateOfBirth":"1958-02-20 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"duangrat@wingtiptoys.com","PreferredName":"Duangrat"}, - {"Gender":"Female","FullName":"Ella Celmina","PersonID":824,"FaxNumber":"(210) 555-0101","DateOfBirth":"1953-07-30 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"ella@wingtiptoys.com","PreferredName":"Ella"}, - {"Gender":"Female","FullName":"Deviprasad PrabhupÄda","PersonID":825,"FaxNumber":"(605) 555-0101","DateOfBirth":"1968-04-17 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"deviprasad@wingtiptoys.com","PreferredName":"Deviprasad"}, - {"Gender":"Female","FullName":"Tess Seegers","PersonID":826,"FaxNumber":"(605) 555-0101","DateOfBirth":"1981-03-10 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"tess@wingtiptoys.com","PreferredName":"Tess"}, - {"Gender":"Female","FullName":"Aija Lukstina","PersonID":827,"FaxNumber":"(252) 555-0101","DateOfBirth":"1984-01-04 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"aija@wingtiptoys.com","PreferredName":"Aija"}, - {"Gender":"Female","FullName":"Sanjay Cheema","PersonID":828,"FaxNumber":"(252) 555-0101","DateOfBirth":"1955-03-27 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"sanjay@wingtiptoys.com","PreferredName":"Sanjay"}, - {"Gender":"Female","FullName":"Hoc Le","PersonID":829,"FaxNumber":"(208) 555-0101","DateOfBirth":"1964-04-16 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"hoc@wingtiptoys.com","PreferredName":"Hoc"}, - {"Gender":"Female","FullName":"Blagoje Pavlovic","PersonID":830,"FaxNumber":"(208) 555-0101","DateOfBirth":"1969-06-29 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"blagoje@wingtiptoys.com","PreferredName":"Blagoje"}, - {"Gender":"Female","FullName":"Bhairaam Kidambi","PersonID":831,"FaxNumber":"(319) 555-0101","DateOfBirth":"1975-11-30 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"bhairaam@wingtiptoys.com","PreferredName":"Bhairaam"}, - {"Gender":"Female","FullName":"Aleksandrs Cirulis","PersonID":832,"FaxNumber":"(319) 555-0101","DateOfBirth":"1982-03-29 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"aleksandrs@wingtiptoys.com","PreferredName":"Aleksandrs"}, - {"Gender":"Female","FullName":"Jae-Hwa Shin","PersonID":833,"FaxNumber":"(505) 555-0101","DateOfBirth":"1994-09-22 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"jae-hwa@wingtiptoys.com","PreferredName":"Jae-Hwa"}, - {"Gender":"Female","FullName":"Mala Naicker","PersonID":834,"FaxNumber":"(505) 555-0101","DateOfBirth":"1965-10-31 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"mala@wingtiptoys.com","PreferredName":"Mala"}, - {"Gender":"Female","FullName":"Caterina Fallaci","PersonID":835,"FaxNumber":"(210) 555-0101","DateOfBirth":"1988-02-21 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"caterina@wingtiptoys.com","PreferredName":"Caterina"}, - {"Gender":"Female","FullName":"Brayden Macnamara","PersonID":836,"FaxNumber":"(210) 555-0101","DateOfBirth":"1970-04-04 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"brayden@wingtiptoys.com","PreferredName":"Brayden"}, - {"Gender":"Female","FullName":"Baanuraekha Voleti","PersonID":837,"FaxNumber":"(276) 555-0101","DateOfBirth":"1989-02-16 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"baanuraekha@wingtiptoys.com","PreferredName":"Baanuraekha"}, - {"Gender":"Female","FullName":"Renata Alva","PersonID":838,"FaxNumber":"(276) 555-0101","DateOfBirth":"1981-11-25 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"renata@wingtiptoys.com","PreferredName":"Renata"}, - {"Gender":"Female","FullName":"Ranjeet Haldar","PersonID":839,"FaxNumber":"(203) 555-0101","DateOfBirth":"1996-01-19 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"ranjeet@wingtiptoys.com","PreferredName":"Ranjeet"}, - {"Gender":"Female","FullName":"Mandeep Desai","PersonID":840,"FaxNumber":"(203) 555-0101","DateOfBirth":"1965-10-14 00:00:00","PhoneNumber":"(203) 555-0100","EmailAddress":"mandeep@wingtiptoys.com","PreferredName":"Mandeep"}, - {"Gender":"Female","FullName":"Bhaamini Kanaparthi","PersonID":841,"FaxNumber":"(907) 555-0101","DateOfBirth":"1967-08-26 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"bhaamini@wingtiptoys.com","PreferredName":"Bhaamini"}, - {"Gender":"Female","FullName":"Sun-Hi Oh","PersonID":842,"FaxNumber":"(907) 555-0101","DateOfBirth":"1965-02-15 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"sun-hi@wingtiptoys.com","PreferredName":"Sun-Hi"}, - {"Gender":"Female","FullName":"Margit Molnar","PersonID":843,"FaxNumber":"(808) 555-0101","DateOfBirth":"1961-04-03 00:00:00","PhoneNumber":"(808) 555-0100","EmailAddress":"margit@wingtiptoys.com","PreferredName":"Margit"}, - {"Gender":"Female","FullName":"Amanda Kaulina","PersonID":844,"FaxNumber":"(808) 555-0101","DateOfBirth":"1966-09-09 00:00:00","PhoneNumber":"(808) 555-0100","EmailAddress":"amanda@wingtiptoys.com","PreferredName":"Amanda"}, - {"Gender":"Female","FullName":"Chandni Jandhyala","PersonID":845,"FaxNumber":"(210) 555-0101","DateOfBirth":"1977-10-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"chandni@wingtiptoys.com","PreferredName":"Chandni"}, - {"Gender":"Female","FullName":"Verona Sykorova","PersonID":846,"FaxNumber":"(210) 555-0101","DateOfBirth":"1972-09-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"verona@wingtiptoys.com","PreferredName":"Verona"}, - {"Gender":"Female","FullName":"Ljubomir Nesic","PersonID":847,"FaxNumber":"(231) 555-0101","DateOfBirth":"1978-08-22 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"ljubomir@wingtiptoys.com","PreferredName":"Ljubomir"}, - {"Gender":"Female","FullName":"Jennifer Kim","PersonID":848,"FaxNumber":"(231) 555-0101","DateOfBirth":"1968-09-06 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"jenniferk@contosomotors.com","PreferredName":"Jennifer"}, - {"Gender":"Female","FullName":"Telma Hermansson","PersonID":849,"FaxNumber":"(240) 555-0101","DateOfBirth":"1951-05-31 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"telma@wingtiptoys.com","PreferredName":"Telma"}, - {"Gender":"Female","FullName":"Lubomir Spousta","PersonID":850,"FaxNumber":"(240) 555-0101","DateOfBirth":"1991-07-23 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"lubomir@wingtiptoys.com","PreferredName":"Lubomir"}, - {"Gender":"Female","FullName":"Eric Torres","PersonID":851,"FaxNumber":"(307) 555-0101","DateOfBirth":"1975-07-14 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"eric@example.com","PreferredName":"Eric"}, - {"Gender":"Female","FullName":"Cosmina Vlad","PersonID":852,"FaxNumber":"(505) 555-0101","DateOfBirth":"1973-01-20 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"cosmina@example.com","PreferredName":"Cosmina"}, - {"Gender":"Female","FullName":"Bala Dixit","PersonID":853,"FaxNumber":"(209) 555-0101","DateOfBirth":"1997-11-18 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bala@example.com","PreferredName":"Bala"}, - {"Gender":"Female","FullName":"Aleksandrs Riekstins","PersonID":854,"FaxNumber":"(605) 555-0101","DateOfBirth":"1985-04-20 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"aleksandrs@example.com","PreferredName":"Aleksandrs"}, - {"Gender":"Female","FullName":"Ratan Poddar","PersonID":855,"FaxNumber":"(907) 555-0101","DateOfBirth":"1968-02-17 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"ratan@example.com","PreferredName":"Ratan"}, - {"Gender":"Female","FullName":"Shi Tu","PersonID":856,"FaxNumber":"(307) 555-0101","DateOfBirth":"1981-08-10 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"shi@example.com","PreferredName":"Shi"}, - {"Gender":"Female","FullName":"Gunnar Lohmus","PersonID":857,"FaxNumber":"(201) 555-0101","DateOfBirth":"1963-01-15 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"gunnar@example.com","PreferredName":"Gunnar"}, - {"Gender":"Female","FullName":"Jackson Kolios","PersonID":858,"FaxNumber":"(209) 555-0101","DateOfBirth":"1978-03-26 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"jackson@example.com","PreferredName":"Jackson"}, - {"Gender":"Female","FullName":"Madhu Dwivedi","PersonID":859,"FaxNumber":"(802) 555-0101","DateOfBirth":"1995-01-08 00:00:00","PhoneNumber":"(802) 555-0100","EmailAddress":"madhu@example.com","PreferredName":"Madhu"}, - {"Gender":"Female","FullName":"Alena Kellnerova","PersonID":860,"FaxNumber":"(303) 555-0101","DateOfBirth":"1988-06-09 00:00:00","PhoneNumber":"(303) 555-0100","EmailAddress":"alena@example.com","PreferredName":"Alena"}, - {"Gender":"Female","FullName":"Surendra Sahu","PersonID":861,"FaxNumber":"(210) 555-0101","DateOfBirth":"1994-04-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"surendra@example.com","PreferredName":"Surendra"}, - {"Gender":"Female","FullName":"Celica Barajas","PersonID":862,"FaxNumber":"(270) 555-0101","DateOfBirth":"1988-03-04 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"celica@example.com","PreferredName":"Celica"}, - {"Gender":"Female","FullName":"Shyam Poddar","PersonID":863,"FaxNumber":"(218) 555-0101","DateOfBirth":"1968-12-08 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"shyam@example.com","PreferredName":"Shyam"}, - {"Gender":"Female","FullName":"Johanna Hoornstra","PersonID":864,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-12-14 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"johanna@example.com","PreferredName":"Johanna"}, - {"Gender":"Female","FullName":"Libuse Valentova","PersonID":865,"FaxNumber":"(270) 555-0101","DateOfBirth":"1968-10-23 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"libuse@example.com","PreferredName":"Libuse"}, - {"Gender":"Female","FullName":"Harsha Huq","PersonID":866,"FaxNumber":"(314) 555-0101","DateOfBirth":"1961-04-24 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"harsha@example.com","PreferredName":"Harsha"}, - {"Gender":"Female","FullName":"Agrita Kanepa","PersonID":867,"FaxNumber":"(201) 555-0101","DateOfBirth":"1976-02-03 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"agrita@example.com","PreferredName":"Agrita"}, - {"Gender":"Female","FullName":"Liia Orav","PersonID":868,"FaxNumber":"(252) 555-0101","DateOfBirth":"1963-07-26 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"liia@example.com","PreferredName":"Liia"}, - {"Gender":"Female","FullName":"Santiago Vera","PersonID":869,"FaxNumber":"(304) 555-0101","DateOfBirth":"1988-09-19 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"santiago@example.com","PreferredName":"Santiago"}, - {"Gender":"Female","FullName":"Knut Svensson","PersonID":870,"FaxNumber":"(201) 555-0101","DateOfBirth":"1963-09-25 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"knut@example.com","PreferredName":"Knut"}, - {"Gender":"Female","FullName":"Kwanjai Saowaluk","PersonID":871,"FaxNumber":"(787) 555-0101","DateOfBirth":"1972-04-22 00:00:00","PhoneNumber":"(787) 555-0100","EmailAddress":"kwanjai@example.com","PreferredName":"Kwanjai"}, - {"Gender":"Female","FullName":"Suparna Bhattacharya","PersonID":872,"FaxNumber":"(314) 555-0101","DateOfBirth":"1975-05-31 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"suparna@example.com","PreferredName":"Suparna"}, - {"Gender":"Female","FullName":"Francisca Laureano","PersonID":873,"FaxNumber":"(319) 555-0101","DateOfBirth":"1998-01-09 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"francisca@example.com","PreferredName":"Francisca"}, - {"Gender":"Female","FullName":"Risto Valbe","PersonID":874,"FaxNumber":"(205) 555-0101","DateOfBirth":"1990-05-04 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"risto@example.com","PreferredName":"Risto"}, - {"Gender":"Female","FullName":"Jayanta Thakur","PersonID":875,"FaxNumber":"(276) 555-0101","DateOfBirth":"1979-03-09 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"jayanta@example.com","PreferredName":"Jayanta"}, - {"Gender":"Female","FullName":"Leila Carvalho","PersonID":876,"FaxNumber":"(217) 555-0101","DateOfBirth":"1969-10-20 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"leila@example.com","PreferredName":"Leila"}, - {"Gender":"Female","FullName":"Crina Grasu","PersonID":877,"FaxNumber":"(308) 555-0101","DateOfBirth":"1966-02-11 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"crina@example.com","PreferredName":"Crina"}, - {"Gender":"Female","FullName":"Sercan Celik","PersonID":878,"FaxNumber":"(217) 555-0101","DateOfBirth":"1963-03-12 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"sercan@example.com","PreferredName":"Sercan"}, - {"Gender":"Female","FullName":"Jack Walker","PersonID":879,"FaxNumber":"(316) 555-0101","DateOfBirth":"1996-05-19 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"jack@example.com","PreferredName":"Jack"}, - {"Gender":"Female","FullName":"Jana Fialova","PersonID":880,"FaxNumber":"(215) 555-0101","DateOfBirth":"1978-03-31 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jana@example.com","PreferredName":"Jana"}, - {"Gender":"Female","FullName":"Bhaavan Rai","PersonID":881,"FaxNumber":"(308) 555-0101","DateOfBirth":"1950-03-07 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"bhaavan@example.com","PreferredName":"Bhaavan"}, - {"Gender":"Female","FullName":"Aakriti Byrraju","PersonID":882,"FaxNumber":"(216) 555-0101","DateOfBirth":"1951-05-26 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"aakriti@example.com","PreferredName":"Aakriti"}, - {"Gender":"Female","FullName":"Devraj Rao","PersonID":883,"FaxNumber":"(385) 555-0101","DateOfBirth":"1986-01-16 00:00:00","PhoneNumber":"(385) 555-0100","EmailAddress":"devraj@example.com","PreferredName":"Devraj"}, - {"Gender":"Female","FullName":"Cong Hoa","PersonID":884,"FaxNumber":"(212) 555-0101","DateOfBirth":"1973-04-25 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"cong@example.com","PreferredName":"Cong"}, - {"Gender":"Female","FullName":"Dominic Davignon","PersonID":885,"FaxNumber":"(209) 555-0101","DateOfBirth":"1968-07-11 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"dominic@example.com","PreferredName":"Dominic"}, - {"Gender":"Female","FullName":"Abel Spirlea","PersonID":886,"FaxNumber":"(218) 555-0101","DateOfBirth":"1958-02-19 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"abel@example.com","PreferredName":"Abel"}, - {"Gender":"Female","FullName":"Anil Sarkar","PersonID":887,"FaxNumber":"(215) 555-0101","DateOfBirth":"1966-11-02 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"anil@example.com","PreferredName":"Anil"}, - {"Gender":"Female","FullName":"Steve Schmidt","PersonID":888,"FaxNumber":"(339) 555-0101","DateOfBirth":"1975-04-07 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"steves@contosomotors.com","PreferredName":"Pavel"}, - {"Gender":"Female","FullName":"Juan Morse","PersonID":889,"FaxNumber":"(423) 555-0101","DateOfBirth":"1963-08-17 00:00:00","PhoneNumber":"(423) 555-0100","EmailAddress":"juan@example.com","PreferredName":"Juan"}, - {"Gender":"Female","FullName":"Rodrigo Figueiredo","PersonID":890,"FaxNumber":"(803) 555-0101","DateOfBirth":"1975-04-15 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"rodrigo@example.com","PreferredName":"Rodrigo"}, - {"Gender":"Female","FullName":"Camille Authier","PersonID":891,"FaxNumber":"(252) 555-0101","DateOfBirth":"1974-04-12 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"camille@example.com","PreferredName":"Camille"}, - {"Gender":"Female","FullName":"Biju Deb","PersonID":892,"FaxNumber":"(218) 555-0101","DateOfBirth":"1957-07-12 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"biju@example.com","PreferredName":"Biju"}, - {"Gender":"Female","FullName":"Marija Justina Pasek","PersonID":893,"FaxNumber":"(215) 555-0101","DateOfBirth":"1959-08-10 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"marija justina@example.com","PreferredName":"Marija Justina"}, - {"Gender":"Female","FullName":"Durdanah Abbasi","PersonID":894,"FaxNumber":"(201) 555-0101","DateOfBirth":"1958-02-24 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"durdanah@example.com","PreferredName":"Durdanah"}, - {"Gender":"Female","FullName":"Emilie Hrdlickova","PersonID":895,"FaxNumber":"(803) 555-0101","DateOfBirth":"1954-11-01 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"emilie@example.com","PreferredName":"Emilie"}, - {"Gender":"Female","FullName":"Malorie Bousquet","PersonID":896,"FaxNumber":"(209) 555-0101","DateOfBirth":"1984-11-15 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"malorie@example.com","PreferredName":"Malorie"}, - {"Gender":"Female","FullName":"Kristiina Ivanov","PersonID":897,"FaxNumber":"(605) 555-0101","DateOfBirth":"1972-05-26 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"kristiina@example.com","PreferredName":"Kristiina"}, - {"Gender":"Female","FullName":"Alvin Bollinger","PersonID":898,"FaxNumber":"(270) 555-0101","DateOfBirth":"1984-11-21 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"alvin@example.com","PreferredName":"Alvin"}, - {"Gender":"Female","FullName":"Sabine Zalite","PersonID":899,"FaxNumber":"(210) 555-0101","DateOfBirth":"1954-12-16 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"sabine@example.com","PreferredName":"Sabine"}, - {"Gender":"Female","FullName":"Daakshaayaani Sankaramanchi","PersonID":900,"FaxNumber":"(319) 555-0101","DateOfBirth":"1969-06-11 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"daakshaayaani@example.com","PreferredName":"Daakshaayaani"}, - {"Gender":"Female","FullName":"Ebru Erdogan","PersonID":901,"FaxNumber":"(405) 555-0101","DateOfBirth":"1991-11-29 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"ebru@example.com","PreferredName":"Ebru"}, - {"Gender":"Female","FullName":"Bhagavaan Atluri","PersonID":902,"FaxNumber":"(229) 555-0101","DateOfBirth":"1971-04-23 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"bhagavaan@example.com","PreferredName":"Bhagavaan"}, - {"Gender":"Female","FullName":"Caterina Pinto","PersonID":903,"FaxNumber":"(907) 555-0101","DateOfBirth":"1969-03-13 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"caterina@example.com","PreferredName":"Caterina"}, - {"Gender":"Female","FullName":"Daakshaayaani Kommineni","PersonID":904,"FaxNumber":"(239) 555-0101","DateOfBirth":"1972-09-02 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"daakshaayaani@example.com","PreferredName":"Daakshaayaani"}, - {"Gender":"Female","FullName":"Anna Mazzanti","PersonID":905,"FaxNumber":"(314) 555-0101","DateOfBirth":"1996-05-12 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"anna@example.com","PreferredName":"Anna"}, - {"Gender":"Female","FullName":"Satish Mittal","PersonID":906,"FaxNumber":"(215) 555-0101","DateOfBirth":"1966-09-19 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"satish@example.com","PreferredName":"Satish"}, - {"Gender":"Female","FullName":"Clarissa Manfrin","PersonID":907,"FaxNumber":"(210) 555-0101","DateOfBirth":"1964-02-28 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"clarissa@example.com","PreferredName":"Clarissa"}, - {"Gender":"Female","FullName":"Bimla PrabhupÄda","PersonID":908,"FaxNumber":"(209) 555-0101","DateOfBirth":"1987-10-26 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"bimla@example.com","PreferredName":"Bimla"}, - {"Gender":"Female","FullName":"Shah Alizadeh","PersonID":909,"FaxNumber":"(304) 555-0101","DateOfBirth":"1996-08-15 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"shah@example.com","PreferredName":"Shah"}, - {"Gender":"Female","FullName":"Marcela Lucescu","PersonID":910,"FaxNumber":"(231) 555-0101","DateOfBirth":"1985-05-19 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"marcela@example.com","PreferredName":"Marcela"}, - {"Gender":"Female","FullName":"Amarasimha Vinjamuri","PersonID":911,"FaxNumber":"(339) 555-0101","DateOfBirth":"1973-06-30 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"amarasimha@example.com","PreferredName":"Amarasimha"}, - {"Gender":"Female","FullName":"Lana Goransson","PersonID":912,"FaxNumber":"(212) 555-0101","DateOfBirth":"1982-05-13 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"lana@example.com","PreferredName":"Lana"}, - {"Gender":"Female","FullName":"Jakub Lukes","PersonID":913,"FaxNumber":"(212) 555-0101","DateOfBirth":"1977-08-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"jakub@example.com","PreferredName":"Jakub"}, - {"Gender":"Female","FullName":"Mikhail Degtyarev","PersonID":914,"FaxNumber":"(218) 555-0101","DateOfBirth":"1984-03-14 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"mikhail@example.com","PreferredName":"Mikhail"}, - {"Gender":"Female","FullName":"Bijoya Thakur","PersonID":915,"FaxNumber":"(225) 555-0101","DateOfBirth":"1978-07-23 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"bijoya@example.com","PreferredName":"Bijoya"}, - {"Gender":"Female","FullName":"Jay Bhuiyan","PersonID":916,"FaxNumber":"(215) 555-0101","DateOfBirth":"1996-01-27 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"jay@example.com","PreferredName":"Jay"}, - {"Gender":"Female","FullName":"Jasna Cerkez","PersonID":917,"FaxNumber":"(304) 555-0101","DateOfBirth":"1956-05-11 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"jasna@example.com","PreferredName":"Jasna"}, - {"Gender":"Female","FullName":"Laura Sykorova","PersonID":918,"FaxNumber":"(316) 555-0101","DateOfBirth":"1981-01-24 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"laura@example.com","PreferredName":"Laura"}, - {"Gender":"Female","FullName":"Abel Tatarescu","PersonID":919,"FaxNumber":"(217) 555-0101","DateOfBirth":"1970-01-27 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"abel@example.com","PreferredName":"Abel"}, - {"Gender":"Female","FullName":"In-Su Bae","PersonID":920,"FaxNumber":"(206) 555-0101","DateOfBirth":"1991-01-18 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"in-su@example.com","PreferredName":"In-Su"}, - {"Gender":"Female","FullName":"Darshana Madhunapantula","PersonID":921,"FaxNumber":"(240) 555-0101","DateOfBirth":"1984-06-07 00:00:00","PhoneNumber":"(240) 555-0100","EmailAddress":"darshana@example.com","PreferredName":"Darshana"}, - {"Gender":"Female","FullName":"Katerina Hadrabova","PersonID":922,"FaxNumber":"(219) 555-0101","DateOfBirth":"1984-04-30 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"katerina@example.com","PreferredName":"Katerina"}, - {"Gender":"Female","FullName":"Hana Hlouskova","PersonID":923,"FaxNumber":"(505) 555-0101","DateOfBirth":"1989-03-04 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"hana@example.com","PreferredName":"Hana"}, - {"Gender":"Female","FullName":"Daniel Martensson","PersonID":924,"FaxNumber":"(225) 555-0101","DateOfBirth":"1959-06-25 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"daniel@example.com","PreferredName":"Daniel"}, - {"Gender":"Female","FullName":"Philip Walker","PersonID":925,"FaxNumber":"(216) 555-0101","DateOfBirth":"1963-05-31 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"philip@example.com","PreferredName":"Philip"}, - {"Gender":"Female","FullName":"Marie LeBatelier","PersonID":926,"FaxNumber":"(210) 555-0101","DateOfBirth":"1990-05-20 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"marie@example.com","PreferredName":"Marie"}, - {"Gender":"Female","FullName":"Leyla Siavashi","PersonID":927,"FaxNumber":"(201) 555-0101","DateOfBirth":"1962-08-17 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"leyla@example.com","PreferredName":"Leyla"}, - {"Gender":"Female","FullName":"Miriam House","PersonID":928,"FaxNumber":"(701) 555-0101","DateOfBirth":"1972-01-29 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"miriam@example.com","PreferredName":"Miriam"}, - {"Gender":"Female","FullName":"Jitka Necesana","PersonID":929,"FaxNumber":"(212) 555-0101","DateOfBirth":"1964-09-08 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"jitka@example.com","PreferredName":"Jitka"}, - {"Gender":"Female","FullName":"Edmee Glissen","PersonID":930,"FaxNumber":"(208) 555-0101","DateOfBirth":"1979-02-08 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"edmee@example.com","PreferredName":"Edmee"}, - {"Gender":"Female","FullName":"Magdalena Michnova","PersonID":931,"FaxNumber":"(907) 555-0101","DateOfBirth":"1952-04-02 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"magdalena@example.com","PreferredName":"Magdalena"}, - {"Gender":"Female","FullName":"Maryann Huddleston","PersonID":932,"FaxNumber":"(304) 555-0101","DateOfBirth":"1955-03-19 00:00:00","PhoneNumber":"(304) 555-0100","EmailAddress":"maryann@example.com","PreferredName":"Maryann"}, - {"Gender":"Female","FullName":"Radha Barua","PersonID":933,"FaxNumber":"(405) 555-0101","DateOfBirth":"1995-08-23 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"radha@example.com","PreferredName":"Radha"}, - {"Gender":"Female","FullName":"Anindya Ghatak","PersonID":934,"FaxNumber":"(219) 555-0101","DateOfBirth":"1950-09-20 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"anindya@example.com","PreferredName":"Anindya"}, - {"Gender":"Female","FullName":"Chandrashekhar Dasgupta","PersonID":935,"FaxNumber":"(208) 555-0101","DateOfBirth":"1976-08-11 00:00:00","PhoneNumber":"(208) 555-0100","EmailAddress":"chandrashekhar@example.com","PreferredName":"Chandrashekhar"}, - {"Gender":"Female","FullName":"Debbie Molina","PersonID":936,"FaxNumber":"(270) 555-0101","DateOfBirth":"1980-03-21 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"debbie@example.com","PreferredName":"Debbie"}, - {"Gender":"Female","FullName":"Baran Jonsson","PersonID":937,"FaxNumber":"(458) 555-0101","DateOfBirth":"1996-03-18 00:00:00","PhoneNumber":"(458) 555-0100","EmailAddress":"baran@example.com","PreferredName":"Baran"}, - {"Gender":"Female","FullName":"Jai Lamble","PersonID":938,"FaxNumber":"(479) 555-0101","DateOfBirth":"1968-04-27 00:00:00","PhoneNumber":"(479) 555-0100","EmailAddress":"jai@example.com","PreferredName":"Jai"}, - {"Gender":"Female","FullName":"Sointu Savonheimo","PersonID":939,"FaxNumber":"(701) 555-0101","DateOfBirth":"1967-02-07 00:00:00","PhoneNumber":"(701) 555-0100","EmailAddress":"sointu@example.com","PreferredName":"Sointu"}, - {"Gender":"Female","FullName":"Olya Izmaylov","PersonID":940,"FaxNumber":"(210) 555-0101","DateOfBirth":"1997-06-29 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"olya@example.com","PreferredName":"Olya"}, - {"Gender":"Female","FullName":"Taneli Riutta","PersonID":941,"FaxNumber":"(276) 555-0101","DateOfBirth":"1991-03-10 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"taneli@example.com","PreferredName":"Taneli"}, - {"Gender":"Female","FullName":"Bahaar Asef zade","PersonID":942,"FaxNumber":"(225) 555-0101","DateOfBirth":"1978-08-11 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"bahaar@example.com","PreferredName":"Bahaar"}, - {"Gender":"Female","FullName":"Leyla Asef zade","PersonID":943,"FaxNumber":"(216) 555-0101","DateOfBirth":"1982-09-26 00:00:00","PhoneNumber":"(216) 555-0100","EmailAddress":"leyla@example.com","PreferredName":"Leyla"}, - {"Gender":"Female","FullName":"Gabriela Hernandes","PersonID":944,"FaxNumber":"(239) 555-0101","DateOfBirth":"1983-01-11 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"gabriela@example.com","PreferredName":"Gabriela"}, - {"Gender":"Female","FullName":"Geza Roman","PersonID":945,"FaxNumber":"(215) 555-0101","DateOfBirth":"1962-08-25 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"geza@example.com","PreferredName":"Geza"}, - {"Gender":"Female","FullName":"Leonardo Folliero","PersonID":946,"FaxNumber":"(339) 555-0101","DateOfBirth":"1980-03-24 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"leonardo@example.com","PreferredName":"Leonardo"}, - {"Gender":"Female","FullName":"Allan Mannik","PersonID":947,"FaxNumber":"(218) 555-0101","DateOfBirth":"1983-10-22 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"allan@example.com","PreferredName":"Allan"}, - {"Gender":"Female","FullName":"Gopalgobinda Sikdar","PersonID":948,"FaxNumber":"(307) 555-0101","DateOfBirth":"1996-09-10 00:00:00","PhoneNumber":"(307) 555-0100","EmailAddress":"gopalgobinda@example.com","PreferredName":"Gopalgobinda"}, - {"Gender":"Female","FullName":"Chin-Sun Chang","PersonID":949,"FaxNumber":"(605) 555-0101","DateOfBirth":"1953-08-02 00:00:00","PhoneNumber":"(605) 555-0100","EmailAddress":"chin-sun@example.com","PreferredName":"Chin-Sun"}, - {"Gender":"Female","FullName":"Lilli Sokk","PersonID":950,"FaxNumber":"(229) 555-0101","DateOfBirth":"1953-08-07 00:00:00","PhoneNumber":"(229) 555-0100","EmailAddress":"lilli@example.com","PreferredName":"Lilli"}, - {"Gender":"Female","FullName":"Adrian Andreasson","PersonID":951,"FaxNumber":"(217) 555-0101","DateOfBirth":"1957-07-17 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"adrian@example.com","PreferredName":"Adrian"}, - {"Gender":"Female","FullName":"Kamila Michnova","PersonID":952,"FaxNumber":"(210) 555-0101","DateOfBirth":"1966-12-04 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"kamila@example.com","PreferredName":"Kamila"}, - {"Gender":"Female","FullName":"Bing Han","PersonID":953,"FaxNumber":"(228) 555-0101","DateOfBirth":"1986-05-12 00:00:00","PhoneNumber":"(228) 555-0100","EmailAddress":"bing@example.com","PreferredName":"Bing"}, - {"Gender":"Female","FullName":"Olafs Rozitis","PersonID":954,"FaxNumber":"(316) 555-0101","DateOfBirth":"1980-06-09 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"olafs@example.com","PreferredName":"Olafs"}, - {"Gender":"Female","FullName":"Sara Huiting","PersonID":955,"FaxNumber":"(218) 555-0101","DateOfBirth":"1954-11-05 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"sara@example.com","PreferredName":"Sara"}, - {"Gender":"Female","FullName":"Ajitaab Pakalapati","PersonID":956,"FaxNumber":"(209) 555-0101","DateOfBirth":"1980-03-30 00:00:00","PhoneNumber":"(209) 555-0100","EmailAddress":"ajitaab@example.com","PreferredName":"Ajitaab"}, - {"Gender":"Female","FullName":"Eugen Agafitei","PersonID":957,"FaxNumber":"(252) 555-0101","DateOfBirth":"1989-11-12 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"eugen@example.com","PreferredName":"Eugen"}, - {"Gender":"Female","FullName":"Sumati Bhat","PersonID":958,"FaxNumber":"(206) 555-0101","DateOfBirth":"1970-07-18 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"sumati@example.com","PreferredName":"Sumati"}, - {"Gender":"Female","FullName":"Dena Glissen","PersonID":959,"FaxNumber":"(316) 555-0101","DateOfBirth":"1952-10-27 00:00:00","PhoneNumber":"(316) 555-0100","EmailAddress":"dena@example.com","PreferredName":"Dena"}, - {"Gender":"Female","FullName":"Elina Kaleja","PersonID":960,"FaxNumber":"(225) 555-0101","DateOfBirth":"1973-11-04 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"elina@example.com","PreferredName":"Elina"}, - {"Gender":"Female","FullName":"Liidia Lepp","PersonID":961,"FaxNumber":"(276) 555-0101","DateOfBirth":"1984-03-10 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"liidia@example.com","PreferredName":"Liidia"}, - {"Gender":"Female","FullName":"Volkan senturk","PersonID":962,"FaxNumber":"(276) 555-0101","DateOfBirth":"1963-04-28 00:00:00","PhoneNumber":"(276) 555-0100","EmailAddress":"volkan@example.com","PreferredName":"Volkan"}, - {"Gender":"Female","FullName":"Violetta KlanCisar","PersonID":963,"FaxNumber":"(225) 555-0101","DateOfBirth":"1957-05-22 00:00:00","PhoneNumber":"(225) 555-0100","EmailAddress":"violetta@example.com","PreferredName":"Violetta"}, - {"Gender":"Female","FullName":"Chandana Shasthri","PersonID":964,"FaxNumber":"(803) 555-0101","DateOfBirth":"1997-01-26 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"chandana@example.com","PreferredName":"Chandana"}, - {"Gender":"Female","FullName":"Ana Florea","PersonID":965,"FaxNumber":"(210) 555-0101","DateOfBirth":"1996-04-08 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"ana@example.com","PreferredName":"Ana"}, - {"Gender":"Female","FullName":"Pinja Jantunen","PersonID":966,"FaxNumber":"(308) 555-0101","DateOfBirth":"1957-08-23 00:00:00","PhoneNumber":"(308) 555-0100","EmailAddress":"pinja@example.com","PreferredName":"Pinja"}, - {"Gender":"Female","FullName":"Pari Hosseini","PersonID":967,"FaxNumber":"(505) 555-0101","DateOfBirth":"1971-11-15 00:00:00","PhoneNumber":"(505) 555-0100","EmailAddress":"pari@example.com","PreferredName":"Pari"}, - {"Gender":"Female","FullName":"Isidora Morales","PersonID":968,"FaxNumber":"(406) 555-0101","DateOfBirth":"1990-02-20 00:00:00","PhoneNumber":"(406) 555-0100","EmailAddress":"isidora@example.com","PreferredName":"Isidora"}, - {"Gender":"Female","FullName":"Kertu Sokk","PersonID":969,"FaxNumber":"(212) 555-0101","DateOfBirth":"1973-08-26 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"kertu@example.com","PreferredName":"Kertu"}, - {"Gender":"Female","FullName":"Gayatri Gajula","PersonID":970,"FaxNumber":"(212) 555-0101","DateOfBirth":"1959-12-28 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"gayatri@example.com","PreferredName":"Gayatri"}, - {"Gender":"Female","FullName":"Victoria Lacusta","PersonID":971,"FaxNumber":"(212) 555-0101","DateOfBirth":"1987-12-04 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"victoria@example.com","PreferredName":"Victoria"}, - {"Gender":"Female","FullName":"Sumati Chatterjee","PersonID":972,"FaxNumber":"(231) 555-0101","DateOfBirth":"1989-04-12 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"sumati@example.com","PreferredName":"Sumati"}, - {"Gender":"Female","FullName":"Tai Bach","PersonID":973,"FaxNumber":"(219) 555-0101","DateOfBirth":"1959-02-25 00:00:00","PhoneNumber":"(219) 555-0100","EmailAddress":"tai@example.com","PreferredName":"Tai"}, - {"Gender":"Female","FullName":"Eva Schulteisz","PersonID":974,"FaxNumber":"(252) 555-0101","DateOfBirth":"1951-12-27 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"eva@example.com","PreferredName":"Eva"}, - {"Gender":"Female","FullName":"Can ozcan","PersonID":975,"FaxNumber":"(215) 555-0101","DateOfBirth":"1973-07-03 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"can@example.com","PreferredName":"Can"}, - {"Gender":"Female","FullName":"Richard Friar","PersonID":976,"FaxNumber":"(339) 555-0101","DateOfBirth":"1973-07-24 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"richard@example.com","PreferredName":"Richard"}, - {"Gender":"Female","FullName":"Matyas Sedlar","PersonID":977,"FaxNumber":"(270) 555-0101","DateOfBirth":"1979-02-16 00:00:00","PhoneNumber":"(270) 555-0100","EmailAddress":"matyas@example.com","PreferredName":"Matyas"}, - {"Gender":"Female","FullName":"Arijit Bhuiyan","PersonID":978,"FaxNumber":"(212) 555-0101","DateOfBirth":"1992-04-29 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"arijit@example.com","PreferredName":"Arijit"}, - {"Gender":"Female","FullName":"Vladimir Henzl","PersonID":979,"FaxNumber":"(907) 555-0101","DateOfBirth":"1972-08-25 00:00:00","PhoneNumber":"(907) 555-0100","EmailAddress":"vladimir@example.com","PreferredName":"Vladimir"}, - {"Gender":"Female","FullName":"Shantanu Huq","PersonID":980,"FaxNumber":"(252) 555-0101","DateOfBirth":"1985-10-23 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"shantanu@example.com","PreferredName":"Shantanu"}, - {"Gender":"Female","FullName":"Nada Jovanovic","PersonID":981,"FaxNumber":"(215) 555-0101","DateOfBirth":"1985-09-10 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"nada@example.com","PreferredName":"Nada"}, - {"Gender":"Female","FullName":"Nicolo Cattaneo","PersonID":982,"FaxNumber":"(212) 555-0101","DateOfBirth":"1972-05-15 00:00:00","PhoneNumber":"(212) 555-0100","EmailAddress":"nicolo@example.com","PreferredName":"Nicolo"}, - {"Gender":"Female","FullName":"Joel Carrillo","PersonID":983,"FaxNumber":"(405) 555-0101","DateOfBirth":"1974-04-12 00:00:00","PhoneNumber":"(405) 555-0100","EmailAddress":"joel@example.com","PreferredName":"Joel"}, - {"Gender":"Female","FullName":"Ivan Sepulveda","PersonID":984,"FaxNumber":"(218) 555-0101","DateOfBirth":"1987-04-10 00:00:00","PhoneNumber":"(218) 555-0100","EmailAddress":"ivan@example.com","PreferredName":"Ivan"}, - {"Gender":"Female","FullName":"Daevasree Samavedam","PersonID":985,"FaxNumber":"(201) 555-0101","DateOfBirth":"1962-08-14 00:00:00","PhoneNumber":"(201) 555-0100","EmailAddress":"daevasree@example.com","PreferredName":"Daevasree"}, - {"Gender":"Female","FullName":"Ludmila Smidova","PersonID":986,"FaxNumber":"(480) 555-0101","DateOfBirth":"1973-04-21 00:00:00","PhoneNumber":"(480) 555-0100","EmailAddress":"ludmila@example.com","PreferredName":"Ludmila"}, - {"Gender":"Female","FullName":"Manca Hrastovsek","PersonID":987,"FaxNumber":"(205) 555-0101","DateOfBirth":"1959-10-13 00:00:00","PhoneNumber":"(205) 555-0100","EmailAddress":"manca@example.com","PreferredName":"Manca"}, - {"Gender":"Female","FullName":"Anna Gyarmathi","PersonID":988,"FaxNumber":"(252) 555-0101","DateOfBirth":"1961-10-09 00:00:00","PhoneNumber":"(252) 555-0100","EmailAddress":"anna@example.com","PreferredName":"Anna"}, - {"Gender":"Female","FullName":"Ioana Florea","PersonID":989,"FaxNumber":"(339) 555-0101","DateOfBirth":"1975-11-03 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"ioana@example.com","PreferredName":"Ioana"}, - {"Gender":"Female","FullName":"Lorin Astrom","PersonID":990,"FaxNumber":"(210) 555-0101","DateOfBirth":"1978-10-28 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"lorin@example.com","PreferredName":"Lorin"}, - {"Gender":"Female","FullName":"Bishwa Chatterjee","PersonID":991,"FaxNumber":"(239) 555-0101","DateOfBirth":"1960-12-13 00:00:00","PhoneNumber":"(239) 555-0100","EmailAddress":"bishwa@example.com","PreferredName":"Bishwa"}, - {"Gender":"Female","FullName":"Chaayaadaevi Sonti","PersonID":992,"FaxNumber":"(217) 555-0101","DateOfBirth":"1954-05-29 00:00:00","PhoneNumber":"(217) 555-0100","EmailAddress":"chaayaadaevi@example.com","PreferredName":"Chaayaadaevi"}, - {"Gender":"Female","FullName":"Drazenka Jelic","PersonID":993,"FaxNumber":"(803) 555-0101","DateOfBirth":"1955-12-17 00:00:00","PhoneNumber":"(803) 555-0100","EmailAddress":"drazenka@example.com","PreferredName":"Drazenka"}, - {"Gender":"Female","FullName":"Ida Celma","PersonID":994,"FaxNumber":"(319) 555-0101","DateOfBirth":"1977-08-06 00:00:00","PhoneNumber":"(319) 555-0100","EmailAddress":"ida@example.com","PreferredName":"Ida"}, - {"Gender":"Female","FullName":"Hoc Tran","PersonID":995,"FaxNumber":"(339) 555-0101","DateOfBirth":"1965-02-13 00:00:00","PhoneNumber":"(339) 555-0100","EmailAddress":"hoc@example.com","PreferredName":"Hoc"}, - {"Gender":"Female","FullName":"David safranek","PersonID":996,"FaxNumber":"(215) 555-0101","DateOfBirth":"1992-02-21 00:00:00","PhoneNumber":"(215) 555-0100","EmailAddress":"david@example.com","PreferredName":"David"}, - {"Gender":"Female","FullName":"Svetlana Todorovic","PersonID":997,"FaxNumber":"(206) 555-0101","DateOfBirth":"1966-10-11 00:00:00","PhoneNumber":"(206) 555-0100","EmailAddress":"svetlana@example.com","PreferredName":"Svetlana"}, - {"Gender":"Female","FullName":"Richard Zahradnicek","PersonID":998,"FaxNumber":"(314) 555-0101","DateOfBirth":"1961-03-02 00:00:00","PhoneNumber":"(314) 555-0100","EmailAddress":"richard@example.com","PreferredName":"Richard"}, - {"Gender":"Female","FullName":"Seo-yun Paik","PersonID":999,"FaxNumber":"(210) 555-0101","DateOfBirth":"1968-07-18 00:00:00","PhoneNumber":"(210) 555-0100","EmailAddress":"seo-yun@example.com","PreferredName":"Seo-yun"}, - {"Gender":"Female","FullName":"Emily Whittle","PersonID":1000,"FaxNumber":"(231) 555-0101","DateOfBirth":"1962-11-25 00:00:00","PhoneNumber":"(231) 555-0100","EmailAddress":"emily@example.com","PreferredName":"Emily"} From e6555d406c8cb4d163e08f6d6447f5e58eeceb86 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 19 Apr 2019 01:13:04 -0700 Subject: [PATCH 031/101] Update master --- .ipynb_checkpoints/breast_cancer_dataset-checkpoint.ipynb | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .ipynb_checkpoints/breast_cancer_dataset-checkpoint.ipynb diff --git a/.ipynb_checkpoints/breast_cancer_dataset-checkpoint.ipynb b/.ipynb_checkpoints/breast_cancer_dataset-checkpoint.ipynb new file mode 100644 index 0000000000..2fd64429bf --- /dev/null +++ b/.ipynb_checkpoints/breast_cancer_dataset-checkpoint.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 2 +} From 74e4f7ca51abc96d9be1d98e43f89a54bc95cfd3 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Thu, 24 Oct 2019 21:32:16 +0000 Subject: [PATCH 032/101] disable attestation and hardcode shared key --- src/enclave/Enclave/Crypto.cpp | 3 +- .../edu/berkeley/cs/rise/opaque/RA.scala | 66 +++++++++---------- 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index 4082ee0e4d..761a8c05e0 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -14,7 +14,8 @@ * edu.berkeley.cs.rise.opaque.Utils.sharedKey. It is securely sent to the enclaves if attestation * succeeds. */ -sgx_aes_gcm_128bit_key_t shared_key = {0}; +//## sgx_aes_gcm_128bit_key_t shared_key = {0}; +unsigned char shared_key[SGX_AESGCM_KEY_SIZE] = {'O', 'p', 'a', 'q', 'u', 'e', ' ', 'd', 'e', 'v', 'e', 'l', ' ', 'k', 'e', 'y'}; //### std::unique_ptr ks; diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index 85c5666f80..f1ee0d5780 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -35,39 +35,39 @@ object RA extends Logging { Utils.retry(3) { sp.Init(Utils.sharedKey, intelCert) - val epids = rdd.mapPartitions { _ => - val (enclave, eid) = Utils.initEnclave() - val epid = enclave.RemoteAttestation0(eid) - Iterator(epid) - }.collect - - for (epid <- epids) { - sp.SPProcMsg0(epid) - } - - val msg1s = rdd.mapPartitionsWithIndex { (i, _) => - val (enclave, eid) = Utils.initEnclave() - val msg1 = enclave.RemoteAttestation1(eid) - Iterator((i, msg1)) - }.collect.toMap - - val msg2s = msg1s.mapValues(msg1 => sp.SPProcMsg1(msg1)).map(identity) - - val msg3s = rdd.mapPartitionsWithIndex { (i, _) => - val (enclave, eid) = Utils.initEnclave() - val msg3 = enclave.RemoteAttestation2(eid, msg2s(i)) - Iterator((i, msg3)) - }.collect.toMap - - val msg4s = msg3s.mapValues(msg3 => sp.SPProcMsg3(msg3)).map(identity) - - val statuses = rdd.mapPartitionsWithIndex { (i, _) => - val (enclave, eid) = Utils.initEnclave() - enclave.RemoteAttestation3(eid, msg4s(i)) - Iterator((i, true)) - }.collect.toMap - - assert(statuses.keySet == msg4s.keySet) + // val epids = rdd.mapPartitions { _ => + // val (enclave, eid) = Utils.initEnclave() + // val epid = enclave.RemoteAttestation0(eid) + // Iterator(epid) + // }.collect + + // for (epid <- epids) { + // sp.SPProcMsg0(epid) + // } + + // val msg1s = rdd.mapPartitionsWithIndex { (i, _) => + // val (enclave, eid) = Utils.initEnclave() + // val msg1 = enclave.RemoteAttestation1(eid) + // Iterator((i, msg1)) + // }.collect.toMap + + // val msg2s = msg1s.mapValues(msg1 => sp.SPProcMsg1(msg1)).map(identity) + + // val msg3s = rdd.mapPartitionsWithIndex { (i, _) => + // val (enclave, eid) = Utils.initEnclave() + // val msg3 = enclave.RemoteAttestation2(eid, msg2s(i)) + // Iterator((i, msg3)) + // }.collect.toMap + + // val msg4s = msg3s.mapValues(msg3 => sp.SPProcMsg3(msg3)).map(identity) + + // val statuses = rdd.mapPartitionsWithIndex { (i, _) => + // val (enclave, eid) = Utils.initEnclave() + // enclave.RemoteAttestation3(eid, msg4s(i)) + // Iterator((i, true)) + // }.collect.toMap + + // assert(statuses.keySet == msg4s.keySet) } } } From 3824a8d9ab21c9b1eca9396b7dee8c20a20c2151 Mon Sep 17 00:00:00 2001 From: vtikoo Date: Tue, 29 Oct 2019 17:04:53 +0000 Subject: [PATCH 033/101] hardcoded shared key working. Using SGXEnclave.RemoteAttestation3 to just init key schedule --- src/enclave/Enclave/Crypto.cpp | 26 ++++++++++--------- .../edu/berkeley/cs/rise/opaque/RA.scala | 10 +++---- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index 761a8c05e0..784b9f4279 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -24,23 +24,25 @@ void initKeySchedule() { } void set_shared_key(sgx_ra_context_t context, uint8_t *msg4_bytes, uint32_t msg4_size) { - if (msg4_size != sizeof(ra_msg4_t)) { + if (msg4_size <= 0) { throw std::runtime_error("Remote attestation step 4: Invalid message size."); } - const ra_msg4_t *msg4 = reinterpret_cast(msg4_bytes); - sgx_ec_key_128bit_t sk_key; + // const ra_msg4_t *msg4 = reinterpret_cast(msg4_bytes); + + // sgx_ec_key_128bit_t sk_key; (void)context; - sgx_check(sgx_ra_get_keys(context, SGX_RA_KEY_SK, &sk_key)); - - uint8_t aes_gcm_iv[SGX_AESGCM_IV_SIZE] = {0}; - sgx_check(sgx_rijndael128GCM_decrypt(&sk_key, - &msg4->shared_key_ciphertext[0], SGX_AESGCM_KEY_SIZE, - reinterpret_cast(shared_key), - &aes_gcm_iv[0], SGX_AESGCM_IV_SIZE, - nullptr, 0, - &msg4->shared_key_mac)); + (void)msg4_bytes; + // sgx_check(sgx_ra_get_keys(context, SGX_RA_KEY_SK, &sk_key)); + + // uint8_t aes_gcm_iv[SGX_AESGCM_IV_SIZE] = {0}; + // sgx_check(sgx_rijndael128GCM_decrypt(&sk_key, + // &msg4->shared_key_ciphertext[0], SGX_AESGCM_KEY_SIZE, + // reinterpret_cast(shared_key), + // &aes_gcm_iv[0], SGX_AESGCM_IV_SIZE, + // nullptr, 0, + // &msg4->shared_key_mac)); initKeySchedule(); } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index f1ee0d5780..290b28ddef 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -61,11 +61,11 @@ object RA extends Logging { // val msg4s = msg3s.mapValues(msg3 => sp.SPProcMsg3(msg3)).map(identity) - // val statuses = rdd.mapPartitionsWithIndex { (i, _) => - // val (enclave, eid) = Utils.initEnclave() - // enclave.RemoteAttestation3(eid, msg4s(i)) - // Iterator((i, true)) - // }.collect.toMap + val statuses = rdd.mapPartitionsWithIndex { (i, _) => + val (enclave, eid) = Utils.initEnclave() + enclave.RemoteAttestation3(eid, Utils.sharedKey) + Iterator((i, true)) + }.collect.toMap // assert(statuses.keySet == msg4s.keySet) } From 2127b87ce18d3e241ce0b221d688bfc91f002737 Mon Sep 17 00:00:00 2001 From: vtikoo Date: Tue, 29 Oct 2019 19:01:52 +0000 Subject: [PATCH 034/101] remove code for unused attestation steps --- src/enclave/App/App.cpp | 59 ------------------- src/enclave/App/SGXEnclave.h | 11 +--- .../edu/berkeley/cs/rise/opaque/RA.scala | 28 +-------- .../cs/rise/opaque/execution/SGXEnclave.scala | 3 - 4 files changed, 2 insertions(+), 99 deletions(-) diff --git a/src/enclave/App/App.cpp b/src/enclave/App/App.cpp index a3a1d67755..4be0a33e5e 100644 --- a/src/enclave/App/App.cpp +++ b/src/enclave/App/App.cpp @@ -290,65 +290,6 @@ JNIEXPORT jlong JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_St return eid; } -JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation0( - JNIEnv *env, jobject obj, jlong eid) { - (void)obj; - - sgx_status_t status; - sgx_check_and_time("Initialize Remote Attestation", - ecall_enclave_init_ra(eid, &status, &context)); - sgx_check("Initialize Remote Attestation", status); - - uint32_t extended_epid_group_id = 0; - sgx_check_and_time("Remote Attestation Step 0: Get Extended EPID Group ID", - sgx_get_extended_epid_group_id(&extended_epid_group_id)); - jbyteArray ret = env->NewByteArray(sizeof(uint32_t)); - env->SetByteArrayRegion(ret, 0, sizeof(uint32_t), (jbyte *) &extended_epid_group_id); - return ret; -} - -JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation1( - JNIEnv *env, jobject obj, jlong eid) { - (void)obj; - - sgx_ra_msg1_t msg1; - sgx_check_and_time("Remote Attestation Step 1", - sgx_ra_get_msg1(context, eid, sgx_ra_get_ga, &msg1)); - jbyteArray array_ret = env->NewByteArray(sizeof(sgx_ra_msg1_t)); - env->SetByteArrayRegion(array_ret, 0, sizeof(sgx_ra_msg1_t), reinterpret_cast(&msg1)); - return array_ret; -} - -JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation2( - JNIEnv *env, jobject obj, jlong eid, jbyteArray msg2_input) { - (void)obj; - - uint32_t msg2_size = static_cast(env->GetArrayLength(msg2_input)); - jboolean if_copy = false; - jbyte *msg2_bytes = env->GetByteArrayElements(msg2_input, &if_copy); - sgx_ra_msg2_t *msg2 = reinterpret_cast(msg2_bytes); - - uint32_t msg3_size = 0; - sgx_ra_msg3_t *msg3 = nullptr; - - sgx_check_and_time("Remote Attestation Step 2", - sgx_ra_proc_msg2(context, - eid, - sgx_ra_proc_msg2_trusted, - sgx_ra_get_msg3_trusted, - msg2, - msg2_size, - &msg3, - &msg3_size)); - - jbyteArray ret = env->NewByteArray(msg3_size); - env->SetByteArrayRegion(ret, 0, msg3_size, reinterpret_cast(msg3)); - free(msg3); - - env->ReleaseByteArrayElements(msg2_input, msg2_bytes, 0); - - return ret; -} JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation3( JNIEnv *env, jobject obj, jlong eid, jbyteArray msg4_input) { diff --git a/src/enclave/App/SGXEnclave.h b/src/enclave/App/SGXEnclave.h index c90b224cd1..3893be9978 100644 --- a/src/enclave/App/SGXEnclave.h +++ b/src/enclave/App/SGXEnclave.h @@ -52,16 +52,7 @@ extern "C" { JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep2( JNIEnv *, jobject, jlong, jbyteArray, jbyteArray, jbyteArray, jbyteArray, jbyteArray); - - JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation0( - JNIEnv *, jobject, jlong); - - JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation1( - JNIEnv *, jobject, jlong); - - JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation2( - JNIEnv *, jobject, jlong, jbyteArray); - + JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation3( JNIEnv *, jobject, jlong, jbyteArray); diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index 290b28ddef..5ea59f03fa 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -35,39 +35,13 @@ object RA extends Logging { Utils.retry(3) { sp.Init(Utils.sharedKey, intelCert) - // val epids = rdd.mapPartitions { _ => - // val (enclave, eid) = Utils.initEnclave() - // val epid = enclave.RemoteAttestation0(eid) - // Iterator(epid) - // }.collect - - // for (epid <- epids) { - // sp.SPProcMsg0(epid) - // } - - // val msg1s = rdd.mapPartitionsWithIndex { (i, _) => - // val (enclave, eid) = Utils.initEnclave() - // val msg1 = enclave.RemoteAttestation1(eid) - // Iterator((i, msg1)) - // }.collect.toMap - - // val msg2s = msg1s.mapValues(msg1 => sp.SPProcMsg1(msg1)).map(identity) - - // val msg3s = rdd.mapPartitionsWithIndex { (i, _) => - // val (enclave, eid) = Utils.initEnclave() - // val msg3 = enclave.RemoteAttestation2(eid, msg2s(i)) - // Iterator((i, msg3)) - // }.collect.toMap - - // val msg4s = msg3s.mapValues(msg3 => sp.SPProcMsg3(msg3)).map(identity) - val statuses = rdd.mapPartitionsWithIndex { (i, _) => val (enclave, eid) = Utils.initEnclave() enclave.RemoteAttestation3(eid, Utils.sharedKey) Iterator((i, true)) }.collect.toMap - // assert(statuses.keySet == msg4s.keySet) + // TODO: some sort of assert that attestation passed } } } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala index f5df7312e5..33f47d6981 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala @@ -51,8 +51,5 @@ class SGXEnclave extends java.io.Serializable { prevPartitionLastGroup: Array[Byte], prevPartitionLastRow: Array[Byte]): Array[Byte] // Remote attestation, enclave side - @native def RemoteAttestation0(eid: Long): Array[Byte] - @native def RemoteAttestation1(eid: Long): Array[Byte] - @native def RemoteAttestation2(eid: Long, msg2Input: Array[Byte]): Array[Byte] @native def RemoteAttestation3(eid: Long, attResultInput: Array[Byte]): Unit } From b6df90793b872d7d2ceda7ed86cdb3ed4eb34bb3 Mon Sep 17 00:00:00 2001 From: vtikoo Date: Mon, 11 Nov 2019 19:58:51 +0000 Subject: [PATCH 035/101] remove sgx calls --- setup-script.sh | 14 + src/enclave/App/App.cpp | 478 +++++++++++++----- src/enclave/App/CMakeLists.txt | 38 +- src/enclave/CMakeLists.txt | 19 +- src/enclave/Common/common.h | 16 +- src/enclave/Enclave/CMakeLists.txt | 79 ++- src/enclave/Enclave/Crypto.cpp | 29 +- src/enclave/Enclave/Crypto.h | 13 +- src/enclave/Enclave/Enclave.conf | 21 + src/enclave/Enclave/Enclave.cpp | 84 ++- src/enclave/Enclave/Enclave.edl | 10 +- src/enclave/Enclave/Enclave_private.pem | 39 ++ src/enclave/Enclave/Flatbuffers.cpp | 4 +- src/enclave/Enclave/Sort.cpp | 6 +- src/enclave/Enclave/key.h | 9 +- src/enclave/Enclave/util.cpp | 28 +- src/enclave/Enclave/util.h | 4 +- .../ServiceProvider/ServiceProvider.cpp | 284 +---------- src/enclave/ServiceProvider/ServiceProvider.h | 70 +-- .../ServiceProvider/ServiceProviderJNI.cpp | 104 ++-- src/enclave/ServiceProvider/crypto.cpp | 2 +- src/enclave/ServiceProvider/crypto.h | 2 +- src/enclave/ServiceProvider/ecp.h | 2 +- src/enclave/ServiceProvider/sp_crypto.h | 31 +- 24 files changed, 715 insertions(+), 671 deletions(-) create mode 100755 setup-script.sh create mode 100644 src/enclave/Enclave/Enclave.conf create mode 100644 src/enclave/Enclave/Enclave_private.pem diff --git a/setup-script.sh b/setup-script.sh new file mode 100755 index 0000000000..7636357899 --- /dev/null +++ b/setup-script.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +OPAQUE_HOME=/home/vitikoo/my_code/opaque +source ~/sgxsdk/environment +# create keypair on master for remote attestation +# DO WE NEED THIS WITH OE SDK?? +# cd ${OPAQUE_HOME} +#openssl ecparam -name prime256v1 -genkey -noout -out private_key.pem +export SPARKSGX_DATA_DIR=${OPAQUE_HOME}/data +export PRIVATE_KEY_PATH=${OPAQUE_HOME}/private_key.pem +export SGX_MODE=HW + +export SPARK_HOME=/home/vitikoo/spark-2.4.4-bin-hadoop2.7/ + +export OE_SDK_PATH=/opt/openenclave \ No newline at end of file diff --git a/src/enclave/App/App.cpp b/src/enclave/App/App.cpp index 4be0a33e5e..7169c37577 100644 --- a/src/enclave/App/App.cpp +++ b/src/enclave/App/App.cpp @@ -42,10 +42,13 @@ #include // gettimeofday #include -#include /* sgx_enclave_id_t */ -#include /* sgx_status_t */ -#include -#include +//#include /* sgx_enclave_id_t */ +//#include /* sgx_status_t */ +//#include +//#include +#include "common.h" + +#include #include "Enclave_u.h" @@ -65,107 +68,303 @@ # define ENCLAVE_FILENAME "enclave.signed.so" #endif -static sgx_ra_context_t context = INT_MAX; JavaVM* jvm; -typedef struct _sgx_errlist_t { - sgx_status_t err; +typedef struct _oe_errlist_t { + oe_result_t err; const char *msg; const char *sug; /* Suggestion */ -} sgx_errlist_t; - -/* Error code returned by sgx_create_enclave */ -static sgx_errlist_t sgx_errlist[] = { - { - SGX_ERROR_UNEXPECTED, - "Unexpected error occurred.", - NULL - }, - { - SGX_ERROR_INVALID_PARAMETER, - "Invalid parameter.", - NULL - }, - { - SGX_ERROR_OUT_OF_MEMORY, - "Out of memory.", - NULL - }, - { - SGX_ERROR_ENCLAVE_LOST, - "Power transition occurred.", - "Please refer to the sample \"PowerTransition\" for details." - }, - { - SGX_ERROR_INVALID_ENCLAVE, - "Invalid enclave image.", - NULL - }, - { - SGX_ERROR_INVALID_ENCLAVE_ID, - "Invalid enclave identification.", - NULL - }, - { - SGX_ERROR_INVALID_SIGNATURE, - "Invalid enclave signature.", - NULL - }, - { - SGX_ERROR_OUT_OF_EPC, - "Out of EPC memory.", - NULL - }, - { - SGX_ERROR_NO_DEVICE, - "Invalid SGX device.", - "Please make sure SGX module is enabled in the BIOS, and install SGX driver afterwards." - }, - { - SGX_ERROR_MEMORY_MAP_CONFLICT, - "Memory map conflicted.", - NULL - }, - { - SGX_ERROR_INVALID_METADATA, - "Invalid enclave metadata.", - NULL - }, - { - SGX_ERROR_DEVICE_BUSY, - "SGX device was busy.", - NULL - }, - { - SGX_ERROR_INVALID_VERSION, - "Enclave version was invalid.", - NULL - }, - { - SGX_ERROR_INVALID_ATTRIBUTE, - "Enclave was not authorized.", - NULL - }, - { - SGX_ERROR_ENCLAVE_FILE_ACCESS, - "Can't open enclave file.", - NULL - }, +} oe_errlist_t; + +/* Error codes defined by oe_result_t */ +static oe_errlist_t oe_errlist[] = { + { + OE_FAILURE, + "The function failed (without a more specific error code)", + NULL + }, + { + OE_BUFFER_TOO_SMALL, + "One or more output buffer function parameters is too small.", + NULL + }, + { + OE_INVALID_PARAMETER, + "The function failed (without a more specific error code)", + NULL + }, + { + OE_REENTRANT_ECALL, + "One or more output buffer function parameters is too small.", + NULL + }, + { + OE_OUT_OF_MEMORY, + "The function is out of memory. This usually occurs when **malloc** or a related function returns null.", + NULL + }, + { + OE_OUT_OF_THREADS, + "The function is unable to bind the current host thread to an enclave thread. This occurs when the host performs an **ECALL** while all enclave threads are in use.", + NULL + }, + { + OE_UNEXPECTED, + "The function encountered an unexpected failure.", + NULL + }, + { + OE_VERIFY_FAILED, + "A cryptographic verification failed. Examples include: \n- enclave quote verification\n-public key signature verification\n- certificate chain verification", + NULL + }, + { + OE_NOT_FOUND, + "The function failed to find a resource. Examples of resources include files, directories, and functions (ECALL/OCALL), container elements.", + NULL + }, + { + OE_INTEGER_OVERFLOW, + "The function encountered an overflow in an integer operation, which can occur in arithmetic operations and cast operations.", + NULL + }, + { + OE_PUBLIC_KEY_NOT_FOUND, + "The certificate does not contain a public key.", + NULL + }, + { + OE_OUT_OF_BOUNDS, + "An integer index is outside the expected range. For example, an array index is greater than or equal to the array size.", + NULL + }, + { + OE_OVERLAPPED_COPY, + "The function prevented an attempt to perform an overlapped copy, where the source and destination buffers are overlapping.", + NULL + }, + { + OE_CONSTRAINT_FAILED, + "The function detected a constraint failure. A constraint restricts the value of a field, parameter, or variable. For example, the value of **day_of_the_week** must be between 1 and 7 inclusive.", + NULL + }, + { + OE_IOCTL_FAILED, + "An **IOCTL** operation failed. Open Enclave uses **IOCTL** operations to communicate with the Intel SGX driver.", + NULL + }, + { + OE_UNSUPPORTED, + "The given operation is unsupported, usually by a particular platform or environment.", + NULL + }, + { + OE_READ_FAILED, + "The function failed to read data from a device (such as a socket, or file).", + NULL + }, + { + OE_SERVICE_UNAVAILABLE, + "A software service is unavailable (such as the AESM service).", + NULL + }, + { + OE_ENCLAVE_ABORTING, + "The operation cannot be completed because the enclave is aborting.", + NULL + }, + { + OE_ENCLAVE_ABORTED, + "The operation cannot be completed because the enclave has already aborted.", + NULL + }, + { + OE_PLATFORM_ERROR, + "The underlying platform or hardware returned an error. For example, an SGX user-mode instruction failed.", + NULL + }, + { + OE_INVALID_CPUSVN, + "The given **CPUSVN** value is invalid. An SGX user-mode instruction may return this error.", + NULL + }, + { + OE_INVALID_ISVSVN, + "The given **ISVSNV** value is invalid. An SGX user-mode instruction may return this error.", + NULL + }, + { + OE_INVALID_KEYNAME, + "The given **key name** is invalid. An SGX user-mode instruction may return this error.", + NULL + }, + { + OE_DEBUG_DOWNGRADE, + "Attempted to create a debug enclave with an enclave image that does not allow it.", + NULL + }, + { + OE_REPORT_PARSE_ERROR, + "Failed to parse an enclave report.", + NULL + }, + { + OE_MISSING_CERTIFICATE_CHAIN, + "The certificate chain is not available or missing.", + NULL + }, + { + OE_BUSY, + "An operation cannot be performed beause the resource is busy. For example, a non-recursive mutex cannot be locked because it is already locked.", + NULL + }, + { + OE_NOT_OWNER, + "An operation cannot be performed because the requestor is not the owner of the resource. For example, a thread cannot lock a mutex because it is not the thread that acquired the mutex.", + NULL + }, + { + OE_INVALID_SGX_CERTIFICATE_EXTENSIONS, + "The certificate does not contain the expected SGX extensions.", + NULL + }, + { + OE_MEMORY_LEAK, + "A memory leak was detected during enclave termination.", + NULL + }, + { + OE_BAD_ALIGNMENT, + "The data is improperly aligned for the given operation. This may occur when an output buffer parameter is not suitably aligned for the data it will receive.", + NULL + }, + { + OE_JSON_INFO_PARSE_ERROR, + "Failed to parse the trusted computing base (TCB) revocation data or the QE Identity data for the enclave.", + NULL + }, + { + OE_TCB_LEVEL_INVALID, + "The level of the trusted computing base (TCB) is not up to date for report verification.", + NULL + }, + { + OE_QUOTE_PROVIDER_LOAD_ERROR, + "Failed to load the quote provider library used for quote generation and attestation.", + NULL + }, + { + OE_QUOTE_PROVIDER_CALL_ERROR, + "A call to the quote provider failed.", + NULL + }, + { + OE_INVALID_REVOCATION_INFO, + "The certificate revocation data for attesting the trusted computing base (TCB) is invalid for this enclave.", + NULL + }, + { + OE_INVALID_UTC_DATE_TIME, + "The given UTC date-time string or structure is invalid. This occurs when (1) an element is out of range (year, month, day, hours, minutes, seconds), or (2) the UTC date-time string is malformed.", + NULL + }, + { + OE_INVALID_QE_IDENTITY_INFO, + "The QE identity data is invalid.", + NULL + }, + { + OE_UNSUPPORTED_ENCLAVE_IMAGE, + "The enclave image contains unsupported constructs.", + NULL + } + //, + // { + // OE_VERIFY_CRL_EXPIRED, + // "The CRL for a certificate has expired.", + // NULL + // }, + // { + // OE_VERIFY_CRL_MISSING, + // "The CRL for a certificate could not be found.", + // NULL + // }, + // { + // OE_VERIFY_REVOKED, + // "The certificate or signature has been revoked.", + // NULL + // }, + // { + // OE_VERIFY_FAILED_TO_FIND_VALIDITY_PERIOD, + // "Could not find a valid validity period.", + // NULL + // }, + // { + // OE_CRYPTO_ERROR, + // "An underlying crypto provider returned an error.", + // NULL + // }, + // { + // OE_INCORRECT_REPORT_SIZE, + // "OE report size does not match the expected size.", + // NULL + // }, + // { + // OE_QUOTE_VERIFICATION_ERROR, + // "Quote verification error.", + // NULL + // }, + // { + // OE_QUOTE_ENCLAVE_IDENTITY_VERIFICATION_FAILED, + // "Quote enclave identity verification failed.", + // NULL + // }, + // { + // OE_QUOTE_ENCLAVE_IDENTITY_UNIQUEID_MISMATCH, + // "Unique id of the quoting enclave does not match expected value.", + // NULL + // }, + // { + // QE_QUOTE_ENCLAVE_IDENTITY_PRODUCTID_MISMATCH, + // "Product id of the quoting enclave does not match expected value.", + // NULL + // }, + // { + // OE_VERIFY_FAILED_AES_CMAC_MISMATCH, + // "AES CMAC of the report does not match the expected value.", + // NULL + // } + //, + // { + // OE_CONTEXT_SWITCHLESS_OCALL_MISSED, + // "Failed to post a switchless call to host workers", + // NULL + // }, + // { + // OE_THREAD_CREATE_ERROR, + // "Thread creation failed", + // NULL + // }, + // { + // OE_THREAD_JOIN_ERROR, + // "Thread join failed.", + // NULL + // } }; -/* Check error conditions for loading enclave */ -std::string sgx_error_message(sgx_status_t ret) { +/* Check error conditions for enclave operations */ +std::string oe_error_message(oe_result_t ret) { size_t idx = 0; - size_t ttl = sizeof(sgx_errlist) / sizeof(sgx_errlist[0]); + size_t ttl = sizeof(oe_errlist) / sizeof(oe_errlist[0]); for (idx = 0; idx < ttl; idx++) { - if (ret == sgx_errlist[idx].err) { + if (ret == oe_errlist[idx].err) { std::string msg; msg.append("Error: "); - msg.append(sgx_errlist[idx].msg); - if (NULL != sgx_errlist[idx].sug) { + msg.append(oe_errlist[idx].msg); + if (NULL != oe_errlist[idx].sug) { msg.append(" Info: "); - msg.append(sgx_errlist[idx].sug); + msg.append(oe_errlist[idx].sug); } return msg; } @@ -178,17 +377,17 @@ std::string sgx_error_message(sgx_status_t ret) { std::string msg; msg.append("Error code is "); msg.append(buf); - msg.append(". Please refer to the \"Intel SGX SDK Developer Reference\" for " + msg.append(". Please refer to the \"OpenEnclave Documentation\" and/or \"Intel SGX SDK Developer Reference\" for " "more details."); return msg; } -void sgx_check(const char *description, sgx_status_t ret) { - if (ret != SGX_SUCCESS) { +void oe_check(const char *description, oe_result_t ret) { + if (ret != OE_OK) { std::string msg; msg.append(description); msg.append(" failed. "); - msg.append(sgx_error_message(ret)); + msg.append(oe_error_message(ret)); ocall_throw(msg.c_str()); } } @@ -214,23 +413,23 @@ class scoped_timer { }; #if defined(PERF) || defined(DEBUG) -#define sgx_check_and_time(description, op) do { \ +#define oe_check_and_time(description, op) do { \ printf("%s running...\n", description); \ uint64_t t_ = 0; \ - sgx_status_t ret_; \ + oe_result_t ret_; \ { \ scoped_timer timer_(&t_); \ ret_ = op; \ } \ double t_ms_ = ((double) t_) / 1000; \ - if (ret_ != SGX_SUCCESS) { \ - sgx_check(description, ret_); \ + if (ret_ != OE_OK) { \ + oe_check(description, ret_); \ } else { \ printf("%s done (%f ms).\n", description, t_ms_); \ } \ } while (0) #else -#define sgx_check_and_time(description, op) sgx_check(description, op) +#define oe_check_and_time(description, op) oe_check(description, op) #endif /* OCall functions */ @@ -277,17 +476,24 @@ JNIEXPORT jlong JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_St env->GetJavaVM(&jvm); - sgx_enclave_id_t eid; - sgx_launch_token_t token = {0}; - int updated = 0; + oe_enclave_t* enclave = nullptr; + //int updated = 0; + + uint32_t flags = 0; + const char* sgx_mode_env = std::getenv("SGX_MODE"); + if (strcmp(sgx_mode_env, "HW") != 0){ + flags |= OE_ENCLAVE_FLAG_SIMULATE; + } const char *library_path_str = env->GetStringUTFChars(library_path, nullptr); - sgx_check_and_time("StartEnclave", - sgx_create_enclave( - library_path_str, SGX_DEBUG_FLAG, &token, &updated, &eid, nullptr)); + oe_check_and_time("StartEnclave", + oe_create_Enclave_enclave( + library_path_str, OE_ENCLAVE_TYPE_AUTO, flags, nullptr, 0, &enclave + ) + ); env->ReleaseStringUTFChars(library_path, library_path_str); - - return eid; + long int enclavePtr = (long int)enclave; + return enclavePtr; } @@ -299,15 +505,13 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Rem jbyte *msg4_bytes = env->GetByteArrayElements(msg4_input, &if_copy); uint32_t msg4_size = static_cast(env->GetArrayLength(msg4_input)); - sgx_check_and_time("Remote Attestation Step 3", - ecall_ra_proc_msg4(eid, - context, + oe_check_and_time("Remote Attestation Step 3", + ecall_ra_proc_msg4((oe_enclave_t*)eid, reinterpret_cast(msg4_bytes), msg4_size)); env->ReleaseByteArrayElements(msg4_input, msg4_bytes, 0); - ecall_enclave_ra_close(eid, context); } JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_StopEnclave( @@ -315,7 +519,7 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Sto (void)env; (void)obj; - sgx_check("StopEnclave", sgx_destroy_enclave(eid)); + oe_check("StopEnclave", oe_terminate_enclave((oe_enclave_t*)eid)); } JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Project( @@ -336,9 +540,9 @@ JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEncla if (input_rows_ptr == nullptr) { ocall_throw("Project: JNI failed to get input byte array."); } else { - sgx_check_and_time("Project", + oe_check_and_time("Project", ecall_project( - eid, + (oe_enclave_t*)eid, project_list_ptr, project_list_length, input_rows_ptr, input_rows_length, &output_rows, &output_rows_length)); @@ -372,9 +576,9 @@ JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEncla if (input_rows_ptr == nullptr) { ocall_throw("Filter: JNI failed to get input byte array."); } else { - sgx_check_and_time("Filter", + oe_check_and_time("Filter", ecall_filter( - eid, + (oe_enclave_t*)eid, condition_ptr, condition_length, input_rows_ptr, input_rows_length, &output_rows, &output_rows_length)); @@ -407,8 +611,8 @@ JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEncla clength = plength + SGX_AESGCM_IV_SIZE + SGX_AESGCM_MAC_SIZE; ciphertext_copy = new uint8_t[clength]; - sgx_check("Encrypt", - ecall_encrypt(eid, plaintext_ptr, plength, ciphertext_copy, (uint32_t) clength)); + oe_check("Encrypt", + ecall_encrypt((oe_enclave_t*)eid, plaintext_ptr, plength, ciphertext_copy, (uint32_t) clength)); } jbyteArray ciphertext = env->NewByteArray(clength); @@ -436,9 +640,9 @@ JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEncla if (input_rows_ptr == nullptr) { ocall_throw("Sample: JNI failed to get input byte array."); } else { - sgx_check_and_time("Sample", + oe_check_and_time("Sample", ecall_sample( - eid, + (oe_enclave_t*)eid, input_rows_ptr, input_rows_length, &output_rows, &output_rows_length)); } @@ -473,9 +677,9 @@ JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEncla if (input_rows_ptr == nullptr) { ocall_throw("FindRangeBounds: JNI failed to get input byte array."); } else { - sgx_check_and_time("Find Range Bounds", + oe_check_and_time("Find Range Bounds", ecall_find_range_bounds( - eid, + (oe_enclave_t*)eid, sort_order_ptr, sort_order_length, num_partitions, input_rows_ptr, input_rows_length, @@ -518,9 +722,9 @@ Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_PartitionForSort( if (input_rows_ptr == nullptr) { ocall_throw("PartitionForSort: JNI failed to get input byte array."); } else { - sgx_check_and_time("Partition For Sort", + oe_check_and_time("Partition For Sort", ecall_partition_for_sort( - eid, + (oe_enclave_t*)eid, sort_order_ptr, sort_order_length, num_partitions, input_rows_ptr, input_rows_length, @@ -566,8 +770,8 @@ JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEncla if (input_rows_ptr == nullptr) { ocall_throw("ExternalSort: JNI failed to get input byte array."); } else { - sgx_check_and_time("External Non-Oblivious Sort", - ecall_external_sort(eid, + oe_check_and_time("External Non-Oblivious Sort", + ecall_external_sort((oe_enclave_t*)eid, sort_order_ptr, sort_order_length, input_rows_ptr, input_rows_length, &output_rows, &output_rows_length)); @@ -602,9 +806,9 @@ Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_ScanCollectLastPrimary( if (input_rows_ptr == nullptr) { ocall_throw("ScanCollectLastPrimary: JNI failed to get input byte array."); } else { - sgx_check_and_time("Scan Collect Last Primary", + oe_check_and_time("Scan Collect Last Primary", ecall_scan_collect_last_primary( - eid, + (oe_enclave_t*)eid, join_expr_ptr, join_expr_length, input_rows_ptr, input_rows_length, &output_rows, &output_rows_length)); @@ -643,9 +847,9 @@ Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousSortMergeJoin( if (input_rows_ptr == nullptr) { ocall_throw("NonObliviousSortMergeJoin: JNI failed to get input byte array."); } else { - sgx_check_and_time("Non-Oblivious Sort-Merge Join", + oe_check_and_time("Non-Oblivious Sort-Merge Join", ecall_non_oblivious_sort_merge_join( - eid, + (oe_enclave_t*)eid, join_expr_ptr, join_expr_length, input_rows_ptr, input_rows_length, join_row_ptr, join_row_length, @@ -688,9 +892,9 @@ Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep1 if (input_rows_ptr == nullptr) { ocall_throw("NonObliviousAggregateStep1: JNI failed to get input byte array."); } else { - sgx_check_and_time("Non-Oblivious Aggregate Step 1", + oe_check_and_time("Non-Oblivious Aggregate Step 1", ecall_non_oblivious_aggregate_step1( - eid, + (oe_enclave_t*)eid, agg_op_ptr, agg_op_length, input_rows_ptr, input_rows_length, &first_row, &first_row_length, @@ -759,9 +963,9 @@ Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep2 if (input_rows_ptr == nullptr) { ocall_throw("NonObliviousAggregateStep2: JNI failed to get input byte array."); } else { - sgx_check_and_time("Non-Oblivious Aggregate Step 2", + oe_check_and_time("Non-Oblivious Aggregate Step 2", ecall_non_oblivious_aggregate_step2( - eid, + (oe_enclave_t*)eid, agg_op_ptr, agg_op_length, input_rows_ptr, input_rows_length, next_partition_first_row_ptr, next_partition_first_row_length, diff --git a/src/enclave/App/CMakeLists.txt b/src/enclave/App/CMakeLists.txt index 52bd69cca7..577c54be4a 100644 --- a/src/enclave/App/CMakeLists.txt +++ b/src/enclave/App/CMakeLists.txt @@ -7,28 +7,34 @@ set(SOURCES ${CMAKE_CURRENT_BINARY_DIR}/Enclave_u.c) add_custom_command( - COMMAND ${SGX_EDGER8R} --untrusted ${CMAKE_SOURCE_DIR}/Enclave/Enclave.edl --search-path ${CMAKE_SOURCE_DIR}/Enclave --search-path "$ENV{SGX_SDK}/include" + COMMAND ${OE_EDGER8R} --untrusted ${CMAKE_SOURCE_DIR}/Enclave/Enclave.edl --search-path ${CMAKE_SOURCE_DIR}/Enclave DEPENDS ${CMAKE_SOURCE_DIR}/Enclave/Enclave.edl - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Enclave_u.c) + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Enclave_u.h ${CMAKE_CURRENT_BINARY_DIR}/Enclave_u.c ${CMAKE_CURRENT_BINARY_DIR}/Enclave_args.h) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wno-attributes") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}") add_library(enclave_jni SHARED ${SOURCES}) -find_library(UKEY_EXCHANGE_LIB sgx_ukey_exchange) -find_library(URTS_LIB sgx_urts) -find_library(URTS_SIM_LIB sgx_urts_sim) -find_library(UAE_SERVICE_LIB sgx_uae_service) -find_library(UAE_SERVICE_SIM_LIB sgx_uae_service_sim) - -target_link_libraries(enclave_jni ${UKEY_EXCHANGE_LIB} pthread) -if(NOT "$ENV{SGX_MODE}" STREQUAL "HW") - message(STATUS "Building for simulated SGX") - target_link_libraries(enclave_jni ${URTS_SIM_LIB} ${UAE_SERVICE_SIM_LIB}) -else() - message(STATUS "Building for SGX hardware") - target_link_libraries(enclave_jni ${URTS_LIB} ${UAE_SERVICE_LIB}) -endif() +# find_library(UKEY_EXCHANGE_LIB sgx_ukey_exchange) +# find_library(URTS_LIB sgx_urts) +# find_library(URTS_SIM_LIB sgx_urts_sim) +# find_library(UAE_SERVICE_LIB sgx_uae_service) +# find_library(UAE_SERVICE_SIM_LIB sgx_uae_service_sim) + +# target_link_libraries(enclave_jni ${UKEY_EXCHANGE_LIB} pthread) +# if(NOT "$ENV{SGX_MODE}" STREQUAL "HW") +# message(STATUS "Building for simulated SGX") +# target_link_libraries(enclave_jni ${URTS_SIM_LIB} ${UAE_SERVICE_SIM_LIB}) +# else() +# message(STATUS "Building for SGX hardware") +# target_link_libraries(enclave_jni ${URTS_LIB} ${UAE_SERVICE_LIB}) +# endif() + +target_include_directories(enclave_jni PRIVATE + # Needed for the generated file helloworld_u.h + ${CMAKE_CURRENT_BINARY_DIR}) + +target_link_libraries(enclave_jni openenclave::oehostapp) install(TARGETS enclave_jni DESTINATION lib) diff --git a/src/enclave/CMakeLists.txt b/src/enclave/CMakeLists.txt index 17a2d464aa..19f2737b19 100644 --- a/src/enclave/CMakeLists.txt +++ b/src/enclave/CMakeLists.txt @@ -7,10 +7,12 @@ enable_language(ASM) option(FLATBUFFERS_LIB_DIR "Location of Flatbuffers library headers.") option(FLATBUFFERS_GEN_CPP_DIR "Location of Flatbuffers generated C++ files.") -if(NOT DEFINED ENV{SGX_SDK}) - message(FATAL_ERROR "$SGX_SDK environment variable must be set.") +if(NOT DEFINED ENV{OE_SDK_PATH}) + message(FATAL_ERROR "$OE_SDK_PATH environment variable must be set.") endif() +find_package(OpenEnclave CONFIG REQUIRED) + include_directories(App) include_directories(${CMAKE_BINARY_DIR}/App) include_directories(Include) @@ -20,22 +22,19 @@ include_directories(${CMAKE_BINARY_DIR}/Enclave) include_directories(ServiceProvider) include_directories(${FLATBUFFERS_LIB_DIR}) include_directories(${FLATBUFFERS_GEN_CPP_DIR}) -include_directories("$ENV{SGX_SDK}/include") +include_directories("/opt/openenclave/include") if(CMAKE_SIZEOF_VOID_P EQUAL 4) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32") - set(CMAKE_LIBRARY_PATH "${CMAKE_LIBRARY_PATH} $ENV{SGX_SDK}/lib") - set(SGX_ENCLAVE_SIGNER "$ENV{SGX_SDK}/bin/x86/sgx_sign") - set(SGX_EDGER8R "$ENV{SGX_SDK}/bin/x86/sgx_edger8r") else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64") - set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "$ENV{SGX_SDK}/lib64") - set(SGX_ENCLAVE_SIGNER "$ENV{SGX_SDK}/bin/x64/sgx_sign") - set(SGX_EDGER8R "$ENV{SGX_SDK}/bin/x64/sgx_edger8r") endif() -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -Werror") +set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "$ENV{OE_SDK_PATH}/lib") # not clear about this. Ask someone to verify +set(OE_ENCLAVE_SIGNER "$ENV{OE_SDK_PATH}/bin/oesign") +set(OE_EDGER8R "$ENV{OE_SDK_PATH}/bin/oeedger8r") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -Werror") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -DDEBUG -UNDEBUG -UEDEBUG") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -DNDEBUG -DEDEBUG -UDEBUG") set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -O2 -DNDEBUG -DEDEBUG -UDEBUG -DPERF") diff --git a/src/enclave/Common/common.h b/src/enclave/Common/common.h index 60a01d5c45..fe332d0563 100644 --- a/src/enclave/Common/common.h +++ b/src/enclave/Common/common.h @@ -2,7 +2,7 @@ #include #include #include -#include +//#include #include "define.h" @@ -67,9 +67,15 @@ inline void PRINT_BYTE_ARRAY(void *file, void *mem, uint32_t len) printf("\n}\n"); } -typedef struct ra_msg4_t { - uint8_t shared_key_mac[SGX_AESGCM_MAC_SIZE]; - uint8_t shared_key_ciphertext[SGX_AESGCM_KEY_SIZE]; -} ra_msg4_t; +// typedef struct ra_msg4_t { +// uint8_t shared_key_mac[SGX_AESGCM_MAC_SIZE]; +// uint8_t shared_key_ciphertext[SGX_AESGCM_KEY_SIZE]; +// } ra_msg4_t; + +#define SGX_AESGCM_IV_SIZE 12 +#define SGX_AESGCM_KEY_SIZE 16 +#define SGX_AESGCM_MAC_SIZE 16 + +typedef uint8_t sgx_aes_gcm_128bit_tag_t[SGX_AESGCM_MAC_SIZE]; #endif // COMMON_H diff --git a/src/enclave/Enclave/CMakeLists.txt b/src/enclave/Enclave/CMakeLists.txt index 99182aae9c..ba6e6f9bdc 100644 --- a/src/enclave/Enclave/CMakeLists.txt +++ b/src/enclave/Enclave/CMakeLists.txt @@ -20,17 +20,17 @@ set(SOURCES ${CMAKE_CURRENT_BINARY_DIR}/key.cpp) add_custom_command( - COMMAND ${SGX_EDGER8R} --trusted ${CMAKE_SOURCE_DIR}/Enclave/Enclave.edl --search-path ${CMAKE_SOURCE_DIR}/Enclave --search-path "$ENV{SGX_SDK}/include" + COMMAND ${OE_EDGER8R} --trusted ${CMAKE_SOURCE_DIR}/Enclave/Enclave.edl --search-path ${CMAKE_SOURCE_DIR}/Enclave DEPENDS ${CMAKE_SOURCE_DIR}/Enclave/Enclave.edl - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Enclave_t.c) + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Enclave_t.h ${CMAKE_CURRENT_BINARY_DIR}/Enclave_t.c ${CMAKE_CURRENT_BINARY_DIR}/Enclave_args.h) add_custom_command( COMMAND ../ServiceProvider/keygen ${CMAKE_CURRENT_BINARY_DIR}/key.cpp DEPENDS ../ServiceProvider/keygen OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/key.cpp) -include_directories(SYSTEM "$ENV{SGX_SDK}/include/libcxx") -include_directories(SYSTEM "$ENV{SGX_SDK}/include/tlibc") +# include_directories(SYSTEM "$ENV{SGX_SDK}/include/libcxx") +# include_directories(SYSTEM "$ENV{SGX_SDK}/include/tlibc") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -nostdinc -fvisibility=hidden -fpie -fstack-protector") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} -nostdinc++") @@ -40,32 +40,55 @@ add_library(enclave_trusted SHARED ${SOURCES}) set_property(TARGET enclave_trusted PROPERTY POSITION_INDEPENDENT_CODE OFF) set_target_properties(enclave_trusted PROPERTIES LINK_FLAGS ${ENCLAVE_LINK_FLAGS}) -find_library(TRTS_LIB sgx_trts) -find_library(TRTS_SIM_LIB sgx_trts_sim) -find_library(TSTDC_LIB sgx_tstdc) -find_library(TSTDCXX_LIB sgx_tcxx) -find_library(TKEY_EXCHANGE_LIB sgx_tkey_exchange) -find_library(TCRYPTO_LIB sgx_tcrypto) -find_library(SERVICE_LIB sgx_tservice) -find_library(SERVICE_SIM_LIB sgx_tservice_sim) - -if(NOT "$ENV{SGX_MODE}" STREQUAL "HW") - message(STATUS "Building for simulated SGX") - set(Trts_Library_Path "${TRTS_SIM_LIB}") - set(Service_Library_Path "${SERVICE_SIM_LIB}") -else() - message(STATUS "Building for SGX hardware") - set(Trts_Library_Path "${TRTS_LIB}") - set(Service_Library_Path "${SERVICE_LIB}") -endif() - -target_link_libraries(enclave_trusted -Wl,--whole-archive "${Trts_Library_Path}" -Wl,--no-whole-archive -Wl,--start-group "${TSTDC_LIB}" "${TSTDCXX_LIB}" - "${TKEY_EXCHANGE_LIB}" "${TCRYPTO_LIB}" "${Service_Library_Path}" -Wl,--end-group) +# find_library(TRTS_LIB sgx_trts) +# find_library(TRTS_SIM_LIB sgx_trts_sim) +# find_library(TSTDC_LIB sgx_tstdc) +# find_library(TSTDCXX_LIB sgx_tcxx) +# find_library(TKEY_EXCHANGE_LIB sgx_tkey_exchange) +# find_library(TCRYPTO_LIB sgx_tcrypto) +# find_library(SERVICE_LIB sgx_tservice) +# find_library(SERVICE_SIM_LIB sgx_tservice_sim) + +# if(NOT "$ENV{SGX_MODE}" STREQUAL "HW") +# message(STATUS "Building for simulated SGX") +# set(Trts_Library_Path "${TRTS_SIM_LIB}") +# set(Service_Library_Path "${SERVICE_SIM_LIB}") +# else() +# message(STATUS "Building for SGX hardware") +# set(Trts_Library_Path "${TRTS_LIB}") +# set(Service_Library_Path "${SERVICE_LIB}") +# endif() + +# target_link_libraries(enclave_trusted -Wl,--whole-archive "${Trts_Library_Path}" -Wl,--no-whole-archive -Wl,--start-group "${TSTDC_LIB}" "${TSTDCXX_LIB}" +# "${TKEY_EXCHANGE_LIB}" "${TCRYPTO_LIB}" "${Service_Library_Path}" -Wl,--end-group) + +target_compile_definitions(enclave_trusted PUBLIC OE_API_VERSION=2) + +# Need for the generated file Enclave_t.h +target_include_directories(enclave_trusted PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) + +target_link_libraries(enclave_trusted + openenclave::oeenclave + openenclave::oelibc + openenclave::oelibcxx + openenclave::oehostsock + openenclave::oehostresolver) + +# Sign enclave +add_custom_command(OUTPUT enclave/enclave.signed + DEPENDS enclave enclave/helloworld.conf private.pem + COMMAND openenclave::oesign sign -e $ -c ${CMAKE_SOURCE_DIR}/enclave/helloworld.conf -k private.pem) + +add_custom_command( + COMMAND ${OE_ENCLAVE_SIGNER} sign -e $ -c ${CMAKE_CURRENT_SOURCE_DIR}/Enclave.conf -k ${CMAKE_CURRENT_SOURCE_DIR}/Enclave_private.pem + DEPENDS enclave_trusted ${CMAKE_CURRENT_SOURCE_DIR}/Enclave.conf + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/enclave_trusted.signed) add_custom_command( - COMMAND ${SGX_ENCLAVE_SIGNER} sign -key "$ENV{SGX_SDK}/SampleCode/SampleEnclave/Enclave/Enclave_private.pem" -enclave $ -out libenclave_trusted_signed.so -config ${CMAKE_CURRENT_SOURCE_DIR}/Enclave.config.xml - DEPENDS enclave_trusted ${CMAKE_CURRENT_SOURCE_DIR}/Enclave.config.xml - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libenclave_trusted_signed.so) + COMMAND mv ${CMAKE_CURRENT_BINARY_DIR}/enclave_trusted.signed ${CMAKE_CURRENT_BINARY_DIR}/libenclave_trusted_signed.so + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/enclave_trusted.signed + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libenclave_trusted_signed.so +) add_custom_target(enclave_trusted_signed_target ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/libenclave_trusted_signed.so) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libenclave_trusted_signed.so DESTINATION lib) diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index 784b9f4279..9508da8f88 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -1,11 +1,12 @@ #include "Crypto.h" #include -#include -#include +// #include +// #include #include "common.h" #include "util.h" +//#include "rdrand.h" /** * Symmetric key used to encrypt row data. This key is shared among the driver and all enclaves. @@ -14,7 +15,6 @@ * edu.berkeley.cs.rise.opaque.Utils.sharedKey. It is securely sent to the enclaves if attestation * succeeds. */ -//## sgx_aes_gcm_128bit_key_t shared_key = {0}; unsigned char shared_key[SGX_AESGCM_KEY_SIZE] = {'O', 'p', 'a', 'q', 'u', 'e', ' ', 'd', 'e', 'v', 'e', 'l', ' ', 'k', 'e', 'y'}; //### std::unique_ptr ks; @@ -23,26 +23,11 @@ void initKeySchedule() { ks.reset(new KeySchedule(reinterpret_cast(shared_key), SGX_AESGCM_KEY_SIZE)); } -void set_shared_key(sgx_ra_context_t context, uint8_t *msg4_bytes, uint32_t msg4_size) { +void set_shared_key(uint8_t *msg4_bytes, uint32_t msg4_size) { if (msg4_size <= 0) { throw std::runtime_error("Remote attestation step 4: Invalid message size."); } - - - // const ra_msg4_t *msg4 = reinterpret_cast(msg4_bytes); - - // sgx_ec_key_128bit_t sk_key; - (void)context; (void)msg4_bytes; - // sgx_check(sgx_ra_get_keys(context, SGX_RA_KEY_SK, &sk_key)); - - // uint8_t aes_gcm_iv[SGX_AESGCM_IV_SIZE] = {0}; - // sgx_check(sgx_rijndael128GCM_decrypt(&sk_key, - // &msg4->shared_key_ciphertext[0], SGX_AESGCM_KEY_SIZE, - // reinterpret_cast(shared_key), - // &aes_gcm_iv[0], SGX_AESGCM_IV_SIZE, - // nullptr, 0, - // &msg4->shared_key_mac)); initKeySchedule(); } @@ -60,8 +45,10 @@ void encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphertext_ptr = ciphertext + SGX_AESGCM_IV_SIZE; sgx_aes_gcm_128bit_tag_t *mac_ptr = (sgx_aes_gcm_128bit_tag_t *) (ciphertext + SGX_AESGCM_IV_SIZE + plaintext_length); - - sgx_read_rand(iv_ptr, SGX_AESGCM_IV_SIZE); + unsigned char hard_coded_iv[SGX_AESGCM_IV_SIZE] = {'O', 'p', 'a', 'q', 'u', 'e','O', 'p', 'a', 'q', 'u', 'e' }; + //sgx_read_rand(iv_ptr, SGX_AESGCM_IV_SIZE); + // TODO: fix this!!!! + iv_ptr = reinterpret_cast(hard_coded_iv); AesGcm cipher(ks.get(), iv_ptr, SGX_AESGCM_IV_SIZE); cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); diff --git a/src/enclave/Enclave/Crypto.h b/src/enclave/Enclave/Crypto.h index c2632e6f08..35650dd658 100644 --- a/src/enclave/Enclave/Crypto.h +++ b/src/enclave/Enclave/Crypto.h @@ -1,10 +1,17 @@ -#include +//#include #include -#include +//#include #ifndef CRYPTO_H #define CRYPTO_H +#define SGX_ECP256_KEY_SIZE 32 +typedef struct _sgx_ec256_public_t +{ + uint8_t gx[SGX_ECP256_KEY_SIZE]; + uint8_t gy[SGX_ECP256_KEY_SIZE]; +} sgx_ec256_public_t; + /** * The public key of the Service Provider, used in remote attestation. This is automatically * hardcoded into the enclave during the build process. @@ -14,7 +21,7 @@ extern const sgx_ec256_public_t g_sp_pub_key; /** * Set the symmetric key used to encrypt row data using message 4 of the remote attestation process. */ -void set_shared_key(sgx_ra_context_t context, uint8_t *msg4, uint32_t msg4_size); +void set_shared_key(uint8_t *msg4, uint32_t msg4_size); /** * Encrypt the given plaintext using AES-GCM with a 128-bit key and write the result to diff --git a/src/enclave/Enclave/Enclave.conf b/src/enclave/Enclave/Enclave.conf new file mode 100644 index 0000000000..3da3462baa --- /dev/null +++ b/src/enclave/Enclave/Enclave.conf @@ -0,0 +1,21 @@ +# Enclave settings: +Debug=1 +NumHeapPages=655356 +NumStackPages=1024 +NumTCS=10 +ProductID=1 +SecurityVersion=1 + + +# +# +# 0 +# 0 +# 0x40000 256 KiB +# 0x80000000 2 GiB +# 10 +# 1 +# 0 +# 0 +# 0xFFFFFFFF +# diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index f5f95ccd83..8e507dd2ef 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -3,8 +3,8 @@ #include #include -#include -#include +// #include +// #include #include "Aggregate.h" #include "Crypto.h" @@ -22,9 +22,9 @@ void ecall_encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphertext, uint32_t cipher_length) { // Guard against encrypting or overwriting enclave memory - assert(sgx_is_outside_enclave(plaintext, plaintext_length) == 1); - assert(sgx_is_outside_enclave(ciphertext, cipher_length) == 1); - sgx_lfence(); + // assert(sgx_is_outside_enclave(plaintext, plaintext_length) == 1); + // assert(sgx_is_outside_enclave(ciphertext, cipher_length) == 1); + // sgx_lfence(); try { // IV (12 bytes) + ciphertext + mac (16 bytes) @@ -41,8 +41,8 @@ void ecall_project(uint8_t *condition, size_t condition_length, uint8_t *input_rows, size_t input_rows_length, uint8_t **output_rows, size_t *output_rows_length) { // Guard against operating on arbitrary enclave memory - assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); - sgx_lfence(); + // assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); + // sgx_lfence(); try { project(condition, condition_length, @@ -57,8 +57,8 @@ void ecall_filter(uint8_t *condition, size_t condition_length, uint8_t *input_rows, size_t input_rows_length, uint8_t **output_rows, size_t *output_rows_length) { // Guard against operating on arbitrary enclave memory - assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); - sgx_lfence(); + // assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); + // sgx_lfence(); try { filter(condition, condition_length, @@ -72,8 +72,8 @@ void ecall_filter(uint8_t *condition, size_t condition_length, void ecall_sample(uint8_t *input_rows, size_t input_rows_length, uint8_t **output_rows, size_t *output_rows_length) { // Guard against operating on arbitrary enclave memory - assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); - sgx_lfence(); + // assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); + // sgx_lfence(); try { sample(input_rows, input_rows_length, @@ -88,8 +88,8 @@ void ecall_find_range_bounds(uint8_t *sort_order, size_t sort_order_length, uint8_t *input_rows, size_t input_rows_length, uint8_t **output_rows, size_t *output_rows_length) { // Guard against operating on arbitrary enclave memory - assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); - sgx_lfence(); + // assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); + // sgx_lfence(); try { find_range_bounds(sort_order, sort_order_length, @@ -107,9 +107,9 @@ void ecall_partition_for_sort(uint8_t *sort_order, size_t sort_order_length, uint8_t *boundary_rows, size_t boundary_rows_length, uint8_t **output_partitions, size_t *output_partition_lengths) { // Guard against operating on arbitrary enclave memory - assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); - assert(sgx_is_outside_enclave(boundary_rows, boundary_rows_length) == 1); - sgx_lfence(); + // assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); + // assert(sgx_is_outside_enclave(boundary_rows, boundary_rows_length) == 1); + // sgx_lfence(); try { partition_for_sort(sort_order, sort_order_length, @@ -126,8 +126,8 @@ void ecall_external_sort(uint8_t *sort_order, size_t sort_order_length, uint8_t *input_rows, size_t input_rows_length, uint8_t **output_rows, size_t *output_rows_length) { // Guard against operating on arbitrary enclave memory - assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); - sgx_lfence(); + // assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); + // sgx_lfence(); try { external_sort(sort_order, sort_order_length, @@ -142,8 +142,8 @@ void ecall_scan_collect_last_primary(uint8_t *join_expr, size_t join_expr_length uint8_t *input_rows, size_t input_rows_length, uint8_t **output_rows, size_t *output_rows_length) { // Guard against operating on arbitrary enclave memory - assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); - sgx_lfence(); + // assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); + // sgx_lfence(); try { scan_collect_last_primary(join_expr, join_expr_length, @@ -159,9 +159,9 @@ void ecall_non_oblivious_sort_merge_join(uint8_t *join_expr, size_t join_expr_le uint8_t *join_row, size_t join_row_length, uint8_t **output_rows, size_t *output_rows_length) { // Guard against operating on arbitrary enclave memory - assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); - assert(sgx_is_outside_enclave(join_row, join_row_length) == 1); - sgx_lfence(); + // assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); + // assert(sgx_is_outside_enclave(join_row, join_row_length) == 1); + // sgx_lfence(); try { non_oblivious_sort_merge_join(join_expr, join_expr_length, @@ -180,8 +180,8 @@ void ecall_non_oblivious_aggregate_step1( uint8_t **last_group, size_t *last_group_length, uint8_t **last_row, size_t *last_row_length) { // Guard against operating on arbitrary enclave memory - assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); - sgx_lfence(); + // assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); + // sgx_lfence(); try { non_oblivious_aggregate_step1( @@ -203,11 +203,11 @@ void ecall_non_oblivious_aggregate_step2( uint8_t *prev_partition_last_row, size_t prev_partition_last_row_length, uint8_t **output_rows, size_t *output_rows_length) { // Guard against operating on arbitrary enclave memory - assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); - assert(sgx_is_outside_enclave(next_partition_first_row, next_partition_first_row_length) == 1); - assert(sgx_is_outside_enclave(prev_partition_last_group, prev_partition_last_group_length) == 1); - assert(sgx_is_outside_enclave(prev_partition_last_row, prev_partition_last_row_length) == 1); - sgx_lfence(); + // assert(sgx_is_outside_enclave(input_rows, input_rows_length) == 1); + // assert(sgx_is_outside_enclave(next_partition_first_row, next_partition_first_row_length) == 1); + // assert(sgx_is_outside_enclave(prev_partition_last_group, prev_partition_last_group_length) == 1); + // assert(sgx_is_outside_enclave(prev_partition_last_row, prev_partition_last_row_length) == 1); + // sgx_lfence(); try { non_oblivious_aggregate_step2( @@ -222,30 +222,10 @@ void ecall_non_oblivious_aggregate_step2( } } -sgx_status_t ecall_enclave_init_ra(sgx_ra_context_t *context) { - try { - return sgx_ra_init(&g_sp_pub_key, false, context); - } catch (const std::runtime_error &e) { - ocall_throw(e.what()); - // We return success so that the exception just thrown doesn't get overridden by another - // exception due to the return code. - return SGX_SUCCESS; - } -} - - -void ecall_enclave_ra_close(sgx_ra_context_t context) { - try { - sgx_ra_close(context); - } catch (const std::runtime_error &e) { - ocall_throw(e.what()); - } -} - void ecall_ra_proc_msg4( - sgx_ra_context_t context, uint8_t *msg4, uint32_t msg4_size) { + uint8_t *msg4, uint32_t msg4_size) { try { - set_shared_key(context, msg4, msg4_size); + set_shared_key(msg4, msg4_size); } catch (const std::runtime_error &e) { ocall_throw(e.what()); } diff --git a/src/enclave/Enclave/Enclave.edl b/src/enclave/Enclave/Enclave.edl index a796824c83..e6114033d2 100644 --- a/src/enclave/Enclave/Enclave.edl +++ b/src/enclave/Enclave/Enclave.edl @@ -4,9 +4,9 @@ enclave { include "stdbool.h" - include "sgx_key_exchange.h" - include "sgx_trts.h" - from "sgx_tkey_exchange.edl" import *; + //include "sgx_key_exchange.h" + //include "sgx_trts.h" + //from "sgx_tkey_exchange.edl" import *; trusted { public void ecall_project( @@ -72,9 +72,7 @@ enclave { [user_check] uint8_t *prev_partition_last_row, size_t prev_partition_last_row_length, [out] uint8_t **output_rows, [out] size_t *output_rows_length); - public sgx_status_t ecall_enclave_init_ra([out] sgx_ra_context_t *p_context); - public void ecall_enclave_ra_close(sgx_ra_context_t context); - public void ecall_ra_proc_msg4(sgx_ra_context_t context, + public void ecall_ra_proc_msg4( [in,size=msg4_size] uint8_t *msg4, uint32_t msg4_size); }; diff --git a/src/enclave/Enclave/Enclave_private.pem b/src/enclave/Enclave/Enclave_private.pem new file mode 100644 index 0000000000..529d07be35 --- /dev/null +++ b/src/enclave/Enclave/Enclave_private.pem @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIG4gIBAAKCAYEAroOogvsj/fZDZY8XFdkl6dJmky0lRvnWMmpeH41Bla6U1qLZ +AmZuyIF+mQC/cgojIsrBMzBxb1kKqzATF4+XwPwgKz7fmiddmHyYz2WDJfAjIveJ +ZjdMjM4+EytGlkkJ52T8V8ds0/L2qKexJ+NBLxkeQLfV8n1mIk7zX7jguwbCG1Pr +nEMdJ3Sew20vnje+RsngAzdPChoJpVsWi/K7cettX/tbnre1DL02GXc5qJoQYk7b +3zkmhz31TgFrd9VVtmUGyFXAysuSAb3EN+5VnHGr0xKkeg8utErea2FNtNIgua8H +ONfm9Eiyaav1SVKzPHlyqLtcdxH3I8Wg7yqMsaprZ1n5A1v/levxnL8+It02KseD +5HqV4rf/cImSlCt3lpRg8U5E1pyFQ2IVEC/XTDMiI3c+AR+w2jSRB3Bwn9zJtFlW +KHG3m1xGI4ck+Lci1JvWWLXQagQSPtZTsubxTQNx1gsgZhgv1JHVZMdbVlAbbRMC +1nSuJNl7KPAS/VfzAgEDAoIBgHRXxaynbVP5gkO0ug6Qw/E27wzIw4SmjsxG6Wpe +K7kfDeRskKxESdsA/xCrKkwGwhcx1iIgS5+Qscd1Yg+1D9X9asd/P7waPmWoZd+Z +AhlKwhdPsO7PiF3e1AzHhGQwsUTt/Y/aSI1MpHBvy2/s1h9mFCslOUxTmWw0oj/Q +ldIEgWeNR72CE2+jFIJIyml6ftnb6qzPiga8Bm48ubKh0kvySOqnkmnPzgh+JBD6 +JnBmtZbfPT97bwTT+N6rnPqOOApvfHPf15kWI8yDbprG1l4OCUaIUH1AszxLd826 +5IPM+8gINLRDP1MA6azECPjTyHXhtnSIBZCyWSVkc05vYmNXYUNiXWMajcxW9M02 +wKzFELO8NCEAkaTPxwo4SCyIjUxiK1LbQ9h8PSy4c1+gGP4LAMR8xqP4QKg6zdu9 +osUGG/xRe/uufgTBFkcjqBHtK5L5VI0jeNIUAgW/6iNbYXjBMJ0GfauLs+g1VsOm +WfdgXzsb9DYdMa0OXXHypmV4GwKBwQDUwQj8RKJ6c8cT4vcWCoJvJF00+RFL+P3i +Gx2DLERxRrDa8AVGfqaCjsR+3vLgG8V/py+z+dxZYSqeB80Qeo6PDITcRKoeAYh9 +xlT3LJOS+k1cJcEmlbbO2IjLkTmzSwa80fWexKu8/Xv6vv15gpqYl1ngYoqJM3pd +vzmTIOi7MKSZ0WmEQavrZj8zK4endE3v0eAEeQ55j1GImbypSf7Idh7wOXtjZ7WD +Dg6yWDrri+AP/L3gClMj8wsAxMV4ZR8CgcEA0fzDHkFa6raVOxWnObmRoDhAtE0a +cjUj976NM5yyfdf2MrKy4/RhdTiPZ6b08/lBC/+xRfV3xKVGzacm6QjqjZrUpgHC +0LKiZaMtccCJjLtPwQd0jGQEnKfMFaPsnhOc5y8qVkCzVOSthY5qhz0XNotHHFmJ +gffVgB0iqrMTvSL7IA2yqqpOqNRlhaYhNl8TiFP3gIeMtVa9rZy31JPgT2uJ+kfo +gV7sdTPEjPWZd7OshGxWpT6QfVDj/T9T7L6tAoHBAI3WBf2DFvxNL2KXT2QHAZ9t +k3imC4f7U+wSE6zILaDZyzygA4RUbwG0gv8/TJVn2P/Eynf76DuWHGlaiLWnCbSz +Az2DHBQBBaku409zDQym3j1ugMRjzzSQWzJg0SIyBH3hTmnYcn3+Uqcp/lEBvGW6 +O+rsXFt3pukqJmIV8HzLGGaLm62BHUeZf3dyWm+i3p/hQAL7Xvu04QW70xuGqdr5 +afV7p5eaeQIJXyGQJ0eylV/90+qxjMKiB1XYg6WYvwKBwQCL/ddpgOdHJGN8uRom +e7Zq0Csi3hGheMKlKbN3vcxT5U7MdyHtTZZOJbTvxKNNUNYH/8uD+PqDGNneb29G +BfGzvI3EASyLIcGZF3OhKwZd0jUrWk2y7Vhob91jwp2+t73vdMbkKyI4mHOuXvGv +fg95si9oO7EBT+Oqvhccd2J+F1IVXncccYnF4u5ZGWt5lLewN/pVr7MjjykeaHqN +t+rfnQam2psA6fL4zS2zTmZPzR2tnY8Y1GBTi0Ko1OKd1HMCgcAb5cB/7/AQlhP9 +yQa04PLH9ygQkKKptZp7dy5WcWRx0K/hAHRoi2aw1wZqfm7VBNu2SLcs90kCCCxp +6C5sfJi6b8NpNbIPC+sc9wsFr7pGo9SFzQ78UlcWYK2Gu2FxlMjonhka5hvo4zvg +WxlpXKEkaFt3gLd92m/dMqBrHfafH7VwOJY2zT3WIpjwuk0ZzmRg5p0pG/svVQEH +NZmwRwlopysbR69B/n1nefJ84UO50fLh5s5Zr3gBRwbWNZyzhXk= +-----END RSA PRIVATE KEY----- diff --git a/src/enclave/Enclave/Flatbuffers.cpp b/src/enclave/Enclave/Flatbuffers.cpp index 504926db73..daf8a52d42 100644 --- a/src/enclave/Enclave/Flatbuffers.cpp +++ b/src/enclave/Enclave/Flatbuffers.cpp @@ -22,7 +22,7 @@ std::string to_string(const Date &date) { struct tm tm; secs_to_tm(secs, &tm); char buffer[80]; - strftime(buffer, sizeof(buffer), "%Y-%m-%d", &tm); + // strftime(buffer, sizeof(buffer), "%Y-%m-%d", &tm); return std::string(buffer); } @@ -130,7 +130,7 @@ std::string to_string(const tuix::TimestampField *f) { struct tm tm; secs_to_tm(secs, &tm); char buffer[80]; - strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &tm); + // strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &tm); return std::string(buffer); } diff --git a/src/enclave/Enclave/Sort.cpp b/src/enclave/Enclave/Sort.cpp index 235d9faf34..c3aee9c57d 100644 --- a/src/enclave/Enclave/Sort.cpp +++ b/src/enclave/Enclave/Sort.cpp @@ -6,6 +6,7 @@ #include "ExpressionEvaluation.h" #include "FlatbuffersReaders.h" #include "FlatbuffersWriters.h" +//#include "rdrand.h" class MergeItem { public: @@ -142,7 +143,10 @@ void sample(uint8_t *input_rows, size_t input_rows_length, const tuix::Row *row = r.next(); uint16_t rand; - sgx_read_rand(reinterpret_cast(&rand), 2); + //sgx_read_rand(reinterpret_cast(&rand), 2); + //rdrand_get_bytes((uint32_t)2, reinterpret_cast(&rand)); + //TODO: fix this!!! + rand = 23; if (rand <= sampling_ratio) { w.append(row); } diff --git a/src/enclave/Enclave/key.h b/src/enclave/Enclave/key.h index 1e79d3847a..cfc9d56bf2 100644 --- a/src/enclave/Enclave/key.h +++ b/src/enclave/Enclave/key.h @@ -1,7 +1,14 @@ #ifndef RA_KEY_H #define RA_KEY_H -#include +#include +//#include +#define SGX_ECP256_KEY_SIZE 32 +typedef struct _sgx_ec256_public_t +{ + uint8_t gx[SGX_ECP256_KEY_SIZE]; + uint8_t gy[SGX_ECP256_KEY_SIZE]; +} sgx_ec256_public_t; // This is the public EC key of the SP. The corresponding private EC key is // used by the SP to sign data used in the remote attestation SIGMA protocol diff --git a/src/enclave/Enclave/util.cpp b/src/enclave/Enclave/util.cpp index 56eae711c1..b6a282769d 100644 --- a/src/enclave/Enclave/util.cpp +++ b/src/enclave/Enclave/util.cpp @@ -4,7 +4,7 @@ #include #include "Enclave_t.h" -#include "sgx_lfence.h" +//#include "sgx_lfence.h" int printf(const char *fmt, ...) { char buf[BUFSIZ] = {'\0'}; @@ -35,7 +35,7 @@ std::string string_format(const std::string &fmt, ...) { } } -void exit(int exit_code) { +void exit1(int exit_code) { ocall_exit(exit_code); } @@ -43,8 +43,10 @@ void ocall_malloc(size_t size, uint8_t **ret) { unsafe_ocall_malloc(size, ret); // Guard against overwriting enclave memory + /* assert(sgx_is_outside_enclave(*ret, size) == 1); sgx_lfence(); + */ } void print_bytes(uint8_t *ptr, uint32_t len) { @@ -149,14 +151,14 @@ int secs_to_tm(long long t, struct tm *tm) { return 0; } -void sgx_check(sgx_status_t ret) { - if (ret != SGX_SUCCESS) { - // Format the status code as hex - char buf[BUFSIZ] = {'\0'}; - snprintf(buf, BUFSIZ, "%#06x", ret); - - throw std::runtime_error( - std::string("Enclave error: sgx_status_t ") - + std::string(buf)); - } -} +// void sgx_check(sgx_status_t ret) { +// if (ret != SGX_SUCCESS) { +// // Format the status code as hex +// char buf[BUFSIZ] = {'\0'}; +// snprintf(buf, BUFSIZ, "%#06x", ret); + +// throw std::runtime_error( +// std::string("Enclave error: sgx_status_t ") +// + std::string(buf)); +// } +//} diff --git a/src/enclave/Enclave/util.h b/src/enclave/Enclave/util.h index b4bc5790aa..2d635c6ae2 100644 --- a/src/enclave/Enclave/util.h +++ b/src/enclave/Enclave/util.h @@ -5,7 +5,7 @@ #include #include #include -#include +//#include /* * printf: @@ -42,6 +42,6 @@ int pow_2(int value); int secs_to_tm(long long t, struct tm *tm); -void sgx_check(sgx_status_t ret); +//void sgx_check(sgx_status_t ret); #endif // UTIL_H diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index cdaf6697c3..7107b0fee6 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -2,7 +2,7 @@ #include #include #include -#include +//#include #include "ecp.h" #include "ias_ra.h" @@ -146,285 +146,3 @@ void ServiceProvider::export_public_key_code(const std::string &filename) { file << "};\n"; file.close(); } - -void ServiceProvider::connect_to_ias(const std::string &ias_report_signing_ca_file) { - try { - connect_to_ias_helper(ias_report_signing_ca_file); - } catch (const std::runtime_error &e) { - if (require_attestation) { - throw; - } - } -} - -void ServiceProvider::connect_to_ias_helper(const std::string &ias_report_signing_ca_file) { - if (this->ias) { - return; - } - - std::unique_ptr ias( - new IAS_Connection(is_production ? IAS_SERVER_PRODUCTION : IAS_SERVER_DEVELOPMENT, 0)); - - const char *ias_client_cert_file = std::getenv("IAS_CLIENT_CERT_FILE"); - if (!ias_client_cert_file) { - throw std::runtime_error( - "Set $IAS_CLIENT_CERT_FILE to the file generated by openssl x509, probably called " - "${OPAQUE_HOME}/client.crt."); - } - ias->client_cert(ias_client_cert_file, "PEM"); - - const char *ias_client_cert_key_password_file = std::getenv("IAS_CLIENT_CERT_KEY_PASSWORD_FILE"); - std::string password; - if (ias_client_cert_key_password_file) { - std::ifstream f(ias_client_cert_key_password_file); - std::stringstream s; - s << f.rdbuf(); - password = s.str(); - } - const char *ias_client_key_file = std::getenv("IAS_CLIENT_KEY_FILE"); - if (!ias_client_key_file) { - throw std::runtime_error( - "Set $IAS_CLIENT_KEY_FILE to the file generated by openssl genrsa, probably called " - "${OPAQUE_HOME}/client.key."); - } - ias->client_key(ias_client_key_file, password.empty() ? nullptr : password.c_str()); - - ias->proxy_mode(IAS_PROXY_NONE); - - ias->agent("wget"); - - X509 *signing_ca; - if (!cert_load_file(&signing_ca, ias_report_signing_ca_file.c_str())) { - throw std::runtime_error(std::string("Could not load ") + ias_report_signing_ca_file); - } - X509_STORE *store = cert_init_ca(signing_ca); - if (!store) { - throw std::runtime_error("Could not initialize certificate store."); - } - ias->cert_store(store); - - ias->ca_bundle("/etc/ssl/certs/ca-certificates.crt"); - - // Save the created IAS_Connection. We do this last so that any initialization errors do not - // result in corrupt state, and a future call to this method will start from scratch. - this->ias = std::move(ias); -} - -void ServiceProvider::process_msg0(uint32_t extended_epid_group_id) { - // From Intel's guide: - // "The Intel Attestation Service only supports the value of zero for the extended GID." - if (extended_epid_group_id != 0) { - throw std::runtime_error( - std::string("Unsupported extended EPID group ") - + std::to_string(extended_epid_group_id)); - } -} - -std::unique_ptr ServiceProvider::process_msg1( - sgx_ra_msg1_t *msg1, uint32_t *msg2_size) { - // The following procedure follows Intel's guide: - // https://software.intel.com/en-us/articles/code-sample-intel-software-guard-extensions-remote-attestation-end-to-end-example - // The quotes below are from this guide. - - // "Generate a random EC key using the P-256 curve. This key will become Gb." - lc_ec256_private_t priv_key; - lc_ec256_public_t pub_key; - lc_check(lc_ecc256_create_key_pair(&priv_key, &pub_key)); - - // Save the group ID, the client's public ECCDH key, and the generated keypair for future steps. - memcpy(sp_db.gid, msg1->gid, sizeof(sgx_epid_group_id_t)); - sp_db.g_a = msg1->g_a; - sp_db.g_b = pub_key; - sp_db.b = priv_key; - - // "Derive the key derivation key (KDK) from Ga and Gb" - lc_ec256_dh_shared_t dh_key; - lc_check(lc_ecc256_compute_shared_dhkey(&priv_key, &msg1->g_a, &dh_key)); - - // "Derive the SMK from the KDK by performing an AES-128 CMAC on the byte sequence: - // 0x01 || SMK || 0x00 || 0x80 || 0x00 - // using the KDK as the key. Note that || denotes concatenation and “SMK†is a literal string - // (without quotes)." - derive_key(&dh_key, SAMPLE_DERIVE_KEY_SMK, &sp_db.smk_key); - // We also precompute the same result with different strings for future messages. - derive_key(&dh_key, SAMPLE_DERIVE_KEY_MK, &sp_db.mk_key); - derive_key(&dh_key, SAMPLE_DERIVE_KEY_SK, &sp_db.sk_key); - derive_key(&dh_key, SAMPLE_DERIVE_KEY_VK, &sp_db.vk_key); - - // "Query IAS to obtain the SigRL for the client's Intel EPID GID." - string sig_rl; - uint32_t gid; - memcpy(reinterpret_cast(&gid), &msg1->gid, sizeof(sgx_epid_group_id_t)); - try { - if (!ias) { - throw std::runtime_error("process_msg1 called before ensure_ias_connection"); - } - IAS_Request req(ias.get(), ias_api_version); - ias_check(req.sigrl(gid, sig_rl)); - } catch (const std::runtime_error &e) { - if (require_attestation) { - throw; - } - } - - // Allocate msg2 with enough space for the SigRL, which is a flexible array member at the end - *msg2_size = sizeof(sgx_ra_msg2_t) + sig_rl.length(); - std::unique_ptr msg2(reinterpret_cast(new uint8_t[*msg2_size])); - - // Construct msg2 - msg2->g_b = sp_db.g_b; - memcpy_s(&msg2->spid, sizeof(sgx_spid_t), spid.c_str(), spid.size()); - // "Determine the quote type that should be requested from the client (0x0 for unlinkable, and 0x1 - // for linkable). Note that this is a service provider policy decision, and the SPID must be - // associated with the correct quote type." - msg2->quote_type = - linkable_signature ? SAMPLE_QUOTE_LINKABLE_SIGNATURE : SAMPLE_QUOTE_UNLINKABLE_SIGNATURE; - // "Set the KDF_ID. Normally this is 0x1." - msg2->kdf_id = 0x1; - - // "Calculate the ECDSA signature of: - // Gbx || Gby || Gax || Gay - // (traditionally written as r || s) with the service provider's EC private key." - lc_ec256_public_t gb_ga[2]; - gb_ga[0] = sp_db.g_b; - gb_ga[1] = sp_db.g_a; - lc_check(lc_ecdsa_sign(reinterpret_cast(&gb_ga), sizeof(gb_ga), - &sp_priv_key, - &msg2->sign_gb_ga)); - - // "Calculate the AES-128 CMAC of: - // Gb || SPID || Quote_Type || KDF_ID || SigSP - // using the SMK as the key." - uint8_t mac[SGX_CMAC_MAC_SIZE] = {0}; - uint32_t cmac_size = offsetof(sgx_ra_msg2_t, mac); - lc_check(lc_rijndael128_cmac_msg(&sp_db.smk_key, - reinterpret_cast(&msg2->g_b), - cmac_size, - &mac)); - memcpy(&msg2->mac, &mac, sizeof(sgx_mac_t)); - - msg2->sig_rl_size = sig_rl.size(); - memcpy(&msg2->sig_rl, sig_rl.c_str(), sig_rl.size()); - - return msg2; -} - -std::unique_ptr ServiceProvider::process_msg3( - sgx_ra_msg3_t *msg3, uint32_t msg3_size, uint32_t *msg4_size) { - if (msg3_size < sizeof(sgx_ra_msg3_t)) { - throw std::runtime_error("process_msg3: msg3 is invalid (expected sgx_ra_msg3_t)."); - } - - // The following procedure follows Intel's guide: - // https://software.intel.com/en-us/articles/code-sample-intel-software-guard-extensions-remote-attestation-end-to-end-example - // The quotes below are from this guide. - - // "Verify that Ga in msg3 matches Ga in msg1." - if (memcmp(&sp_db.g_a, &msg3->g_a, sizeof(lc_ec256_public_t))) { - throw std::runtime_error("process_msg3: g_a mismatch."); - } - - // "Verify CMAC_SMK(M)." - uint32_t mac_size = msg3_size - sizeof(sgx_mac_t); - const uint8_t *msg3_cmaced = reinterpret_cast(msg3) + sizeof(sgx_mac_t); - lc_cmac_128bit_tag_t mac; - lc_check(lc_rijndael128_cmac_msg(&sp_db.smk_key, msg3_cmaced, mac_size, &mac)); - if (memcmp(&msg3->mac, mac, sizeof(mac))) { - throw std::runtime_error("process_msg3: MAC mismatch."); - } - - // "Extract the quote from msg3." - sample_quote_t *quote = reinterpret_cast(msg3->quote); - // Use the fact that msg3.quote is a flexible array to calculate the quote size - uint32_t quote_size = msg3_size - sizeof(sgx_ra_msg3_t); - - // "Verify that the first 32-bytes of the report data match the SHA-256 digest of - // (Ga || Gb || VK), where || denotes concatenation. VK is derived by performing an AES-128 CMAC - // over the following byte sequence, using the KDK as the key: - // 0x01 || "VK" || 0x00 || 0x80 || 0x00 - lc_sha_state_handle_t sha_handle; - lc_sha256_init(&sha_handle); - lc_sha256_update(reinterpret_cast(&sp_db.g_a), sizeof(sp_db.g_a), sha_handle); - lc_sha256_update(reinterpret_cast(&sp_db.g_b), sizeof(sp_db.g_b), sha_handle); - lc_sha256_update(reinterpret_cast(&sp_db.vk_key), sizeof(sp_db.vk_key), sha_handle); - lc_sha256_hash_t hash; - lc_sha256_get_hash(sha_handle, &hash); - lc_sha256_close(sha_handle); - if (memcmp(reinterpret_cast(&hash), - reinterpret_cast("e->report_body.report_data), - LC_SHA256_HASH_SIZE)) { - throw std::runtime_error("process_msg3: Report data digest mismatch."); - } - - // Verify that the EPID group ID in the quote matches the one from msg1 - if (memcmp(sp_db.gid, quote->epid_group_id, sizeof(sgx_epid_group_id_t))) { - throw std::runtime_error("process_msg3: EPID GID mismatch"); - } - - // Encode the quote as base64 - std::string quote_base64(base64_encode(reinterpret_cast(quote), quote_size)); - - // "Submit the quote to IAS, calling the API function to verify attestation evidence." - std::string content; - try { - if (!ias) { - throw std::runtime_error("process_msg3 called before ensure_ias_connection"); - } - IAS_Request req(ias.get(), ias_api_version); - - std::map payload; - payload.insert(std::make_pair("isvEnclaveQuote", quote_base64)); - - std::vector messages; - ias_check(req.report(payload, content, messages)); - } catch (const std::runtime_error &e) { - if (require_attestation) { - throw; - } - } - - if (!content.empty()) { - json::JSON reportObj = json::JSON::Load(content); - - if (!reportObj.hasKey("version")) { - throw std::runtime_error("IAS: Report is missing an API version."); - } - - unsigned int rversion = (unsigned int)reportObj["version"].ToInt(); - if (rversion != ias_api_version) { - throw std::runtime_error( - std::string("IAS: Report version ") - + std::to_string(rversion) - + std::string(" does not match API version ") - + std::to_string(ias_api_version)); - } - - // "Extract the attestation status for the enclave. - // Decide whether or not to trust the enclave." - if (reportObj["isvEnclaveQuoteStatus"].ToString().compare("OK") == 0) { - // Enclave is trusted - } else if (reportObj["isvEnclaveQuoteStatus"].ToString().compare("CONFIGURATION_NEEDED") == 0) { - throw std::runtime_error( - "Enclave not trusted. IAS reports CONFIGURATION_NEEDED. Check the BIOS."); - } else if (reportObj["isvEnclaveQuoteStatus"].ToString().compare("GROUP_OUT_OF_DATE") != 0) { - throw std::runtime_error( - "Enclave not trusted. IAS reports GROUP_OUT_OF_DATE. Update the BIOS."); - } else { - if (require_attestation) { - throw std::runtime_error("Enclave not trusted."); - } - } - } - - // Generate msg4, containing the shared secret to be sent to the enclave. - *msg4_size = sizeof(ra_msg4_t); - std::unique_ptr msg4(new ra_msg4_t); - uint8_t aes_gcm_iv[LC_AESGCM_IV_SIZE] = {0}; - lc_check(lc_rijndael128GCM_encrypt(&sp_db.sk_key, - shared_key, LC_AESGCM_KEY_SIZE, - &msg4->shared_key_ciphertext[0], - &aes_gcm_iv[0], LC_AESGCM_IV_SIZE, - nullptr, 0, - &msg4->shared_key_mac)); - return msg4; -} diff --git a/src/enclave/ServiceProvider/ServiceProvider.h b/src/enclave/ServiceProvider/ServiceProvider.h index 574ca536f9..e980d14f07 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.h +++ b/src/enclave/ServiceProvider/ServiceProvider.h @@ -3,26 +3,26 @@ #include #include -#include +//#include #include "sp_crypto.h" #include "iasrequest.h" -typedef struct _sample_ps_sec_prop_desc_t { - uint8_t sample_ps_sec_prop_desc[256]; -} sample_ps_sec_prop_desc_t; - -typedef struct _sp_db_item_t { - sgx_epid_group_id_t gid; - lc_ec256_public_t g_a; - lc_ec256_public_t g_b; - lc_ec256_private_t b; - lc_aes_gcm_128bit_key_t vk_key; // Shared secret key for the REPORT_DATA - lc_aes_gcm_128bit_key_t mk_key; // Shared secret key for generating MAC's - lc_aes_gcm_128bit_key_t sk_key; // Shared secret key for encryption - lc_aes_gcm_128bit_key_t smk_key; // Used only for SIGMA protocol - sample_ps_sec_prop_desc_t ps_sec_prop; -} sp_db_item_t; +// typedef struct _sample_ps_sec_prop_desc_t { +// uint8_t sample_ps_sec_prop_desc[256]; +// } sample_ps_sec_prop_desc_t; + +// typedef struct _sp_db_item_t { +// sgx_epid_group_id_t gid; +// lc_ec256_public_t g_a; +// lc_ec256_public_t g_b; +// lc_ec256_private_t b; +// lc_aes_gcm_128bit_key_t vk_key; // Shared secret key for the REPORT_DATA +// lc_aes_gcm_128bit_key_t mk_key; // Shared secret key for generating MAC's +// lc_aes_gcm_128bit_key_t sk_key; // Shared secret key for encryption +// lc_aes_gcm_128bit_key_t smk_key; // Used only for SIGMA protocol +// sample_ps_sec_prop_desc_t ps_sec_prop; +// } sp_db_item_t; class ServiceProvider { public: @@ -45,27 +45,27 @@ class ServiceProvider { */ void export_public_key_code(const std::string &filename); - /** Connect to the Intel attestation service. */ - void connect_to_ias(const std::string &ias_report_signing_ca_file); + // /** Connect to the Intel attestation service. */ + // void connect_to_ias(const std::string &ias_report_signing_ca_file); - /** Process attestation message 0 from an enclave. */ - void process_msg0(uint32_t extended_epid_group_id); + // /** Process attestation message 0 from an enclave. */ + // void process_msg0(uint32_t extended_epid_group_id); - /** - * Process attestation message 1 from an enclave and generate message 2 for that enclave. - * - * You must call `ensure_ias_connection` before calling this method. - */ - std::unique_ptr process_msg1(sgx_ra_msg1_t *msg1, uint32_t *msg2_size); + // /** + // * Process attestation message 1 from an enclave and generate message 2 for that enclave. + // * + // * You must call `ensure_ias_connection` before calling this method. + // */ + // std::unique_ptr process_msg1(sgx_ra_msg1_t *msg1, uint32_t *msg2_size); - /** - * Process attestation message 3 from an enclave and generate message 4 for that enclave. Message - * 4 contains the shared secret required for the enclave to decrypt data. - * - * You must call `ensure_ias_connection` before calling this method. - */ - std::unique_ptr process_msg3( - sgx_ra_msg3_t *msg3, uint32_t msg3_size, uint32_t *msg4_size); + // /** + // * Process attestation message 3 from an enclave and generate message 4 for that enclave. Message + // * 4 contains the shared secret required for the enclave to decrypt data. + // * + // * You must call `ensure_ias_connection` before calling this method. + // */ + // std::unique_ptr process_msg3( + // sgx_ra_msg3_t *msg3, uint32_t msg3_size, uint32_t *msg4_size); private: void connect_to_ias_helper(const std::string &ias_report_signing_ca_file); @@ -73,7 +73,7 @@ class ServiceProvider { sgx_ec256_public_t sp_pub_key; sgx_ec256_private_t sp_priv_key; uint8_t shared_key[LC_AESGCM_KEY_SIZE]; - sp_db_item_t sp_db; + //sp_db_item_t sp_db; std::string spid; std::unique_ptr ias; diff --git a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp index 08d547165e..e7ef2dbb95 100644 --- a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp +++ b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp @@ -25,7 +25,7 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( jbyte *shared_key_bytes = env->GetByteArrayElements(shared_key, &if_copy); const char *intel_cert_str = env->GetStringUTFChars(intel_cert, nullptr); - size_t intel_cert_len = static_cast(env->GetStringUTFLength(intel_cert)); + //size_t intel_cert_len = static_cast(env->GetStringUTFLength(intel_cert)); try { const char *private_key_path = std::getenv("PRIVATE_KEY_PATH"); @@ -36,7 +36,7 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( } service_provider.load_private_key(private_key_path); service_provider.set_shared_key(reinterpret_cast(shared_key_bytes)); - service_provider.connect_to_ias(std::string(intel_cert_str, intel_cert_len)); + //service_provider.connect_to_ias(std::string(intel_cert_str, intel_cert_len)); } catch (const std::runtime_error &e) { jni_throw(env, e.what()); } @@ -46,68 +46,68 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( } -JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg0( - JNIEnv *env, jobject obj, jbyteArray msg0_input) { - (void)obj; +// JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg0( +// JNIEnv *env, jobject obj, jbyteArray msg0_input) { +// (void)obj; - jboolean if_copy = false; - jbyte *msg0_bytes = env->GetByteArrayElements(msg0_input, &if_copy); - uint32_t *extended_epid_group_id = reinterpret_cast(msg0_bytes); +// jboolean if_copy = false; +// jbyte *msg0_bytes = env->GetByteArrayElements(msg0_input, &if_copy); +// uint32_t *extended_epid_group_id = reinterpret_cast(msg0_bytes); - try { - service_provider.process_msg0(*extended_epid_group_id); - } catch (const std::runtime_error &e) { - jni_throw(env, e.what()); - } +// try { +// service_provider.process_msg0(*extended_epid_group_id); +// } catch (const std::runtime_error &e) { +// jni_throw(env, e.what()); +// } - env->ReleaseByteArrayElements(msg0_input, msg0_bytes, 0); -} +// env->ReleaseByteArrayElements(msg0_input, msg0_bytes, 0); +// } -JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg1( - JNIEnv *env, jobject obj, jbyteArray msg1_input) { - (void)obj; +// JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg1( +// JNIEnv *env, jobject obj, jbyteArray msg1_input) { +// (void)obj; - jboolean if_copy = false; - jbyte *msg1_bytes = env->GetByteArrayElements(msg1_input, &if_copy); - sgx_ra_msg1_t *msg1 = reinterpret_cast(msg1_bytes); +// jboolean if_copy = false; +// jbyte *msg1_bytes = env->GetByteArrayElements(msg1_input, &if_copy); +// sgx_ra_msg1_t *msg1 = reinterpret_cast(msg1_bytes); - uint32_t msg2_size = 0; - std::unique_ptr msg2; - try { - msg2 = service_provider.process_msg1(msg1, &msg2_size); - } catch (const std::runtime_error &e) { - jni_throw(env, e.what()); - } +// uint32_t msg2_size = 0; +// std::unique_ptr msg2; +// try { +// msg2 = service_provider.process_msg1(msg1, &msg2_size); +// } catch (const std::runtime_error &e) { +// jni_throw(env, e.what()); +// } - jbyteArray array_ret = env->NewByteArray(msg2_size); - env->SetByteArrayRegion(array_ret, 0, msg2_size, reinterpret_cast(msg2.get())); +// jbyteArray array_ret = env->NewByteArray(msg2_size); +// env->SetByteArrayRegion(array_ret, 0, msg2_size, reinterpret_cast(msg2.get())); - env->ReleaseByteArrayElements(msg1_input, msg1_bytes, 0); +// env->ReleaseByteArrayElements(msg1_input, msg1_bytes, 0); - return array_ret; -} +// return array_ret; +// } -JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg3( - JNIEnv *env, jobject obj, jbyteArray msg3_input) { - (void)obj; +// JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg3( +// JNIEnv *env, jobject obj, jbyteArray msg3_input) { +// (void)obj; - jboolean if_copy = false; - jbyte *msg3_bytes = env->GetByteArrayElements(msg3_input, &if_copy); - sgx_ra_msg3_t *msg3 = reinterpret_cast(msg3_bytes); - uint32_t msg3_size = static_cast(env->GetArrayLength(msg3_input)); +// jboolean if_copy = false; +// jbyte *msg3_bytes = env->GetByteArrayElements(msg3_input, &if_copy); +// sgx_ra_msg3_t *msg3 = reinterpret_cast(msg3_bytes); +// uint32_t msg3_size = static_cast(env->GetArrayLength(msg3_input)); - uint32_t msg4_size = 0; - std::unique_ptr msg4; - try { - msg4 = service_provider.process_msg3(msg3, msg3_size, &msg4_size); - } catch (const std::runtime_error &e) { - jni_throw(env, e.what()); - } +// uint32_t msg4_size = 0; +// std::unique_ptr msg4; +// try { +// msg4 = service_provider.process_msg3(msg3, msg3_size, &msg4_size); +// } catch (const std::runtime_error &e) { +// jni_throw(env, e.what()); +// } - jbyteArray ret = env->NewByteArray(msg4_size); - env->SetByteArrayRegion(ret, 0, msg4_size, reinterpret_cast(msg4.get())); +// jbyteArray ret = env->NewByteArray(msg4_size); +// env->SetByteArrayRegion(ret, 0, msg4_size, reinterpret_cast(msg4.get())); - env->ReleaseByteArrayElements(msg3_input, msg3_bytes, 0); +// env->ReleaseByteArrayElements(msg3_input, msg3_bytes, 0); - return ret; -} +// return ret; +// } diff --git a/src/enclave/ServiceProvider/crypto.cpp b/src/enclave/ServiceProvider/crypto.cpp index ab85362ce2..0fd54abd62 100644 --- a/src/enclave/ServiceProvider/crypto.cpp +++ b/src/enclave/ServiceProvider/crypto.cpp @@ -27,7 +27,7 @@ in the License. #include #include #include -#include +//#include #include "crypto.h" #include "sp_crypto.h" diff --git a/src/enclave/ServiceProvider/crypto.h b/src/enclave/ServiceProvider/crypto.h index 1a664f4644..18265a2cda 100644 --- a/src/enclave/ServiceProvider/crypto.h +++ b/src/enclave/ServiceProvider/crypto.h @@ -18,7 +18,7 @@ in the License. #ifndef _CRYPTO_INIT_H #define _CRYPTO_INIT_H -#include +// #include #include #include #include diff --git a/src/enclave/ServiceProvider/ecp.h b/src/enclave/ServiceProvider/ecp.h index 1f30810aa6..42c1ccdbc0 100644 --- a/src/enclave/ServiceProvider/ecp.h +++ b/src/enclave/ServiceProvider/ecp.h @@ -34,7 +34,7 @@ #include #include -#include +//#include #include "common.h" #include "sp_crypto.h" diff --git a/src/enclave/ServiceProvider/sp_crypto.h b/src/enclave/ServiceProvider/sp_crypto.h index 92c3ee49bf..4d0ab0d8b6 100644 --- a/src/enclave/ServiceProvider/sp_crypto.h +++ b/src/enclave/ServiceProvider/sp_crypto.h @@ -55,7 +55,7 @@ #include #include -#include +//#include #include "common.h" @@ -86,6 +86,33 @@ typedef enum lc_status_t { #define LC_CMAC_MAC_SIZE 16 #define LC_AESCTR_KEY_SIZE 16 +// copied from intel sgx sdk tcrypto.h +#define SGX_ECP256_KEY_SIZE 32 +#define SGX_NISTP_ECP256_KEY_SIZE (SGX_ECP256_KEY_SIZE/sizeof(uint32_t)) +#define SGX_AESGCM_KEY_SIZE 16 + +typedef struct _sgx_ec256_dh_shared_t +{ + uint8_t s[SGX_ECP256_KEY_SIZE]; +} sgx_ec256_dh_shared_t; + +typedef struct _sgx_ec256_private_t +{ + uint8_t r[SGX_ECP256_KEY_SIZE]; +} sgx_ec256_private_t; + +typedef struct _sgx_ec256_public_t +{ + uint8_t gx[SGX_ECP256_KEY_SIZE]; + uint8_t gy[SGX_ECP256_KEY_SIZE]; +} sgx_ec256_public_t; + +typedef struct _sgx_ec256_signature_t +{ + uint32_t x[SGX_NISTP_ECP256_KEY_SIZE]; + uint32_t y[SGX_NISTP_ECP256_KEY_SIZE]; +} sgx_ec256_signature_t; + typedef sgx_ec256_dh_shared_t lc_ec256_dh_shared_t; typedef sgx_ec256_private_t lc_ec256_private_t; typedef sgx_ec256_public_t lc_ec256_public_t; @@ -103,6 +130,8 @@ typedef uint8_t lc_cmac_128bit_key_t[LC_CMAC_KEY_SIZE]; typedef uint8_t lc_cmac_128bit_tag_t[LC_CMAC_MAC_SIZE]; typedef uint8_t lc_aes_ctr_128bit_key_t[LC_AESCTR_KEY_SIZE]; +typedef uint8_t sgx_aes_gcm_128bit_key_t[SGX_AESGCM_KEY_SIZE]; + #ifdef __cplusplus #define EXTERN_C extern "C" #else From b99e5e98816781e8116b24bdb90bed00e6a88010 Mon Sep 17 00:00:00 2001 From: vtikoo Date: Wed, 13 Nov 2019 02:42:18 +0000 Subject: [PATCH 036/101] remove version script related linker options --- src/enclave/Enclave/CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/enclave/Enclave/CMakeLists.txt b/src/enclave/Enclave/CMakeLists.txt index ba6e6f9bdc..bc6bf84483 100644 --- a/src/enclave/Enclave/CMakeLists.txt +++ b/src/enclave/Enclave/CMakeLists.txt @@ -34,7 +34,8 @@ add_custom_command( set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -nostdinc -fvisibility=hidden -fpie -fstack-protector") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} -nostdinc++") -set(ENCLAVE_LINK_FLAGS "-Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined -Wl,-pie,-eenclave_entry -Wl,--export-dynamic -Wl,--defsym,__ImageBase=0 -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/Enclave.lds") +#set(ENCLAVE_LINK_FLAGS "-Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined -Wl,-pie,-eenclave_entry -Wl,--export-dynamic -Wl,--defsym,__ImageBase=0 -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/Enclave.lds") +set(ENCLAVE_LINK_FLAGS "-Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined -Wl,-pie -Wl,--export-dynamic -Wl,--defsym,__ImageBase=0") add_library(enclave_trusted SHARED ${SOURCES}) set_property(TARGET enclave_trusted PROPERTY POSITION_INDEPENDENT_CODE OFF) @@ -85,7 +86,7 @@ add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/enclave_trusted.signed) add_custom_command( - COMMAND mv ${CMAKE_CURRENT_BINARY_DIR}/enclave_trusted.signed ${CMAKE_CURRENT_BINARY_DIR}/libenclave_trusted_signed.so + COMMAND mv ${CMAKE_CURRENT_BINARY_DIR}/libenclave_trusted.so.signed ${CMAKE_CURRENT_BINARY_DIR}/libenclave_trusted_signed.so DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/enclave_trusted.signed OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libenclave_trusted_signed.so ) From f5d61811e7b55d82db4aee205889e52d7964e054 Mon Sep 17 00:00:00 2001 From: vtikoo Date: Sat, 23 Nov 2019 00:08:42 +0000 Subject: [PATCH 037/101] replace sgx_read_rand with mbedtls ctr drbg based impl --- src/enclave/Enclave/CMakeLists.txt | 1 + src/enclave/Enclave/Crypto.cpp | 12 +++++----- src/enclave/Enclave/Filter.cpp | 2 -- src/enclave/Enclave/Random.cpp | 36 ++++++++++++++++++++++++++++++ src/enclave/Enclave/Random.h | 10 +++++++++ src/enclave/Enclave/Sort.cpp | 10 +++++---- 6 files changed, 58 insertions(+), 13 deletions(-) create mode 100644 src/enclave/Enclave/Random.cpp create mode 100644 src/enclave/Enclave/Random.h diff --git a/src/enclave/Enclave/CMakeLists.txt b/src/enclave/Enclave/CMakeLists.txt index bc6bf84483..07c1ba4455 100644 --- a/src/enclave/Enclave/CMakeLists.txt +++ b/src/enclave/Enclave/CMakeLists.txt @@ -15,6 +15,7 @@ set(SOURCES Sort.cpp sgxaes.cpp sgxaes_asm.S + Random.cpp util.cpp ${CMAKE_CURRENT_BINARY_DIR}/Enclave_t.c ${CMAKE_CURRENT_BINARY_DIR}/key.cpp) diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index 9508da8f88..6d74f25414 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -1,4 +1,5 @@ #include "Crypto.h" +#include "Random.h" #include // #include @@ -45,23 +46,20 @@ void encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphertext_ptr = ciphertext + SGX_AESGCM_IV_SIZE; sgx_aes_gcm_128bit_tag_t *mac_ptr = (sgx_aes_gcm_128bit_tag_t *) (ciphertext + SGX_AESGCM_IV_SIZE + plaintext_length); - unsigned char hard_coded_iv[SGX_AESGCM_IV_SIZE] = {'O', 'p', 'a', 'q', 'u', 'e','O', 'p', 'a', 'q', 'u', 'e' }; - //sgx_read_rand(iv_ptr, SGX_AESGCM_IV_SIZE); - // TODO: fix this!!!! - iv_ptr = reinterpret_cast(hard_coded_iv); + // oe_get_entropy(iv_ptr, SGX_AESGCM_IV_SIZE); + // sgx_read_rand(iv_ptr, SGX_AESGCM_IV_SIZE); + mbedtls_read_rand(reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); - AesGcm cipher(ks.get(), iv_ptr, SGX_AESGCM_IV_SIZE); + AesGcm cipher(ks.get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); } - void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *plaintext) { if (!ks) { throw std::runtime_error( "Cannot encrypt without a shared key. Ensure all enclaves have completed attestation."); } - uint32_t plaintext_length = dec_size(ciphertext_length); uint8_t *iv_ptr = (uint8_t *) ciphertext; diff --git a/src/enclave/Enclave/Filter.cpp b/src/enclave/Enclave/Filter.cpp index 7a6ac6f052..b165cc1ae1 100644 --- a/src/enclave/Enclave/Filter.cpp +++ b/src/enclave/Enclave/Filter.cpp @@ -14,10 +14,8 @@ void filter(uint8_t *condition, size_t condition_length, BufferRefView condition_buf(condition, condition_length); condition_buf.verify(); FlatbuffersExpressionEvaluator condition_eval(condition_buf.root()->condition()); - RowReader r(BufferRefView(input_rows, input_rows_length)); RowWriter w; - while (r.has_next()) { const tuix::Row *row = r.next(); const tuix::Field *condition_result = condition_eval.eval(row); diff --git a/src/enclave/Enclave/Random.cpp b/src/enclave/Enclave/Random.cpp new file mode 100644 index 0000000000..b770e1fa1d --- /dev/null +++ b/src/enclave/Enclave/Random.cpp @@ -0,0 +1,36 @@ +#include "Random.h" +#include "common.h" +#include "util.h" + +#include "mbedtls/entropy.h" +#include "mbedtls/ctr_drbg.h" + +int mbedtls_read_rand(unsigned char* buf, size_t buf_len) { + int ret = 1; + mbedtls_ctr_drbg_context ctr_drbg; + mbedtls_entropy_context entropy; + + mbedtls_ctr_drbg_init( &ctr_drbg ); + mbedtls_entropy_init( &entropy ); + ret = mbedtls_ctr_drbg_seed( &ctr_drbg, mbedtls_entropy_func, &entropy, (const unsigned char *) "RANDOM_GEN", 10 ); + if (ret != 0) + { + printf("seed failed"); + goto cleanup; + } + + mbedtls_ctr_drbg_set_prediction_resistance( &ctr_drbg, MBEDTLS_CTR_DRBG_PR_OFF ); + + ret = mbedtls_ctr_drbg_random( &ctr_drbg, buf, buf_len ); + if( ret != 0 ) + { + printf("random failed"); + goto cleanup; + + } + mbedtls_ctr_drbg_free( &ctr_drbg ); + mbedtls_entropy_free( &entropy ); + +cleanup: + return ret; +} diff --git a/src/enclave/Enclave/Random.h b/src/enclave/Enclave/Random.h new file mode 100644 index 0000000000..4ed7c757b0 --- /dev/null +++ b/src/enclave/Enclave/Random.h @@ -0,0 +1,10 @@ +#include +#include + +#ifndef RANDOM_H +#define RANDOM_H + +int mbedtls_read_rand( + unsigned char* buf, size_t buf_len); + +#endif \ No newline at end of file diff --git a/src/enclave/Enclave/Sort.cpp b/src/enclave/Enclave/Sort.cpp index c3aee9c57d..e67c7a1b9d 100644 --- a/src/enclave/Enclave/Sort.cpp +++ b/src/enclave/Enclave/Sort.cpp @@ -1,4 +1,5 @@ #include "Sort.h" +#include "Random.h" #include #include @@ -8,6 +9,8 @@ #include "FlatbuffersWriters.h" //#include "rdrand.h" + + class MergeItem { public: const tuix::Row *v; @@ -143,10 +146,9 @@ void sample(uint8_t *input_rows, size_t input_rows_length, const tuix::Row *row = r.next(); uint16_t rand; - //sgx_read_rand(reinterpret_cast(&rand), 2); - //rdrand_get_bytes((uint32_t)2, reinterpret_cast(&rand)); - //TODO: fix this!!! - rand = 23; + // sgx_read_rand(reinterpret_cast(&rand), 2); + // oe_get_entropy(reinterpret_cast(&rand), 2); + mbedtls_read_rand(reinterpret_cast(&rand), 2); if (rand <= sampling_ratio) { w.append(row); } From 197e4d9047a79296f02cfc3fcf7f136be05b132e Mon Sep 17 00:00:00 2001 From: vtikoo Date: Wed, 27 Nov 2019 03:01:31 +0000 Subject: [PATCH 038/101] replace malloc impl with oe_host_malloc --- src/enclave/Enclave/util.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/enclave/Enclave/util.cpp b/src/enclave/Enclave/util.cpp index b6a282769d..0a9111fa0e 100644 --- a/src/enclave/Enclave/util.cpp +++ b/src/enclave/Enclave/util.cpp @@ -5,6 +5,7 @@ #include "Enclave_t.h" //#include "sgx_lfence.h" +//#include int printf(const char *fmt, ...) { char buf[BUFSIZ] = {'\0'}; @@ -40,13 +41,13 @@ void exit1(int exit_code) { } void ocall_malloc(size_t size, uint8_t **ret) { - unsafe_ocall_malloc(size, ret); - + // unsafe_ocall_malloc(size, ret); // Guard against overwriting enclave memory /* assert(sgx_is_outside_enclave(*ret, size) == 1); sgx_lfence(); */ + *ret = (uint8_t*)oe_host_malloc(size); } void print_bytes(uint8_t *ptr, uint32_t len) { From c3fcc0d7f13167bce88c1714c5c1ce7f72c64185 Mon Sep 17 00:00:00 2001 From: Yen Lee Date: Fri, 27 Dec 2019 23:36:12 +0000 Subject: [PATCH 039/101] OE report and RSA encryption --- src/enclave/App/App.cpp | 20 ++ src/enclave/App/SGXEnclave.h | 5 +- src/enclave/Common/KpiCrypto.cpp | 241 ++++++++++++++++++ src/enclave/Common/KpiCrypto.h | 81 ++++++ src/enclave/Common/common.h | 15 ++ src/enclave/Enclave/CMakeLists.txt | 1 + src/enclave/Enclave/Crypto.cpp | 8 +- src/enclave/Enclave/Enclave.cpp | 80 +++++- src/enclave/Enclave/Enclave.edl | 4 + src/enclave/ServiceProvider/CMakeLists.txt | 8 +- .../ServiceProvider/ServiceProvider.cpp | 50 ++++ src/enclave/ServiceProvider/ServiceProvider.h | 1 + .../ServiceProvider/ServiceProviderJNI.cpp | 36 +-- src/enclave/ServiceProvider/crypto.cpp | 49 ++++ src/enclave/ServiceProvider/crypto.h | 3 + .../edu/berkeley/cs/rise/opaque/RA.scala | 10 +- .../cs/rise/opaque/execution/SGXEnclave.scala | 1 + 17 files changed, 586 insertions(+), 27 deletions(-) create mode 100644 src/enclave/Common/KpiCrypto.cpp create mode 100644 src/enclave/Common/KpiCrypto.h diff --git a/src/enclave/App/App.cpp b/src/enclave/App/App.cpp index 7169c37577..9870810749 100644 --- a/src/enclave/App/App.cpp +++ b/src/enclave/App/App.cpp @@ -493,9 +493,29 @@ JNIEXPORT jlong JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_St ); env->ReleaseStringUTFChars(library_path, library_path_str); long int enclavePtr = (long int)enclave; + return enclavePtr; } +JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation1( + JNIEnv *env, jobject obj, jlong eid) { + (void)obj; + (void)eid; + + uint8_t* msg1 = NULL; + size_t msg1_size = 0; + + oe_check_and_time("Remote Attestation Step 1.2", + ecall_oe_proc_msg1((oe_enclave_t*)eid, + &msg1, + &msg1_size)); + + // Allocate memory + jbyteArray msg1_bytes = env->NewByteArray(msg1_size); + env->SetByteArrayRegion(msg1_bytes, 0, msg1_size, reinterpret_cast(msg1)); + + return msg1_bytes; +} JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation3( JNIEnv *env, jobject obj, jlong eid, jbyteArray msg4_input) { diff --git a/src/enclave/App/SGXEnclave.h b/src/enclave/App/SGXEnclave.h index 3893be9978..a42957ea65 100644 --- a/src/enclave/App/SGXEnclave.h +++ b/src/enclave/App/SGXEnclave.h @@ -52,7 +52,10 @@ extern "C" { JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep2( JNIEnv *, jobject, jlong, jbyteArray, jbyteArray, jbyteArray, jbyteArray, jbyteArray); - + + JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation1( + JNIEnv *, jobject, jlong); + JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation3( JNIEnv *, jobject, jlong, jbyteArray); diff --git a/src/enclave/Common/KpiCrypto.cpp b/src/enclave/Common/KpiCrypto.cpp new file mode 100644 index 0000000000..f22dc09db6 --- /dev/null +++ b/src/enclave/Common/KpiCrypto.cpp @@ -0,0 +1,241 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#include "KpiCrypto.h" +#include +#include +#include +#include +#include +#include + +Crypto::Crypto(): m_initialized(false) +{ + // mbedtls_net_init(NULL); + m_initialized = init_mbedtls(); +} + +Crypto::~Crypto() +{ + cleanup_mbedtls(); +} + +/** + * init_mbedtls initializes the crypto module. + * mbedtls initialization. Please refer to mbedtls documentation for detailed + * information about the functions used. + */ +bool Crypto::init_mbedtls(void) +{ + bool ret = false; + int res = -1; + + if (m_initialized) + return true; + m_initialized = true; + + mbedtls_ctr_drbg_init(&m_ctr_drbg_contex); + mbedtls_entropy_init(&m_entropy_context); + mbedtls_pk_init(&m_pk_context); + + // Initialize entropy. + res = mbedtls_ctr_drbg_seed( + &m_ctr_drbg_contex, mbedtls_entropy_func, &m_entropy_context, NULL, 0); + if (res != 0) + { + fprintf(stderr, "mbedtls_ctr_drbg_seed failed.\n"); + goto exit; + } + + // Initialize RSA context. + res = mbedtls_pk_setup( + &m_pk_context, mbedtls_pk_info_from_type(MBEDTLS_PK_RSA)); + if (res != 0) + { + fprintf(stderr, "mbedtls_pk_setup failed (%d).\n", res); + goto exit; + } + + // Generate an ephemeral 2048-bit RSA key pair with + // exponent 65537 for the enclave. + res = mbedtls_rsa_gen_key( + mbedtls_pk_rsa(m_pk_context), + mbedtls_ctr_drbg_random, + &m_ctr_drbg_contex, + 2048, + 65537); + if (res != 0) + { + fprintf(stderr, "mbedtls_rsa_gen_key failed (%d)\n", res); + goto exit; + } + + // Write out the public key in PEM format for exchange with other enclaves. + res = mbedtls_pk_write_pubkey_pem( + &m_pk_context, m_public_key, sizeof(m_public_key)); + if (res != 0) + { + fprintf(stderr, "mbedtls_pk_write_pubkey_pem failed (%d)\n", res); + goto exit; + } + ret = true; + +exit: + return ret; +} + +/** + * mbedtls cleanup during shutdown. + */ +void Crypto::cleanup_mbedtls(void) +{ + mbedtls_pk_free(&m_pk_context); + mbedtls_entropy_free(&m_entropy_context); + mbedtls_ctr_drbg_free(&m_ctr_drbg_contex); +} + +/** + * Get the public key for this enclave. + */ +void Crypto::retrieve_public_key(uint8_t pem_public_key[512]) +{ + memcpy(pem_public_key, m_public_key, sizeof(m_public_key)); +} + +// Compute the sha256 hash of given data. +int Crypto::sha256(const uint8_t* data, size_t data_size, uint8_t sha256[32]) +{ + int ret = 0; + mbedtls_sha256_context ctx; + + mbedtls_sha256_init(&ctx); + + ret = mbedtls_sha256_starts_ret(&ctx, 0); + if (ret) + goto exit; + + ret = mbedtls_sha256_update_ret(&ctx, data, data_size); + if (ret) + goto exit; + + ret = mbedtls_sha256_finish_ret(&ctx, sha256); + if (ret) + goto exit; + +exit: + mbedtls_sha256_free(&ctx); + return ret; +} + +/** + * Encrypt encrypts the given data using the given public key. + * Used to encrypt data using the public key of another enclave. + */ +bool Crypto::encrypt( + const uint8_t* pem_public_key, + const uint8_t* data, + size_t data_size, + uint8_t* encrypted_data, + size_t* encrypted_data_size) +{ + bool result = false; + mbedtls_pk_context key; + mbedtls_entropy_context entropy; + mbedtls_ctr_drbg_context ctr_drbg; + size_t key_size = 0; + int res = -1; + mbedtls_rsa_context* rsa_context; + + mbedtls_ctr_drbg_init( &ctr_drbg ); + mbedtls_entropy_init( &entropy ); + mbedtls_pk_init(&key); + + res = mbedtls_ctr_drbg_seed( + &ctr_drbg, mbedtls_entropy_func, &entropy, NULL, 0); + if (res != 0) + { + fprintf(stderr, "mbedtls_ctr_drbg_seed failed.\n"); + goto exit; + } + + // Read the given public key. + key_size = strlen((const char*)pem_public_key) + 1; // Include ending '\0'. + res = mbedtls_pk_parse_public_key(&key, pem_public_key, key_size); + if (res != 0) + { + fprintf(stderr, "mbedtls_pk_parse_public_key failed.\n"); + goto exit; + } + + rsa_context = mbedtls_pk_rsa(key); + rsa_context->padding = MBEDTLS_RSA_PKCS_V15; + rsa_context->hash_id = MBEDTLS_MD_SHA256; + + // Encrypt the data. + res = mbedtls_rsa_pkcs1_encrypt( + rsa_context, + mbedtls_ctr_drbg_random, + &ctr_drbg, + MBEDTLS_RSA_PUBLIC, + data_size, + data, + encrypted_data); + if (res != 0) + { + fprintf(stderr, "mbedtls_rsa_pkcs1_encrypt failed with %d\n", res); + goto exit; + } + + *encrypted_data_size = mbedtls_pk_rsa(key)->len; + result = true; +exit: + mbedtls_pk_free(&key); + mbedtls_entropy_free( &entropy ); + mbedtls_ctr_drbg_free( &ctr_drbg ); + return result; +} + +/** + * decrypt the given data using current enclave's private key. + * Used to receive encrypted data from another enclave. + */ +bool Crypto::decrypt( + const uint8_t* encrypted_data, + size_t encrypted_data_size, + uint8_t* data, + size_t* data_size) +{ + bool ret = false; + size_t output_size = 0; + int res = 0; + mbedtls_rsa_context* rsa_context; + + if (!m_initialized) + goto exit; + + mbedtls_pk_rsa(m_pk_context)->len = encrypted_data_size; + rsa_context = mbedtls_pk_rsa(m_pk_context); + rsa_context->padding = MBEDTLS_RSA_PKCS_V15; + rsa_context->hash_id = MBEDTLS_MD_SHA256; + + output_size = *data_size; + res = mbedtls_rsa_pkcs1_decrypt( + rsa_context, + mbedtls_ctr_drbg_random, + &m_ctr_drbg_contex, + MBEDTLS_RSA_PRIVATE, + &output_size, + encrypted_data, + data, + output_size); + if (res != 0) + { + fprintf(stderr, "mbedtls_rsa_pkcs1_decrypt failed with -0x%x\n", -res); + goto exit; + } + *data_size = output_size; + ret = true; + +exit: + return ret; +} diff --git a/src/enclave/Common/KpiCrypto.h b/src/enclave/Common/KpiCrypto.h new file mode 100644 index 0000000000..0f075f53af --- /dev/null +++ b/src/enclave/Common/KpiCrypto.h @@ -0,0 +1,81 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#ifndef OE_SAMPLES_ATTESTATION_ENC_CRYPTO_H +#define OE_SAMPLES_ATTESTATION_ENC_CRYPTO_H + +//#include +// Includes for mbedtls shipped with oe. +// Also add the following libraries to your linker command line: +// -loeenclave -lmbedcrypto -lmbedtls -lmbedx509 +#include +#include +#include +#include +#include +#include + +#include "common.h" +//#define PUBLIC_KEY_SIZE 512 + +class Crypto +{ + private: + mbedtls_ctr_drbg_context m_ctr_drbg_contex; + mbedtls_entropy_context m_entropy_context; + mbedtls_pk_context m_pk_context; + uint8_t m_public_key[OE_PUBLIC_KEY_SIZE]; + bool m_initialized; + + public: + Crypto(); + ~Crypto(); + + /** init_mbedtls initializes the crypto module. + */ + bool init_mbedtls(void); + + /** + * Get this enclave's own public key + */ + void retrieve_public_key(uint8_t pem_public_key[OE_PUBLIC_KEY_SIZE]); + + /** + * Encrypt encrypts the given data using the given public key. + * Used to encrypt data using the public key of another enclave. + */ + static bool encrypt( + const uint8_t* pem_public_key, + const uint8_t* data, + size_t size, + uint8_t* encrypted_data, + size_t* encrypted_data_size); + + /** + * decrypt decrypts the given data using current enclave's private key. + * Used to receive encrypted data from another enclave. + */ + bool decrypt( + const uint8_t* encrypted_data, + size_t encrypted_data_size, + uint8_t* data, + size_t* data_size); + + /** + * Compute the sha256 hash of given data. + */ + int sha256(const uint8_t* data, size_t data_size, uint8_t sha256[32]); + + private: + /** + * Crypto demonstrates use of mbedtls within the enclave to generate keys + * and perform encryption. In this sample, each enclave instance generates + * an ephemeral 2048-bit RSA key pair and shares the public key with the + * other instance. The other enclave instance then replies with data + * encrypted to the provided public key. + */ + + void cleanup_mbedtls(void); +}; + +#endif // OE_SAMPLES_ATTESTATION_ENC_CRYPTO_H diff --git a/src/enclave/Common/common.h b/src/enclave/Common/common.h index fe332d0563..2522ce1112 100644 --- a/src/enclave/Common/common.h +++ b/src/enclave/Common/common.h @@ -78,4 +78,19 @@ inline void PRINT_BYTE_ARRAY(void *file, void *mem, uint32_t len) typedef uint8_t sgx_aes_gcm_128bit_tag_t[SGX_AESGCM_MAC_SIZE]; + +#define OE_SHA256_HASH_SIZE 32 +#define OE_PUBLIC_KEY_SIZE 512 +#define OE_SHARED_KEY_CIPHERTEXT_SIZE 256 + +typedef struct oe_msg1_t { + uint8_t public_key[OE_PUBLIC_KEY_SIZE]; + size_t report_size; + uint8_t report[]; +} oe_msg1_t; + +typedef struct oe_msg2_t { + uint8_t shared_key_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; +} oe_msg2_t; + #endif // COMMON_H diff --git a/src/enclave/Enclave/CMakeLists.txt b/src/enclave/Enclave/CMakeLists.txt index 07c1ba4455..3ea54ceeb0 100644 --- a/src/enclave/Enclave/CMakeLists.txt +++ b/src/enclave/Enclave/CMakeLists.txt @@ -17,6 +17,7 @@ set(SOURCES sgxaes_asm.S Random.cpp util.cpp + ../Common/KpiCrypto.cpp ${CMAKE_CURRENT_BINARY_DIR}/Enclave_t.c ${CMAKE_CURRENT_BINARY_DIR}/key.cpp) diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index 6d74f25414..4d7751e0f5 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -16,7 +16,7 @@ * edu.berkeley.cs.rise.opaque.Utils.sharedKey. It is securely sent to the enclaves if attestation * succeeds. */ -unsigned char shared_key[SGX_AESGCM_KEY_SIZE] = {'O', 'p', 'a', 'q', 'u', 'e', ' ', 'd', 'e', 'v', 'e', 'l', ' ', 'k', 'e', 'y'}; //### +unsigned char shared_key[SGX_AESGCM_KEY_SIZE] = {0}; std::unique_ptr ks; @@ -24,11 +24,11 @@ void initKeySchedule() { ks.reset(new KeySchedule(reinterpret_cast(shared_key), SGX_AESGCM_KEY_SIZE)); } -void set_shared_key(uint8_t *msg4_bytes, uint32_t msg4_size) { - if (msg4_size <= 0) { +void set_shared_key(uint8_t *shared_key_bytes, uint32_t shared_key_size) { + if (shared_key_size <= 0) { throw std::runtime_error("Remote attestation step 4: Invalid message size."); } - (void)msg4_bytes; + memcpy_s(shared_key, sizeof(shared_key), shared_key_bytes, shared_key_size); initKeySchedule(); } diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 8e507dd2ef..935ae85834 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -14,6 +14,15 @@ #include "Sort.h" #include "util.h" +#include "../Common/common.h" +#include "../Common/KpiCrypto.h" +#include +#include +#include +#include +#include +#include + // This file contains definitions of the ecalls declared in Enclave.edl. Errors originating within // these ecalls are signaled by throwing a std::runtime_error, which is caught at the top level of // the ecall (i.e., within these definitions), and are then rethrown as Java exceptions using @@ -222,11 +231,80 @@ void ecall_non_oblivious_aggregate_step2( } } +static Crypto g_crypto; + void ecall_ra_proc_msg4( uint8_t *msg4, uint32_t msg4_size) { try { - set_shared_key(msg4, msg4_size); + oe_msg2_t* msg2 = (oe_msg2_t*)msg4; + uint8_t shared_key_plaintext[SGX_AESGCM_KEY_SIZE]; + size_t shared_key_plaintext_size = sizeof(shared_key_plaintext); + bool ret = g_crypto.decrypt(msg2->shared_key_ciphertext, msg4_size, shared_key_plaintext, &shared_key_plaintext_size); + if (!ret) + { + ocall_throw("shared key decryption failed"); + } + + set_shared_key(shared_key_plaintext, shared_key_plaintext_size); } catch (const std::runtime_error &e) { ocall_throw(e.what()); } } + +void ecall_oe_proc_msg1( + uint8_t **msg1_data, size_t* msg1_data_size) { + + oe_result_t result = OE_FAILURE; + uint8_t public_key[OE_PUBLIC_KEY_SIZE] = {}; + size_t public_key_size = sizeof(public_key); + uint8_t sha256[OE_SHA256_HASH_SIZE]; + uint8_t* report = NULL; + size_t report_size; + oe_msg1_t* msg1 = NULL; + + if (msg1_data == NULL || msg1_data_size == NULL) + { + ocall_throw("Invalid parameter"); + } + + *msg1_data = NULL; + *msg1_data_size = 0; + + g_crypto.retrieve_public_key(public_key); + + if (g_crypto.sha256(public_key, public_key_size, sha256) != 0) + { + ocall_throw("sha256 failed"); + } + + // get report + result = oe_get_report( + OE_REPORT_FLAGS_REMOTE_ATTESTATION, + sha256, // Store sha256 in report_data field + sizeof(sha256), + NULL, + 0, + &report, + &report_size); + if (result != OE_OK) + { + ocall_throw("oe_get_report failed"); + } + + if (report != NULL) + { + *msg1_data_size = sizeof(oe_msg1_t) + report_size; + *msg1_data = (uint8_t*)oe_host_malloc(*msg1_data_size); + if (*msg1_data == NULL) + { + ocall_throw("Out of memory"); + } + msg1 = (oe_msg1_t*)(*msg1_data); + + // Fill oe_msg1_t + memcpy_s(msg1->public_key, sizeof(((oe_msg1_t*)0)->public_key), public_key, public_key_size); + msg1->report_size = report_size; + memcpy_s(msg1->report, report_size, report, report_size); + oe_free_report(report); + } +} diff --git a/src/enclave/Enclave/Enclave.edl b/src/enclave/Enclave/Enclave.edl index e6114033d2..6e3e551285 100644 --- a/src/enclave/Enclave/Enclave.edl +++ b/src/enclave/Enclave/Enclave.edl @@ -72,6 +72,10 @@ enclave { [user_check] uint8_t *prev_partition_last_row, size_t prev_partition_last_row_length, [out] uint8_t **output_rows, [out] size_t *output_rows_length); + public void ecall_oe_proc_msg1( + [out] uint8_t** msg1, + [out] size_t* msg1_size); + public void ecall_ra_proc_msg4( [in,size=msg4_size] uint8_t *msg4, uint32_t msg4_size); diff --git a/src/enclave/ServiceProvider/CMakeLists.txt b/src/enclave/ServiceProvider/CMakeLists.txt index dcf6501e35..b06b2c26d6 100644 --- a/src/enclave/ServiceProvider/CMakeLists.txt +++ b/src/enclave/ServiceProvider/CMakeLists.txt @@ -13,6 +13,10 @@ set(SOURCES iasrequest.cpp sp_crypto.cpp) +link_directories(/opt/openenclave/lib/openenclave/enclave) +include_directories("/opt/openenclave/include") +include_directories("/opt/openenclave/include/openenclave/3rdparty") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wno-attributes") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}") @@ -20,9 +24,9 @@ add_library(ra_jni SHARED ${SOURCES}) find_library(CRYPTO_LIB crypto) find_library(SSL_LIB ssl) -target_link_libraries(ra_jni "${CRYPTO_LIB}" "${SSL_LIB}") +target_link_libraries(ra_jni "${CRYPTO_LIB}" "${SSL_LIB}" openenclave::oehostapp) add_executable(keygen ${SOURCES}) -target_link_libraries(keygen "${CRYPTO_LIB}" "${SSL_LIB}") +target_link_libraries(keygen "${CRYPTO_LIB}" "${SSL_LIB}" openenclave::oehostapp) install(TARGETS ra_jni DESTINATION lib) diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index 7107b0fee6..43310c31ed 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -4,6 +4,9 @@ #include //#include +#include +#include + #include "ecp.h" #include "ias_ra.h" #include "iasrequest.h" @@ -11,6 +14,8 @@ #include "base64.h" #include "json.hpp" +#include + #include "ServiceProvider.h" // Your 16-byte Service Provider ID (SPID), assigned by Intel. @@ -146,3 +151,48 @@ void ServiceProvider::export_public_key_code(const std::string &filename) { file << "};\n"; file.close(); } + +std::unique_ptr ServiceProvider::process_msg1( + oe_msg1_t *msg1, uint32_t *msg2_size) { + + //verify report + oe_report_t parsed_report; + oe_result_t result = OE_FAILURE; + std::unique_ptr msg2(new oe_msg2_t); + int ret; + + unsigned char encrypted_sharedkey[OE_SHARED_KEY_CIPHERTEXT_SIZE]; + size_t encrypted_sharedkey_size = sizeof(encrypted_sharedkey); + + EVP_PKEY* pkey = buffer_to_public_key((char*)msg1->public_key, -1); + if (pkey == nullptr) { + throw std::runtime_error("buffer_to_public_key failed."); + } + + result = oe_verify_remote_report(msg1->report, msg1->report_size, &parsed_report); + if (result != OE_OK) { + throw std::runtime_error( + std::string("oe_verify_remote_report: ") + + oe_result_str(result)); + } + + //TODO - other verification + + // Encrypt shared key + ret = public_encrypt(pkey, this->shared_key, LC_AESGCM_KEY_SIZE, encrypted_sharedkey, &encrypted_sharedkey_size); + if (ret == 0) { + throw std::runtime_error(std::string("public_encrypt: buffer too small")); + } + else if (ret < 0) { + throw std::runtime_error(std::string("public_encrypt failed")); + } + + // Prepare msg2 + memcpy_s(msg2->shared_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, encrypted_sharedkey, encrypted_sharedkey_size); + *msg2_size = sizeof(oe_msg2_t); + + // clean up + EVP_PKEY_free(pkey); + + return msg2; +} diff --git a/src/enclave/ServiceProvider/ServiceProvider.h b/src/enclave/ServiceProvider/ServiceProvider.h index e980d14f07..d039211823 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.h +++ b/src/enclave/ServiceProvider/ServiceProvider.h @@ -57,6 +57,7 @@ class ServiceProvider { // * You must call `ensure_ias_connection` before calling this method. // */ // std::unique_ptr process_msg1(sgx_ra_msg1_t *msg1, uint32_t *msg2_size); + std::unique_ptr process_msg1(oe_msg1_t *msg1, uint32_t *msg2_size); // /** // * Process attestation message 3 from an enclave and generate message 4 for that enclave. Message diff --git a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp index e7ef2dbb95..a54615d38c 100644 --- a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp +++ b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp @@ -63,29 +63,29 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( // env->ReleaseByteArrayElements(msg0_input, msg0_bytes, 0); // } -// JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg1( -// JNIEnv *env, jobject obj, jbyteArray msg1_input) { -// (void)obj; +JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg1( + JNIEnv *env, jobject obj, jbyteArray msg1_input) { + (void)obj; -// jboolean if_copy = false; -// jbyte *msg1_bytes = env->GetByteArrayElements(msg1_input, &if_copy); -// sgx_ra_msg1_t *msg1 = reinterpret_cast(msg1_bytes); + jboolean if_copy = false; + jbyte *msg1_bytes = env->GetByteArrayElements(msg1_input, &if_copy); + oe_msg1_t *msg1 = reinterpret_cast(msg1_bytes); -// uint32_t msg2_size = 0; -// std::unique_ptr msg2; -// try { -// msg2 = service_provider.process_msg1(msg1, &msg2_size); -// } catch (const std::runtime_error &e) { -// jni_throw(env, e.what()); -// } + uint32_t msg2_size = 0; + std::unique_ptr msg2; + try { + msg2 = service_provider.process_msg1(msg1, &msg2_size); + } catch (const std::runtime_error &e) { + jni_throw(env, e.what()); + } -// jbyteArray array_ret = env->NewByteArray(msg2_size); -// env->SetByteArrayRegion(array_ret, 0, msg2_size, reinterpret_cast(msg2.get())); + jbyteArray array_ret = env->NewByteArray(msg2_size); + env->SetByteArrayRegion(array_ret, 0, msg2_size, reinterpret_cast(msg2.get())); -// env->ReleaseByteArrayElements(msg1_input, msg1_bytes, 0); + env->ReleaseByteArrayElements(msg1_input, msg1_bytes, 0); -// return array_ret; -// } + return array_ret; +} // JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg3( // JNIEnv *env, jobject obj, jbyteArray msg3_input) { diff --git a/src/enclave/ServiceProvider/crypto.cpp b/src/enclave/ServiceProvider/crypto.cpp index 0fd54abd62..a7913618f6 100644 --- a/src/enclave/ServiceProvider/crypto.cpp +++ b/src/enclave/ServiceProvider/crypto.cpp @@ -205,3 +205,52 @@ void cert_stack_free (STACK_OF(X509) *chain) { sk_X509_free(chain); } + +EVP_PKEY* buffer_to_public_key(char* input_buffer, int input_buf_size) +{ + BIO* bio = BIO_new_mem_buf(input_buffer, input_buf_size); + EVP_PKEY *key = EVP_PKEY_new(); + key = PEM_read_bio_PUBKEY(bio, &key, NULL, NULL); + if (key == NULL) + { + unsigned long ulErr = ERR_get_error(); + fprintf(stderr, "PEM_read_bio_RSA_PUBKEY() failed with '%s'\n", ERR_reason_error_string(ulErr)); + } + + BIO_free(bio); + + return key; +} + +int public_encrypt(EVP_PKEY* key, unsigned char * data, int data_len, unsigned char* encrypted, size_t* encrypted_len) +{ + size_t outlen = 0; + const int padding = RSA_PKCS1_PADDING; + ENGINE *eng = NULL; + EVP_PKEY_CTX* ctx = EVP_PKEY_CTX_new(key, eng); + + if (EVP_PKEY_encrypt_init(ctx) <= 0) + { + return -1; + } + if (EVP_PKEY_CTX_set_rsa_padding(ctx, padding) <= 0) + { + return -1; + } + if (EVP_PKEY_encrypt(ctx, NULL, &outlen, data, data_len) <= 0) + { + return -1; + } + if (*encrypted_len < outlen) + { + *encrypted_len = outlen; + return 0; + } + + if (EVP_PKEY_encrypt(ctx, encrypted, encrypted_len, data, data_len) <= 0) + { + return -1; + } + + return *encrypted_len; +} diff --git a/src/enclave/ServiceProvider/crypto.h b/src/enclave/ServiceProvider/crypto.h index 18265a2cda..cfc6be279b 100644 --- a/src/enclave/ServiceProvider/crypto.h +++ b/src/enclave/ServiceProvider/crypto.h @@ -45,6 +45,9 @@ int cert_verify(X509_STORE *store, STACK_OF(X509) *chain); STACK_OF(X509) *cert_stack_build(X509 **certs); void cert_stack_free(STACK_OF(X509) *chain); +EVP_PKEY* buffer_to_public_key(char* input_buffer, int input_buf_size); +int public_encrypt(EVP_PKEY* key, unsigned char * data, int data_len, unsigned char* encrypted, size_t* encrypted_len); + #ifdef __cplusplus }; #endif diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index 5ea59f03fa..b618afdf32 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -35,9 +35,17 @@ object RA extends Logging { Utils.retry(3) { sp.Init(Utils.sharedKey, intelCert) + val msg1s = rdd.mapPartitionsWithIndex { (i, _) => + val (enclave, eid) = Utils.initEnclave() + val msg1 = enclave.RemoteAttestation1(eid) + Iterator((i, msg1)) + }.collect.toMap + + val msg2s = msg1s.mapValues(msg1 => sp.SPProcMsg1(msg1)).map(identity) + val statuses = rdd.mapPartitionsWithIndex { (i, _) => val (enclave, eid) = Utils.initEnclave() - enclave.RemoteAttestation3(eid, Utils.sharedKey) + enclave.RemoteAttestation3(eid, msg2s(i)) Iterator((i, true)) }.collect.toMap diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala index 33f47d6981..353003edaa 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala @@ -51,5 +51,6 @@ class SGXEnclave extends java.io.Serializable { prevPartitionLastGroup: Array[Byte], prevPartitionLastRow: Array[Byte]): Array[Byte] // Remote attestation, enclave side + @native def RemoteAttestation1(eid: Long): Array[Byte] @native def RemoteAttestation3(eid: Long, attResultInput: Array[Byte]): Unit } From a02813f90680bff9e12af5d6a1a6a84f30d71fef Mon Sep 17 00:00:00 2001 From: Yen Lee Date: Fri, 27 Dec 2019 23:55:55 +0000 Subject: [PATCH 040/101] mCrypto --- src/enclave/Common/{KpiCrypto.cpp => mCrypto.cpp} | 2 +- src/enclave/Common/{KpiCrypto.h => mCrypto.h} | 0 src/enclave/Enclave/CMakeLists.txt | 2 +- src/enclave/Enclave/Enclave.cpp | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) rename src/enclave/Common/{KpiCrypto.cpp => mCrypto.cpp} (99%) rename src/enclave/Common/{KpiCrypto.h => mCrypto.h} (100%) diff --git a/src/enclave/Common/KpiCrypto.cpp b/src/enclave/Common/mCrypto.cpp similarity index 99% rename from src/enclave/Common/KpiCrypto.cpp rename to src/enclave/Common/mCrypto.cpp index f22dc09db6..a2c3883b11 100644 --- a/src/enclave/Common/KpiCrypto.cpp +++ b/src/enclave/Common/mCrypto.cpp @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -#include "KpiCrypto.h" +#include "mCrypto.h" #include #include #include diff --git a/src/enclave/Common/KpiCrypto.h b/src/enclave/Common/mCrypto.h similarity index 100% rename from src/enclave/Common/KpiCrypto.h rename to src/enclave/Common/mCrypto.h diff --git a/src/enclave/Enclave/CMakeLists.txt b/src/enclave/Enclave/CMakeLists.txt index 3ea54ceeb0..4ad5fad776 100644 --- a/src/enclave/Enclave/CMakeLists.txt +++ b/src/enclave/Enclave/CMakeLists.txt @@ -17,7 +17,7 @@ set(SOURCES sgxaes_asm.S Random.cpp util.cpp - ../Common/KpiCrypto.cpp + ../Common/mCrypto.cpp ${CMAKE_CURRENT_BINARY_DIR}/Enclave_t.c ${CMAKE_CURRENT_BINARY_DIR}/key.cpp) diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 935ae85834..5644335e15 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -15,7 +15,7 @@ #include "util.h" #include "../Common/common.h" -#include "../Common/KpiCrypto.h" +#include "../Common/mCrypto.h" #include #include #include From c6499efd76486db493737cdaa7a7267402b7b90e Mon Sep 17 00:00:00 2001 From: Vikas Tikoo Date: Mon, 30 Dec 2019 20:48:20 +0000 Subject: [PATCH 041/101] uncomment strftime usages --- src/enclave/Enclave/Flatbuffers.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/enclave/Enclave/Flatbuffers.cpp b/src/enclave/Enclave/Flatbuffers.cpp index daf8a52d42..504926db73 100644 --- a/src/enclave/Enclave/Flatbuffers.cpp +++ b/src/enclave/Enclave/Flatbuffers.cpp @@ -22,7 +22,7 @@ std::string to_string(const Date &date) { struct tm tm; secs_to_tm(secs, &tm); char buffer[80]; - // strftime(buffer, sizeof(buffer), "%Y-%m-%d", &tm); + strftime(buffer, sizeof(buffer), "%Y-%m-%d", &tm); return std::string(buffer); } @@ -130,7 +130,7 @@ std::string to_string(const tuix::TimestampField *f) { struct tm tm; secs_to_tm(secs, &tm); char buffer[80]; - // strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &tm); + strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &tm); return std::string(buffer); } From ae690ce804206a680f41f523ac54b585bb525516 Mon Sep 17 00:00:00 2001 From: Yen Lee Date: Mon, 30 Dec 2019 21:58:35 +0000 Subject: [PATCH 042/101] new oe_remote_verify_report api --- src/enclave/ServiceProvider/ServiceProvider.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index 43310c31ed..bb00fae538 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -169,7 +169,7 @@ std::unique_ptr ServiceProvider::process_msg1( throw std::runtime_error("buffer_to_public_key failed."); } - result = oe_verify_remote_report(msg1->report, msg1->report_size, &parsed_report); + result = oe_verify_remote_report(msg1->report, msg1->report_size, NULL, 0, &parsed_report); if (result != OE_OK) { throw std::runtime_error( std::string("oe_verify_remote_report: ") From 187c467992822c0b9dc3d30f6ee8835a1123fe43 Mon Sep 17 00:00:00 2001 From: Wenting Zheng Date: Thu, 11 Jun 2020 17:01:55 -0700 Subject: [PATCH 043/101] Porting OpenEnclave --- src/enclave/App/App.cpp | 8 +- src/enclave/App/CMakeLists.txt | 6 +- src/enclave/CMakeLists.txt | 22 ++++-- src/enclave/Enclave/CMakeLists.txt | 47 ++--------- src/enclave/Enclave/Enclave.cpp | 56 +++++++------ src/enclave/ServiceProvider/CMakeLists.txt | 5 +- .../ServiceProvider/ServiceProvider.cpp | 78 +++++++++++++++++-- src/enclave/ServiceProvider/ServiceProvider.h | 9 ++- src/enclave/ServiceProvider/sp_crypto.h | 3 + .../edu/berkeley/cs/rise/opaque/RA.scala | 2 +- 10 files changed, 147 insertions(+), 89 deletions(-) diff --git a/src/enclave/App/App.cpp b/src/enclave/App/App.cpp index 9870810749..91fa8a7f3a 100644 --- a/src/enclave/App/App.cpp +++ b/src/enclave/App/App.cpp @@ -480,10 +480,10 @@ JNIEXPORT jlong JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_St //int updated = 0; uint32_t flags = 0; - const char* sgx_mode_env = std::getenv("SGX_MODE"); - if (strcmp(sgx_mode_env, "HW") != 0){ - flags |= OE_ENCLAVE_FLAG_SIMULATE; - } + +#ifdef SIMULATE + flags |= OE_ENCLAVE_FLAG_SIMULATE; +#endif const char *library_path_str = env->GetStringUTFChars(library_path, nullptr); oe_check_and_time("StartEnclave", diff --git a/src/enclave/App/CMakeLists.txt b/src/enclave/App/CMakeLists.txt index 577c54be4a..aa8cb271b7 100644 --- a/src/enclave/App/CMakeLists.txt +++ b/src/enclave/App/CMakeLists.txt @@ -7,7 +7,7 @@ set(SOURCES ${CMAKE_CURRENT_BINARY_DIR}/Enclave_u.c) add_custom_command( - COMMAND ${OE_EDGER8R} --untrusted ${CMAKE_SOURCE_DIR}/Enclave/Enclave.edl --search-path ${CMAKE_SOURCE_DIR}/Enclave + COMMAND oeedger8r --untrusted ${CMAKE_SOURCE_DIR}/Enclave/Enclave.edl --search-path ${CMAKE_SOURCE_DIR}/Enclave DEPENDS ${CMAKE_SOURCE_DIR}/Enclave/Enclave.edl OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Enclave_u.h ${CMAKE_CURRENT_BINARY_DIR}/Enclave_u.c ${CMAKE_CURRENT_BINARY_DIR}/Enclave_args.h) @@ -32,9 +32,9 @@ add_library(enclave_jni SHARED ${SOURCES}) # endif() target_include_directories(enclave_jni PRIVATE - # Needed for the generated file helloworld_u.h +# Needed for the generated file helloworld_u.h ${CMAKE_CURRENT_BINARY_DIR}) -target_link_libraries(enclave_jni openenclave::oehostapp) +target_link_libraries(enclave_jni openenclave::oehost openenclave::oehostverify) install(TARGETS enclave_jni DESTINATION lib) diff --git a/src/enclave/CMakeLists.txt b/src/enclave/CMakeLists.txt index 19f2737b19..5a208ba19f 100644 --- a/src/enclave/CMakeLists.txt +++ b/src/enclave/CMakeLists.txt @@ -7,10 +7,6 @@ enable_language(ASM) option(FLATBUFFERS_LIB_DIR "Location of Flatbuffers library headers.") option(FLATBUFFERS_GEN_CPP_DIR "Location of Flatbuffers generated C++ files.") -if(NOT DEFINED ENV{OE_SDK_PATH}) - message(FATAL_ERROR "$OE_SDK_PATH environment variable must be set.") -endif() - find_package(OpenEnclave CONFIG REQUIRED) include_directories(App) @@ -30,15 +26,27 @@ else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64") endif() -set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "$ENV{OE_SDK_PATH}/lib") # not clear about this. Ask someone to verify -set(OE_ENCLAVE_SIGNER "$ENV{OE_SDK_PATH}/bin/oesign") -set(OE_EDGER8R "$ENV{OE_SDK_PATH}/bin/oeedger8r") + +if(NOT "$ENV{SGX_MODE}" STREQUAL "HW") + message(STATUS "Building for simulated enclave") + add_compile_definitions(SIMULATE) +else() + message(STATUS "Building for hardware enclave") +endif() + +# set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "$ENV{OE_SDK_PATH}/lib") # not clear about this. Ask someone to verify +# set(OE_ENCLAVE_SIGNER "$ENV{OE_SDK_PATH}/bin/oesign") +# set(OE_EDGER8R "$ENV{OE_SDK_PATH}/bin/oeedger8r") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -Werror") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -DDEBUG -UNDEBUG -UEDEBUG") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -DNDEBUG -DEDEBUG -UDEBUG") set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -O2 -DNDEBUG -DEDEBUG -UDEBUG -DPERF") +add_custom_command(OUTPUT $ENV{OPAQUE_HOME}/public_key.pub +DEPENDS $ENV{OPAQUE_HOME}/private_key.pem +COMMAND openssl rsa -in $ENV{OPAQUE_HOME}/private_key.pem -pubout -out $ENV{OPAQUE_HOME}/public_key.pub) + add_subdirectory(App) add_subdirectory(Enclave) add_subdirectory(ServiceProvider) diff --git a/src/enclave/Enclave/CMakeLists.txt b/src/enclave/Enclave/CMakeLists.txt index 4ad5fad776..b2b23b3da5 100644 --- a/src/enclave/Enclave/CMakeLists.txt +++ b/src/enclave/Enclave/CMakeLists.txt @@ -18,22 +18,13 @@ set(SOURCES Random.cpp util.cpp ../Common/mCrypto.cpp - ${CMAKE_CURRENT_BINARY_DIR}/Enclave_t.c - ${CMAKE_CURRENT_BINARY_DIR}/key.cpp) + ${CMAKE_CURRENT_BINARY_DIR}/Enclave_t.c) add_custom_command( - COMMAND ${OE_EDGER8R} --trusted ${CMAKE_SOURCE_DIR}/Enclave/Enclave.edl --search-path ${CMAKE_SOURCE_DIR}/Enclave + COMMAND oeedger8r --trusted ${CMAKE_SOURCE_DIR}/Enclave/Enclave.edl --search-path ${CMAKE_SOURCE_DIR}/Enclave DEPENDS ${CMAKE_SOURCE_DIR}/Enclave/Enclave.edl OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Enclave_t.h ${CMAKE_CURRENT_BINARY_DIR}/Enclave_t.c ${CMAKE_CURRENT_BINARY_DIR}/Enclave_args.h) -add_custom_command( - COMMAND ../ServiceProvider/keygen ${CMAKE_CURRENT_BINARY_DIR}/key.cpp - DEPENDS ../ServiceProvider/keygen - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/key.cpp) - -# include_directories(SYSTEM "$ENV{SGX_SDK}/include/libcxx") -# include_directories(SYSTEM "$ENV{SGX_SDK}/include/tlibc") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -nostdinc -fvisibility=hidden -fpie -fstack-protector") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} -nostdinc++") #set(ENCLAVE_LINK_FLAGS "-Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined -Wl,-pie,-eenclave_entry -Wl,--export-dynamic -Wl,--defsym,__ImageBase=0 -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/Enclave.lds") @@ -43,28 +34,6 @@ add_library(enclave_trusted SHARED ${SOURCES}) set_property(TARGET enclave_trusted PROPERTY POSITION_INDEPENDENT_CODE OFF) set_target_properties(enclave_trusted PROPERTIES LINK_FLAGS ${ENCLAVE_LINK_FLAGS}) -# find_library(TRTS_LIB sgx_trts) -# find_library(TRTS_SIM_LIB sgx_trts_sim) -# find_library(TSTDC_LIB sgx_tstdc) -# find_library(TSTDCXX_LIB sgx_tcxx) -# find_library(TKEY_EXCHANGE_LIB sgx_tkey_exchange) -# find_library(TCRYPTO_LIB sgx_tcrypto) -# find_library(SERVICE_LIB sgx_tservice) -# find_library(SERVICE_SIM_LIB sgx_tservice_sim) - -# if(NOT "$ENV{SGX_MODE}" STREQUAL "HW") -# message(STATUS "Building for simulated SGX") -# set(Trts_Library_Path "${TRTS_SIM_LIB}") -# set(Service_Library_Path "${SERVICE_SIM_LIB}") -# else() -# message(STATUS "Building for SGX hardware") -# set(Trts_Library_Path "${TRTS_LIB}") -# set(Service_Library_Path "${SERVICE_LIB}") -# endif() - -# target_link_libraries(enclave_trusted -Wl,--whole-archive "${Trts_Library_Path}" -Wl,--no-whole-archive -Wl,--start-group "${TSTDC_LIB}" "${TSTDCXX_LIB}" -# "${TKEY_EXCHANGE_LIB}" "${TCRYPTO_LIB}" "${Service_Library_Path}" -Wl,--end-group) - target_compile_definitions(enclave_trusted PUBLIC OE_API_VERSION=2) # Need for the generated file Enclave_t.h @@ -75,20 +44,20 @@ target_link_libraries(enclave_trusted openenclave::oelibc openenclave::oelibcxx openenclave::oehostsock - openenclave::oehostresolver) + openenclave::oehostresolver) # Sign enclave -add_custom_command(OUTPUT enclave/enclave.signed - DEPENDS enclave enclave/helloworld.conf private.pem - COMMAND openenclave::oesign sign -e $ -c ${CMAKE_SOURCE_DIR}/enclave/helloworld.conf -k private.pem) +# add_custom_command(OUTPUT enclave/enclave.signed +# DEPENDS enclave enclave/helloworld.conf private.pem +# COMMAND openenclave::oesign sign -e $ -c ${CMAKE_SOURCE_DIR}/enclave/helloworld.conf -k private.pem) add_custom_command( - COMMAND ${OE_ENCLAVE_SIGNER} sign -e $ -c ${CMAKE_CURRENT_SOURCE_DIR}/Enclave.conf -k ${CMAKE_CURRENT_SOURCE_DIR}/Enclave_private.pem + COMMAND oesign sign -e $ -c ${CMAKE_CURRENT_SOURCE_DIR}/Enclave.conf -k $ENV{OPAQUE_HOME}/private_key.pem DEPENDS enclave_trusted ${CMAKE_CURRENT_SOURCE_DIR}/Enclave.conf OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/enclave_trusted.signed) add_custom_command( - COMMAND mv ${CMAKE_CURRENT_BINARY_DIR}/libenclave_trusted.so.signed ${CMAKE_CURRENT_BINARY_DIR}/libenclave_trusted_signed.so + COMMAND mv ${CMAKE_CURRENT_BINARY_DIR}/libenclave_trusted.so.signed ${CMAKE_CURRENT_BINARY_DIR}/libenclave_trusted_signed.so DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/enclave_trusted.signed OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libenclave_trusted_signed.so ) diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 5644335e15..5a16a5288c 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -251,15 +251,15 @@ void ecall_ra_proc_msg4( } } -void ecall_oe_proc_msg1( - uint8_t **msg1_data, size_t* msg1_data_size) { +void ecall_oe_proc_msg1(uint8_t **msg1_data, + size_t* msg1_data_size) { oe_result_t result = OE_FAILURE; uint8_t public_key[OE_PUBLIC_KEY_SIZE] = {}; size_t public_key_size = sizeof(public_key); uint8_t sha256[OE_SHA256_HASH_SIZE]; uint8_t* report = NULL; - size_t report_size; + size_t report_size = 0; oe_msg1_t* msg1 = NULL; if (msg1_data == NULL || msg1_data_size == NULL) @@ -277,34 +277,46 @@ void ecall_oe_proc_msg1( ocall_throw("sha256 failed"); } - // get report - result = oe_get_report( - OE_REPORT_FLAGS_REMOTE_ATTESTATION, - sha256, // Store sha256 in report_data field - sizeof(sha256), - NULL, - 0, - &report, - &report_size); - if (result != OE_OK) - { - ocall_throw("oe_get_report failed"); - } - if (report != NULL) - { + bool if_simulate = false; + +#ifdef SIMULATE + if_simulate = true; +#endif + + if (!if_simulate) { + + // get report + result = oe_get_report( + OE_REPORT_FLAGS_REMOTE_ATTESTATION, + sha256, // Store sha256 in report_data field + sizeof(sha256), + NULL, + 0, + &report, + &report_size); + + if (result != OE_OK) { + ocall_throw("oe_get_report failed"); + } + + } + + if (report != NULL || if_simulate) { *msg1_data_size = sizeof(oe_msg1_t) + report_size; *msg1_data = (uint8_t*)oe_host_malloc(*msg1_data_size); - if (*msg1_data == NULL) - { - ocall_throw("Out of memory"); + if (*msg1_data == NULL) { + ocall_throw("Out of memory"); } msg1 = (oe_msg1_t*)(*msg1_data); // Fill oe_msg1_t memcpy_s(msg1->public_key, sizeof(((oe_msg1_t*)0)->public_key), public_key, public_key_size); msg1->report_size = report_size; - memcpy_s(msg1->report, report_size, report, report_size); + if (report_size > 0) { + memcpy_s(msg1->report, report_size, report, report_size); + } oe_free_report(report); } + } diff --git a/src/enclave/ServiceProvider/CMakeLists.txt b/src/enclave/ServiceProvider/CMakeLists.txt index b06b2c26d6..2d1d0b893b 100644 --- a/src/enclave/ServiceProvider/CMakeLists.txt +++ b/src/enclave/ServiceProvider/CMakeLists.txt @@ -24,9 +24,6 @@ add_library(ra_jni SHARED ${SOURCES}) find_library(CRYPTO_LIB crypto) find_library(SSL_LIB ssl) -target_link_libraries(ra_jni "${CRYPTO_LIB}" "${SSL_LIB}" openenclave::oehostapp) - -add_executable(keygen ${SOURCES}) -target_link_libraries(keygen "${CRYPTO_LIB}" "${SSL_LIB}" openenclave::oehostapp) +target_link_libraries(ra_jni "${CRYPTO_LIB}" "${SSL_LIB}" openenclave::oehost openenclave::oehostverify) install(TARGETS ra_jni DESTINATION lib) diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index bb00fae538..454f547e95 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -2,7 +2,7 @@ #include #include #include -//#include +#include #include #include @@ -16,6 +16,10 @@ #include +#ifndef SIMULATE +#include +#endif + #include "ServiceProvider.h" // Your 16-byte Service Provider ID (SPID), assigned by Intel. @@ -53,8 +57,7 @@ void lc_check(lc_status_t ret) { } } - -void ServiceProvider::load_private_key(const std::string &filename) { +void ServiceProvider::load_private_key_ec(const std::string &filename) { FILE *private_key_file = fopen(filename.c_str(), "r"); if (private_key_file == nullptr) { throw std::runtime_error( @@ -124,7 +127,7 @@ void ServiceProvider::set_shared_key(const uint8_t *shared_key) { memcpy(this->shared_key, shared_key, LC_AESGCM_KEY_SIZE); } -void ServiceProvider::export_public_key_code(const std::string &filename) { +void ServiceProvider::export_public_key_code_ec(const std::string &filename) { std::ofstream file(filename.c_str()); file << "#include \"key.h\"\n"; @@ -152,6 +155,33 @@ void ServiceProvider::export_public_key_code(const std::string &filename) { file.close(); } +// Copied from https://github.com/openenclave/openenclave/blob/master/samples/attested_tls/common/utility.cpp +bool verify_mrsigner(char* siging_public_key_buf, + size_t siging_public_key_buf_size, + uint8_t* signer_id_buf, + size_t signer_id_buf_size) { + printf("Verify connecting client's identity\n"); + + uint8_t signer[OE_SIGNER_ID_SIZE]; + size_t signer_size = sizeof(signer); + if (oe_sgx_get_signer_id_from_public_key(siging_public_key_buf, + siging_public_key_buf_size, + signer, + &signer_size) != OE_OK) { + printf("oe_sgx_get_signer_id_from_public_key failed\n"); + return false; + } + + if (memcmp(signer, signer_id_buf, signer_id_buf_size) != 0) { + printf("mrsigner is not equal!\n"); + for (int i = 0; i < (int)signer_id_buf_size; i++) { + printf("0x%x - 0x%x\n", (uint8_t)signer[i], (uint8_t)signer_id_buf[i]); + } + return false; + } + return true; +} + std::unique_ptr ServiceProvider::process_msg1( oe_msg1_t *msg1, uint32_t *msg2_size) { @@ -169,14 +199,48 @@ std::unique_ptr ServiceProvider::process_msg1( throw std::runtime_error("buffer_to_public_key failed."); } + bool if_simulate = false; +#ifdef SIMULATE + if_simulate = true; +#endif + +#ifndef SIMULATE result = oe_verify_remote_report(msg1->report, msg1->report_size, NULL, 0, &parsed_report); if (result != OE_OK) { throw std::runtime_error( - std::string("oe_verify_remote_report: ") - + oe_result_str(result)); + std::string("oe_verify_remote_report: ") + + oe_result_str(result)); } - //TODO - other verification + printf("OE report verified\n"); + + // mrsigner verification + // 2) validate the enclave identity's signed_id is the hash of the public + // signing key that was used to sign an enclave. Check that the enclave was + // signed by an trusted entity. + + // 2a) Read in the public key as a string + + std::string public_key_file = std::string(std::getenv("OPAQUE_HOME")); + public_key_file.append("/public_key.pub"); + + std::cout << "public key path is " << public_key_file << std::endl; + + std::ifstream in(public_key_file.c_str()); + std::string public_key(std::istreambuf_iterator(in), std::istreambuf_iterator()); + + if (!verify_mrsigner((char*)public_key.c_str(), + public_key.size(), + parsed_report.identity.signer_ida, + sizeof(parsed_report.identity.signer_id))) { + throw std::runtime_error(std::string("failed:mrsigner not equal!")); + } + + // TODO missing the hash verification step + + // TODO also need to check the hash of the extra report data + +#endif // Encrypt shared key ret = public_encrypt(pkey, this->shared_key, LC_AESGCM_KEY_SIZE, encrypted_sharedkey, &encrypted_sharedkey_size); diff --git a/src/enclave/ServiceProvider/ServiceProvider.h b/src/enclave/ServiceProvider/ServiceProvider.h index d039211823..2542715ee2 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.h +++ b/src/enclave/ServiceProvider/ServiceProvider.h @@ -31,6 +31,8 @@ class ServiceProvider { ias_api_version(3), require_attestation(std::getenv("OPAQUE_REQUIRE_ATTESTATION")) {} /** Load an OpenSSL private key from the specified file. */ + void load_private_key_ec(const std::string &filename); + void load_private_key_rsa(const std::string &filename); void load_private_key(const std::string &filename); /** @@ -43,6 +45,8 @@ class ServiceProvider { * After calling load_private_key, write the corresponding public key as a C++ header file. This * file should be compiled into the enclave. */ + void export_public_key_code_ec(const std::string &filename); + void export_public_key_code_rsa(const std::string &filename); void export_public_key_code(const std::string &filename); // /** Connect to the Intel attestation service. */ @@ -71,8 +75,9 @@ class ServiceProvider { private: void connect_to_ias_helper(const std::string &ias_report_signing_ca_file); - sgx_ec256_public_t sp_pub_key; - sgx_ec256_private_t sp_priv_key; + lc_ec256_public_t sp_pub_key; + lc_ec256_private_t sp_priv_key; + uint8_t shared_key[LC_AESGCM_KEY_SIZE]; //sp_db_item_t sp_db; std::string spid; diff --git a/src/enclave/ServiceProvider/sp_crypto.h b/src/enclave/ServiceProvider/sp_crypto.h index 4d0ab0d8b6..d4e8204d27 100644 --- a/src/enclave/ServiceProvider/sp_crypto.h +++ b/src/enclave/ServiceProvider/sp_crypto.h @@ -85,6 +85,9 @@ typedef enum lc_status_t { #define LC_CMAC_KEY_SIZE 16 #define LC_CMAC_MAC_SIZE 16 #define LC_AESCTR_KEY_SIZE 16 +// Currently oesign only supports an rsa public key of size 3072 bits +#define lc_rsa_public_t (3072/8) + // copied from intel sgx sdk tcrypto.h #define SGX_ECP256_KEY_SIZE 32 diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index b618afdf32..9d5e5badee 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -45,7 +45,7 @@ object RA extends Logging { val statuses = rdd.mapPartitionsWithIndex { (i, _) => val (enclave, eid) = Utils.initEnclave() - enclave.RemoteAttestation3(eid, msg2s(i)) + enclave.RemoteAttestation3(eid, msg2s(i)) Iterator((i, true)) }.collect.toMap From af932a2bcd5b9f5726d164d9c250bc590258a9be Mon Sep 17 00:00:00 2001 From: Wenting Zheng Date: Sat, 13 Jun 2020 03:36:57 +0000 Subject: [PATCH 044/101] Added mrsigner verification --- src/enclave/App/CMakeLists.txt | 15 -- src/enclave/CMakeLists.txt | 14 +- src/enclave/ServiceProvider/CMakeLists.txt | 9 +- .../ServiceProvider/ServiceProvider.cpp | 142 +++++++++++++----- src/enclave/ServiceProvider/ServiceProvider.h | 4 - .../ServiceProvider/ServiceProviderJNI.cpp | 14 +- src/enclave/ServiceProvider/sp_crypto.cpp | 21 +++ src/enclave/ServiceProvider/sp_crypto.h | 12 +- 8 files changed, 155 insertions(+), 76 deletions(-) diff --git a/src/enclave/App/CMakeLists.txt b/src/enclave/App/CMakeLists.txt index aa8cb271b7..392762f6ab 100644 --- a/src/enclave/App/CMakeLists.txt +++ b/src/enclave/App/CMakeLists.txt @@ -16,21 +16,6 @@ set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}") add_library(enclave_jni SHARED ${SOURCES}) -# find_library(UKEY_EXCHANGE_LIB sgx_ukey_exchange) -# find_library(URTS_LIB sgx_urts) -# find_library(URTS_SIM_LIB sgx_urts_sim) -# find_library(UAE_SERVICE_LIB sgx_uae_service) -# find_library(UAE_SERVICE_SIM_LIB sgx_uae_service_sim) - -# target_link_libraries(enclave_jni ${UKEY_EXCHANGE_LIB} pthread) -# if(NOT "$ENV{SGX_MODE}" STREQUAL "HW") -# message(STATUS "Building for simulated SGX") -# target_link_libraries(enclave_jni ${URTS_SIM_LIB} ${UAE_SERVICE_SIM_LIB}) -# else() -# message(STATUS "Building for SGX hardware") -# target_link_libraries(enclave_jni ${URTS_LIB} ${UAE_SERVICE_LIB}) -# endif() - target_include_directories(enclave_jni PRIVATE # Needed for the generated file helloworld_u.h ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/src/enclave/CMakeLists.txt b/src/enclave/CMakeLists.txt index 5a208ba19f..c5c1093586 100644 --- a/src/enclave/CMakeLists.txt +++ b/src/enclave/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.13) project(OpaqueEnclave) @@ -43,9 +43,15 @@ set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -DDEBUG -UNDEBUG -UED set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -DNDEBUG -DEDEBUG -UDEBUG") set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -O2 -DNDEBUG -DEDEBUG -UDEBUG -DPERF") -add_custom_command(OUTPUT $ENV{OPAQUE_HOME}/public_key.pub -DEPENDS $ENV{OPAQUE_HOME}/private_key.pem -COMMAND openssl rsa -in $ENV{OPAQUE_HOME}/private_key.pem -pubout -out $ENV{OPAQUE_HOME}/public_key.pub) +message("openssl rsa -in $ENV{OPAQUE_HOME}/private_key.pem -pubout -out $ENV{OPAQUE_HOME}/public_key.pub") +message("$ENV{OPAQUE_HOME}/public_key.pub") + +add_custom_target(run ALL + DEPENDS $ENV{OPAQUE_HOME}/public_key.pub) + +add_custom_command( + COMMAND openssl rsa -in $ENV{OPAQUE_HOME}/private_key.pem -pubout -out $ENV{OPAQUE_HOME}/public_key.pub + OUTPUT $ENV{OPAQUE_HOME}/public_key.pub) add_subdirectory(App) add_subdirectory(Enclave) diff --git a/src/enclave/ServiceProvider/CMakeLists.txt b/src/enclave/ServiceProvider/CMakeLists.txt index 2d1d0b893b..b8843f0ff0 100644 --- a/src/enclave/ServiceProvider/CMakeLists.txt +++ b/src/enclave/ServiceProvider/CMakeLists.txt @@ -1,9 +1,8 @@ -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.13) project(OpaqueKeyGen) set(SOURCES - KeyGen.cpp ServiceProvider.cpp ServiceProviderJNI.cpp agent_wget.cpp @@ -14,8 +13,8 @@ set(SOURCES sp_crypto.cpp) link_directories(/opt/openenclave/lib/openenclave/enclave) -include_directories("/opt/openenclave/include") -include_directories("/opt/openenclave/include/openenclave/3rdparty") +include_directories(/opt/openenclave/include) +include_directories(/opt/openenclave/include/openenclave/3rdparty) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wno-attributes") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}") @@ -24,6 +23,6 @@ add_library(ra_jni SHARED ${SOURCES}) find_library(CRYPTO_LIB crypto) find_library(SSL_LIB ssl) -target_link_libraries(ra_jni "${CRYPTO_LIB}" "${SSL_LIB}" openenclave::oehost openenclave::oehostverify) +target_link_libraries(ra_jni "${CRYPTO_LIB}" "${SSL_LIB}" mbedcrypto mbedtls openenclave::oehost openenclave::oehostverify) install(TARGETS ra_jni DESTINATION lib) diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index 454f547e95..520d018cfd 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -2,10 +2,9 @@ #include #include #include -#include - #include #include +#include #include "ecp.h" #include "ias_ra.h" @@ -14,12 +13,9 @@ #include "base64.h" #include "json.hpp" +#include #include -#ifndef SIMULATE -#include -#endif - #include "ServiceProvider.h" // Your 16-byte Service Provider ID (SPID), assigned by Intel. @@ -57,7 +53,7 @@ void lc_check(lc_status_t ret) { } } -void ServiceProvider::load_private_key_ec(const std::string &filename) { +void ServiceProvider::load_private_key(const std::string &filename) { FILE *private_key_file = fopen(filename.c_str(), "r"); if (private_key_file == nullptr) { throw std::runtime_error( @@ -127,7 +123,7 @@ void ServiceProvider::set_shared_key(const uint8_t *shared_key) { memcpy(this->shared_key, shared_key, LC_AESGCM_KEY_SIZE); } -void ServiceProvider::export_public_key_code_ec(const std::string &filename) { +void ServiceProvider::export_public_key_code(const std::string &filename) { std::ofstream file(filename.c_str()); file << "#include \"key.h\"\n"; @@ -155,31 +151,93 @@ void ServiceProvider::export_public_key_code_ec(const std::string &filename) { file.close(); } -// Copied from https://github.com/openenclave/openenclave/blob/master/samples/attested_tls/common/utility.cpp -bool verify_mrsigner(char* siging_public_key_buf, - size_t siging_public_key_buf_size, +bool verify_mrsigner(char* signing_public_key_buf, + size_t signing_public_key_buf_size, uint8_t* signer_id_buf, size_t signer_id_buf_size) { - printf("Verify connecting client's identity\n"); - - uint8_t signer[OE_SIGNER_ID_SIZE]; - size_t signer_size = sizeof(signer); - if (oe_sgx_get_signer_id_from_public_key(siging_public_key_buf, - siging_public_key_buf_size, - signer, - &signer_size) != OE_OK) { - printf("oe_sgx_get_signer_id_from_public_key failed\n"); - return false; - } + + mbedtls_pk_context ctx; + mbedtls_pk_type_t pk_type; + mbedtls_rsa_context* rsa_ctx = NULL; + uint8_t* modulus = NULL; + size_t modulus_size = 0; + int res = 0; + bool ret = false; + unsigned char* signer = NULL; + + + signer = (unsigned char*)malloc(signer_id_buf_size); + if (signer == NULL) { + printf("Out of memory\n"); + goto exit; + } + + mbedtls_pk_init(&ctx); + + res = mbedtls_pk_parse_public_key(&ctx, + (const unsigned char*)signing_public_key_buf, + signing_public_key_buf_size+1); + + if (res != 0) { + printf("mbedtls_pk_parse_public_key failed with %d\n", res); + goto exit; + } + + pk_type = mbedtls_pk_get_type(&ctx); + if (pk_type != MBEDTLS_PK_RSA) { + printf("mbedtls_pk_get_type had incorrect type: %d\n", res); + goto exit; + } + + rsa_ctx = mbedtls_pk_rsa(ctx); + modulus_size = mbedtls_rsa_get_len(rsa_ctx); + modulus = (uint8_t*)malloc(modulus_size); + if (modulus == NULL) { + printf("malloc for modulus failed with size %zu:\n", modulus_size); + goto exit; + } + + res = mbedtls_rsa_export_raw(rsa_ctx, modulus, modulus_size, NULL, 0, NULL, 0, NULL, 0, NULL, 0); + if (res != 0) { + printf("mbedtls_rsa_export failed with %d\n", res); + goto exit; + } + + // Reverse the modulus and compute sha256 on it. + for (size_t i = 0; i < modulus_size / 2; i++) { + uint8_t tmp = modulus[i]; + modulus[i] = modulus[modulus_size - 1 - i]; + modulus[modulus_size - 1 - i] = tmp; + } + + // Calculate the MRSIGNER value which is the SHA256 hash of the + // little endian representation of the public key modulus. This value + // is populated by the signer_id sub-field of a parsed oe_report_t's + // identity field. + + if (lc_compute_sha256(modulus, modulus_size, signer) != 0) { + goto exit; + } if (memcmp(signer, signer_id_buf, signer_id_buf_size) != 0) { - printf("mrsigner is not equal!\n"); - for (int i = 0; i < (int)signer_id_buf_size; i++) { - printf("0x%x - 0x%x\n", (uint8_t)signer[i], (uint8_t)signer_id_buf[i]); - } - return false; - } - return true; + printf("mrsigner is not equal!\n"); + for (size_t i = 0; i < signer_id_buf_size; i++) { + printf("0x%x - 0x%x\n", (uint8_t)signer[i], (uint8_t)signer_id_buf[i]); + } + goto exit; + } + + ret = true; + + exit: + if (signer) + free(signer); + + if (modulus != NULL) + free(modulus); + + mbedtls_pk_free(&ctx); + return ret; } std::unique_ptr ServiceProvider::process_msg1( @@ -199,11 +257,6 @@ std::unique_ptr ServiceProvider::process_msg1( throw std::runtime_error("buffer_to_public_key failed."); } - bool if_simulate = false; -#ifdef SIMULATE - if_simulate = true; -#endif - #ifndef SIMULATE result = oe_verify_remote_report(msg1->report, msg1->report_size, NULL, 0, &parsed_report); if (result != OE_OK) { @@ -224,18 +277,27 @@ std::unique_ptr ServiceProvider::process_msg1( std::string public_key_file = std::string(std::getenv("OPAQUE_HOME")); public_key_file.append("/public_key.pub"); - std::cout << "public key path is " << public_key_file << std::endl; + std::ifstream t(public_key_file.c_str()); + std::string public_key; + + t.seekg(0, std::ios::end); + size_t public_key_size = t.tellg(); + public_key.reserve(public_key_size + 1); + t.seekg(0, std::ios::beg); + + public_key.assign((std::istreambuf_iterator(t)), + std::istreambuf_iterator()); + public_key.replace(public_key_size, 1, "\0"); - std::ifstream in(public_key_file.c_str()); - std::string public_key(std::istreambuf_iterator(in), std::istreambuf_iterator()); - if (!verify_mrsigner((char*)public_key.c_str(), public_key.size(), - parsed_report.identity.signer_ida, + parsed_report.identity.signer_id, sizeof(parsed_report.identity.signer_id))) { - throw std::runtime_error(std::string("failed:mrsigner not equal!")); + throw std::runtime_error(std::string("failed: mrsigner not equal!")); } + std::cout << "Signer verification passed\n" ; + // TODO missing the hash verification step // TODO also need to check the hash of the extra report data diff --git a/src/enclave/ServiceProvider/ServiceProvider.h b/src/enclave/ServiceProvider/ServiceProvider.h index 2542715ee2..af9bf8ecae 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.h +++ b/src/enclave/ServiceProvider/ServiceProvider.h @@ -31,8 +31,6 @@ class ServiceProvider { ias_api_version(3), require_attestation(std::getenv("OPAQUE_REQUIRE_ATTESTATION")) {} /** Load an OpenSSL private key from the specified file. */ - void load_private_key_ec(const std::string &filename); - void load_private_key_rsa(const std::string &filename); void load_private_key(const std::string &filename); /** @@ -45,8 +43,6 @@ class ServiceProvider { * After calling load_private_key, write the corresponding public key as a C++ header file. This * file should be compiled into the enclave. */ - void export_public_key_code_ec(const std::string &filename); - void export_public_key_code_rsa(const std::string &filename); void export_public_key_code(const std::string &filename); // /** Connect to the Intel attestation service. */ diff --git a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp index a54615d38c..579ef1e61a 100644 --- a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp +++ b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp @@ -28,13 +28,13 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( //size_t intel_cert_len = static_cast(env->GetStringUTFLength(intel_cert)); try { - const char *private_key_path = std::getenv("PRIVATE_KEY_PATH"); - if (!private_key_path) { - throw std::runtime_error( - "Set $PRIVATE_KEY_PATH to the file generated by " - "openssl ecparam -genkey, probably called ${OPAQUE_HOME}/private_key.pem."); - } - service_provider.load_private_key(private_key_path); + // const char *private_key_path = std::getenv("PRIVATE_KEY_PATH"); + // if (!private_key_path) { + // throw std::runtime_error( + // "Set $PRIVATE_KEY_PATH to the file generated by " + // "openssl ecparam -genkey, probably called ${OPAQUE_HOME}/private_key.pem."); + // } + // service_provider.load_private_key(private_key_path); service_provider.set_shared_key(reinterpret_cast(shared_key_bytes)); //service_provider.connect_to_ias(std::string(intel_cert_str, intel_cert_len)); } catch (const std::runtime_error &e) { diff --git a/src/enclave/ServiceProvider/sp_crypto.cpp b/src/enclave/ServiceProvider/sp_crypto.cpp index f8e0de3b9e..82887e1002 100644 --- a/src/enclave/ServiceProvider/sp_crypto.cpp +++ b/src/enclave/ServiceProvider/sp_crypto.cpp @@ -577,3 +577,24 @@ void lc_sha256_close(lc_sha_state_handle_t sha_handle) { SHA256_CTX *ctx = (SHA256_CTX *) sha_handle; free(ctx); } + +// Taken from https://github.com/mc2-project/mc2-xgboost/blob/466ac95a2d244cab6e43d1049f3243e006372ed6/include/enclave/crypto.h#L209 +int lc_compute_sha256(const uint8_t* data, size_t data_size, uint8_t sha256[LC_SHA256_HASH_SIZE]) { + int ret = 0; + mbedtls_sha256_context ctx; + +#define safe_sha(call) { \ + int ret = (call); \ + if (ret) { \ + mbedtls_sha256_free(&ctx); \ + return -1; \ + } \ + } + mbedtls_sha256_init(&ctx); + safe_sha(mbedtls_sha256_starts_ret(&ctx, 0)); + safe_sha(mbedtls_sha256_update_ret(&ctx, data, data_size)); + safe_sha(mbedtls_sha256_finish_ret(&ctx, sha256)); + + mbedtls_sha256_free(&ctx); + return ret; +} diff --git a/src/enclave/ServiceProvider/sp_crypto.h b/src/enclave/ServiceProvider/sp_crypto.h index d4e8204d27..5cf9c1479b 100644 --- a/src/enclave/ServiceProvider/sp_crypto.h +++ b/src/enclave/ServiceProvider/sp_crypto.h @@ -55,7 +55,15 @@ #include #include -//#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include "common.h" @@ -286,3 +294,5 @@ lc_status_t WARN_UNUSED print_priv_key(lc_ec256_private_t p_private); lc_status_t WARN_UNUSED print_pub_key(lc_ec256_public_t p_public); void print_ec_key(EC_KEY *ec_key); EC_POINT *get_ec_point(lc_ec256_public_t *p_public); + +int lc_compute_sha256(const uint8_t* data, size_t data_size, uint8_t sha256[LC_SHA256_HASH_SIZE]); From eb487fd2186e83cba3ed78253b4ee02c0f7a8a1c Mon Sep 17 00:00:00 2001 From: Wenting Zheng Date: Sun, 14 Jun 2020 13:26:55 -0700 Subject: [PATCH 045/101] Updated gitignore --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index ca96b2ffdf..92ae337ffe 100644 --- a/.gitignore +++ b/.gitignore @@ -87,3 +87,9 @@ hs_err_pid*.log /data/disease/*.csv /data/tpch/tpch-dbgen /data/tpch/sf_small/*.tbl + +# For CMake +Makefile +CMakeCache.txt +cmake_install.cmake +CMakeFiles/ \ No newline at end of file From fe7b66eb642866822ff0e8e313bacd9360b2fc3e Mon Sep 17 00:00:00 2001 From: Wenting Zheng Date: Sun, 14 Jun 2020 22:52:42 +0000 Subject: [PATCH 046/101] Added the other verification steps for remote attestaion --- .gitignore | 1 + README.md | 34 +++------- build.sbt | 1 + opaqueenv | 4 ++ src/enclave/App/CMakeLists.txt | 4 ++ src/enclave/CMakeLists.txt | 8 --- src/enclave/Enclave/CMakeLists.txt | 5 +- src/enclave/Enclave/Enclave.cpp | 68 +++++++++---------- src/enclave/ServiceProvider/CMakeLists.txt | 4 ++ .../ServiceProvider/ServiceProvider.cpp | 49 +++++++++---- 10 files changed, 96 insertions(+), 82 deletions(-) create mode 100644 opaqueenv diff --git a/.gitignore b/.gitignore index 92ae337ffe..fd19465a3d 100644 --- a/.gitignore +++ b/.gitignore @@ -79,6 +79,7 @@ sql/hive-thriftserver/test_warehouses # for C++ /private_key.pem +/public_key.pub hs_err_pid*.log # Opaque generated data diff --git a/README.md b/README.md index 07c807dafa..b38b844eb2 100644 --- a/README.md +++ b/README.md @@ -21,44 +21,30 @@ This is an alpha preview of Opaque, which means the software is still in develop ## Installation -After downloading the Opaque codebase, build and test it as follows. (Alternatively, we offer a [Docker image](docker/) that contains a prebuilt version of Opaque.) +After downloading the Opaque codebase, build and test it as follows. -1. Install dependencies and the [Intel SGX SDK](https://01.org/intel-software-guard-extensions/downloads): +1. Install dependencies and the [OpenEnclave SDK](https://github.com/openenclave/openenclave/blob/v0.9.x/docs/GettingStartedDocs/install_oe_sdk-Ubuntu_18.04.md). We currently support OE version 0.9 and Ubuntu 18.04. ```sh - # For Ubuntu 16.04 or 18.04: - sudo apt install wget build-essential openjdk-8-jdk python cmake libssl-dev - - # For Ubuntu 16.04: - wget -O sgx_installer.bin https://download.01.org/intel-sgx/linux-2.3.1/ubuntu16.04/sgx_linux_x64_sdk_2.3.101.46683.bin # For Ubuntu 18.04: - wget -O sgx_installer.bin https://download.01.org/intel-sgx/linux-2.3.1/ubuntu18.04/sgx_linux_x64_sdk_2.3.101.46683.bin - - # Installer will prompt for install path, which can be user-local - chmod +x ./sgx_installer.bin - ./sgx_installer.bin - - source sgxsdk/environment + sudo apt install wget build-essential openjdk-8-jdk python cmake libssl-dev ``` -2. On the master, generate a keypair using OpenSSL for remote attestation. The public key will be automatically hardcoded into the enclave code. - Note that only the NIST p-256 curve is supported. +2. On the master, generate a keypair using OpenSSL for remote attestation. ```sh - cd ${OPAQUE_HOME} - openssl ecparam -name prime256v1 -genkey -noout -out private_key.pem + openssl genrsa -out private_key.pem -3 3072 ``` -3. Set the following environment variables: +3. Change into the Opaque root directory and set the appropriate environment variables for both Opaque and OpenEnclave: ```sh - export SPARKSGX_DATA_DIR=${OPAQUE_HOME}/data - export PRIVATE_KEY_PATH=${OPAQUE_HOME}/private_key.pem + source opaqueenv + source /opt/openenclave/share/openenclave/openenclaverc ``` - By default, Opaque runs in simulation mode, which does not require the machine to have real SGX hardware. - This is useful if you want to test out Opaque's functionality locally. - However, if you are running Opaque with real SGX hardware, then please also set `export SGX_MODE=HW`. + By default, Opaque runs in hardware mode (environment variable `MODE=HARDWARE`). + If you do not have a machine with real SGX hardware but still wish to test out Opaque's functionality locally, then set `export MODE=SIMULATE`. 4. Run the Opaque tests: diff --git a/build.sbt b/build.sbt index 8257a971a4..ba112fb73b 100644 --- a/build.sbt +++ b/build.sbt @@ -266,6 +266,7 @@ enclaveBuildTask := { enclaveSourceDir.getPath), enclaveBuildDir).! if (cmakeResult != 0) sys.error("C++ build failed.") val nproc = java.lang.Runtime.getRuntime.availableProcessors + val mode = sys.env.get("MODE").get val buildResult = Process(Seq("make", "-j" + nproc), enclaveBuildDir).! if (buildResult != 0) sys.error("C++ build failed.") val installResult = Process(Seq("make", "install"), enclaveBuildDir).! diff --git a/opaqueenv b/opaqueenv new file mode 100644 index 0000000000..68598133bf --- /dev/null +++ b/opaqueenv @@ -0,0 +1,4 @@ +export OPAQUE_HOME=$(pwd) +export SPARKSGX_DATA_DIR=${OPAQUE_HOME}/data +export PRIVATE_KEY_PATH=${OPAQUE_HOME}/private_key.pem +export MODE=HARDWARE \ No newline at end of file diff --git a/src/enclave/App/CMakeLists.txt b/src/enclave/App/CMakeLists.txt index 392762f6ab..f924acd3d6 100644 --- a/src/enclave/App/CMakeLists.txt +++ b/src/enclave/App/CMakeLists.txt @@ -20,6 +20,10 @@ target_include_directories(enclave_jni PRIVATE # Needed for the generated file helloworld_u.h ${CMAKE_CURRENT_BINARY_DIR}) +if ("$ENV{MODE}" STREQUAL "SIMULATE") + target_compile_definitions(enclave_jni PUBLIC -DSIMULATE) +endif() + target_link_libraries(enclave_jni openenclave::oehost openenclave::oehostverify) install(TARGETS enclave_jni DESTINATION lib) diff --git a/src/enclave/CMakeLists.txt b/src/enclave/CMakeLists.txt index c5c1093586..e55932a2c4 100644 --- a/src/enclave/CMakeLists.txt +++ b/src/enclave/CMakeLists.txt @@ -26,14 +26,6 @@ else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64") endif() - -if(NOT "$ENV{SGX_MODE}" STREQUAL "HW") - message(STATUS "Building for simulated enclave") - add_compile_definitions(SIMULATE) -else() - message(STATUS "Building for hardware enclave") -endif() - # set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "$ENV{OE_SDK_PATH}/lib") # not clear about this. Ask someone to verify # set(OE_ENCLAVE_SIGNER "$ENV{OE_SDK_PATH}/bin/oesign") # set(OE_EDGER8R "$ENV{OE_SDK_PATH}/bin/oeedger8r") diff --git a/src/enclave/Enclave/CMakeLists.txt b/src/enclave/Enclave/CMakeLists.txt index b2b23b3da5..919d348105 100644 --- a/src/enclave/Enclave/CMakeLists.txt +++ b/src/enclave/Enclave/CMakeLists.txt @@ -27,13 +27,16 @@ add_custom_command( set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -nostdinc -fvisibility=hidden -fpie -fstack-protector") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} -nostdinc++") -#set(ENCLAVE_LINK_FLAGS "-Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined -Wl,-pie,-eenclave_entry -Wl,--export-dynamic -Wl,--defsym,__ImageBase=0 -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/Enclave.lds") set(ENCLAVE_LINK_FLAGS "-Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined -Wl,-pie -Wl,--export-dynamic -Wl,--defsym,__ImageBase=0") add_library(enclave_trusted SHARED ${SOURCES}) set_property(TARGET enclave_trusted PROPERTY POSITION_INDEPENDENT_CODE OFF) set_target_properties(enclave_trusted PROPERTIES LINK_FLAGS ${ENCLAVE_LINK_FLAGS}) +if ("$ENV{MODE}" STREQUAL "SIMULATE") + target_compile_definitions(enclave_trusted PUBLIC -DSIMULATE) +endif() + target_compile_definitions(enclave_trusted PUBLIC OE_API_VERSION=2) # Need for the generated file Enclave_t.h diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 5a16a5288c..57db8b4864 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -254,7 +254,6 @@ void ecall_ra_proc_msg4( void ecall_oe_proc_msg1(uint8_t **msg1_data, size_t* msg1_data_size) { - oe_result_t result = OE_FAILURE; uint8_t public_key[OE_PUBLIC_KEY_SIZE] = {}; size_t public_key_size = sizeof(public_key); uint8_t sha256[OE_SHA256_HASH_SIZE]; @@ -277,46 +276,41 @@ void ecall_oe_proc_msg1(uint8_t **msg1_data, ocall_throw("sha256 failed"); } - - bool if_simulate = false; - -#ifdef SIMULATE - if_simulate = true; +#ifndef SIMULATE + // get report + oe_result_t result = oe_get_report(OE_REPORT_FLAGS_REMOTE_ATTESTATION, + sha256, // Store sha256 in report_data field + sizeof(sha256), + NULL, + 0, + &report, + &report_size); + + if (result != OE_OK) { + ocall_throw("oe_get_report failed"); + } + #endif - if (!if_simulate) { - - // get report - result = oe_get_report( - OE_REPORT_FLAGS_REMOTE_ATTESTATION, - sha256, // Store sha256 in report_data field - sizeof(sha256), - NULL, - 0, - &report, - &report_size); - - if (result != OE_OK) { - ocall_throw("oe_get_report failed"); - } - +#ifndef SIMULATE + if (report == NULL) { + ocall_throw("OE report is NULL"); } - - if (report != NULL || if_simulate) { - *msg1_data_size = sizeof(oe_msg1_t) + report_size; - *msg1_data = (uint8_t*)oe_host_malloc(*msg1_data_size); - if (*msg1_data == NULL) { - ocall_throw("Out of memory"); - } - msg1 = (oe_msg1_t*)(*msg1_data); +#endif + + *msg1_data_size = sizeof(oe_msg1_t) + report_size; + *msg1_data = (uint8_t*)oe_host_malloc(*msg1_data_size); + if (*msg1_data == NULL) { + ocall_throw("Out of memory"); + } + msg1 = (oe_msg1_t*)(*msg1_data); - // Fill oe_msg1_t - memcpy_s(msg1->public_key, sizeof(((oe_msg1_t*)0)->public_key), public_key, public_key_size); - msg1->report_size = report_size; - if (report_size > 0) { - memcpy_s(msg1->report, report_size, report, report_size); - } - oe_free_report(report); + // Fill oe_msg1_t + memcpy_s(msg1->public_key, sizeof(((oe_msg1_t*)0)->public_key), public_key, public_key_size); + msg1->report_size = report_size; + if (report_size > 0) { + memcpy_s(msg1->report, report_size, report, report_size); } + oe_free_report(report); } diff --git a/src/enclave/ServiceProvider/CMakeLists.txt b/src/enclave/ServiceProvider/CMakeLists.txt index b8843f0ff0..e252454cae 100644 --- a/src/enclave/ServiceProvider/CMakeLists.txt +++ b/src/enclave/ServiceProvider/CMakeLists.txt @@ -21,6 +21,10 @@ set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}") add_library(ra_jni SHARED ${SOURCES}) +if ("$ENV{MODE}" STREQUAL "SIMULATE") + target_compile_definitions(ra_jni PUBLIC -DSIMULATE) +endif() + find_library(CRYPTO_LIB crypto) find_library(SSL_LIB ssl) target_link_libraries(ra_jni "${CRYPTO_LIB}" "${SSL_LIB}" mbedcrypto mbedtls openenclave::oehost openenclave::oehostverify) diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index 520d018cfd..5f86f23241 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -240,24 +240,31 @@ bool verify_mrsigner(char* signing_public_key_buf, return ret; } -std::unique_ptr ServiceProvider::process_msg1( - oe_msg1_t *msg1, uint32_t *msg2_size) { - - //verify report - oe_report_t parsed_report; - oe_result_t result = OE_FAILURE; - std::unique_ptr msg2(new oe_msg2_t); +std::unique_ptr ServiceProvider::process_msg1(oe_msg1_t *msg1, + uint32_t *msg2_size) { + int ret; - unsigned char encrypted_sharedkey[OE_SHARED_KEY_CIPHERTEXT_SIZE]; size_t encrypted_sharedkey_size = sizeof(encrypted_sharedkey); - + std::unique_ptr msg2(new oe_msg2_t); + EVP_PKEY* pkey = buffer_to_public_key((char*)msg1->public_key, -1); if (pkey == nullptr) { throw std::runtime_error("buffer_to_public_key failed."); } -#ifndef SIMULATE + + +#ifdef SIMULATE + std::cout << "Not running remote attestation because executing in simulation mode" << std::endl; +#else + std::cout << "Running in hardware mode, verifying remote attestation\n" ; + + //verify report + oe_report_t parsed_report; + oe_result_t result = OE_FAILURE; + uint8_t sha256[32]; + result = oe_verify_remote_report(msg1->report, msg1->report_size, NULL, 0, &parsed_report); if (result != OE_OK) { throw std::runtime_error( @@ -300,8 +307,26 @@ std::unique_ptr ServiceProvider::process_msg1( // TODO missing the hash verification step - // TODO also need to check the hash of the extra report data - + // check the enclave's product id and security version + if (parsed_report.identity.product_id[0] != 1) { + throw std::runtime_error(std::string("identity.product_id checking failed.")); + } + + if (parsed_report.identity.security_version < 1) { + throw std::runtime_error(std::string("identity.security_version checking failed.")); + } + + // 3) Validate the report data + // The report_data has the hash value of the report data + if (lc_compute_sha256(msg1->public_key, sizeof(msg1->public_key), sha256) != 0) { + throw std::runtime_error(std::string("hash validation failed.")); + } + + if (memcmp(parsed_report.report_data, sha256, sizeof(sha256)) != 0) { + throw std::runtime_error(std::string("SHA256 mismatch.")); + } + + std::cout << "remote attestation succeeded." << std::endl; #endif // Encrypt shared key From 397efba44a03993d3161fcede03b9638749370b8 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Thu, 18 Jun 2020 15:51:14 -0700 Subject: [PATCH 047/101] Shared key for each client wip --- src/enclave/Common/common.h | 2 + src/enclave/Enclave/Crypto.cpp | 40 +++++++++++++++--- src/enclave/Enclave/Enclave.cpp | 42 +++++++++++++++++-- src/enclave/ServiceProvider/SP.h | 2 +- .../ServiceProvider/ServiceProvider.cpp | 9 ++++ src/enclave/ServiceProvider/ServiceProvider.h | 3 ++ .../ServiceProvider/ServiceProviderJNI.cpp | 9 +++- .../edu/berkeley/cs/rise/opaque/RA.scala | 5 ++- .../cs/rise/opaque/execution/SP.scala | 2 +- 9 files changed, 101 insertions(+), 13 deletions(-) diff --git a/src/enclave/Common/common.h b/src/enclave/Common/common.h index 2522ce1112..8e384e515f 100644 --- a/src/enclave/Common/common.h +++ b/src/enclave/Common/common.h @@ -91,6 +91,8 @@ typedef struct oe_msg1_t { typedef struct oe_msg2_t { uint8_t shared_key_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; + const char* user_cert; + size_t cert_len; } oe_msg2_t; #endif // COMMON_H diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index 4d7751e0f5..25917c9976 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -18,21 +18,50 @@ */ unsigned char shared_key[SGX_AESGCM_KEY_SIZE] = {0}; -std::unique_ptr ks; +// map username to client key schedule +std::unordered_map> client_key_schedules; +std::unordered_map client_keys; -void initKeySchedule() { +// map user name to public key +// std::unordered_map> client_public_keys; + +// std::unique_ptr ks; + +void initKeySchedule(char* username) { + std::unique_ptr ks = client_key_schedule[username]; ks.reset(new KeySchedule(reinterpret_cast(shared_key), SGX_AESGCM_KEY_SIZE)); } -void set_shared_key(uint8_t *shared_key_bytes, uint32_t shared_key_size) { +void set_shared_key(uint8_t *shared_key_bytes, uint32_t shared_key_size, char* username) { if (shared_key_size <= 0) { throw std::runtime_error("Remote attestation step 4: Invalid message size."); } - memcpy_s(shared_key, sizeof(shared_key), shared_key_bytes, shared_key_size); + memcpy_s(client_keys[username], sizeof(client_keys[username]), shared_key_bytes, shared_key_size); - initKeySchedule(); + initKeySchedule(username); } +void get_client_key(uint8_t* key, char *username) { + LOG(DEBUG) << "Getting client key for user: " << username; + std::string str(username); + auto iter = client_keys.find(str); + if (iter == client_keys.end()) { + LOG(FATAL) << "No client key for user: " << username; + } else { + memcpy(key, (uint8_t*) iter->second.data(), CIPHER_KEY_SIZE); + } +} + +char* get_client_cert(char *username) { + LOG(DEBUG) << "Getting username " << username; + std::string str(username); + auto iter = client_public_keys.find(str); + if (iter == client_public_keys.end()) { + LOG(FATAL) << "No certificate for user: " << username; + } else { + return (char*) iter->second.data(); + } +} void encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphertext) { @@ -50,6 +79,7 @@ void encrypt(uint8_t *plaintext, uint32_t plaintext_length, // sgx_read_rand(iv_ptr, SGX_AESGCM_IV_SIZE); mbedtls_read_rand(reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); + // TODO: should we replace this encryption with the mbedtls encryption AesGcm cipher(ks.get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 57db8b4864..5d75e53b01 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -239,13 +239,47 @@ void ecall_ra_proc_msg4( oe_msg2_t* msg2 = (oe_msg2_t*)msg4; uint8_t shared_key_plaintext[SGX_AESGCM_KEY_SIZE]; size_t shared_key_plaintext_size = sizeof(shared_key_plaintext); - bool ret = g_crypto.decrypt(msg2->shared_key_ciphertext, msg4_size, shared_key_plaintext, &shared_key_plaintext_size); - if (!ret) - { + bool ret = g_crypto.decrypt(msg2->shared_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, shared_key_plaintext, &shared_key_plaintext_size); + + if (!ret) { ocall_throw("shared key decryption failed"); } - set_shared_key(shared_key_plaintext, shared_key_plaintext_size); + // Get name from certificate + // FIXME: nameptr not of set size + unsigned char nameptr[50]; + size_t name_len; + int ret; + mbedtls_x509_crt user_cert; + mbedtls_x509_crt_init(&user_cert); + if ((ret = mbedtls_x509_crt_parse(&user_cert, (const unsigned char *) msg2->user_cert, + cert_len)) != 0) { + LOG(FATAL) << "verification failed - Could not read user certificate\n" + << "mbedtls_x509_crt_parse returned " << ret; + } + + mbedtls_x509_name subject_name = user_cert.subject; + mbedtls_asn1_buf name = subject_name.val; + strcpy((char*) nameptr, (const char*) name.p); + name_len = name.len; + + // Store the client's symmetric key + std::vector user_symm_key(shared_key_plaintext, shared_key_plaintext + shared_key_plaintext_size); + std::string user_nam(nameptr, nameptr + name_len); + + // Verify client's identity + // if (std::find(CLIENT_NAMES.begin(), CLIENT_NAMES.end(), user_nam) == CLIENT_NAMES.end()) { + // LOG(FATAL) << "No such authorized client"; + // } + // client_keys[user_nam] = user_symm_key; + + // Store the client's public key + // std::vector user_public_key(cert, cert + cert_len); + // client_public_keys.insert({user_nam, user_public_key}); + + // Set shared key for this client + set_shared_key(shared_key_plaintext, shared_key_plaintext_size, user_nam.c_str()); + } catch (const std::runtime_error &e) { ocall_throw(e.what()); } diff --git a/src/enclave/ServiceProvider/SP.h b/src/enclave/ServiceProvider/SP.h index c3aada9d2d..9ff99e1497 100644 --- a/src/enclave/ServiceProvider/SP.h +++ b/src/enclave/ServiceProvider/SP.h @@ -6,7 +6,7 @@ extern "C" { #endif JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( - JNIEnv *, jobject, jbyteArray, jstring); + JNIEnv *, jobject, jbyteArray, jstring, jstring); JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg0( JNIEnv *, jobject, jbyteArray); diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index 5f86f23241..1a47498af5 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -123,6 +123,10 @@ void ServiceProvider::set_shared_key(const uint8_t *shared_key) { memcpy(this->shared_key, shared_key, LC_AESGCM_KEY_SIZE); } +void ServiceProvider::set_user_cert(const std::string user_cert) { + memcpy((char*) this->user_cert, user_cert.c_str(), user_cert.length() + 1) +} + void ServiceProvider::export_public_key_code(const std::string &filename) { std::ofstream file(filename.c_str()); @@ -340,6 +344,11 @@ std::unique_ptr ServiceProvider::process_msg1(oe_msg1_t *msg1, // Prepare msg2 memcpy_s(msg2->shared_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, encrypted_sharedkey, encrypted_sharedkey_size); + + // Copy user certificate to msg2 + size_t cert_len = strlen(this->user_cert); + memcpy(msg2->user_cert, this->user_cert, cert_len); + memcpy(msg2->user_cert_len, cert_len, sizeof(cert_len)) *msg2_size = sizeof(oe_msg2_t); // clean up diff --git a/src/enclave/ServiceProvider/ServiceProvider.h b/src/enclave/ServiceProvider/ServiceProvider.h index af9bf8ecae..d25336c8dd 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.h +++ b/src/enclave/ServiceProvider/ServiceProvider.h @@ -39,6 +39,8 @@ class ServiceProvider { */ void set_shared_key(const uint8_t *shared_key); + void set_user_cert(std::string user_cert); + /** * After calling load_private_key, write the corresponding public key as a C++ header file. This * file should be compiled into the enclave. @@ -75,6 +77,7 @@ class ServiceProvider { lc_ec256_private_t sp_priv_key; uint8_t shared_key[LC_AESGCM_KEY_SIZE]; + const char* user_cert; //sp_db_item_t sp_db; std::string spid; diff --git a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp index 579ef1e61a..3c1a3ccd61 100644 --- a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp +++ b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp @@ -17,7 +17,7 @@ void jni_throw(JNIEnv *env, const char *message) { } JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( - JNIEnv *env, jobject obj, jbyteArray shared_key, jstring intel_cert) { + JNIEnv *env, jobject obj, jbyteArray shared_key, jstring intel_cert, jstring user_cert) { (void)env; (void)obj; @@ -26,6 +26,9 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( const char *intel_cert_str = env->GetStringUTFChars(intel_cert, nullptr); //size_t intel_cert_len = static_cast(env->GetStringUTFLength(intel_cert)); + // + const char* user_cert_str = env->GetStringUTFChars(user_cert, nullptr); + size_t user_cert_len = static_cast(env->GetStringUTFLength(user_cert)); try { // const char *private_key_path = std::getenv("PRIVATE_KEY_PATH"); @@ -36,6 +39,9 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( // } // service_provider.load_private_key(private_key_path); service_provider.set_shared_key(reinterpret_cast(shared_key_bytes)); + + // set user certificate + service_provider.set_user_cert(std::string(user_cert_str, user_cert_len)); //service_provider.connect_to_ias(std::string(intel_cert_str, intel_cert_len)); } catch (const std::runtime_error &e) { jni_throw(env, e.what()); @@ -43,6 +49,7 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( env->ReleaseByteArrayElements(shared_key, shared_key_bytes, 0); env->ReleaseStringUTFChars(intel_cert, intel_cert_str); + env->ReleaseStringUTFChars(user_cert, user_cert_str); } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index 9d5e5badee..283c9d2cfe 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -29,11 +29,14 @@ object RA extends Logging { val intelCert = Utils.findResource("AttestationReportSigningCACert.pem") + // FIXME: get user1.crt and ensure that userCert is a string + val userCert = Utils.findResource("user1.crt") + val sp = new SP() // Retry attestation a few times in case of transient failures Utils.retry(3) { - sp.Init(Utils.sharedKey, intelCert) + sp.Init(Utils.sharedKey, intelCert, userCert) val msg1s = rdd.mapPartitionsWithIndex { (i, _) => val (enclave, eid) = Utils.initEnclave() diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala index 5833f3898d..9a824f0b21 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala @@ -22,7 +22,7 @@ import ch.jodersky.jni.nativeLoader @nativeLoader("ra_jni") class SP extends java.io.Serializable { // Remote attestation, master side - @native def Init(sharedKey: Array[Byte], intelCert: String): Unit + @native def Init(sharedKey: Array[Byte], intelCert: String, userCert: String): Unit @native def SPProcMsg0(msg0Input: Array[Byte]): Unit @native def SPProcMsg1(msg1Input: Array[Byte]): Array[Byte] @native def SPProcMsg3(msg3Input: Array[Byte]): Array[Byte] From ed8e75090831b0d655560dc8bce17de3746f5b00 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Mon, 22 Jun 2020 12:45:45 -0700 Subject: [PATCH 048/101] shared key xor --- src/enclave/Enclave/Crypto.cpp | 65 +++++++++++++++++++++------------ src/enclave/Enclave/Enclave.cpp | 2 +- 2 files changed, 43 insertions(+), 24 deletions(-) diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index 25917c9976..a75417631b 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -9,6 +9,9 @@ #include "util.h" //#include "rdrand.h" +// Set this number before creating the enclave +int num_clients = 1; + /** * Symmetric key used to encrypt row data. This key is shared among the driver and all enclaves. * @@ -25,10 +28,15 @@ std::unordered_map c // map user name to public key // std::unordered_map> client_public_keys; -// std::unique_ptr ks; +// TODO: properly set this KeySchedule +std::unique_ptr ks; void initKeySchedule(char* username) { - std::unique_ptr ks = client_key_schedule[username]; + std::unique_ptr user_ks = client_key_schedule[username]; + user_ks.reset(new KeySchedule(reinterpret_cast(shared_key), SGX_AESGCM_KEY_SIZE)); +} + +void initKeySchedule() { ks.reset(new KeySchedule(reinterpret_cast(shared_key), SGX_AESGCM_KEY_SIZE)); } @@ -36,33 +44,44 @@ void set_shared_key(uint8_t *shared_key_bytes, uint32_t shared_key_size, char* u if (shared_key_size <= 0) { throw std::runtime_error("Remote attestation step 4: Invalid message size."); } - memcpy_s(client_keys[username], sizeof(client_keys[username]), shared_key_bytes, shared_key_size); + // memcpy_s(client_keys[username], sizeof(client_keys[username]), shared_key_bytes, shared_key_size); + client_keys[username] = shared_key_bytes; initKeySchedule(username); -} -void get_client_key(uint8_t* key, char *username) { - LOG(DEBUG) << "Getting client key for user: " << username; - std::string str(username); - auto iter = client_keys.find(str); - if (iter == client_keys.end()) { - LOG(FATAL) << "No client key for user: " << username; - } else { - memcpy(key, (uint8_t*) iter->second.data(), CIPHER_KEY_SIZE); - } -} + // XOR key shares + // FIXME: use different key for xor + unsigned char xor_key = shared_key ^ (unsigned char*) shared_key_bytes; + memcpy(shared_key, xor_key, SGX_AESGCM_KEY_SIZE); -char* get_client_cert(char *username) { - LOG(DEBUG) << "Getting username " << username; - std::string str(username); - auto iter = client_public_keys.find(str); - if (iter == client_public_keys.end()) { - LOG(FATAL) << "No certificate for user: " << username; - } else { - return (char*) iter->second.data(); - } + // initKeySchedule the shared key if this is the last client + if (client_keys.size() == num_clients) { + initKeySchedule(); + } } +// void get_client_key(uint8_t* key, char *username) { +// LOG(DEBUG) << "Getting client key for user: " << username; +// std::string str(username); +// auto iter = client_keys.find(str); +// if (iter == client_keys.end()) { +// LOG(FATAL) << "No client key for user: " << username; +// } else { +// memcpy(key, (uint8_t*) iter->second.data(), CIPHER_KEY_SIZE); +// } +// } +// +// char* get_client_cert(char *username) { +// LOG(DEBUG) << "Getting username " << username; +// std::string str(username); +// auto iter = client_public_keys.find(str); +// if (iter == client_public_keys.end()) { +// LOG(FATAL) << "No certificate for user: " << username; +// } else { +// return (char*) iter->second.data(); +// } +// } + void encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphertext) { diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 5d75e53b01..91a4cf6274 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -264,7 +264,7 @@ void ecall_ra_proc_msg4( name_len = name.len; // Store the client's symmetric key - std::vector user_symm_key(shared_key_plaintext, shared_key_plaintext + shared_key_plaintext_size); + // std::vector user_symm_key(shared_key_plaintext, shared_key_plaintext + shared_key_plaintext_size); std::string user_nam(nameptr, nameptr + name_len); // Verify client's identity From 8c79576bb8e746b57d24113a186dc64f073f7dbc Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Thu, 25 Jun 2020 00:11:43 +0000 Subject: [PATCH 049/101] Everything builds but runtime failure --- opaqueenv | 4 +- src/enclave/CMakeLists.txt | 6 +- src/enclave/Common/common.h | 3 +- src/enclave/Enclave/Crypto.cpp | 61 +++++++++++++------ src/enclave/Enclave/Crypto.h | 3 +- src/enclave/Enclave/Enclave.cpp | 31 ++++++++-- src/enclave/ServiceProvider/SP.h | 2 +- .../ServiceProvider/ServiceProvider.cpp | 28 ++++++++- src/enclave/ServiceProvider/ServiceProvider.h | 5 ++ .../ServiceProvider/ServiceProviderJNI.cpp | 7 ++- .../edu/berkeley/cs/rise/opaque/RA.scala | 32 +++++++++- .../edu/berkeley/cs/rise/opaque/Utils.scala | 2 +- .../cs/rise/opaque/execution/SP.scala | 2 +- 13 files changed, 147 insertions(+), 39 deletions(-) diff --git a/opaqueenv b/opaqueenv index 68598133bf..efdc1dd3d9 100644 --- a/opaqueenv +++ b/opaqueenv @@ -1,4 +1,4 @@ -export OPAQUE_HOME=$(pwd) +export OPAQUE_HOME=/home/chester/opaque export SPARKSGX_DATA_DIR=${OPAQUE_HOME}/data export PRIVATE_KEY_PATH=${OPAQUE_HOME}/private_key.pem -export MODE=HARDWARE \ No newline at end of file +export MODE=HARDWARE diff --git a/src/enclave/CMakeLists.txt b/src/enclave/CMakeLists.txt index e55932a2c4..eac214aa50 100644 --- a/src/enclave/CMakeLists.txt +++ b/src/enclave/CMakeLists.txt @@ -31,9 +31,9 @@ endif() # set(OE_EDGER8R "$ENV{OE_SDK_PATH}/bin/oeedger8r") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -Werror") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -DDEBUG -UNDEBUG -UEDEBUG") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -DNDEBUG -DEDEBUG -UDEBUG") -set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -O2 -DNDEBUG -DEDEBUG -UDEBUG -DPERF") +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++11 -O0 -g -DDEBUG -UNDEBUG -UEDEBUG") +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11 -O2 -DNDEBUG -DEDEBUG -UDEBUG") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -std=c++11 -O2 -DNDEBUG -DEDEBUG -UDEBUG -DPERF") message("openssl rsa -in $ENV{OPAQUE_HOME}/private_key.pem -pubout -out $ENV{OPAQUE_HOME}/public_key.pub") message("$ENV{OPAQUE_HOME}/public_key.pub") diff --git a/src/enclave/Common/common.h b/src/enclave/Common/common.h index 8e384e515f..a47b7607a0 100644 --- a/src/enclave/Common/common.h +++ b/src/enclave/Common/common.h @@ -91,8 +91,9 @@ typedef struct oe_msg1_t { typedef struct oe_msg2_t { uint8_t shared_key_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; + uint8_t key_share_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; const char* user_cert; - size_t cert_len; + size_t user_cert_len; } oe_msg2_t; #endif // COMMON_H diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index a75417631b..41067b3482 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -7,10 +7,12 @@ #include "common.h" #include "util.h" +#include +#include //#include "rdrand.h" // Set this number before creating the enclave -int num_clients = 1; +uint8_t num_clients = 1; /** * Symmetric key used to encrypt row data. This key is shared among the driver and all enclaves. @@ -23,7 +25,8 @@ unsigned char shared_key[SGX_AESGCM_KEY_SIZE] = {0}; // map username to client key schedule std::unordered_map> client_key_schedules; -std::unordered_map client_keys; +std::unordered_map> client_keys; +// std::unordered_map client_keys; // map user name to public key // std::unordered_map> client_public_keys; @@ -32,34 +35,58 @@ std::unordered_map c std::unique_ptr ks; void initKeySchedule(char* username) { - std::unique_ptr user_ks = client_key_schedule[username]; - user_ks.reset(new KeySchedule(reinterpret_cast(shared_key), SGX_AESGCM_KEY_SIZE)); + std::string user(username); + std::unique_ptr user_ks; + unsigned char client_key[SGX_AESGCM_KEY_SIZE]; + + auto iter = client_keys.find(user); + // if (iter == client_keys.end()) { + // ocall_throw("No client key for user: %s", username); + // } else { + memcpy(client_key, (uint8_t*) iter->second.data(), SGX_AESGCM_KEY_SIZE); + // } + + user_ks.reset(new KeySchedule(reinterpret_cast(client_key), SGX_AESGCM_KEY_SIZE)); + client_key_schedules[user] = std::move(user_ks); } void initKeySchedule() { ks.reset(new KeySchedule(reinterpret_cast(shared_key), SGX_AESGCM_KEY_SIZE)); } -void set_shared_key(uint8_t *shared_key_bytes, uint32_t shared_key_size, char* username) { - if (shared_key_size <= 0) { - throw std::runtime_error("Remote attestation step 4: Invalid message size."); +void add_client_key(uint8_t *client_key_bytes, uint32_t client_key_size, char* username) { + if (client_key_size <= 0) { + throw std::runtime_error("Remote attestation step 2: Invalid client key size"); } - // memcpy_s(client_keys[username], sizeof(client_keys[username]), shared_key_bytes, shared_key_size); - client_keys[username] = shared_key_bytes; + std::vector user_private_key(client_key_bytes, client_key_bytes + client_key_size); + std::string user(username); + client_keys[user] = user_private_key; + initKeySchedule(username); - // XOR key shares - // FIXME: use different key for xor - unsigned char xor_key = shared_key ^ (unsigned char*) shared_key_bytes; - memcpy(shared_key, xor_key, SGX_AESGCM_KEY_SIZE); +} - // initKeySchedule the shared key if this is the last client - if (client_keys.size() == num_clients) { - initKeySchedule(); - } +void xor_shared_key(uint8_t *key_share_bytes, uint32_t key_share_size) { + if (key_share_size <= 0 || key_share_size != SGX_AESGCM_KEY_SIZE) { + throw std::runtime_error("Remote attestation step 2: Invalid key share size."); + } + + // XOR key shares + unsigned char xor_key[SGX_AESGCM_KEY_SIZE]; + int i; + for (i = 0; i < SGX_AESGCM_KEY_SIZE; i++) { + xor_key[i] = shared_key[i] ^ key_share_bytes[i]; + } + memcpy(shared_key, xor_key, SGX_AESGCM_KEY_SIZE); + + // initKeySchedule the shared key if this is the last client + if (client_keys.size() == num_clients) { + initKeySchedule(); + } } + // void get_client_key(uint8_t* key, char *username) { // LOG(DEBUG) << "Getting client key for user: " << username; // std::string str(username); diff --git a/src/enclave/Enclave/Crypto.h b/src/enclave/Enclave/Crypto.h index 35650dd658..d5dc832304 100644 --- a/src/enclave/Enclave/Crypto.h +++ b/src/enclave/Enclave/Crypto.h @@ -21,8 +21,9 @@ extern const sgx_ec256_public_t g_sp_pub_key; /** * Set the symmetric key used to encrypt row data using message 4 of the remote attestation process. */ -void set_shared_key(uint8_t *msg4, uint32_t msg4_size); +void add_client_key(uint8_t *client_key_bytes, uint32_t client_key_size, char* username); +void xor_shared_key(uint8_t *key_share_bytes, uint32_t key_share_size); /** * Encrypt the given plaintext using AES-GCM with a 128-bit key and write the result to * `ciphertext`. The encrypted data will be formatted as follows, where || denotes concatenation: diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 91a4cf6274..98308b4905 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -23,6 +23,15 @@ #include #include +// needed for certificate +#include +#include +#include +#include +#include +#include + + // This file contains definitions of the ecalls declared in Enclave.edl. Errors originating within // these ecalls are signaled by throwing a std::runtime_error, which is caught at the top level of // the ecall (i.e., within these definitions), and are then rethrown as Java exceptions using @@ -236,6 +245,8 @@ static Crypto g_crypto; void ecall_ra_proc_msg4( uint8_t *msg4, uint32_t msg4_size) { try { + uint32_t temp = msg4_size; + temp++; oe_msg2_t* msg2 = (oe_msg2_t*)msg4; uint8_t shared_key_plaintext[SGX_AESGCM_KEY_SIZE]; size_t shared_key_plaintext_size = sizeof(shared_key_plaintext); @@ -245,17 +256,24 @@ void ecall_ra_proc_msg4( ocall_throw("shared key decryption failed"); } + uint8_t key_share_plaintext[SGX_AESGCM_KEY_SIZE]; + size_t key_share_plaintext_size = sizeof(key_share_plaintext); + ret = g_crypto.decrypt(msg2->key_share_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, key_share_plaintext, &key_share_plaintext_size); + + if (!ret) { + ocall_throw("key share decryption failed"); + } + // Get name from certificate // FIXME: nameptr not of set size unsigned char nameptr[50]; size_t name_len; - int ret; + int res; mbedtls_x509_crt user_cert; mbedtls_x509_crt_init(&user_cert); - if ((ret = mbedtls_x509_crt_parse(&user_cert, (const unsigned char *) msg2->user_cert, - cert_len)) != 0) { - LOG(FATAL) << "verification failed - Could not read user certificate\n" - << "mbedtls_x509_crt_parse returned " << ret; + if ((res = mbedtls_x509_crt_parse(&user_cert, (const unsigned char *) msg2->user_cert, + msg2->user_cert_len)) != 0) { + ocall_throw("Verification failed - could not read user certificate\n. mbedtls_x509_crt_parse returned"); } mbedtls_x509_name subject_name = user_cert.subject; @@ -278,7 +296,8 @@ void ecall_ra_proc_msg4( // client_public_keys.insert({user_nam, user_public_key}); // Set shared key for this client - set_shared_key(shared_key_plaintext, shared_key_plaintext_size, user_nam.c_str()); + add_client_key(shared_key_plaintext, shared_key_plaintext_size, (char*) user_nam.c_str()); + xor_shared_key(key_share_plaintext, key_share_plaintext_size); } catch (const std::runtime_error &e) { ocall_throw(e.what()); diff --git a/src/enclave/ServiceProvider/SP.h b/src/enclave/ServiceProvider/SP.h index 9ff99e1497..aed0988240 100644 --- a/src/enclave/ServiceProvider/SP.h +++ b/src/enclave/ServiceProvider/SP.h @@ -6,7 +6,7 @@ extern "C" { #endif JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( - JNIEnv *, jobject, jbyteArray, jstring, jstring); + JNIEnv *, jobject, jbyteArray, jstring, jstring, jbyteArray); JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg0( JNIEnv *, jobject, jbyteArray); diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index 1a47498af5..031bcc2b95 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -124,7 +124,11 @@ void ServiceProvider::set_shared_key(const uint8_t *shared_key) { } void ServiceProvider::set_user_cert(const std::string user_cert) { - memcpy((char*) this->user_cert, user_cert.c_str(), user_cert.length() + 1) + memcpy((char*) this->user_cert, user_cert.c_str(), user_cert.length() + 1); +} + +void ServiceProvider::set_key_share(const uint8_t *key_share) { + memcpy(this->key_share, key_share, LC_AESGCM_KEY_SIZE); } void ServiceProvider::export_public_key_code(const std::string &filename) { @@ -250,6 +254,10 @@ std::unique_ptr ServiceProvider::process_msg1(oe_msg1_t *msg1, int ret; unsigned char encrypted_sharedkey[OE_SHARED_KEY_CIPHERTEXT_SIZE]; size_t encrypted_sharedkey_size = sizeof(encrypted_sharedkey); + + unsigned char encrypted_key_share[OE_SHARED_KEY_CIPHERTEXT_SIZE]; + size_t encrypted_key_share_size = sizeof(encrypted_key_share); + std::unique_ptr msg2(new oe_msg2_t); EVP_PKEY* pkey = buffer_to_public_key((char*)msg1->public_key, -1); @@ -342,13 +350,27 @@ std::unique_ptr ServiceProvider::process_msg1(oe_msg1_t *msg1, throw std::runtime_error(std::string("public_encrypt failed")); } + // Encrypt key share + ret = public_encrypt(pkey, this->key_share, LC_AESGCM_KEY_SIZE, encrypted_key_share, &encrypted_key_share_size); + if (ret == 0) { + throw std::runtime_error(std::string("public_encrypt: buffer too small")); + } + else if (ret < 0) { + throw std::runtime_error(std::string("public_encrypt failed")); + } + // Prepare msg2 + // Copy over shared key ciphertext memcpy_s(msg2->shared_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, encrypted_sharedkey, encrypted_sharedkey_size); + // Copy over key share ciphertext + memcpy_s(msg2->key_share_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, encrypted_key_share, encrypted_key_share_size); + + // Copy user certificate to msg2 size_t cert_len = strlen(this->user_cert); - memcpy(msg2->user_cert, this->user_cert, cert_len); - memcpy(msg2->user_cert_len, cert_len, sizeof(cert_len)) + memcpy((char*) msg2->user_cert, this->user_cert, cert_len); + msg2->user_cert_len = cert_len; *msg2_size = sizeof(oe_msg2_t); // clean up diff --git a/src/enclave/ServiceProvider/ServiceProvider.h b/src/enclave/ServiceProvider/ServiceProvider.h index d25336c8dd..0885c7394f 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.h +++ b/src/enclave/ServiceProvider/ServiceProvider.h @@ -41,6 +41,8 @@ class ServiceProvider { void set_user_cert(std::string user_cert); + void set_key_share(const uint8_t *key_share); + /** * After calling load_private_key, write the corresponding public key as a C++ header file. This * file should be compiled into the enclave. @@ -78,6 +80,9 @@ class ServiceProvider { uint8_t shared_key[LC_AESGCM_KEY_SIZE]; const char* user_cert; + + // Key share; xor'ed among all parties to produce one shared key for spark cluster + uint8_t key_share[LC_AESGCM_KEY_SIZE]; //sp_db_item_t sp_db; std::string spid; diff --git a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp index 3c1a3ccd61..19e4cb0b69 100644 --- a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp +++ b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp @@ -17,13 +17,15 @@ void jni_throw(JNIEnv *env, const char *message) { } JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( - JNIEnv *env, jobject obj, jbyteArray shared_key, jstring intel_cert, jstring user_cert) { + JNIEnv *env, jobject obj, jbyteArray shared_key, jstring intel_cert, jstring user_cert, jbyteArray key_share) { (void)env; (void)obj; jboolean if_copy = false; jbyte *shared_key_bytes = env->GetByteArrayElements(shared_key, &if_copy); + jbyte *key_share_bytes = env->GetByteArrayElements(key_share, &if_copy); + const char *intel_cert_str = env->GetStringUTFChars(intel_cert, nullptr); //size_t intel_cert_len = static_cast(env->GetStringUTFLength(intel_cert)); // @@ -42,6 +44,9 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( // set user certificate service_provider.set_user_cert(std::string(user_cert_str, user_cert_len)); + + // set key share + service_provider.set_key_share(reinterpret_cast(key_share_bytes)); //service_provider.connect_to_ias(std::string(intel_cert_str, intel_cert_len)); } catch (const std::runtime_error &e) { jni_throw(env, e.what()); diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index 283c9d2cfe..2472e8732e 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -30,13 +30,41 @@ object RA extends Logging { val intelCert = Utils.findResource("AttestationReportSigningCACert.pem") // FIXME: get user1.crt and ensure that userCert is a string - val userCert = Utils.findResource("user1.crt") + val userCert = """ + -----BEGIN CERTIFICATE----- + MIIDpDCCAgwCFGUiLLjMglw1cxfSRsR2dX8nguLRMA0GCSqGSIb3DQEBCwUAMA8x + DTALBgNVBAMMBHJvb3QwHhcNMjAwNTI5MDAzNjQ4WhcNMjAwNjI4MDAzNjQ4WjAQ + MQ4wDAYDVQQDDAV1c2VyMTCCAaAwDQYJKoZIhvcNAQEBBQADggGNADCCAYgCggGB + AMOb69fsVyiN4AQvW8nbqO49AjrBqvrqIjn/fa7aB26vt61yPymIuYpWwdsvUi/E + vRbA/2TzACopyCEzVOxaa2ZwM96DB+JFajiJ6r/vPnoy11mHgEpGUfY0So08ewLV + sMwDxSQu9uo4X516ti2WY8guLPy6TyM0JgMcHY8oggu8YS3NanxLDt/7+Q/gTkrK + NnUU540Gap+VIYXf0lMMSlyxSzPKCYMuAtzrjXO6yjs9IJfGzXpVT0QHaurBy2nR + m70x47xbh3CwNjenNfY2duHfzOMbOVC3YefJ9RWdSIEEpoPReqa8sjKPva1BSXgM + JAqCYpT1duueK+pU1WXGnDsmUEnbq+qCMrEZnAtmdIIwLNEGROq4JhOogK5WAQo8 + H4FSYZy0Jn6qWv/Gs6GfR5oIA6gR76QkVRZQOXxuBO17pLHSkqQWxtb05dg+3qm2 + RUnhciNPg3kSb9hgGp+9Jp6IVtOXLyX/a2TEVekeAOXGptJWPPKNQ9qi7RmrZ8B2 + QwIBAzANBgkqhkiG9w0BAQsFAAOCAYEAUMb5/sWIIIWuzaLJC3GPoRhpGSIWeKX8 + bh2c7Kxuw1/K+w3wygCowihAcAMpcxZSaChhmgdQEfS6rkkzNoRK0qH0zMhVOMcI + xWkABUbf27Yl4TAjsdFYr7+hUyNkM7rETFQAiCp+aph2iY5/zF4C7DTxCLSGa8X2 + HVEezyfFb5umAFTq/Iugi9WhvAPq9iuAEquZKZ50g7uAbLtmPGB7iKmBVC6VW1m0 + h6Gz8U0H03Fbg5navTN0Jdx7w86yyAHW4L2oQ545fR3lwEhjXz+Er3ABe4z6tGJO + IcnDLw+vNS/CCCTbIec8ck1YJIg4jxkIZtlX3j5+4xaGjCoI7SwLYG0/tF9saDwI + b1qf7h5kGAahpTnO7Cy6OQUf/UxdQNKRo4XYywXk0Ky1DYFlJNXsm7MsqR5sma+b + eFtt2qH9wF8sdarKlvgmuaMlbuRIbU3y4dLhwNAzN714tOgudEclKASfwKJ1ix5V + 4VtJgb7X/djNCwySOYlO6r8Stc+i0aIj + -----END CERTIFICATE----- + """ + + val keyShare: Array[Byte] = "Opaque key share".getBytes("UTF-8") + + val GCM_KEY_LENGTH = 16 + assert(keyShare.size == GCM_KEY_LENGTH) val sp = new SP() // Retry attestation a few times in case of transient failures Utils.retry(3) { - sp.Init(Utils.sharedKey, intelCert, userCert) + sp.Init(Utils.sharedKey, intelCert, userCert, keyShare) val msg1s = rdd.mapPartitionsWithIndex { (i, _) => val (enclave, eid) = Utils.initEnclave() diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index 215831c75b..bcb7eecfb0 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -254,7 +254,7 @@ object Utils extends Logging { */ val sharedKey: Array[Byte] = "Opaque devel key".getBytes("UTF-8") assert(sharedKey.size == GCM_KEY_LENGTH) - + def encrypt(data: Array[Byte]): Array[Byte] = { val random = SecureRandom.getInstance("SHA1PRNG") val cipherKey = new SecretKeySpec(sharedKey, "AES") diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala index 9a824f0b21..e9ff9f8417 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala @@ -22,7 +22,7 @@ import ch.jodersky.jni.nativeLoader @nativeLoader("ra_jni") class SP extends java.io.Serializable { // Remote attestation, master side - @native def Init(sharedKey: Array[Byte], intelCert: String, userCert: String): Unit + @native def Init(sharedKey: Array[Byte], intelCert: String, userCert: String, keyShare: Array[Byte]): Unit @native def SPProcMsg0(msg0Input: Array[Byte]): Unit @native def SPProcMsg1(msg1Input: Array[Byte]): Array[Byte] @native def SPProcMsg3(msg3Input: Array[Byte]): Array[Byte] From 9523b6db1adc0005a6da7b1ac49e39f7ce7dfdb7 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Thu, 25 Jun 2020 18:40:59 +0000 Subject: [PATCH 050/101] initRA finishes but tests fail --- src/enclave/Common/common.h | 2 +- src/enclave/Enclave/Enclave.cpp | 20 ++++++-- .../ServiceProvider/ServiceProvider.cpp | 10 ++-- src/enclave/ServiceProvider/ServiceProvider.h | 3 +- .../ServiceProvider/ServiceProviderJNI.cpp | 4 +- .../edu/berkeley/cs/rise/opaque/RA.scala | 48 +++++++++---------- 6 files changed, 52 insertions(+), 35 deletions(-) diff --git a/src/enclave/Common/common.h b/src/enclave/Common/common.h index a47b7607a0..1ad5df898a 100644 --- a/src/enclave/Common/common.h +++ b/src/enclave/Common/common.h @@ -92,7 +92,7 @@ typedef struct oe_msg1_t { typedef struct oe_msg2_t { uint8_t shared_key_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; uint8_t key_share_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; - const char* user_cert; + char user_cert[2000]; size_t user_cert_len; } oe_msg2_t; diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 98308b4905..7513ef6148 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -1,4 +1,5 @@ #include "Enclave_t.h" +#include #include #include @@ -245,17 +246,18 @@ static Crypto g_crypto; void ecall_ra_proc_msg4( uint8_t *msg4, uint32_t msg4_size) { try { + printf("ecall ra proc msg4\n"); uint32_t temp = msg4_size; temp++; oe_msg2_t* msg2 = (oe_msg2_t*)msg4; uint8_t shared_key_plaintext[SGX_AESGCM_KEY_SIZE]; size_t shared_key_plaintext_size = sizeof(shared_key_plaintext); bool ret = g_crypto.decrypt(msg2->shared_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, shared_key_plaintext, &shared_key_plaintext_size); + printf("shared key decrypted\n"); if (!ret) { ocall_throw("shared key decryption failed"); } - uint8_t key_share_plaintext[SGX_AESGCM_KEY_SIZE]; size_t key_share_plaintext_size = sizeof(key_share_plaintext); ret = g_crypto.decrypt(msg2->key_share_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, key_share_plaintext, &key_share_plaintext_size); @@ -271,14 +273,24 @@ void ecall_ra_proc_msg4( int res; mbedtls_x509_crt user_cert; mbedtls_x509_crt_init(&user_cert); - if ((res = mbedtls_x509_crt_parse(&user_cert, (const unsigned char *) msg2->user_cert, - msg2->user_cert_len)) != 0) { - ocall_throw("Verification failed - could not read user certificate\n. mbedtls_x509_crt_parse returned"); + // std::cout << msg2->user_cert[1322] << std::endl; + std::cout << msg2->user_cert_len << std::endl; + if ((res = mbedtls_x509_crt_parse(&user_cert, (const unsigned char*) msg2->user_cert, msg2->user_cert_len)) != 0) { + char tmp[500]; + mbedtls_strerror(res, tmp, 500); + std::cout << tmp; + std::cout << "cant read certificate\n"; + // ocall_throw("Verification failed - could not read user certificate\n. mbedtls_x509_crt_parse returned"); } + printf("Getting info from cert\n"); mbedtls_x509_name subject_name = user_cert.subject; + printf("Got subject name\n"); mbedtls_asn1_buf name = subject_name.val; + printf("Got subjectname val\n"); + std::cout << (char*) name.p << std::endl; strcpy((char*) nameptr, (const char*) name.p); + printf("Copied name\n"); name_len = name.len; // Store the client's symmetric key diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index 031bcc2b95..4f63457897 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -124,7 +124,9 @@ void ServiceProvider::set_shared_key(const uint8_t *shared_key) { } void ServiceProvider::set_user_cert(const std::string user_cert) { - memcpy((char*) this->user_cert, user_cert.c_str(), user_cert.length() + 1); + memcpy(this->user_cert, user_cert.c_str(), user_cert.length() + 1); + // this->user_cert = user_cert.c_str(); + // std::cout << this->user_cert; } void ServiceProvider::set_key_share(const uint8_t *key_share) { @@ -369,8 +371,10 @@ std::unique_ptr ServiceProvider::process_msg1(oe_msg1_t *msg1, // Copy user certificate to msg2 size_t cert_len = strlen(this->user_cert); - memcpy((char*) msg2->user_cert, this->user_cert, cert_len); - msg2->user_cert_len = cert_len; + // std::cout << this->user_cert; + memcpy(msg2->user_cert, this->user_cert, cert_len); + msg2->user_cert_len = cert_len + 1; + std::cout << "Certificate length: " << cert_len << std::endl; *msg2_size = sizeof(oe_msg2_t); // clean up diff --git a/src/enclave/ServiceProvider/ServiceProvider.h b/src/enclave/ServiceProvider/ServiceProvider.h index 0885c7394f..8c472b21d7 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.h +++ b/src/enclave/ServiceProvider/ServiceProvider.h @@ -79,7 +79,8 @@ class ServiceProvider { lc_ec256_private_t sp_priv_key; uint8_t shared_key[LC_AESGCM_KEY_SIZE]; - const char* user_cert; + // FIXME: make this not a set length + char user_cert[2000]; // Key share; xor'ed among all parties to produce one shared key for spark cluster uint8_t key_share[LC_AESGCM_KEY_SIZE]; diff --git a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp index 19e4cb0b69..068fb81218 100644 --- a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp +++ b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp @@ -30,7 +30,7 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( //size_t intel_cert_len = static_cast(env->GetStringUTFLength(intel_cert)); // const char* user_cert_str = env->GetStringUTFChars(user_cert, nullptr); - size_t user_cert_len = static_cast(env->GetStringUTFLength(user_cert)); + // size_t user_cert_len = static_cast(env->GetStringUTFLength(user_cert)); try { // const char *private_key_path = std::getenv("PRIVATE_KEY_PATH"); @@ -43,7 +43,7 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( service_provider.set_shared_key(reinterpret_cast(shared_key_bytes)); // set user certificate - service_provider.set_user_cert(std::string(user_cert_str, user_cert_len)); + service_provider.set_user_cert(user_cert_str); // set key share service_provider.set_key_share(reinterpret_cast(key_share_bytes)); diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index 2472e8732e..3837b8bc6b 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -30,30 +30,30 @@ object RA extends Logging { val intelCert = Utils.findResource("AttestationReportSigningCACert.pem") // FIXME: get user1.crt and ensure that userCert is a string - val userCert = """ - -----BEGIN CERTIFICATE----- - MIIDpDCCAgwCFGUiLLjMglw1cxfSRsR2dX8nguLRMA0GCSqGSIb3DQEBCwUAMA8x - DTALBgNVBAMMBHJvb3QwHhcNMjAwNTI5MDAzNjQ4WhcNMjAwNjI4MDAzNjQ4WjAQ - MQ4wDAYDVQQDDAV1c2VyMTCCAaAwDQYJKoZIhvcNAQEBBQADggGNADCCAYgCggGB - AMOb69fsVyiN4AQvW8nbqO49AjrBqvrqIjn/fa7aB26vt61yPymIuYpWwdsvUi/E - vRbA/2TzACopyCEzVOxaa2ZwM96DB+JFajiJ6r/vPnoy11mHgEpGUfY0So08ewLV - sMwDxSQu9uo4X516ti2WY8guLPy6TyM0JgMcHY8oggu8YS3NanxLDt/7+Q/gTkrK - NnUU540Gap+VIYXf0lMMSlyxSzPKCYMuAtzrjXO6yjs9IJfGzXpVT0QHaurBy2nR - m70x47xbh3CwNjenNfY2duHfzOMbOVC3YefJ9RWdSIEEpoPReqa8sjKPva1BSXgM - JAqCYpT1duueK+pU1WXGnDsmUEnbq+qCMrEZnAtmdIIwLNEGROq4JhOogK5WAQo8 - H4FSYZy0Jn6qWv/Gs6GfR5oIA6gR76QkVRZQOXxuBO17pLHSkqQWxtb05dg+3qm2 - RUnhciNPg3kSb9hgGp+9Jp6IVtOXLyX/a2TEVekeAOXGptJWPPKNQ9qi7RmrZ8B2 - QwIBAzANBgkqhkiG9w0BAQsFAAOCAYEAUMb5/sWIIIWuzaLJC3GPoRhpGSIWeKX8 - bh2c7Kxuw1/K+w3wygCowihAcAMpcxZSaChhmgdQEfS6rkkzNoRK0qH0zMhVOMcI - xWkABUbf27Yl4TAjsdFYr7+hUyNkM7rETFQAiCp+aph2iY5/zF4C7DTxCLSGa8X2 - HVEezyfFb5umAFTq/Iugi9WhvAPq9iuAEquZKZ50g7uAbLtmPGB7iKmBVC6VW1m0 - h6Gz8U0H03Fbg5navTN0Jdx7w86yyAHW4L2oQ545fR3lwEhjXz+Er3ABe4z6tGJO - IcnDLw+vNS/CCCTbIec8ck1YJIg4jxkIZtlX3j5+4xaGjCoI7SwLYG0/tF9saDwI - b1qf7h5kGAahpTnO7Cy6OQUf/UxdQNKRo4XYywXk0Ky1DYFlJNXsm7MsqR5sma+b - eFtt2qH9wF8sdarKlvgmuaMlbuRIbU3y4dLhwNAzN714tOgudEclKASfwKJ1ix5V - 4VtJgb7X/djNCwySOYlO6r8Stc+i0aIj - -----END CERTIFICATE----- - """ + // val userCert = """-----BEGIN CERTIFICATE----- +// MIIDpDCCAgwCFGUiLLjMglw1cxfSRsR2dX8nguLRMA0GCSqGSIb3DQEBCwUAMA8x +// DTALBgNVBAMMBHJvb3QwHhcNMjAwNTI5MDAzNjQ4WhcNMjAwNjI4MDAzNjQ4WjAQ +// MQ4wDAYDVQQDDAV1c2VyMTCCAaAwDQYJKoZIhvcNAQEBBQADggGNADCCAYgCggGB +// AMOb69fsVyiN4AQvW8nbqO49AjrBqvrqIjn/fa7aB26vt61yPymIuYpWwdsvUi/E +// vRbA/2TzACopyCEzVOxaa2ZwM96DB+JFajiJ6r/vPnoy11mHgEpGUfY0So08ewLV +// sMwDxSQu9uo4X516ti2WY8guLPy6TyM0JgMcHY8oggu8YS3NanxLDt/7+Q/gTkrK +// NnUU540Gap+VIYXf0lMMSlyxSzPKCYMuAtzrjXO6yjs9IJfGzXpVT0QHaurBy2nR +// m70x47xbh3CwNjenNfY2duHfzOMbOVC3YefJ9RWdSIEEpoPReqa8sjKPva1BSXgM +// JAqCYpT1duueK+pU1WXGnDsmUEnbq+qCMrEZnAtmdIIwLNEGROq4JhOogK5WAQo8 +// H4FSYZy0Jn6qWv/Gs6GfR5oIA6gR76QkVRZQOXxuBO17pLHSkqQWxtb05dg+3qm2 +// RUnhciNPg3kSb9hgGp+9Jp6IVtOXLyX/a2TEVekeAOXGptJWPPKNQ9qi7RmrZ8B2 +// QwIBAzANBgkqhkiG9w0BAQsFAAOCAYEAUMb5/sWIIIWuzaLJC3GPoRhpGSIWeKX8 +// bh2c7Kxuw1/K+w3wygCowihAcAMpcxZSaChhmgdQEfS6rkkzNoRK0qH0zMhVOMcI +// xWkABUbf27Yl4TAjsdFYr7+hUyNkM7rETFQAiCp+aph2iY5/zF4C7DTxCLSGa8X2 +// HVEezyfFb5umAFTq/Iugi9WhvAPq9iuAEquZKZ50g7uAbLtmPGB7iKmBVC6VW1m0 +// h6Gz8U0H03Fbg5navTN0Jdx7w86yyAHW4L2oQ545fR3lwEhjXz+Er3ABe4z6tGJO +// IcnDLw+vNS/CCCTbIec8ck1YJIg4jxkIZtlX3j5+4xaGjCoI7SwLYG0/tF9saDwI +// b1qf7h5kGAahpTnO7Cy6OQUf/UxdQNKRo4XYywXk0Ky1DYFlJNXsm7MsqR5sma+b +// eFtt2qH9wF8sdarKlvgmuaMlbuRIbU3y4dLhwNAzN714tOgudEclKASfwKJ1ix5V +// 4VtJgb7X/djNCwySOYlO6r8Stc+i0aIj +// -----END CERTIFICATE-----""" + + val userCert = scala.io.Source.fromFile("/home/chester/opaque/user1.crt").mkString val keyShare: Array[Byte] = "Opaque key share".getBytes("UTF-8") From ea356a6f68e1525a1dbf2d847a0a2c1d65ca44a2 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Thu, 25 Jun 2020 18:50:18 +0000 Subject: [PATCH 051/101] Add +5 to user cert len --- src/enclave/Enclave/Enclave.cpp | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 7513ef6148..c091165449 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -246,14 +246,12 @@ static Crypto g_crypto; void ecall_ra_proc_msg4( uint8_t *msg4, uint32_t msg4_size) { try { - printf("ecall ra proc msg4\n"); uint32_t temp = msg4_size; temp++; oe_msg2_t* msg2 = (oe_msg2_t*)msg4; uint8_t shared_key_plaintext[SGX_AESGCM_KEY_SIZE]; size_t shared_key_plaintext_size = sizeof(shared_key_plaintext); bool ret = g_crypto.decrypt(msg2->shared_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, shared_key_plaintext, &shared_key_plaintext_size); - printf("shared key decrypted\n"); if (!ret) { ocall_throw("shared key decryption failed"); @@ -273,24 +271,14 @@ void ecall_ra_proc_msg4( int res; mbedtls_x509_crt user_cert; mbedtls_x509_crt_init(&user_cert); - // std::cout << msg2->user_cert[1322] << std::endl; - std::cout << msg2->user_cert_len << std::endl; - if ((res = mbedtls_x509_crt_parse(&user_cert, (const unsigned char*) msg2->user_cert, msg2->user_cert_len)) != 0) { - char tmp[500]; - mbedtls_strerror(res, tmp, 500); - std::cout << tmp; - std::cout << "cant read certificate\n"; - // ocall_throw("Verification failed - could not read user certificate\n. mbedtls_x509_crt_parse returned"); + // FIXME: not sure why cert_len needs a +5 + if ((res = mbedtls_x509_crt_parse(&user_cert, (const unsigned char*) msg2->user_cert, msg2->user_cert_len + 5)) != 0) { + ocall_throw("Verification failed - could not read user certificate\n. mbedtls_x509_crt_parse returned"); } - printf("Getting info from cert\n"); mbedtls_x509_name subject_name = user_cert.subject; - printf("Got subject name\n"); mbedtls_asn1_buf name = subject_name.val; - printf("Got subjectname val\n"); - std::cout << (char*) name.p << std::endl; strcpy((char*) nameptr, (const char*) name.p); - printf("Copied name\n"); name_len = name.len; // Store the client's symmetric key From e69c69a570b65c998165275af6ede2afb26d3052 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Fri, 26 Jun 2020 22:17:24 +0000 Subject: [PATCH 052/101] Filter works --- src/enclave/Enclave/Crypto.cpp | 46 +++++++++++++++------- src/enclave/Enclave/Crypto.h | 4 +- src/enclave/Enclave/Enclave.cpp | 3 +- src/enclave/Enclave/Filter.cpp | 2 +- src/enclave/Enclave/FlatbuffersReaders.cpp | 5 +-- src/enclave/Enclave/FlatbuffersWriters.cpp | 3 +- 6 files changed, 40 insertions(+), 23 deletions(-) diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index 41067b3482..b13ba1eaee 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -110,9 +110,10 @@ void xor_shared_key(uint8_t *key_share_bytes, uint32_t key_share_size) { // } void encrypt(uint8_t *plaintext, uint32_t plaintext_length, - uint8_t *ciphertext) { + uint8_t *ciphertext, char* username) { - if (!ks) { + + if (!client_key_schedules[std::string(username)]) { throw std::runtime_error( "Cannot encrypt without a shared key. Ensure all enclaves have completed attestation."); } @@ -125,17 +126,24 @@ void encrypt(uint8_t *plaintext, uint32_t plaintext_length, // sgx_read_rand(iv_ptr, SGX_AESGCM_IV_SIZE); mbedtls_read_rand(reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); - // TODO: should we replace this encryption with the mbedtls encryption - AesGcm cipher(ks.get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); - cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); - memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); + if (username == NULL) { + // Encrypt was called in FlatbuffersWriters + AesGcm cipher(ks.get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); + cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); + memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); + } else { + // Encrypt called by client + AesGcm cipher(client_key_schedules[std::string(username)].get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); + cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); + memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); + } } -void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *plaintext) { - if (!ks) { - throw std::runtime_error( - "Cannot encrypt without a shared key. Ensure all enclaves have completed attestation."); - } +void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *plaintext, char* username) { + // if (!ks) { + // throw std::runtime_error( + // "Cannot encrypt without a shared key. Ensure all enclaves have completed attestation."); + // } uint32_t plaintext_length = dec_size(ciphertext_length); uint8_t *iv_ptr = (uint8_t *) ciphertext; @@ -143,10 +151,18 @@ void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *pla sgx_aes_gcm_128bit_tag_t *mac_ptr = (sgx_aes_gcm_128bit_tag_t *) (ciphertext + SGX_AESGCM_IV_SIZE + plaintext_length); - AesGcm decipher(ks.get(), iv_ptr, SGX_AESGCM_IV_SIZE); - decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); - if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) != 0) { - printf("Decrypt: invalid mac\n"); + if (username == NULL) { + AesGcm decipher(ks.get(), iv_ptr, SGX_AESGCM_IV_SIZE); + decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); + if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) != 0) { + printf("User name is null, Decrypt: invalid mac\n"); + } + } else { + AesGcm decipher(client_key_schedules[std::string(username)].get(), iv_ptr, SGX_AESGCM_IV_SIZE); + decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); + if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) != 0) { + printf("User name not null, Decrypt: invalid mac\n"); + } } } diff --git a/src/enclave/Enclave/Crypto.h b/src/enclave/Enclave/Crypto.h index d5dc832304..cc6f04ac16 100644 --- a/src/enclave/Enclave/Crypto.h +++ b/src/enclave/Enclave/Crypto.h @@ -34,14 +34,14 @@ void xor_shared_key(uint8_t *key_share_bytes, uint32_t key_share_size); * * A random IV will be used. */ -void encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphertext); +void encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphertext, char* username); /** * Decrypt the given ciphertext using AES-GCM with a 128-bit key and write the result to * `plaintext`. The encrypted data must be formatted as described in the documentation for * `encrypt`. */ -void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *plaintext); +void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *plaintext, char* username); /** Calculate how many bytes `encrypt` will write if invoked on plaintext of the given length. */ uint32_t enc_size(uint32_t plaintext_size); diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index c091165449..aa622823eb 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -50,7 +50,8 @@ void ecall_encrypt(uint8_t *plaintext, uint32_t plaintext_length, assert(cipher_length >= plaintext_length + SGX_AESGCM_IV_SIZE + SGX_AESGCM_MAC_SIZE); (void)cipher_length; (void)plaintext_length; - encrypt(plaintext, plaintext_length, ciphertext); + // FIXME: hardcoded username + encrypt(plaintext, plaintext_length, ciphertext, (char*) "user1"); } catch (const std::runtime_error &e) { ocall_throw(e.what()); } diff --git a/src/enclave/Enclave/Filter.cpp b/src/enclave/Enclave/Filter.cpp index b165cc1ae1..99d055f010 100644 --- a/src/enclave/Enclave/Filter.cpp +++ b/src/enclave/Enclave/Filter.cpp @@ -4,6 +4,7 @@ #include "FlatbuffersReaders.h" #include "FlatbuffersWriters.h" #include "common.h" +#include using namespace edu::berkeley::cs::rise::opaque; @@ -27,7 +28,6 @@ void filter(uint8_t *condition, size_t condition_length, if (condition_result->is_null()) { throw std::runtime_error("Filter expression returned null"); } - bool keep_row = static_cast(condition_result->value())->value(); if (keep_row) { w.append(row); diff --git a/src/enclave/Enclave/FlatbuffersReaders.cpp b/src/enclave/Enclave/FlatbuffersReaders.cpp index fe70c1b4e5..6c4474b411 100644 --- a/src/enclave/Enclave/FlatbuffersReaders.cpp +++ b/src/enclave/Enclave/FlatbuffersReaders.cpp @@ -1,15 +1,14 @@ #include "FlatbuffersReaders.h" +#include void EncryptedBlockToRowReader::reset(const tuix::EncryptedBlock *encrypted_block) { uint32_t num_rows = encrypted_block->num_rows(); const size_t rows_len = dec_size(encrypted_block->enc_rows()->size()); rows_buf.reset(new uint8_t[rows_len]); - decrypt(encrypted_block->enc_rows()->data(), encrypted_block->enc_rows()->size(), - rows_buf.get()); + decrypt(encrypted_block->enc_rows()->data(), encrypted_block->enc_rows()->size(), rows_buf.get(), (char*) "user1"); BufferRefView buf(rows_buf.get(), rows_len); buf.verify(); - rows = buf.root(); if (rows->rows()->size() != num_rows) { throw std::runtime_error( diff --git a/src/enclave/Enclave/FlatbuffersWriters.cpp b/src/enclave/Enclave/FlatbuffersWriters.cpp index 8773fc5514..bca81eaeca 100644 --- a/src/enclave/Enclave/FlatbuffersWriters.cpp +++ b/src/enclave/Enclave/FlatbuffersWriters.cpp @@ -1,4 +1,5 @@ #include "FlatbuffersWriters.h" +#include void RowWriter::clear() { builder.Clear(); @@ -82,7 +83,7 @@ void RowWriter::finish_block() { ocall_malloc(enc_rows_len, &enc_rows_ptr); std::unique_ptr enc_rows(enc_rows_ptr, &ocall_free); - encrypt(builder.GetBufferPointer(), builder.GetSize(), enc_rows.get()); + encrypt(builder.GetBufferPointer(), builder.GetSize(), enc_rows.get(), (char*) "user1"); enc_block_vector.push_back( tuix::CreateEncryptedBlock( From 24cadcd00524b4bfb262dc3c8f99927e8fb967b9 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Wed, 1 Jul 2020 00:49:22 +0000 Subject: [PATCH 053/101] Adding username to retrieve proper client key --- src/enclave/Common/common.h | 2 +- src/enclave/Enclave/Crypto.cpp | 9 ++++-- src/enclave/Enclave/Enclave.cpp | 14 +++++++--- .../ServiceProvider/ServiceProvider.cpp | 10 +++---- .../edu/berkeley/cs/rise/opaque/RA.scala | 8 +++--- .../edu/berkeley/cs/rise/opaque/Utils.scala | 28 ++++++++++++------- .../cs/rise/opaque/execution/operators.scala | 10 +++++-- .../edu/berkeley/cs/rise/opaque/sources.scala | 1 + .../cs/rise/opaque/OpaqueOperatorTests.scala | 2 +- .../berkeley/cs/rise/opaque/QEDSuite.scala | 12 ++++---- 10 files changed, 60 insertions(+), 36 deletions(-) diff --git a/src/enclave/Common/common.h b/src/enclave/Common/common.h index 1ad5df898a..5234710a63 100644 --- a/src/enclave/Common/common.h +++ b/src/enclave/Common/common.h @@ -92,8 +92,8 @@ typedef struct oe_msg1_t { typedef struct oe_msg2_t { uint8_t shared_key_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; uint8_t key_share_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; - char user_cert[2000]; size_t user_cert_len; + char user_cert[2000]; } oe_msg2_t; #endif // COMMON_H diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index b13ba1eaee..3f75e7762d 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -9,6 +9,7 @@ #include "util.h" #include #include +#include //#include "rdrand.h" // Set this number before creating the enclave @@ -112,6 +113,7 @@ void xor_shared_key(uint8_t *key_share_bytes, uint32_t key_share_size) { void encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphertext, char* username) { + std::cout << "C++ encrypting inside enclave\n"; if (!client_key_schedules[std::string(username)]) { throw std::runtime_error( @@ -127,19 +129,20 @@ void encrypt(uint8_t *plaintext, uint32_t plaintext_length, mbedtls_read_rand(reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); if (username == NULL) { - // Encrypt was called in FlatbuffersWriters AesGcm cipher(ks.get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); + std::cout << "Encrypting with xor shared key\n"; } else { - // Encrypt called by client AesGcm cipher(client_key_schedules[std::string(username)].get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); + std::cout << "Encrypting with client key\n"; } } void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *plaintext, char* username) { + std::cout << "C++ decrypting inside enclave\n"; // if (!ks) { // throw std::runtime_error( // "Cannot encrypt without a shared key. Ensure all enclaves have completed attestation."); @@ -157,12 +160,14 @@ void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *pla if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) != 0) { printf("User name is null, Decrypt: invalid mac\n"); } + std::cout << "Decrypting with xored shared key\n"; } else { AesGcm decipher(client_key_schedules[std::string(username)].get(), iv_ptr, SGX_AESGCM_IV_SIZE); decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) != 0) { printf("User name not null, Decrypt: invalid mac\n"); } + std::cout << "Decrypting with client key\n"; } } diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index aa622823eb..775a59eb06 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -247,6 +247,7 @@ static Crypto g_crypto; void ecall_ra_proc_msg4( uint8_t *msg4, uint32_t msg4_size) { try { + // FIXME: remove msg4_size uint32_t temp = msg4_size; temp++; oe_msg2_t* msg2 = (oe_msg2_t*)msg4; @@ -265,15 +266,19 @@ void ecall_ra_proc_msg4( ocall_throw("key share decryption failed"); } + // Add verifySignatureFromCertificate from XGBoost // Get name from certificate - // FIXME: nameptr not of set size + // unsigned char* nameptr = (unsigned char*) malloc(sizeof(*nameptr)); unsigned char nameptr[50]; size_t name_len; int res; mbedtls_x509_crt user_cert; mbedtls_x509_crt_init(&user_cert); - // FIXME: not sure why cert_len needs a +5 - if ((res = mbedtls_x509_crt_parse(&user_cert, (const unsigned char*) msg2->user_cert, msg2->user_cert_len + 5)) != 0) { + // FIXME: non deterministic error here + if ((res = mbedtls_x509_crt_parse(&user_cert, (const unsigned char*) msg2->user_cert, msg2->user_cert_len)) != 0) { + char tmp[50]; + mbedtls_strerror(res, tmp, 50); + std::cout << tmp << std::endl; ocall_throw("Verification failed - could not read user certificate\n. mbedtls_x509_crt_parse returned"); } @@ -299,7 +304,8 @@ void ecall_ra_proc_msg4( // Set shared key for this client add_client_key(shared_key_plaintext, shared_key_plaintext_size, (char*) user_nam.c_str()); xor_shared_key(key_share_plaintext, key_share_plaintext_size); - + // FIXME: we'll need to free nameptr eventually + // free(nameptr); } catch (const std::runtime_error &e) { ocall_throw(e.what()); } diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index 4f63457897..05eadfdf3d 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -370,12 +370,10 @@ std::unique_ptr ServiceProvider::process_msg1(oe_msg1_t *msg1, // Copy user certificate to msg2 - size_t cert_len = strlen(this->user_cert); - // std::cout << this->user_cert; - memcpy(msg2->user_cert, this->user_cert, cert_len); - msg2->user_cert_len = cert_len + 1; - std::cout << "Certificate length: " << cert_len << std::endl; - *msg2_size = sizeof(oe_msg2_t); + size_t cert_len = strlen(this->user_cert) + 1; + memcpy_s(msg2->user_cert, cert_len, this->user_cert, cert_len); + msg2->user_cert_len = cert_len; + *msg2_size = sizeof(msg2->shared_key_ciphertext) + sizeof(msg2->key_share_ciphertext) + sizeof(msg2->user_cert_len) + sizeof(msg2->user_cert); // clean up EVP_PKEY_free(pkey); diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index 3837b8bc6b..61e9dcb1bf 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -29,7 +29,9 @@ object RA extends Logging { val intelCert = Utils.findResource("AttestationReportSigningCACert.pem") - // FIXME: get user1.crt and ensure that userCert is a string + // FIXME: hardcoded path + val userCert = scala.io.Source.fromFile("/home/chester/opaque/user1.crt").mkString + // val userCert = """-----BEGIN CERTIFICATE----- // MIIDpDCCAgwCFGUiLLjMglw1cxfSRsR2dX8nguLRMA0GCSqGSIb3DQEBCwUAMA8x // DTALBgNVBAMMBHJvb3QwHhcNMjAwNTI5MDAzNjQ4WhcNMjAwNjI4MDAzNjQ4WjAQ @@ -51,9 +53,7 @@ object RA extends Logging { // b1qf7h5kGAahpTnO7Cy6OQUf/UxdQNKRo4XYywXk0Ky1DYFlJNXsm7MsqR5sma+b // eFtt2qH9wF8sdarKlvgmuaMlbuRIbU3y4dLhwNAzN714tOgudEclKASfwKJ1ix5V // 4VtJgb7X/djNCwySOYlO6r8Stc+i0aIj -// -----END CERTIFICATE-----""" - - val userCert = scala.io.Source.fromFile("/home/chester/opaque/user1.crt").mkString +// -----END CERTIFICATE-----""" val keyShare: Array[Byte] = "Opaque key share".getBytes("UTF-8") diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index bcb7eecfb0..28c04aa0b5 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -253,11 +253,13 @@ object Utils extends Logging { * attestation succeeds. For development, we use a hardcoded key. You should change it. */ val sharedKey: Array[Byte] = "Opaque devel key".getBytes("UTF-8") + val clientKeys = Map("user1" -> sharedKey) assert(sharedKey.size == GCM_KEY_LENGTH) - def encrypt(data: Array[Byte]): Array[Byte] = { + def encrypt(data: Array[Byte], key: Array[Byte]): Array[Byte] = { + println("Scala cipher encrypt") val random = SecureRandom.getInstance("SHA1PRNG") - val cipherKey = new SecretKeySpec(sharedKey, "AES") + val cipherKey = new SecretKeySpec(key, "AES") val iv = new Array[Byte](GCM_IV_LENGTH) random.nextBytes(iv) val spec = new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv) @@ -267,8 +269,9 @@ object Utils extends Logging { iv ++ cipherText } - def decrypt(data: Array[Byte]): Array[Byte] = { - val cipherKey = new SecretKeySpec(sharedKey, "AES") + def decrypt(data: Array[Byte], key: Array[Byte]): Array[Byte] = { + println("Scala cipher decrypt") + val cipherKey = new SecretKeySpec(key, "AES") val iv = data.take(GCM_IV_LENGTH) val cipherText = data.drop(GCM_IV_LENGTH) val cipher = Cipher.getInstance("AES/GCM/NoPadding", "SunJCE") @@ -659,7 +662,8 @@ object Utils extends Logging { def encryptInternalRowsFlatbuffers( rows: Seq[InternalRow], types: Seq[DataType], - useEnclave: Boolean): Block = { + useEnclave: Boolean, + username: String): Block = { // For the encrypted blocks val builder2 = new FlatBufferBuilder val encryptedBlockOffsets = ArrayBuilder.make[Int] @@ -668,7 +672,7 @@ object Utils extends Logging { var builder = new FlatBufferBuilder var rowsOffsets = ArrayBuilder.make[Int] - def finishBlock(): Unit = { + def finishBlock(encryptionKey: Array[Byte]): Unit = { val rowsOffsetsArray = rowsOffsets.result builder.finish( tuix.Rows.createRows( @@ -679,12 +683,15 @@ object Utils extends Logging { val plaintext = builder.sizedByteArray() // 2. Encrypt the row data and put it into a tuix.EncryptedBlock + println("I'm encrypting!") val ciphertext = if (useEnclave) { val (enclave, eid) = initEnclave() + println("Use enclave") enclave.Encrypt(eid, plaintext) } else { - encrypt(plaintext) + println("Don't use enclave") + encrypt(plaintext, encryptionKey) } encryptedBlockOffsets += tuix.EncryptedBlock.createEncryptedBlock( @@ -708,11 +715,11 @@ object Utils extends Logging { false) if (builder.offset() > MaxBlockSize) { - finishBlock() + finishBlock(clientKeys(username)) } } if (builder.offset() > 0) { - finishBlock() + finishBlock(clientKeys(username)) } // 3. Put the tuix.EncryptedBlock objects into a tuix.EncryptedBlocks @@ -748,7 +755,8 @@ object Utils extends Logging { ciphertextBuf.get(ciphertext) // 2. Decrypt the row data - val plaintext = decrypt(ciphertext) + println("I'm decrypting the row data!") + val plaintext = decrypt(ciphertext, sharedKey) // 1. Deserialize the tuix.Rows and return them as Scala InternalRow objects val rows = tuix.Rows.getRootAsRows(ByteBuffer.wrap(plaintext)) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index 74a24a49b3..624c4457d4 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -73,10 +73,11 @@ case class EncryptedLocalTableScanExec( case (start, end) => unsafeRows.slice(start, end).toSeq }.toSeq + println("Operators.scala executeBlocked()") // Encrypt each local partition val encryptedPartitions: Seq[Block] = slicedPlaintextData.map(slice => - Utils.encryptInternalRowsFlatbuffers(slice, output.map(_.dataType), useEnclave = false)) + Utils.encryptInternalRowsFlatbuffers(slice, output.map(_.dataType), useEnclave = false, "user1")) // Make an RDD from the encrypted partitions sqlContext.sparkContext.parallelize(encryptedPartitions) @@ -91,7 +92,7 @@ case class EncryptExec(child: SparkPlan) override def executeBlocked(): RDD[Block] = { child.execute().mapPartitions { rowIter => Iterator(Utils.encryptInternalRowsFlatbuffers( - rowIter.toSeq, output.map(_.dataType), useEnclave = true)) + rowIter.toSeq, output.map(_.dataType), useEnclave = true, "user1")) } } } @@ -136,16 +137,20 @@ trait OpaqueOperatorExec extends SparkPlan { } override def executeCollect(): Array[InternalRow] = { + println("execute collect") executeBlocked().collect().flatMap { block => Utils.decryptBlockFlatbuffers(block) } } override def executeTake(n: Int): Array[InternalRow] = { + // Internally, executeTake gets an RDD of byte array of n unsafe rows and scans the RDD partitions one by one until n is reached or all partitions were processed. + // This method called when decrypting dataframe from file if (n == 0) { return new Array[InternalRow](0) } + println("Callign execute blocked in execute take") val childRDD = executeBlocked() val buf = new ArrayBuffer[InternalRow] @@ -167,6 +172,7 @@ trait OpaqueOperatorExec extends SparkPlan { } numPartsToTry = math.max(0, numPartsToTry) // guard against negative num of partitions + println("executeTake") val p = partsScanned.until(math.min(partsScanned + numPartsToTry, totalParts).toInt) val sc = sqlContext.sparkContext val res = sc.runJob(childRDD, diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/sources.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/sources.scala index 8c37cc3b42..0859a8c7f6 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/sources.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/sources.scala @@ -65,6 +65,7 @@ class EncryptedSource mode: SaveMode, parameters: Map[String, String], data: DataFrame): BaseRelation = { + println("Ok i'm in createrelation") val blocks: RDD[Block] = data.queryExecution.executedPlan.asInstanceOf[OpaqueOperatorExec] .executeBlocked() diff --git a/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala b/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala index d17bc3e9a8..ab2ecd82d5 100644 --- a/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala +++ b/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala @@ -410,7 +410,7 @@ trait OpaqueOperatorTests extends FunSuite with BeforeAndAfterAll { self => assert(df.groupBy("word").agg(sum("count")).collect.toSet === df2.groupBy("word").agg(sum("count")).collect.toSet) } finally { - Utils.deleteRecursively(path) + // Utils.deleteRecursively(path) } } diff --git a/src/test/scala/edu/berkeley/cs/rise/opaque/QEDSuite.scala b/src/test/scala/edu/berkeley/cs/rise/opaque/QEDSuite.scala index ea30f87007..8e2a73e65c 100644 --- a/src/test/scala/edu/berkeley/cs/rise/opaque/QEDSuite.scala +++ b/src/test/scala/edu/berkeley/cs/rise/opaque/QEDSuite.scala @@ -33,12 +33,12 @@ class QEDSuite extends FunSuite with BeforeAndAfterAll { spark.stop() } - test("java encryption/decryption") { - val data = Array[Byte](0, 1, 2) - val (enclave, eid) = Utils.initEnclave() - assert(data === Utils.decrypt(Utils.encrypt(data))) - assert(data === Utils.decrypt(enclave.Encrypt(eid, data))) - } + // test("java encryption/decryption") { + // val data = Array[Byte](0, 1, 2) + // val (enclave, eid) = Utils.initEnclave() + // assert(data === Utils.decrypt(Utils.encrypt(data))) + // assert(data === Utils.decrypt(enclave.Encrypt(eid, data))) + // } } From f6f6ee8513cec098eae9c8f10b75708c8dfd9f91 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Wed, 1 Jul 2020 02:05:50 +0000 Subject: [PATCH 054/101] Add utils function to set client key --- src/enclave/Enclave/FlatbuffersReaders.cpp | 1 + .../edu/berkeley/cs/rise/opaque/RA.scala | 4 ++- .../edu/berkeley/cs/rise/opaque/Utils.scala | 33 +++++++++++-------- .../cs/rise/opaque/execution/operators.scala | 5 +-- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/enclave/Enclave/FlatbuffersReaders.cpp b/src/enclave/Enclave/FlatbuffersReaders.cpp index 6c4474b411..606e2808fb 100644 --- a/src/enclave/Enclave/FlatbuffersReaders.cpp +++ b/src/enclave/Enclave/FlatbuffersReaders.cpp @@ -6,6 +6,7 @@ void EncryptedBlockToRowReader::reset(const tuix::EncryptedBlock *encrypted_bloc const size_t rows_len = dec_size(encrypted_block->enc_rows()->size()); rows_buf.reset(new uint8_t[rows_len]); + std::cout << "reading flatbuffers\n"; decrypt(encrypted_block->enc_rows()->data(), encrypted_block->enc_rows()->size(), rows_buf.get(), (char*) "user1"); BufferRefView buf(rows_buf.get(), rows_len); buf.verify(); diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index 61e9dcb1bf..4e74c9d9c7 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -56,6 +56,8 @@ object RA extends Logging { // -----END CERTIFICATE-----""" val keyShare: Array[Byte] = "Opaque key share".getBytes("UTF-8") + val clientKey: Array[Byte] = "Opaque devel key".getBytes("UTF-8") + Utils.addClientKey("user1", clientKey) val GCM_KEY_LENGTH = 16 assert(keyShare.size == GCM_KEY_LENGTH) @@ -64,7 +66,7 @@ object RA extends Logging { // Retry attestation a few times in case of transient failures Utils.retry(3) { - sp.Init(Utils.sharedKey, intelCert, userCert, keyShare) + sp.Init(Utils.clientKey, intelCert, userCert, keyShare) val msg1s = rdd.mapPartitionsWithIndex { (i, _) => val (enclave, eid) = Utils.initEnclave() diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index 28c04aa0b5..d5dfd1d797 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -252,14 +252,20 @@ object Utils extends Logging { * Symmetric key used to encrypt row data. This key is securely sent to the enclaves if * attestation succeeds. For development, we use a hardcoded key. You should change it. */ - val sharedKey: Array[Byte] = "Opaque devel key".getBytes("UTF-8") - val clientKeys = Map("user1" -> sharedKey) - assert(sharedKey.size == GCM_KEY_LENGTH) + // var clientKey: Array[Byte] = "Opaque devel key".getBytes("UTF-8") + var clientKey: Array[Byte] = null + // val clientKeys:Map[String, Array[Byte]] = Map() + // assert(sharedKey.size == GCM_KEY_LENGTH) + + def addClientKey(username: String, key: Array[Byte]) : Unit = { + clientKey = key + assert(clientKey.size == GCM_KEY_LENGTH) + } - def encrypt(data: Array[Byte], key: Array[Byte]): Array[Byte] = { + def encrypt(data: Array[Byte]): Array[Byte] = { println("Scala cipher encrypt") val random = SecureRandom.getInstance("SHA1PRNG") - val cipherKey = new SecretKeySpec(key, "AES") + val cipherKey = new SecretKeySpec(clientKey, "AES") val iv = new Array[Byte](GCM_IV_LENGTH) random.nextBytes(iv) val spec = new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv) @@ -269,9 +275,9 @@ object Utils extends Logging { iv ++ cipherText } - def decrypt(data: Array[Byte], key: Array[Byte]): Array[Byte] = { + def decrypt(data: Array[Byte]): Array[Byte] = { println("Scala cipher decrypt") - val cipherKey = new SecretKeySpec(key, "AES") + val cipherKey = new SecretKeySpec(clientKey, "AES") val iv = data.take(GCM_IV_LENGTH) val cipherText = data.drop(GCM_IV_LENGTH) val cipher = Cipher.getInstance("AES/GCM/NoPadding", "SunJCE") @@ -662,8 +668,7 @@ object Utils extends Logging { def encryptInternalRowsFlatbuffers( rows: Seq[InternalRow], types: Seq[DataType], - useEnclave: Boolean, - username: String): Block = { + useEnclave: Boolean): Block = { // For the encrypted blocks val builder2 = new FlatBufferBuilder val encryptedBlockOffsets = ArrayBuilder.make[Int] @@ -672,7 +677,7 @@ object Utils extends Logging { var builder = new FlatBufferBuilder var rowsOffsets = ArrayBuilder.make[Int] - def finishBlock(encryptionKey: Array[Byte]): Unit = { + def finishBlock(): Unit = { val rowsOffsetsArray = rowsOffsets.result builder.finish( tuix.Rows.createRows( @@ -691,7 +696,7 @@ object Utils extends Logging { enclave.Encrypt(eid, plaintext) } else { println("Don't use enclave") - encrypt(plaintext, encryptionKey) + encrypt(plaintext) } encryptedBlockOffsets += tuix.EncryptedBlock.createEncryptedBlock( @@ -715,11 +720,11 @@ object Utils extends Logging { false) if (builder.offset() > MaxBlockSize) { - finishBlock(clientKeys(username)) + finishBlock() } } if (builder.offset() > 0) { - finishBlock(clientKeys(username)) + finishBlock() } // 3. Put the tuix.EncryptedBlock objects into a tuix.EncryptedBlocks @@ -756,7 +761,7 @@ object Utils extends Logging { // 2. Decrypt the row data println("I'm decrypting the row data!") - val plaintext = decrypt(ciphertext, sharedKey) + val plaintext = decrypt(ciphertext) // 1. Deserialize the tuix.Rows and return them as Scala InternalRow objects val rows = tuix.Rows.getRootAsRows(ByteBuffer.wrap(plaintext)) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index 624c4457d4..863234bcc7 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -77,7 +77,7 @@ case class EncryptedLocalTableScanExec( // Encrypt each local partition val encryptedPartitions: Seq[Block] = slicedPlaintextData.map(slice => - Utils.encryptInternalRowsFlatbuffers(slice, output.map(_.dataType), useEnclave = false, "user1")) + Utils.encryptInternalRowsFlatbuffers(slice, output.map(_.dataType), useEnclave = false)) // Make an RDD from the encrypted partitions sqlContext.sparkContext.parallelize(encryptedPartitions) @@ -90,9 +90,10 @@ case class EncryptExec(child: SparkPlan) override def output: Seq[Attribute] = child.output override def executeBlocked(): RDD[Block] = { + println("EncryptExec woohoo") child.execute().mapPartitions { rowIter => Iterator(Utils.encryptInternalRowsFlatbuffers( - rowIter.toSeq, output.map(_.dataType), useEnclave = true, "user1")) + rowIter.toSeq, output.map(_.dataType), useEnclave = true)) } } } From f8c39f715ea25772390a411d330ca4eae7093096 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Wed, 1 Jul 2020 22:52:19 +0000 Subject: [PATCH 055/101] Decryption with different keys --- src/enclave/Enclave/Crypto.cpp | 51 +++++++++++++--------- src/enclave/Enclave/Crypto.h | 4 +- src/enclave/Enclave/Enclave.cpp | 3 +- src/enclave/Enclave/FlatbuffersReaders.cpp | 2 +- src/enclave/Enclave/FlatbuffersWriters.cpp | 2 +- 5 files changed, 35 insertions(+), 27 deletions(-) diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index 3f75e7762d..8faff1f5cb 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -111,11 +111,11 @@ void xor_shared_key(uint8_t *key_share_bytes, uint32_t key_share_size) { // } void encrypt(uint8_t *plaintext, uint32_t plaintext_length, - uint8_t *ciphertext, char* username) { + uint8_t *ciphertext) { std::cout << "C++ encrypting inside enclave\n"; - if (!client_key_schedules[std::string(username)]) { + if (!ks) { throw std::runtime_error( "Cannot encrypt without a shared key. Ensure all enclaves have completed attestation."); } @@ -128,20 +128,20 @@ void encrypt(uint8_t *plaintext, uint32_t plaintext_length, // sgx_read_rand(iv_ptr, SGX_AESGCM_IV_SIZE); mbedtls_read_rand(reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); - if (username == NULL) { + // if (username == NULL) { AesGcm cipher(ks.get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); std::cout << "Encrypting with xor shared key\n"; - } else { - AesGcm cipher(client_key_schedules[std::string(username)].get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); - cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); - memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); - std::cout << "Encrypting with client key\n"; - } + // } else { + // AesGcm cipher(client_key_schedules[std::string(username)].get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); + // cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); + // memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); + // std::cout << "Encrypting with client key\n"; + // } } -void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *plaintext, char* username) { +void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *plaintext) { std::cout << "C++ decrypting inside enclave\n"; // if (!ks) { // throw std::runtime_error( @@ -154,21 +154,30 @@ void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *pla sgx_aes_gcm_128bit_tag_t *mac_ptr = (sgx_aes_gcm_128bit_tag_t *) (ciphertext + SGX_AESGCM_IV_SIZE + plaintext_length); - if (username == NULL) { + // if (username == NULL) { + // FIXME: change this to possibly use client key AesGcm decipher(ks.get(), iv_ptr, SGX_AESGCM_IV_SIZE); decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) != 0) { - printf("User name is null, Decrypt: invalid mac\n"); + // Shared key doesn't work + // Perhaps we need to use a client key instead + for (auto& keypair : client_key_schedules) { + AesGcm decipher(keypair.second.get(), iv_ptr, SGX_AESGCM_IV_SIZE); + decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); + if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) == 0) { + std::cout << "We found the proper key, of user " << keypair.first << std::endl; + break; + } + } } - std::cout << "Decrypting with xored shared key\n"; - } else { - AesGcm decipher(client_key_schedules[std::string(username)].get(), iv_ptr, SGX_AESGCM_IV_SIZE); - decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); - if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) != 0) { - printf("User name not null, Decrypt: invalid mac\n"); - } - std::cout << "Decrypting with client key\n"; - } + // } else { + // AesGcm decipher(client_key_schedules[std::string(username)].get(), iv_ptr, SGX_AESGCM_IV_SIZE); + // decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); + // if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) != 0) { + // printf("User name not null, Decrypt: invalid mac\n"); + // } + // std::cout << "Decrypting with client key\n"; + // } } uint32_t enc_size(uint32_t plaintext_size) { diff --git a/src/enclave/Enclave/Crypto.h b/src/enclave/Enclave/Crypto.h index cc6f04ac16..d5dc832304 100644 --- a/src/enclave/Enclave/Crypto.h +++ b/src/enclave/Enclave/Crypto.h @@ -34,14 +34,14 @@ void xor_shared_key(uint8_t *key_share_bytes, uint32_t key_share_size); * * A random IV will be used. */ -void encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphertext, char* username); +void encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphertext); /** * Decrypt the given ciphertext using AES-GCM with a 128-bit key and write the result to * `plaintext`. The encrypted data must be formatted as described in the documentation for * `encrypt`. */ -void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *plaintext, char* username); +void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *plaintext); /** Calculate how many bytes `encrypt` will write if invoked on plaintext of the given length. */ uint32_t enc_size(uint32_t plaintext_size); diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 775a59eb06..d7cb339c8f 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -50,8 +50,7 @@ void ecall_encrypt(uint8_t *plaintext, uint32_t plaintext_length, assert(cipher_length >= plaintext_length + SGX_AESGCM_IV_SIZE + SGX_AESGCM_MAC_SIZE); (void)cipher_length; (void)plaintext_length; - // FIXME: hardcoded username - encrypt(plaintext, plaintext_length, ciphertext, (char*) "user1"); + encrypt(plaintext, plaintext_length, ciphertext); } catch (const std::runtime_error &e) { ocall_throw(e.what()); } diff --git a/src/enclave/Enclave/FlatbuffersReaders.cpp b/src/enclave/Enclave/FlatbuffersReaders.cpp index 606e2808fb..0f49131e10 100644 --- a/src/enclave/Enclave/FlatbuffersReaders.cpp +++ b/src/enclave/Enclave/FlatbuffersReaders.cpp @@ -7,7 +7,7 @@ void EncryptedBlockToRowReader::reset(const tuix::EncryptedBlock *encrypted_bloc const size_t rows_len = dec_size(encrypted_block->enc_rows()->size()); rows_buf.reset(new uint8_t[rows_len]); std::cout << "reading flatbuffers\n"; - decrypt(encrypted_block->enc_rows()->data(), encrypted_block->enc_rows()->size(), rows_buf.get(), (char*) "user1"); + decrypt(encrypted_block->enc_rows()->data(), encrypted_block->enc_rows()->size(), rows_buf.get()); BufferRefView buf(rows_buf.get(), rows_len); buf.verify(); rows = buf.root(); diff --git a/src/enclave/Enclave/FlatbuffersWriters.cpp b/src/enclave/Enclave/FlatbuffersWriters.cpp index bca81eaeca..8b409228db 100644 --- a/src/enclave/Enclave/FlatbuffersWriters.cpp +++ b/src/enclave/Enclave/FlatbuffersWriters.cpp @@ -83,7 +83,7 @@ void RowWriter::finish_block() { ocall_malloc(enc_rows_len, &enc_rows_ptr); std::unique_ptr enc_rows(enc_rows_ptr, &ocall_free); - encrypt(builder.GetBufferPointer(), builder.GetSize(), enc_rows.get(), (char*) "user1"); + encrypt(builder.GetBufferPointer(), builder.GetSize(), enc_rows.get()); enc_block_vector.push_back( tuix::CreateEncryptedBlock( From 7a9204e4f124d175a88caaad48282889029b1492 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Thu, 2 Jul 2020 00:52:59 +0000 Subject: [PATCH 056/101] Loading from files encrypted with differnt keys works, this checkpoint includes testing by adding a test key to msg2 that the enclave stores in its client key map --- src/enclave/Common/common.h | 1 + src/enclave/Enclave/Crypto.cpp | 41 +++++++++++++------ src/enclave/Enclave/Enclave.cpp | 16 ++++++-- src/enclave/ServiceProvider/SP.h | 2 +- .../ServiceProvider/ServiceProvider.cpp | 18 ++++++++ src/enclave/ServiceProvider/ServiceProvider.h | 7 ++++ .../ServiceProvider/ServiceProviderJNI.cpp | 6 ++- .../edu/berkeley/cs/rise/opaque/RA.scala | 28 ++----------- .../edu/berkeley/cs/rise/opaque/Utils.scala | 2 +- .../cs/rise/opaque/execution/SP.scala | 2 +- 10 files changed, 79 insertions(+), 44 deletions(-) diff --git a/src/enclave/Common/common.h b/src/enclave/Common/common.h index 5234710a63..f68e7258f4 100644 --- a/src/enclave/Common/common.h +++ b/src/enclave/Common/common.h @@ -92,6 +92,7 @@ typedef struct oe_msg1_t { typedef struct oe_msg2_t { uint8_t shared_key_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; uint8_t key_share_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; + uint8_t test_key_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; size_t user_cert_len; char user_cert[2000]; } oe_msg2_t; diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index 8faff1f5cb..8c3abb8d70 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -64,6 +64,15 @@ void add_client_key(uint8_t *client_key_bytes, uint32_t client_key_size, char* u std::string user(username); client_keys[user] = user_private_key; + // Add this for testing purposes + // std::cout << "Adding another user private key for test purposes\n"; + // std::cout << "Client key size " << client_key_size << std::endl; + // uint8_t* test_key = (uint8_t*) u8"Opaque deve key2"; + // std::cout << (char*) test_key << std::endl; + // std::vector test_private_key(test_key, test_key + client_key_size); + // client_keys[std::string("user2")] = test_private_key; + // initKeySchedule((char*) "user2"); + initKeySchedule(username); } @@ -156,20 +165,28 @@ void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *pla // if (username == NULL) { // FIXME: change this to possibly use client key - AesGcm decipher(ks.get(), iv_ptr, SGX_AESGCM_IV_SIZE); - decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); - if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) != 0) { - // Shared key doesn't work - // Perhaps we need to use a client key instead - for (auto& keypair : client_key_schedules) { - AesGcm decipher(keypair.second.get(), iv_ptr, SGX_AESGCM_IV_SIZE); - decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); - if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) == 0) { - std::cout << "We found the proper key, of user " << keypair.first << std::endl; - break; - } + std::cout << "do we make it here\n"; + AesGcm decipher(ks.get(), iv_ptr, SGX_AESGCM_IV_SIZE); + std::cout << "Initialized decipher\n"; + decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); + std::cout << "tried shared key\n"; + if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) != 0) { + // Shared key doesn't work + // Perhaps we need to use a client key instead + int success = -1; + for (auto& keypair : client_key_schedules) { + AesGcm decipher(keypair.second.get(), iv_ptr, SGX_AESGCM_IV_SIZE); + decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); + if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) == 0) { + std::cout << "We found the proper key, of user " << keypair.first << std::endl; + success = 0; + break; } } + if (success == -1) { + std::cout << "Couldn't decrypt -- proper key unknown\n"; + } + } // } else { // AesGcm decipher(client_key_schedules[std::string(username)].get(), iv_ptr, SGX_AESGCM_IV_SIZE); // decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index d7cb339c8f..0d6f1ce0bb 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -275,9 +275,9 @@ void ecall_ra_proc_msg4( mbedtls_x509_crt_init(&user_cert); // FIXME: non deterministic error here if ((res = mbedtls_x509_crt_parse(&user_cert, (const unsigned char*) msg2->user_cert, msg2->user_cert_len)) != 0) { - char tmp[50]; - mbedtls_strerror(res, tmp, 50); - std::cout << tmp << std::endl; + // char tmp[50]; + // mbedtls_strerror(res, tmp, 50); + // std::cout << tmp << std::endl; ocall_throw("Verification failed - could not read user certificate\n. mbedtls_x509_crt_parse returned"); } @@ -303,6 +303,16 @@ void ecall_ra_proc_msg4( // Set shared key for this client add_client_key(shared_key_plaintext, shared_key_plaintext_size, (char*) user_nam.c_str()); xor_shared_key(key_share_plaintext, key_share_plaintext_size); + + // This block for testing loading from files encrypted with different keys + uint8_t test_key_plaintext[SGX_AESGCM_KEY_SIZE]; + size_t test_key_plaintext_size = sizeof(test_key_plaintext); + ret = g_crypto.decrypt(msg2->test_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, test_key_plaintext, &test_key_plaintext_size); + add_client_key(test_key_plaintext, test_key_plaintext_size, (char*) "user2"); + if (!ret) { + ocall_throw("shared key decryption failed"); + } + // FIXME: we'll need to free nameptr eventually // free(nameptr); } catch (const std::runtime_error &e) { diff --git a/src/enclave/ServiceProvider/SP.h b/src/enclave/ServiceProvider/SP.h index aed0988240..8d40f36797 100644 --- a/src/enclave/ServiceProvider/SP.h +++ b/src/enclave/ServiceProvider/SP.h @@ -6,7 +6,7 @@ extern "C" { #endif JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( - JNIEnv *, jobject, jbyteArray, jstring, jstring, jbyteArray); + JNIEnv *, jobject, jbyteArray, jstring, jstring, jbyteArray, jbyteArray); JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg0( JNIEnv *, jobject, jbyteArray); diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index 05eadfdf3d..391993f78f 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -123,6 +123,11 @@ void ServiceProvider::set_shared_key(const uint8_t *shared_key) { memcpy(this->shared_key, shared_key, LC_AESGCM_KEY_SIZE); } +// This function for testing purposes +void ServiceProvider::set_test_key(const uint8_t *shared_key) { + memcpy(this->test_key, shared_key, LC_AESGCM_KEY_SIZE); +} + void ServiceProvider::set_user_cert(const std::string user_cert) { memcpy(this->user_cert, user_cert.c_str(), user_cert.length() + 1); // this->user_cert = user_cert.c_str(); @@ -360,6 +365,19 @@ std::unique_ptr ServiceProvider::process_msg1(oe_msg1_t *msg1, else if (ret < 0) { throw std::runtime_error(std::string("public_encrypt failed")); } + + // Encrypt test key for testing purposes + unsigned char encrypted_test_key[OE_SHARED_KEY_CIPHERTEXT_SIZE]; + size_t encrypted_test_key_size = sizeof(encrypted_test_key); + ret = public_encrypt(pkey, this->test_key, LC_AESGCM_KEY_SIZE, encrypted_test_key, &encrypted_test_key_size); + if (ret == 0) { + throw std::runtime_error(std::string("public_encrypt: buffer too small")); + } + else if (ret < 0) { + throw std::runtime_error(std::string("public_encrypt failed")); + } + memcpy_s(msg2->test_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, encrypted_test_key, encrypted_test_key_size); + // Prepare msg2 // Copy over shared key ciphertext diff --git a/src/enclave/ServiceProvider/ServiceProvider.h b/src/enclave/ServiceProvider/ServiceProvider.h index 8c472b21d7..3a070760ce 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.h +++ b/src/enclave/ServiceProvider/ServiceProvider.h @@ -38,6 +38,9 @@ class ServiceProvider { * attestation succeeds. */ void set_shared_key(const uint8_t *shared_key); + + // FOR TESTING PURPOSES + void set_test_key(const uint8_t *shared_key); void set_user_cert(std::string user_cert); @@ -79,6 +82,10 @@ class ServiceProvider { lc_ec256_private_t sp_priv_key; uint8_t shared_key[LC_AESGCM_KEY_SIZE]; + + // FOR TESTING PURPOSES + uint8_t test_key[LC_AESGCM_KEY_SIZE]; + // FIXME: make this not a set length char user_cert[2000]; diff --git a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp index 068fb81218..af261c70ee 100644 --- a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp +++ b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp @@ -17,7 +17,7 @@ void jni_throw(JNIEnv *env, const char *message) { } JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( - JNIEnv *env, jobject obj, jbyteArray shared_key, jstring intel_cert, jstring user_cert, jbyteArray key_share) { + JNIEnv *env, jobject obj, jbyteArray shared_key, jstring intel_cert, jstring user_cert, jbyteArray key_share, jbyteArray test_key) { (void)env; (void)obj; @@ -42,6 +42,10 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( // service_provider.load_private_key(private_key_path); service_provider.set_shared_key(reinterpret_cast(shared_key_bytes)); + // THIS BLOCK FOR TESTING PURPOSES + jbyte *test_key_bytes = env->GetByteArrayElements(test_key, &if_copy); + service_provider.set_test_key(reinterpret_cast(test_key_bytes)); + // set user certificate service_provider.set_user_cert(user_cert_str); diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index 4e74c9d9c7..994c152d23 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -32,32 +32,10 @@ object RA extends Logging { // FIXME: hardcoded path val userCert = scala.io.Source.fromFile("/home/chester/opaque/user1.crt").mkString - // val userCert = """-----BEGIN CERTIFICATE----- -// MIIDpDCCAgwCFGUiLLjMglw1cxfSRsR2dX8nguLRMA0GCSqGSIb3DQEBCwUAMA8x -// DTALBgNVBAMMBHJvb3QwHhcNMjAwNTI5MDAzNjQ4WhcNMjAwNjI4MDAzNjQ4WjAQ -// MQ4wDAYDVQQDDAV1c2VyMTCCAaAwDQYJKoZIhvcNAQEBBQADggGNADCCAYgCggGB -// AMOb69fsVyiN4AQvW8nbqO49AjrBqvrqIjn/fa7aB26vt61yPymIuYpWwdsvUi/E -// vRbA/2TzACopyCEzVOxaa2ZwM96DB+JFajiJ6r/vPnoy11mHgEpGUfY0So08ewLV -// sMwDxSQu9uo4X516ti2WY8guLPy6TyM0JgMcHY8oggu8YS3NanxLDt/7+Q/gTkrK -// NnUU540Gap+VIYXf0lMMSlyxSzPKCYMuAtzrjXO6yjs9IJfGzXpVT0QHaurBy2nR -// m70x47xbh3CwNjenNfY2duHfzOMbOVC3YefJ9RWdSIEEpoPReqa8sjKPva1BSXgM -// JAqCYpT1duueK+pU1WXGnDsmUEnbq+qCMrEZnAtmdIIwLNEGROq4JhOogK5WAQo8 -// H4FSYZy0Jn6qWv/Gs6GfR5oIA6gR76QkVRZQOXxuBO17pLHSkqQWxtb05dg+3qm2 -// RUnhciNPg3kSb9hgGp+9Jp6IVtOXLyX/a2TEVekeAOXGptJWPPKNQ9qi7RmrZ8B2 -// QwIBAzANBgkqhkiG9w0BAQsFAAOCAYEAUMb5/sWIIIWuzaLJC3GPoRhpGSIWeKX8 -// bh2c7Kxuw1/K+w3wygCowihAcAMpcxZSaChhmgdQEfS6rkkzNoRK0qH0zMhVOMcI -// xWkABUbf27Yl4TAjsdFYr7+hUyNkM7rETFQAiCp+aph2iY5/zF4C7DTxCLSGa8X2 -// HVEezyfFb5umAFTq/Iugi9WhvAPq9iuAEquZKZ50g7uAbLtmPGB7iKmBVC6VW1m0 -// h6Gz8U0H03Fbg5navTN0Jdx7w86yyAHW4L2oQ545fR3lwEhjXz+Er3ABe4z6tGJO -// IcnDLw+vNS/CCCTbIec8ck1YJIg4jxkIZtlX3j5+4xaGjCoI7SwLYG0/tF9saDwI -// b1qf7h5kGAahpTnO7Cy6OQUf/UxdQNKRo4XYywXk0Ky1DYFlJNXsm7MsqR5sma+b -// eFtt2qH9wF8sdarKlvgmuaMlbuRIbU3y4dLhwNAzN714tOgudEclKASfwKJ1ix5V -// 4VtJgb7X/djNCwySOYlO6r8Stc+i0aIj -// -----END CERTIFICATE-----""" - val keyShare: Array[Byte] = "Opaque key share".getBytes("UTF-8") val clientKey: Array[Byte] = "Opaque devel key".getBytes("UTF-8") - Utils.addClientKey("user1", clientKey) + val testKey: Array[Byte] = "Opaque deve key2".getBytes("UTF-8") + Utils.addClientKey(clientKey) val GCM_KEY_LENGTH = 16 assert(keyShare.size == GCM_KEY_LENGTH) @@ -66,7 +44,7 @@ object RA extends Logging { // Retry attestation a few times in case of transient failures Utils.retry(3) { - sp.Init(Utils.clientKey, intelCert, userCert, keyShare) + sp.Init(Utils.clientKey, intelCert, userCert, keyShare, testKey) val msg1s = rdd.mapPartitionsWithIndex { (i, _) => val (enclave, eid) = Utils.initEnclave() diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index d5dfd1d797..9fd9e5086e 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -257,7 +257,7 @@ object Utils extends Logging { // val clientKeys:Map[String, Array[Byte]] = Map() // assert(sharedKey.size == GCM_KEY_LENGTH) - def addClientKey(username: String, key: Array[Byte]) : Unit = { + def addClientKey(key: Array[Byte]) : Unit = { clientKey = key assert(clientKey.size == GCM_KEY_LENGTH) } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala index e9ff9f8417..001912c056 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala @@ -22,7 +22,7 @@ import ch.jodersky.jni.nativeLoader @nativeLoader("ra_jni") class SP extends java.io.Serializable { // Remote attestation, master side - @native def Init(sharedKey: Array[Byte], intelCert: String, userCert: String, keyShare: Array[Byte]): Unit + @native def Init(sharedKey: Array[Byte], intelCert: String, userCert: String, keyShare: Array[Byte], testKey: Array[Byte]): Unit @native def SPProcMsg0(msg0Input: Array[Byte]): Unit @native def SPProcMsg1(msg1Input: Array[Byte]): Array[Byte] @native def SPProcMsg3(msg3Input: Array[Byte]): Array[Byte] From e02308c02b04537ca026fe3877c7b724e5df975f Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Thu, 2 Jul 2020 00:58:00 +0000 Subject: [PATCH 057/101] Added fixmes to remove testing code --- src/enclave/Common/common.h | 1 + src/enclave/Enclave/Crypto.cpp | 11 +---------- src/enclave/Enclave/Enclave.cpp | 1 + src/enclave/ServiceProvider/SP.h | 1 + src/enclave/ServiceProvider/ServiceProvider.cpp | 3 ++- src/enclave/ServiceProvider/ServiceProvider.h | 2 ++ src/enclave/ServiceProvider/ServiceProviderJNI.cpp | 1 + src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala | 1 + .../edu/berkeley/cs/rise/opaque/execution/SP.scala | 1 + 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/enclave/Common/common.h b/src/enclave/Common/common.h index f68e7258f4..8411d9a68f 100644 --- a/src/enclave/Common/common.h +++ b/src/enclave/Common/common.h @@ -92,6 +92,7 @@ typedef struct oe_msg1_t { typedef struct oe_msg2_t { uint8_t shared_key_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; uint8_t key_share_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; + // FIXME: remove test key ciphertext uint8_t test_key_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; size_t user_cert_len; char user_cert[2000]; diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index 8c3abb8d70..9c03b44d30 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -64,15 +64,6 @@ void add_client_key(uint8_t *client_key_bytes, uint32_t client_key_size, char* u std::string user(username); client_keys[user] = user_private_key; - // Add this for testing purposes - // std::cout << "Adding another user private key for test purposes\n"; - // std::cout << "Client key size " << client_key_size << std::endl; - // uint8_t* test_key = (uint8_t*) u8"Opaque deve key2"; - // std::cout << (char*) test_key << std::endl; - // std::vector test_private_key(test_key, test_key + client_key_size); - // client_keys[std::string("user2")] = test_private_key; - // initKeySchedule((char*) "user2"); - initKeySchedule(username); } @@ -184,7 +175,7 @@ void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *pla } } if (success == -1) { - std::cout << "Couldn't decrypt -- proper key unknown\n"; + throw std::runtime_error("Couldn't decrypt -- proper key unknown\n"); } } // } else { diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 0d6f1ce0bb..c51dffbe53 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -305,6 +305,7 @@ void ecall_ra_proc_msg4( xor_shared_key(key_share_plaintext, key_share_plaintext_size); // This block for testing loading from files encrypted with different keys + // FIXME: remove this block uint8_t test_key_plaintext[SGX_AESGCM_KEY_SIZE]; size_t test_key_plaintext_size = sizeof(test_key_plaintext); ret = g_crypto.decrypt(msg2->test_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, test_key_plaintext, &test_key_plaintext_size); diff --git a/src/enclave/ServiceProvider/SP.h b/src/enclave/ServiceProvider/SP.h index 8d40f36797..1e6402b635 100644 --- a/src/enclave/ServiceProvider/SP.h +++ b/src/enclave/ServiceProvider/SP.h @@ -5,6 +5,7 @@ #ifdef __cplusplus extern "C" { #endif + // FIXME: remove last jbyteArray argument JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( JNIEnv *, jobject, jbyteArray, jstring, jstring, jbyteArray, jbyteArray); diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index 391993f78f..89bb87b6d2 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -367,6 +367,7 @@ std::unique_ptr ServiceProvider::process_msg1(oe_msg1_t *msg1, } // Encrypt test key for testing purposes + // FIXME: remove this block - it was for testing purposes unsigned char encrypted_test_key[OE_SHARED_KEY_CIPHERTEXT_SIZE]; size_t encrypted_test_key_size = sizeof(encrypted_test_key); ret = public_encrypt(pkey, this->test_key, LC_AESGCM_KEY_SIZE, encrypted_test_key, &encrypted_test_key_size); @@ -377,7 +378,7 @@ std::unique_ptr ServiceProvider::process_msg1(oe_msg1_t *msg1, throw std::runtime_error(std::string("public_encrypt failed")); } memcpy_s(msg2->test_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, encrypted_test_key, encrypted_test_key_size); - + // FIXME: remove up to here // Prepare msg2 // Copy over shared key ciphertext diff --git a/src/enclave/ServiceProvider/ServiceProvider.h b/src/enclave/ServiceProvider/ServiceProvider.h index 3a070760ce..b3c015cdd2 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.h +++ b/src/enclave/ServiceProvider/ServiceProvider.h @@ -40,6 +40,7 @@ class ServiceProvider { void set_shared_key(const uint8_t *shared_key); // FOR TESTING PURPOSES + // FIXME: remove this function void set_test_key(const uint8_t *shared_key); void set_user_cert(std::string user_cert); @@ -84,6 +85,7 @@ class ServiceProvider { uint8_t shared_key[LC_AESGCM_KEY_SIZE]; // FOR TESTING PURPOSES + // FIXME: remove this test key uint8_t test_key[LC_AESGCM_KEY_SIZE]; // FIXME: make this not a set length diff --git a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp index af261c70ee..2d5b1c8965 100644 --- a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp +++ b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp @@ -17,6 +17,7 @@ void jni_throw(JNIEnv *env, const char *message) { } JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( + // FIXME: Remove last jbyteArray parameter - it was for testing purposes JNIEnv *env, jobject obj, jbyteArray shared_key, jstring intel_cert, jstring user_cert, jbyteArray key_share, jbyteArray test_key) { (void)env; (void)obj; diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index 994c152d23..6c2dcfe959 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -44,6 +44,7 @@ object RA extends Logging { // Retry attestation a few times in case of transient failures Utils.retry(3) { + // FIXME: remove testKey argument sp.Init(Utils.clientKey, intelCert, userCert, keyShare, testKey) val msg1s = rdd.mapPartitionsWithIndex { (i, _) => diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala index 001912c056..c8350175ea 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala @@ -22,6 +22,7 @@ import ch.jodersky.jni.nativeLoader @nativeLoader("ra_jni") class SP extends java.io.Serializable { // Remote attestation, master side + // FIXME: remove last testKey argument in Init() @native def Init(sharedKey: Array[Byte], intelCert: String, userCert: String, keyShare: Array[Byte], testKey: Array[Byte]): Unit @native def SPProcMsg0(msg0Input: Array[Byte]): Unit @native def SPProcMsg1(msg1Input: Array[Byte]): Array[Byte] From ba76eb9f3bb2a4bf310a45a51b960cd71398dd08 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Thu, 2 Jul 2020 00:59:55 +0000 Subject: [PATCH 058/101] Code cleanup --- src/enclave/Enclave/Crypto.cpp | 31 ++++--------------------------- src/enclave/Enclave/Enclave.cpp | 2 -- 2 files changed, 4 insertions(+), 29 deletions(-) diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index 9c03b44d30..fc9a52db6d 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -27,12 +27,10 @@ unsigned char shared_key[SGX_AESGCM_KEY_SIZE] = {0}; // map username to client key schedule std::unordered_map> client_key_schedules; std::unordered_map> client_keys; -// std::unordered_map client_keys; // map user name to public key // std::unordered_map> client_public_keys; -// TODO: properly set this KeySchedule std::unique_ptr ks; void initKeySchedule(char* username) { @@ -128,25 +126,14 @@ void encrypt(uint8_t *plaintext, uint32_t plaintext_length, // sgx_read_rand(iv_ptr, SGX_AESGCM_IV_SIZE); mbedtls_read_rand(reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); - // if (username == NULL) { - AesGcm cipher(ks.get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); - cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); - memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); - std::cout << "Encrypting with xor shared key\n"; - // } else { - // AesGcm cipher(client_key_schedules[std::string(username)].get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); - // cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); - // memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); - // std::cout << "Encrypting with client key\n"; - // } + AesGcm cipher(ks.get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); + cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); + memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); + std::cout << "Encrypting with xor shared key\n"; } void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *plaintext) { std::cout << "C++ decrypting inside enclave\n"; - // if (!ks) { - // throw std::runtime_error( - // "Cannot encrypt without a shared key. Ensure all enclaves have completed attestation."); - // } uint32_t plaintext_length = dec_size(ciphertext_length); uint8_t *iv_ptr = (uint8_t *) ciphertext; @@ -154,8 +141,6 @@ void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *pla sgx_aes_gcm_128bit_tag_t *mac_ptr = (sgx_aes_gcm_128bit_tag_t *) (ciphertext + SGX_AESGCM_IV_SIZE + plaintext_length); - // if (username == NULL) { - // FIXME: change this to possibly use client key std::cout << "do we make it here\n"; AesGcm decipher(ks.get(), iv_ptr, SGX_AESGCM_IV_SIZE); std::cout << "Initialized decipher\n"; @@ -178,14 +163,6 @@ void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *pla throw std::runtime_error("Couldn't decrypt -- proper key unknown\n"); } } - // } else { - // AesGcm decipher(client_key_schedules[std::string(username)].get(), iv_ptr, SGX_AESGCM_IV_SIZE); - // decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); - // if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) != 0) { - // printf("User name not null, Decrypt: invalid mac\n"); - // } - // std::cout << "Decrypting with client key\n"; - // } } uint32_t enc_size(uint32_t plaintext_size) { diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index c51dffbe53..f3620093c7 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -267,13 +267,11 @@ void ecall_ra_proc_msg4( // Add verifySignatureFromCertificate from XGBoost // Get name from certificate - // unsigned char* nameptr = (unsigned char*) malloc(sizeof(*nameptr)); unsigned char nameptr[50]; size_t name_len; int res; mbedtls_x509_crt user_cert; mbedtls_x509_crt_init(&user_cert); - // FIXME: non deterministic error here if ((res = mbedtls_x509_crt_parse(&user_cert, (const unsigned char*) msg2->user_cert, msg2->user_cert_len)) != 0) { // char tmp[50]; // mbedtls_strerror(res, tmp, 50); From 0fecefdb50c198643c48fdb6f1e39fb942b6c1d9 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Mon, 6 Jul 2020 22:28:39 +0000 Subject: [PATCH 059/101] Add test scripts and sample serialized dataframes --- dfEncrypted/.schema.crc | Bin 0 -> 16 bytes dfEncrypted/data/._SUCCESS.crc | Bin 0 -> 8 bytes dfEncrypted/data/.part-00000.crc | Bin 0 -> 16 bytes dfEncrypted/data/_SUCCESS | 0 dfEncrypted/data/part-00000 | Bin 0 -> 566 bytes dfEncrypted/schema | Bin 0 -> 806 bytes dfEncrypted2/.schema.crc | Bin 0 -> 16 bytes dfEncrypted2/data/._SUCCESS.crc | Bin 0 -> 8 bytes dfEncrypted2/data/.part-00000.crc | Bin 0 -> 16 bytes dfEncrypted2/data/_SUCCESS | 0 dfEncrypted2/data/part-00000 | Bin 0 -> 566 bytes dfEncrypted2/schema | Bin 0 -> 806 bytes load.scala | 14 ++++++++++++++ test.scala | 15 +++++++++++++++ user1.crt | 22 ++++++++++++++++++++++ 15 files changed, 51 insertions(+) create mode 100644 dfEncrypted/.schema.crc create mode 100644 dfEncrypted/data/._SUCCESS.crc create mode 100644 dfEncrypted/data/.part-00000.crc create mode 100644 dfEncrypted/data/_SUCCESS create mode 100644 dfEncrypted/data/part-00000 create mode 100644 dfEncrypted/schema create mode 100644 dfEncrypted2/.schema.crc create mode 100644 dfEncrypted2/data/._SUCCESS.crc create mode 100644 dfEncrypted2/data/.part-00000.crc create mode 100644 dfEncrypted2/data/_SUCCESS create mode 100644 dfEncrypted2/data/part-00000 create mode 100644 dfEncrypted2/schema create mode 100644 load.scala create mode 100644 test.scala create mode 100644 user1.crt diff --git a/dfEncrypted/.schema.crc b/dfEncrypted/.schema.crc new file mode 100644 index 0000000000000000000000000000000000000000..daeb614161cae89c3a71b1b8b05201c87dc3d773 GIT binary patch literal 16 XcmYc;N@ieSU}CuZW5(gIPpd2dEae7^ literal 0 HcmV?d00001 diff --git a/dfEncrypted/data/._SUCCESS.crc b/dfEncrypted/data/._SUCCESS.crc new file mode 100644 index 0000000000000000000000000000000000000000..3b7b044936a890cd8d651d349a752d819d71d22c GIT binary patch literal 8 PcmYc;N@ieSU}69O2$TUk literal 0 HcmV?d00001 diff --git a/dfEncrypted/data/.part-00000.crc b/dfEncrypted/data/.part-00000.crc new file mode 100644 index 0000000000000000000000000000000000000000..b2d23515ae7c8a8d044c77d332a804fa942b86e6 GIT binary patch literal 16 XcmYc;N@ieSU}A_{-1XGT!lDoWBliTx literal 0 HcmV?d00001 diff --git a/dfEncrypted/data/_SUCCESS b/dfEncrypted/data/_SUCCESS new file mode 100644 index 0000000000..e69de29bb2 diff --git a/dfEncrypted/data/part-00000 b/dfEncrypted/data/part-00000 new file mode 100644 index 0000000000000000000000000000000000000000..ad1ccf5a85426a04b498b93d5b152638f1c65b6e GIT binary patch literal 566 zcmWG`4P;ZuFG|--EJ#ewNY%?oOv%qL(96u%^UNy=FUl-QOv*`B!m7ZjvLv+_ri1|u zj-FS%Uc+Z^JaOe$Kf{hKZy6XEF90Q2AhL`nc)$!c1`ePQ8&rZ3NQ1;VfFui$}x-1 zs<8ag;#RH7wI?bA-?jeL75m4>KC2?9$nMk%!_XNT9ho6-B_*~gzx3!$e^-6{IQRdR zyp94vG6f~4R;^ulPR;6T4$Jmaf7EWXi9DDeJ;Qk3eyu$$x0{0UKRazqt+zhB{>_fv z&3el+0!9Bb2-*m%8ZMP^QP!=xsw$Vp;&Ao;vVaq5-W?BH535xNHP{uFf6R1vT)Sn$ ztGN=w%vL&Kg$0vVtjm3qG}HfS>eGT_8W-0mEWCENe#-ePL7SdE;k4iO>fblJyw-pv z@ykEye_1r~!9Cj_^K~}eP`Y_c&dyw%b^o*e;*!s$7p_l>`n}<%s`~zuk{fPttG?2_ z9&CNyNTBYd-<7L!I~??KWKD}r-JF<;XCz48c%FE%L8N*~nZxo=Ur+E!WPDz7fp=}- TT&-!(P2z02eA^!KF4_wKj5hA4 literal 0 HcmV?d00001 diff --git a/dfEncrypted/schema b/dfEncrypted/schema new file mode 100644 index 0000000000000000000000000000000000000000..b4892f8f4973f30d8218869f5508cf9bffbb85b9 GIT binary patch literal 806 zcmah{Jx?1!6nva*ViZ{@5lyHfVe%nGw~xJV#i>7W3bgd%y|ZR`tsd&})Ru$$1Q zrlUbfh=!I5(NR#O3Qd$hkQ9O6klnQtQ=PZkmEO#onVr)csOSu4)2!{I!mz`AtuWj2 z^|tV-r?~dlD9b}yH+QQ1UaC!oGo}Pp{bc~PPcawK3MO2y zaUyse=nw_6FcpG_6sMBKNs<$83eL<#V*|z=L=!yU2#gNa*TI|)W^^#8gY|X1we*bu z?n|>`J$26!Tb5A`0WBHv?lydZQdfaJD$fRsiv#E{J_|29AE#@J9)QDpCcGyj!*kfx z=C7kiP1y6G{2r<@7s6%`Ks7=_7ca~f`JW$*886j@6IvJ*LzV|)22!?p5j+e&;|?-` zvTXy6WxLT;W1~%&K`XKT;_&N%T)Ccf{taxV!27@LJ#6m(oOw|4pmeu3CWK*aN~S({ zf5lKgbH(w8#qs|a$2VVEUq}@7?B&(v-1oh2C&x|`L3uaLB5ld;fuVU?ps*#0w|VBA X!Re2y+jqNv9E(Ly5>&!8m!#BRlOGht literal 0 HcmV?d00001 diff --git a/dfEncrypted2/.schema.crc b/dfEncrypted2/.schema.crc new file mode 100644 index 0000000000000000000000000000000000000000..daeb614161cae89c3a71b1b8b05201c87dc3d773 GIT binary patch literal 16 XcmYc;N@ieSU}CuZW5(gIPpd2dEae7^ literal 0 HcmV?d00001 diff --git a/dfEncrypted2/data/._SUCCESS.crc b/dfEncrypted2/data/._SUCCESS.crc new file mode 100644 index 0000000000000000000000000000000000000000..3b7b044936a890cd8d651d349a752d819d71d22c GIT binary patch literal 8 PcmYc;N@ieSU}69O2$TUk literal 0 HcmV?d00001 diff --git a/dfEncrypted2/data/.part-00000.crc b/dfEncrypted2/data/.part-00000.crc new file mode 100644 index 0000000000000000000000000000000000000000..fd2f4f697eb480b77dc9689f6f4b1112cfd38440 GIT binary patch literal 16 XcmYc;N@ieSU}7k=Q)yuRe!~+0AMgaL literal 0 HcmV?d00001 diff --git a/dfEncrypted2/data/_SUCCESS b/dfEncrypted2/data/_SUCCESS new file mode 100644 index 0000000000..e69de29bb2 diff --git a/dfEncrypted2/data/part-00000 b/dfEncrypted2/data/part-00000 new file mode 100644 index 0000000000000000000000000000000000000000..31552ac98a3ce97c3b6c4cb9aa9aef0b462a87ed GIT binary patch literal 566 zcmWG`4P;ZuFG|--EJ#ewNY%?oOv%qL(96u%^UNy=FUl-QOv*`B!m7ZjvLv+_ri1|u z*8C55UCFtt)!xeQ;pyW{d<+bX7l0Bh5Lw0(JYWVJ0|!uu4JyG1q(R~wK#~PWazMpF znx+6H=k)xw@LI07evgLSqC4uUh6QKB&dHzj=rJw$FtfSfrg_J?tb%s+SDTeXA6D)U zx!u{bYg(3nGu1Dw@!e9cGNE1IW<*(t^Q_4ev(nv6 zY^>*K{N19Gd;Lg%jts*#nXotOA1F3|5m~IB_4mbJ=2(r4j=fW3nG2b|EH2(Bd#01? zZ|0FtC(M-98GPD4rc_?*bTbR?=E#eR{r9J%>&f};p2rLN{SMF7zq&|ZcG&WD7TbC* zip1&vNfXjgKYZ?p%{ejUuGo3Mcb~lGzr@$xQhC*fi`K7>+n6x%*rx5c$LeL2s2;Yw zA#Fl%!rJLoO3@Q|wd>CQEOY8G5bhS3@k?vdxn$m~bzGIZmroAAu4yA=sBonG#N*_d z>yGsPc)moaZ{dqOAD$ad{kHoxJV#i>7W3bgd%y|ZR`tsd&})Ru$$1Q zrlUbfh=!I5(NR#O3Qd$hkQ9O6klnQtQ=PZkmEO#onVr)csOSu4)2!{I!mz`AtuWj2 z^|tV-r?~dlD9b}yH+QQ1UaC!oGo}Pp{bc~PPcawK3MO2y zaUyse=nw_6FcpG_6sMBKNs<$83eL<#V*|z=L=!yU2#gNa*TI|)W^^#8gY|X1we*bu z?n|>`J$26!Tb5A`0WBHv?lydZQdfaJD$fRsiv#E{J_|29AE#@J9)QDpCcGyj!*kfx z=C7kiP1y6G{2r<@7s6%`Ks7=_7ca~f`JW$*886j@6IvJ*LzV|)22!?p5j+e&;|?-` zvTXy6WxLT;W1~%&K`XKT;_&N%T)Ccf{taxV!27@LJ#6m(oOw|4pmeu3CWK*aN~S({ zf5lKgbH(w8#qs|a$2VVEUq}@7?B&(v-1oh2C&x|`L3uaLB5ld;fuVU?ps*#0w|VBA X!Re2y+jqNv9E(Ly5>&!8m!#BRlOGht literal 0 HcmV?d00001 diff --git a/load.scala b/load.scala new file mode 100644 index 0000000000..cf2b5d1037 --- /dev/null +++ b/load.scala @@ -0,0 +1,14 @@ +import org.apache.spark.sql.types._ + +val df = (spark.read.format("edu.berkeley.cs.rise.opaque.EncryptedSource") + .schema(StructType(Seq(StructField("word", StringType), StructField("count", IntegerType)))) + .load("dfEncrypted")) +println("dfEncrypted") +df.show() + +val df2 = (spark.read.format("edu.berkeley.cs.rise.opaque.EncryptedSource") + .schema(StructType(Seq(StructField("word", StringType), StructField("count", IntegerType)))) + .load("dfEncrypted2")) +println("dfEncrypted2") +df2.show() + diff --git a/test.scala b/test.scala new file mode 100644 index 0000000000..b1acfa39ef --- /dev/null +++ b/test.scala @@ -0,0 +1,15 @@ +import edu.berkeley.cs.rise.opaque.implicits._ + +edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) +val data = Seq(("foo", 1), ("bar", 2), ("baz", 3), ("boo", 4)) +val df = spark.createDataFrame(data).toDF("word", "count") +// Encrypt with client key +val dfEncrypted2 = df.encrypted +// Enter enclave and filter +// val df2 = dfEncrypted.filter($"count" > lit(3)) +// val df3 = dfEncrypted.filter($"count" > lit(4)) +// Decrypt with client key +// dfEncrypted.show() +// df2.show() +// df3.show() +dfEncrypted2.write.format("edu.berkeley.cs.rise.opaque.EncryptedSource").save("dfEncrypted2") diff --git a/user1.crt b/user1.crt new file mode 100644 index 0000000000..6009e11d37 --- /dev/null +++ b/user1.crt @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDpDCCAgwCFCMudYdiTOSbx9E7VwOioDqrXEufMA0GCSqGSIb3DQEBCwUAMA8x +DTALBgNVBAMMBHJvb3QwHhcNMjAwNjMwMDUwMjI1WhcNMjAwNzMwMDUwMjI1WjAQ +MQ4wDAYDVQQDDAV1c2VyMTCCAaAwDQYJKoZIhvcNAQEBBQADggGNADCCAYgCggGB +AJ8RAxE/94DYpDmXtwVf9KFL+B8xwLXnAU4OkKxbjlhL4THib3A98JphIl+8n1qe +xyErrkcZM8dQeKj369Pm8oHIn3agVjJpRFlw9RbrvFZ57LgsEi6A7kME3lMpB/29 +Xr2qEGLtYkxQ6tA992wExuMTJrwMslkC6VHbD/7h7/vZzLVgcSIL1wKPoLUOS7EC +IN0AdSfH+VwJcFRDHuLjDSIdSaIm1xMdzijXySw7cYS+YvL2hF94/4gPHhvB4Fcl +x+jwUHu/HD02j3/drU+d0Fi9U9nobDg1up9j7uDWGhGOBV8c23j1xEhuOAO90KYR +FF7sd8oyl8SQhATFiX30ahdXteexB2hHKxyj7oBuLF2295y7iekQHc7Zno/Afm3J +vrtIHvWsnaF97GiNq3oCNMJJbdbYoUd4iCVSKQHw/kwVULBgceUzBGKxumIbMqc8 +7uZfYN0JC1qEIwv9v3UBLFLuFYkoRHOA7p+C5oe2hOiAwPZcqdV4bM3vK80ftr7V +dwIBAzANBgkqhkiG9w0BAQsFAAOCAYEAPuvkwylbNn8Y41yBqLU0/d2vXaF9oaDO +QMyFVhNeJcUfElWlgMcT8fmJWgBZR6239CyfwwGf+XFtHY2B3fzb20vuJSeuNij7 +iNC6k2jEcEDS2qD5rlz9CZPKSicqNIdm96i15g3z44DezslEfLUqvdKz0f95Q1k6 +SlXQLrmLqunA4JMmX2az9kgH2WgU+IKfu5q5kDoRZaJ51Cri2qeen+kK24GaF6++ +ECfr0EX30zTDe66T4jxREK1IsdCSxKQpo9I8NwL32UlPvi7VRDEvVkXMqAvY5I1a +MNSawVJanVujOT2Da7ZT6QLkBik06PN1BIFnxT3hUSAzYzhZA435x4XUkfS9ieOF +svYv1h27gc4jlC+COyVb3CHLZ5lshdFuVFrHVd5Z4h3/9AMx8uQO/iQ/CC4SsbuH +sNmms0kB64TXw3QpSsuFuzVmcpfjcfW4h96zPzgXH7u2FuwrKciyXjKj+clDLFkq +OznGjsNaB4JMsmHNR5K3LD0I4YI3p7mt +-----END CERTIFICATE----- From 732a8a9d62430fc65962437f3dc571f6d312a95a Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Thu, 8 Oct 2020 19:26:27 +0000 Subject: [PATCH 060/101] Removed all mention of test key --- src/enclave/Common/common.h | 4 ++-- src/enclave/Enclave/Enclave.cpp | 8 ++++---- src/enclave/ServiceProvider/SP.h | 6 ++++-- .../ServiceProvider/ServiceProvider.cpp | 20 +++++++++---------- src/enclave/ServiceProvider/ServiceProvider.h | 4 ++-- .../ServiceProvider/ServiceProviderJNI.cpp | 7 ++++--- .../edu/berkeley/cs/rise/opaque/RA.scala | 5 +++-- .../cs/rise/opaque/execution/SP.scala | 3 ++- 8 files changed, 31 insertions(+), 26 deletions(-) diff --git a/src/enclave/Common/common.h b/src/enclave/Common/common.h index 8411d9a68f..b8a2439164 100644 --- a/src/enclave/Common/common.h +++ b/src/enclave/Common/common.h @@ -92,8 +92,8 @@ typedef struct oe_msg1_t { typedef struct oe_msg2_t { uint8_t shared_key_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; uint8_t key_share_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; - // FIXME: remove test key ciphertext - uint8_t test_key_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; + // // FIXME: remove test key ciphertext + // uint8_t test_key_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; size_t user_cert_len; char user_cert[2000]; } oe_msg2_t; diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index f3620093c7..1f9124b91c 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -304,10 +304,10 @@ void ecall_ra_proc_msg4( // This block for testing loading from files encrypted with different keys // FIXME: remove this block - uint8_t test_key_plaintext[SGX_AESGCM_KEY_SIZE]; - size_t test_key_plaintext_size = sizeof(test_key_plaintext); - ret = g_crypto.decrypt(msg2->test_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, test_key_plaintext, &test_key_plaintext_size); - add_client_key(test_key_plaintext, test_key_plaintext_size, (char*) "user2"); + // uint8_t test_key_plaintext[SGX_AESGCM_KEY_SIZE]; + // size_t test_key_plaintext_size = sizeof(test_key_plaintext); + // ret = g_crypto.decrypt(msg2->test_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, test_key_plaintext, &test_key_plaintext_size); + // add_client_key(test_key_plaintext, test_key_plaintext_size, (char*) "user2"); if (!ret) { ocall_throw("shared key decryption failed"); } diff --git a/src/enclave/ServiceProvider/SP.h b/src/enclave/ServiceProvider/SP.h index 1e6402b635..b0ffbc9f29 100644 --- a/src/enclave/ServiceProvider/SP.h +++ b/src/enclave/ServiceProvider/SP.h @@ -6,8 +6,10 @@ extern "C" { #endif // FIXME: remove last jbyteArray argument - JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( - JNIEnv *, jobject, jbyteArray, jstring, jstring, jbyteArray, jbyteArray); + // JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( + // JNIEnv *, jobject, jbyteArray, jstring, jstring, jbyteArray, jbyteArray); + JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( + JNIEnv *, jobject, jbyteArray, jstring, jstring, jbyteArray); JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg0( JNIEnv *, jobject, jbyteArray); diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index 89bb87b6d2..55a36b2524 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -368,16 +368,16 @@ std::unique_ptr ServiceProvider::process_msg1(oe_msg1_t *msg1, // Encrypt test key for testing purposes // FIXME: remove this block - it was for testing purposes - unsigned char encrypted_test_key[OE_SHARED_KEY_CIPHERTEXT_SIZE]; - size_t encrypted_test_key_size = sizeof(encrypted_test_key); - ret = public_encrypt(pkey, this->test_key, LC_AESGCM_KEY_SIZE, encrypted_test_key, &encrypted_test_key_size); - if (ret == 0) { - throw std::runtime_error(std::string("public_encrypt: buffer too small")); - } - else if (ret < 0) { - throw std::runtime_error(std::string("public_encrypt failed")); - } - memcpy_s(msg2->test_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, encrypted_test_key, encrypted_test_key_size); + // unsigned char encrypted_test_key[OE_SHARED_KEY_CIPHERTEXT_SIZE]; + // size_t encrypted_test_key_size = sizeof(encrypted_test_key); + // ret = public_encrypt(pkey, this->test_key, LC_AESGCM_KEY_SIZE, encrypted_test_key, &encrypted_test_key_size); + // if (ret == 0) { + // throw std::runtime_error(std::string("public_encrypt: buffer too small")); + // } + // else if (ret < 0) { + // throw std::runtime_error(std::string("public_encrypt failed")); + // } + // memcpy_s(msg2->test_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, encrypted_test_key, encrypted_test_key_size); // FIXME: remove up to here // Prepare msg2 diff --git a/src/enclave/ServiceProvider/ServiceProvider.h b/src/enclave/ServiceProvider/ServiceProvider.h index b3c015cdd2..6e29a7001e 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.h +++ b/src/enclave/ServiceProvider/ServiceProvider.h @@ -41,7 +41,7 @@ class ServiceProvider { // FOR TESTING PURPOSES // FIXME: remove this function - void set_test_key(const uint8_t *shared_key); + // void set_test_key(const uint8_t *shared_key); void set_user_cert(std::string user_cert); @@ -86,7 +86,7 @@ class ServiceProvider { // FOR TESTING PURPOSES // FIXME: remove this test key - uint8_t test_key[LC_AESGCM_KEY_SIZE]; + // uint8_t test_key[LC_AESGCM_KEY_SIZE]; // FIXME: make this not a set length char user_cert[2000]; diff --git a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp index 2d5b1c8965..ac7954b5d4 100644 --- a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp +++ b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp @@ -18,7 +18,8 @@ void jni_throw(JNIEnv *env, const char *message) { JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( // FIXME: Remove last jbyteArray parameter - it was for testing purposes - JNIEnv *env, jobject obj, jbyteArray shared_key, jstring intel_cert, jstring user_cert, jbyteArray key_share, jbyteArray test_key) { + // JNIEnv *env, jobject obj, jbyteArray shared_key, jstring intel_cert, jstring user_cert, jbyteArray key_share, jbyteArray test_key) { + JNIEnv *env, jobject obj, jbyteArray shared_key, jstring intel_cert, jstring user_cert, jbyteArray key_share) { (void)env; (void)obj; @@ -44,8 +45,8 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init( service_provider.set_shared_key(reinterpret_cast(shared_key_bytes)); // THIS BLOCK FOR TESTING PURPOSES - jbyte *test_key_bytes = env->GetByteArrayElements(test_key, &if_copy); - service_provider.set_test_key(reinterpret_cast(test_key_bytes)); + // jbyte *test_key_bytes = env->GetByteArrayElements(test_key, &if_copy); + // service_provider.set_test_key(reinterpret_cast(test_key_bytes)); // set user certificate service_provider.set_user_cert(user_cert_str); diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index 6c2dcfe959..da041bc881 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -34,7 +34,7 @@ object RA extends Logging { val keyShare: Array[Byte] = "Opaque key share".getBytes("UTF-8") val clientKey: Array[Byte] = "Opaque devel key".getBytes("UTF-8") - val testKey: Array[Byte] = "Opaque deve key2".getBytes("UTF-8") + // val testKey: Array[Byte] = "Opaque deve key2".getBytes("UTF-8") Utils.addClientKey(clientKey) val GCM_KEY_LENGTH = 16 @@ -45,7 +45,8 @@ object RA extends Logging { // Retry attestation a few times in case of transient failures Utils.retry(3) { // FIXME: remove testKey argument - sp.Init(Utils.clientKey, intelCert, userCert, keyShare, testKey) + // sp.Init(Utils.clientKey, intelCert, userCert, keyShare, testKey) + sp.Init(Utils.clientKey, intelCert, userCert, keyShare) val msg1s = rdd.mapPartitionsWithIndex { (i, _) => val (enclave, eid) = Utils.initEnclave() diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala index c8350175ea..d0297b4257 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala @@ -23,7 +23,8 @@ import ch.jodersky.jni.nativeLoader class SP extends java.io.Serializable { // Remote attestation, master side // FIXME: remove last testKey argument in Init() - @native def Init(sharedKey: Array[Byte], intelCert: String, userCert: String, keyShare: Array[Byte], testKey: Array[Byte]): Unit + @native def Init(sharedKey: Array[Byte], intelCert: String, userCert: String, keyShare: Array[Byte]): Unit + // @native def Init(sharedKey: Array[Byte], intelCert: String, userCert: String, keyShare: Array[Byte], testKey: Array[Byte]): Unit @native def SPProcMsg0(msg0Input: Array[Byte]): Unit @native def SPProcMsg1(msg1Input: Array[Byte]): Array[Byte] @native def SPProcMsg3(msg3Input: Array[Byte]): Array[Byte] From 3a38ce8eafbdd1e4a3b5dec75deb3d2ac4610b05 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Thu, 8 Oct 2020 19:49:16 +0000 Subject: [PATCH 061/101] comment out print statements --- load.scala | 29 +++++++++--------- src/enclave/Enclave/Crypto.cpp | 14 ++++----- src/enclave/Enclave/FlatbuffersReaders.cpp | 1 - .../ServiceProvider/ServiceProvider.cpp | 6 ++-- test.scala | 30 +++++++++---------- 5 files changed, 40 insertions(+), 40 deletions(-) diff --git a/load.scala b/load.scala index cf2b5d1037..11a7bf20a8 100644 --- a/load.scala +++ b/load.scala @@ -1,14 +1,15 @@ -import org.apache.spark.sql.types._ - -val df = (spark.read.format("edu.berkeley.cs.rise.opaque.EncryptedSource") - .schema(StructType(Seq(StructField("word", StringType), StructField("count", IntegerType)))) - .load("dfEncrypted")) -println("dfEncrypted") -df.show() - -val df2 = (spark.read.format("edu.berkeley.cs.rise.opaque.EncryptedSource") - .schema(StructType(Seq(StructField("word", StringType), StructField("count", IntegerType)))) - .load("dfEncrypted2")) -println("dfEncrypted2") -df2.show() - +// This script tests loading from two dataframes, each encrypted with a different key +// +// import org.apache.spark.sql.types._ +// +// val df = (spark.read.format("edu.berkeley.cs.rise.opaque.EncryptedSource") +// .schema(StructType(Seq(StructField("word", StringType), StructField("count", IntegerType)))) +// .load("dfEncrypted")) +// println("dfEncrypted") +// df.show() +// +// val df2 = (spark.read.format("edu.berkeley.cs.rise.opaque.EncryptedSource") +// .schema(StructType(Seq(StructField("word", StringType), StructField("count", IntegerType)))) +// .load("dfEncrypted2")) +// println("dfEncrypted2") +// df2.show() diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index fc9a52db6d..e94bf7ac73 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -111,7 +111,7 @@ void xor_shared_key(uint8_t *key_share_bytes, uint32_t key_share_size) { void encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphertext) { - std::cout << "C++ encrypting inside enclave\n"; + // std::cout << "C++ encrypting inside enclave\n"; if (!ks) { throw std::runtime_error( @@ -129,11 +129,11 @@ void encrypt(uint8_t *plaintext, uint32_t plaintext_length, AesGcm cipher(ks.get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); - std::cout << "Encrypting with xor shared key\n"; + // std::cout << "Encrypting with xor shared key\n"; } void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *plaintext) { - std::cout << "C++ decrypting inside enclave\n"; + // std::cout << "C++ decrypting inside enclave\n"; uint32_t plaintext_length = dec_size(ciphertext_length); uint8_t *iv_ptr = (uint8_t *) ciphertext; @@ -141,11 +141,11 @@ void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *pla sgx_aes_gcm_128bit_tag_t *mac_ptr = (sgx_aes_gcm_128bit_tag_t *) (ciphertext + SGX_AESGCM_IV_SIZE + plaintext_length); - std::cout << "do we make it here\n"; + // std::cout << "do we make it here\n"; AesGcm decipher(ks.get(), iv_ptr, SGX_AESGCM_IV_SIZE); - std::cout << "Initialized decipher\n"; + // std::cout << "Initialized decipher\n"; decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); - std::cout << "tried shared key\n"; + // std::cout << "tried shared key\n"; if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) != 0) { // Shared key doesn't work // Perhaps we need to use a client key instead @@ -154,7 +154,7 @@ void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *pla AesGcm decipher(keypair.second.get(), iv_ptr, SGX_AESGCM_IV_SIZE); decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) == 0) { - std::cout << "We found the proper key, of user " << keypair.first << std::endl; + // std::cout << "We found the proper key, of user " << keypair.first << std::endl; success = 0; break; } diff --git a/src/enclave/Enclave/FlatbuffersReaders.cpp b/src/enclave/Enclave/FlatbuffersReaders.cpp index 0f49131e10..1ceea93ff0 100644 --- a/src/enclave/Enclave/FlatbuffersReaders.cpp +++ b/src/enclave/Enclave/FlatbuffersReaders.cpp @@ -6,7 +6,6 @@ void EncryptedBlockToRowReader::reset(const tuix::EncryptedBlock *encrypted_bloc const size_t rows_len = dec_size(encrypted_block->enc_rows()->size()); rows_buf.reset(new uint8_t[rows_len]); - std::cout << "reading flatbuffers\n"; decrypt(encrypted_block->enc_rows()->data(), encrypted_block->enc_rows()->size(), rows_buf.get()); BufferRefView buf(rows_buf.get(), rows_len); buf.verify(); diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index 55a36b2524..618e66feb5 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -124,9 +124,9 @@ void ServiceProvider::set_shared_key(const uint8_t *shared_key) { } // This function for testing purposes -void ServiceProvider::set_test_key(const uint8_t *shared_key) { - memcpy(this->test_key, shared_key, LC_AESGCM_KEY_SIZE); -} +// void ServiceProvider::set_test_key(const uint8_t *shared_key) { +// memcpy(this->test_key, shared_key, LC_AESGCM_KEY_SIZE); +// } void ServiceProvider::set_user_cert(const std::string user_cert) { memcpy(this->user_cert, user_cert.c_str(), user_cert.length() + 1); diff --git a/test.scala b/test.scala index b1acfa39ef..7456f1434f 100644 --- a/test.scala +++ b/test.scala @@ -1,15 +1,15 @@ -import edu.berkeley.cs.rise.opaque.implicits._ - -edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) -val data = Seq(("foo", 1), ("bar", 2), ("baz", 3), ("boo", 4)) -val df = spark.createDataFrame(data).toDF("word", "count") -// Encrypt with client key -val dfEncrypted2 = df.encrypted -// Enter enclave and filter -// val df2 = dfEncrypted.filter($"count" > lit(3)) -// val df3 = dfEncrypted.filter($"count" > lit(4)) -// Decrypt with client key -// dfEncrypted.show() -// df2.show() -// df3.show() -dfEncrypted2.write.format("edu.berkeley.cs.rise.opaque.EncryptedSource").save("dfEncrypted2") +// import edu.berkeley.cs.rise.opaque.implicits._ +// +// edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) +// val data = Seq(("foo", 1), ("bar", 2), ("baz", 3), ("boo", 4)) +// val df = spark.createDataFrame(data).toDF("word", "count") +// // Encrypt with client key +// val dfEncrypted2 = df.encrypted +// // Enter enclave and filter +// // val df2 = dfEncrypted.filter($"count" > lit(3)) +// // val df3 = dfEncrypted.filter($"count" > lit(4)) +// // Decrypt with client key +// // dfEncrypted.show() +// // df2.show() +// // df3.show() +// dfEncrypted2.write.format("edu.berkeley.cs.rise.opaque.EncryptedSource").save("dfEncrypted2") From 3c20d7071d058efdc5ad2d2b1b14083f13388947 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Thu, 8 Oct 2020 21:39:46 +0000 Subject: [PATCH 062/101] Set environment variables to point to key paths --- keys/client_key.txt | 2 ++ keys/key_share.txt | Bin 0 -> 16 bytes opaqueenv | 4 +++- .../scala/edu/berkeley/cs/rise/opaque/RA.scala | 12 ++++++++++-- 4 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 keys/client_key.txt create mode 100644 keys/key_share.txt diff --git a/keys/client_key.txt b/keys/client_key.txt new file mode 100644 index 0000000000..f3da4bf313 --- /dev/null +++ b/keys/client_key.txt @@ -0,0 +1,2 @@ +ÁЬý \¡x-Qú +e b \ No newline at end of file diff --git a/keys/key_share.txt b/keys/key_share.txt new file mode 100644 index 0000000000000000000000000000000000000000..f64efeb11867625c8c54f87d9ee18b3223d76fa8 GIT binary patch literal 16 XcmZ4E%GboX@KU}DgW3D38UJblH@^o? literal 0 HcmV?d00001 diff --git a/opaqueenv b/opaqueenv index 95d06356b6..29a2303c07 100644 --- a/opaqueenv +++ b/opaqueenv @@ -1,5 +1,7 @@ -export OPAQUE_HOME=$(pwd) +export OPAQUE_HOME=/home/chester/opaque export SPARKSGX_DATA_DIR=${OPAQUE_HOME}/data/ export PRIVATE_KEY_PATH=${OPAQUE_HOME}/private_key.pem export MODE=HARDWARE export OE_SDK_PATH=/opt/openenclave/ +export OPAQUE_KEY_SHARE=${OPAQUE_HOME}/keys/key_share.txt +export OPAQUE_CLIENT_KEY=${OPAQUE_HOME}/keys/client_key.txt diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index cd8e996e5d..325bafa775 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -19,6 +19,7 @@ package edu.berkeley.cs.rise.opaque import org.apache.spark.SparkContext import org.apache.spark.internal.Logging +import java.nio.file.{Files, Paths} import edu.berkeley.cs.rise.opaque.execution.SP @@ -34,9 +35,16 @@ object RA extends Logging { // FIXME: hardcoded path val userCert = scala.io.Source.fromFile("/home/chester/opaque/user1.crt").mkString - val keyShare: Array[Byte] = "Opaque key share".getBytes("UTF-8") - val clientKey: Array[Byte] = "Opaque devel key".getBytes("UTF-8") + val keySharePath = sys.env("OPAQUE_KEY_SHARE") + val clientKeyPath = sys.env("OPAQUE_CLIENT_KEY") + + val keyShare: Array[Byte] = Files.readAllBytes(Paths.get(keySharePath)) + val clientKey: Array[Byte] = Files.readAllBytes(Paths.get(clientKeyPath)) + + // val keyShare: Array[Byte] = "Opaque key share".getBytes("UTF-8") + // val clientKey: Array[Byte] = "Opaque devel key".getBytes("UTF-8") // val testKey: Array[Byte] = "Opaque deve key2".getBytes("UTF-8") + // Utils.addClientKey(clientKey) val sp = new SP() From 6641f6a407eb2ee022a038a74a73bc4cba64ac51 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Wed, 14 Oct 2020 20:52:51 +0000 Subject: [PATCH 063/101] create sbt task to encrypt wip --- build.sbt | 5 +++++ src/enclave/ServiceProvider/ServiceProvider.cpp | 2 +- src/main/scala/crypto/Encrypt.scala | 7 +++++++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 src/main/scala/crypto/Encrypt.scala diff --git a/build.sbt b/build.sbt index b743fc7133..64faf12d98 100644 --- a/build.sbt +++ b/build.sbt @@ -125,6 +125,11 @@ def sgxGdbCommand = Command.command("sgx-gdb") { state => commands += sgxGdbCommand +// Task to encrypt a plaintext serialized dataframe +lazy val encrypt = InputKey[Unit]("encrypt", "Encrypt a plaintext serialized dataframe.") + +fullRunInputTask(encrypt, Compile, "crypto.Encrypt") + initialCommands in console := """ |import org.apache.spark.SparkContext diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index 88ece75beb..2416c033d6 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -367,7 +367,7 @@ std::unique_ptr ServiceProvider::process_enclave_report(oe_ // Prepare shared_key_msg memcpy_s(shared_key_msg->shared_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, encrypted_sharedkey, encrypted_sharedkey_size); - *shared_key_msg_size = sizeof(oe_shared_key_msg_t); + // *shared_key_msg_size = sizeof(oe_shared_key_msg_t); // Copy over key share ciphertext memcpy_s(shared_key_msg->key_share_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, encrypted_key_share, encrypted_key_share_size); diff --git a/src/main/scala/crypto/Encrypt.scala b/src/main/scala/crypto/Encrypt.scala new file mode 100644 index 0000000000..6c9b1bd002 --- /dev/null +++ b/src/main/scala/crypto/Encrypt.scala @@ -0,0 +1,7 @@ +package crypto + +object Encrypt { + def main(args: Array[String]) : Unit = { + println("Params are: " + args.mkString(", ")) + } +} From 4553ee49b4ae0514570eb25edb56626029f5b401 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Thu, 15 Oct 2020 07:21:46 +0000 Subject: [PATCH 064/101] Remove extra files --- .../breast_cancer_dataset-checkpoint.ipynb | 6 - .tags | 1430 ----------------- type_test.txt | 27 - 3 files changed, 1463 deletions(-) delete mode 100644 .ipynb_checkpoints/breast_cancer_dataset-checkpoint.ipynb delete mode 100644 .tags delete mode 100644 type_test.txt diff --git a/.ipynb_checkpoints/breast_cancer_dataset-checkpoint.ipynb b/.ipynb_checkpoints/breast_cancer_dataset-checkpoint.ipynb deleted file mode 100644 index 2fd64429bf..0000000000 --- a/.ipynb_checkpoints/breast_cancer_dataset-checkpoint.ipynb +++ /dev/null @@ -1,6 +0,0 @@ -{ - "cells": [], - "metadata": {}, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/.tags b/.tags deleted file mode 100644 index 73362fa771..0000000000 --- a/.tags +++ /dev/null @@ -1,1430 +0,0 @@ -!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ -!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ -!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/ -!_TAG_PROGRAM_NAME Exuberant Ctags // -!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ -!_TAG_PROGRAM_VERSION 5.8 // -AES_BLOCK_SIZE src/enclave/Enclave/sgxaes.h /^const size_t AES_BLOCK_SIZE = 16;$/;" v -AES_MAX_EXP_KEY_SIZE src/enclave/Enclave/sgxaes.h /^const size_t AES_MAX_EXP_KEY_SIZE = 8*15;$/;" v -AGGREGATE_H src/enclave/Enclave/Aggregate.h /^#define AGGREGATE_H$/;" d -Aad src/enclave/Enclave/sgxaes.h /^ Aad,$/;" e enum:State -AadFinal src/enclave/Enclave/sgxaes.h /^ AadFinal,$/;" e enum:State -AesGcm src/enclave/Enclave/sgxaes.cpp /^AesGcm::AesGcm(const AesGcm& other) {$/;" f class:AesGcm -AesGcm src/enclave/Enclave/sgxaes.cpp /^AesGcm::AesGcm(const KeySchedule* ks, const unsigned char* iv, size_t iv_len) {$/;" f class:AesGcm -AesGcm src/enclave/Enclave/sgxaes.h /^struct AesGcm {$/;" s -AggregateExpressionEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ AggregateExpressionEvaluator(const tuix::AggregateExpr *expr) : builder() {$/;" f class:AggregateExpressionEvaluator -AggregateExpressionEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^class AggregateExpressionEvaluator {$/;" c -AllocObject src/enclave/Include/jni.h /^ jobject (JNICALL *AllocObject)$/;" m struct:JNINativeInterface_ -AllocObject src/enclave/Include/jni.h /^ jobject AllocObject(jclass clazz) {$/;" f struct:JNIEnv_ -AttachCurrentThread src/enclave/Include/jni.h /^ jint (JNICALL *AttachCurrentThread)(JavaVM *vm, void **penv, void *args);$/;" m struct:JNIInvokeInterface_ -AttachCurrentThread src/enclave/Include/jni.h /^ jint AttachCurrentThread(void **penv, void *args) {$/;" f struct:JavaVM_ -AttachCurrentThreadAsDaemon src/enclave/Include/jni.h /^ jint (JNICALL *AttachCurrentThreadAsDaemon)(JavaVM *vm, void **penv, void *args);$/;" m struct:JNIInvokeInterface_ -AttachCurrentThreadAsDaemon src/enclave/Include/jni.h /^ jint AttachCurrentThreadAsDaemon(void **penv, void *args) {$/;" f struct:JavaVM_ -CALCULATE_POWERS_OF_H src/enclave/Enclave/sgxaes_asm.S /^CALCULATE_POWERS_OF_H:$/;" l -COMMON_H src/enclave/Common/common.h /^#define COMMON_H$/;" d -CRYPTO_H src/enclave/Enclave/Crypto.h /^#define CRYPTO_H$/;" d -CallBooleanMethod src/enclave/Include/jni.h /^ jboolean (JNICALL *CallBooleanMethod)$/;" m struct:JNINativeInterface_ -CallBooleanMethod src/enclave/Include/jni.h /^ jboolean CallBooleanMethod(jobject obj,$/;" f struct:JNIEnv_ -CallBooleanMethodA src/enclave/Include/jni.h /^ jboolean (JNICALL *CallBooleanMethodA)$/;" m struct:JNINativeInterface_ -CallBooleanMethodA src/enclave/Include/jni.h /^ jboolean CallBooleanMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallBooleanMethodV src/enclave/Include/jni.h /^ jboolean (JNICALL *CallBooleanMethodV)$/;" m struct:JNINativeInterface_ -CallBooleanMethodV src/enclave/Include/jni.h /^ jboolean CallBooleanMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallByteMethod src/enclave/Include/jni.h /^ jbyte (JNICALL *CallByteMethod)$/;" m struct:JNINativeInterface_ -CallByteMethod src/enclave/Include/jni.h /^ jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallByteMethodA src/enclave/Include/jni.h /^ jbyte (JNICALL *CallByteMethodA)$/;" m struct:JNINativeInterface_ -CallByteMethodA src/enclave/Include/jni.h /^ jbyte CallByteMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallByteMethodV src/enclave/Include/jni.h /^ jbyte (JNICALL *CallByteMethodV)$/;" m struct:JNINativeInterface_ -CallByteMethodV src/enclave/Include/jni.h /^ jbyte CallByteMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallCharMethod src/enclave/Include/jni.h /^ jchar (JNICALL *CallCharMethod)$/;" m struct:JNINativeInterface_ -CallCharMethod src/enclave/Include/jni.h /^ jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallCharMethodA src/enclave/Include/jni.h /^ jchar (JNICALL *CallCharMethodA)$/;" m struct:JNINativeInterface_ -CallCharMethodA src/enclave/Include/jni.h /^ jchar CallCharMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallCharMethodV src/enclave/Include/jni.h /^ jchar (JNICALL *CallCharMethodV)$/;" m struct:JNINativeInterface_ -CallCharMethodV src/enclave/Include/jni.h /^ jchar CallCharMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallDoubleMethod src/enclave/Include/jni.h /^ jdouble (JNICALL *CallDoubleMethod)$/;" m struct:JNINativeInterface_ -CallDoubleMethod src/enclave/Include/jni.h /^ jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallDoubleMethodA src/enclave/Include/jni.h /^ jdouble (JNICALL *CallDoubleMethodA)$/;" m struct:JNINativeInterface_ -CallDoubleMethodA src/enclave/Include/jni.h /^ jdouble CallDoubleMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallDoubleMethodV src/enclave/Include/jni.h /^ jdouble (JNICALL *CallDoubleMethodV)$/;" m struct:JNINativeInterface_ -CallDoubleMethodV src/enclave/Include/jni.h /^ jdouble CallDoubleMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallFloatMethod src/enclave/Include/jni.h /^ jfloat (JNICALL *CallFloatMethod)$/;" m struct:JNINativeInterface_ -CallFloatMethod src/enclave/Include/jni.h /^ jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallFloatMethodA src/enclave/Include/jni.h /^ jfloat (JNICALL *CallFloatMethodA)$/;" m struct:JNINativeInterface_ -CallFloatMethodA src/enclave/Include/jni.h /^ jfloat CallFloatMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallFloatMethodV src/enclave/Include/jni.h /^ jfloat (JNICALL *CallFloatMethodV)$/;" m struct:JNINativeInterface_ -CallFloatMethodV src/enclave/Include/jni.h /^ jfloat CallFloatMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallIntMethod src/enclave/Include/jni.h /^ jint (JNICALL *CallIntMethod)$/;" m struct:JNINativeInterface_ -CallIntMethod src/enclave/Include/jni.h /^ jint CallIntMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallIntMethodA src/enclave/Include/jni.h /^ jint (JNICALL *CallIntMethodA)$/;" m struct:JNINativeInterface_ -CallIntMethodA src/enclave/Include/jni.h /^ jint CallIntMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallIntMethodV src/enclave/Include/jni.h /^ jint (JNICALL *CallIntMethodV)$/;" m struct:JNINativeInterface_ -CallIntMethodV src/enclave/Include/jni.h /^ jint CallIntMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallLongMethod src/enclave/Include/jni.h /^ jlong (JNICALL *CallLongMethod)$/;" m struct:JNINativeInterface_ -CallLongMethod src/enclave/Include/jni.h /^ jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallLongMethodA src/enclave/Include/jni.h /^ jlong (JNICALL *CallLongMethodA)$/;" m struct:JNINativeInterface_ -CallLongMethodA src/enclave/Include/jni.h /^ jlong CallLongMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallLongMethodV src/enclave/Include/jni.h /^ jlong (JNICALL *CallLongMethodV)$/;" m struct:JNINativeInterface_ -CallLongMethodV src/enclave/Include/jni.h /^ jlong CallLongMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallNonvirtualBooleanMethod src/enclave/Include/jni.h /^ jboolean (JNICALL *CallNonvirtualBooleanMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualBooleanMethod src/enclave/Include/jni.h /^ jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualBooleanMethodA src/enclave/Include/jni.h /^ jboolean (JNICALL *CallNonvirtualBooleanMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualBooleanMethodA src/enclave/Include/jni.h /^ jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualBooleanMethodV src/enclave/Include/jni.h /^ jboolean (JNICALL *CallNonvirtualBooleanMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualBooleanMethodV src/enclave/Include/jni.h /^ jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualByteMethod src/enclave/Include/jni.h /^ jbyte (JNICALL *CallNonvirtualByteMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualByteMethod src/enclave/Include/jni.h /^ jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualByteMethodA src/enclave/Include/jni.h /^ jbyte (JNICALL *CallNonvirtualByteMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualByteMethodA src/enclave/Include/jni.h /^ jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualByteMethodV src/enclave/Include/jni.h /^ jbyte (JNICALL *CallNonvirtualByteMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualByteMethodV src/enclave/Include/jni.h /^ jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualCharMethod src/enclave/Include/jni.h /^ jchar (JNICALL *CallNonvirtualCharMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualCharMethod src/enclave/Include/jni.h /^ jchar CallNonvirtualCharMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualCharMethodA src/enclave/Include/jni.h /^ jchar (JNICALL *CallNonvirtualCharMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualCharMethodA src/enclave/Include/jni.h /^ jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualCharMethodV src/enclave/Include/jni.h /^ jchar (JNICALL *CallNonvirtualCharMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualCharMethodV src/enclave/Include/jni.h /^ jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualDoubleMethod src/enclave/Include/jni.h /^ jdouble (JNICALL *CallNonvirtualDoubleMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualDoubleMethod src/enclave/Include/jni.h /^ jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualDoubleMethodA src/enclave/Include/jni.h /^ jdouble (JNICALL *CallNonvirtualDoubleMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualDoubleMethodA src/enclave/Include/jni.h /^ jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualDoubleMethodV src/enclave/Include/jni.h /^ jdouble (JNICALL *CallNonvirtualDoubleMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualDoubleMethodV src/enclave/Include/jni.h /^ jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualFloatMethod src/enclave/Include/jni.h /^ jfloat (JNICALL *CallNonvirtualFloatMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualFloatMethod src/enclave/Include/jni.h /^ jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualFloatMethodA src/enclave/Include/jni.h /^ jfloat (JNICALL *CallNonvirtualFloatMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualFloatMethodA src/enclave/Include/jni.h /^ jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualFloatMethodV src/enclave/Include/jni.h /^ jfloat (JNICALL *CallNonvirtualFloatMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualFloatMethodV src/enclave/Include/jni.h /^ jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualIntMethod src/enclave/Include/jni.h /^ jint (JNICALL *CallNonvirtualIntMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualIntMethod src/enclave/Include/jni.h /^ jint CallNonvirtualIntMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualIntMethodA src/enclave/Include/jni.h /^ jint (JNICALL *CallNonvirtualIntMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualIntMethodA src/enclave/Include/jni.h /^ jint CallNonvirtualIntMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualIntMethodV src/enclave/Include/jni.h /^ jint (JNICALL *CallNonvirtualIntMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualIntMethodV src/enclave/Include/jni.h /^ jint CallNonvirtualIntMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualLongMethod src/enclave/Include/jni.h /^ jlong (JNICALL *CallNonvirtualLongMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualLongMethod src/enclave/Include/jni.h /^ jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualLongMethodA src/enclave/Include/jni.h /^ jlong (JNICALL *CallNonvirtualLongMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualLongMethodA src/enclave/Include/jni.h /^ jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualLongMethodV src/enclave/Include/jni.h /^ jlong (JNICALL *CallNonvirtualLongMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualLongMethodV src/enclave/Include/jni.h /^ jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualObjectMethod src/enclave/Include/jni.h /^ jobject (JNICALL *CallNonvirtualObjectMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualObjectMethod src/enclave/Include/jni.h /^ jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualObjectMethodA src/enclave/Include/jni.h /^ jobject (JNICALL *CallNonvirtualObjectMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualObjectMethodA src/enclave/Include/jni.h /^ jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualObjectMethodV src/enclave/Include/jni.h /^ jobject (JNICALL *CallNonvirtualObjectMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualObjectMethodV src/enclave/Include/jni.h /^ jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualShortMethod src/enclave/Include/jni.h /^ jshort (JNICALL *CallNonvirtualShortMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualShortMethod src/enclave/Include/jni.h /^ jshort CallNonvirtualShortMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualShortMethodA src/enclave/Include/jni.h /^ jshort (JNICALL *CallNonvirtualShortMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualShortMethodA src/enclave/Include/jni.h /^ jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualShortMethodV src/enclave/Include/jni.h /^ jshort (JNICALL *CallNonvirtualShortMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualShortMethodV src/enclave/Include/jni.h /^ jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualVoidMethod src/enclave/Include/jni.h /^ void (JNICALL *CallNonvirtualVoidMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualVoidMethod src/enclave/Include/jni.h /^ void CallNonvirtualVoidMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualVoidMethodA src/enclave/Include/jni.h /^ void (JNICALL *CallNonvirtualVoidMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualVoidMethodA src/enclave/Include/jni.h /^ void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualVoidMethodV src/enclave/Include/jni.h /^ void (JNICALL *CallNonvirtualVoidMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualVoidMethodV src/enclave/Include/jni.h /^ void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallObjectMethod src/enclave/Include/jni.h /^ jobject (JNICALL *CallObjectMethod)$/;" m struct:JNINativeInterface_ -CallObjectMethod src/enclave/Include/jni.h /^ jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallObjectMethodA src/enclave/Include/jni.h /^ jobject (JNICALL *CallObjectMethodA)$/;" m struct:JNINativeInterface_ -CallObjectMethodA src/enclave/Include/jni.h /^ jobject CallObjectMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallObjectMethodV src/enclave/Include/jni.h /^ jobject (JNICALL *CallObjectMethodV)$/;" m struct:JNINativeInterface_ -CallObjectMethodV src/enclave/Include/jni.h /^ jobject CallObjectMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallShortMethod src/enclave/Include/jni.h /^ jshort (JNICALL *CallShortMethod)$/;" m struct:JNINativeInterface_ -CallShortMethod src/enclave/Include/jni.h /^ jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallShortMethodA src/enclave/Include/jni.h /^ jshort (JNICALL *CallShortMethodA)$/;" m struct:JNINativeInterface_ -CallShortMethodA src/enclave/Include/jni.h /^ jshort CallShortMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallShortMethodV src/enclave/Include/jni.h /^ jshort (JNICALL *CallShortMethodV)$/;" m struct:JNINativeInterface_ -CallShortMethodV src/enclave/Include/jni.h /^ jshort CallShortMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallStaticBooleanMethod src/enclave/Include/jni.h /^ jboolean (JNICALL *CallStaticBooleanMethod)$/;" m struct:JNINativeInterface_ -CallStaticBooleanMethod src/enclave/Include/jni.h /^ jboolean CallStaticBooleanMethod(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticBooleanMethodA src/enclave/Include/jni.h /^ jboolean (JNICALL *CallStaticBooleanMethodA)$/;" m struct:JNINativeInterface_ -CallStaticBooleanMethodA src/enclave/Include/jni.h /^ jboolean CallStaticBooleanMethodA(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticBooleanMethodV src/enclave/Include/jni.h /^ jboolean (JNICALL *CallStaticBooleanMethodV)$/;" m struct:JNINativeInterface_ -CallStaticBooleanMethodV src/enclave/Include/jni.h /^ jboolean CallStaticBooleanMethodV(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticByteMethod src/enclave/Include/jni.h /^ jbyte (JNICALL *CallStaticByteMethod)$/;" m struct:JNINativeInterface_ -CallStaticByteMethod src/enclave/Include/jni.h /^ jbyte CallStaticByteMethod(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticByteMethodA src/enclave/Include/jni.h /^ jbyte (JNICALL *CallStaticByteMethodA)$/;" m struct:JNINativeInterface_ -CallStaticByteMethodA src/enclave/Include/jni.h /^ jbyte CallStaticByteMethodA(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticByteMethodV src/enclave/Include/jni.h /^ jbyte (JNICALL *CallStaticByteMethodV)$/;" m struct:JNINativeInterface_ -CallStaticByteMethodV src/enclave/Include/jni.h /^ jbyte CallStaticByteMethodV(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticCharMethod src/enclave/Include/jni.h /^ jchar (JNICALL *CallStaticCharMethod)$/;" m struct:JNINativeInterface_ -CallStaticCharMethod src/enclave/Include/jni.h /^ jchar CallStaticCharMethod(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticCharMethodA src/enclave/Include/jni.h /^ jchar (JNICALL *CallStaticCharMethodA)$/;" m struct:JNINativeInterface_ -CallStaticCharMethodA src/enclave/Include/jni.h /^ jchar CallStaticCharMethodA(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticCharMethodV src/enclave/Include/jni.h /^ jchar (JNICALL *CallStaticCharMethodV)$/;" m struct:JNINativeInterface_ -CallStaticCharMethodV src/enclave/Include/jni.h /^ jchar CallStaticCharMethodV(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticDoubleMethod src/enclave/Include/jni.h /^ jdouble (JNICALL *CallStaticDoubleMethod)$/;" m struct:JNINativeInterface_ -CallStaticDoubleMethod src/enclave/Include/jni.h /^ jdouble CallStaticDoubleMethod(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticDoubleMethodA src/enclave/Include/jni.h /^ jdouble (JNICALL *CallStaticDoubleMethodA)$/;" m struct:JNINativeInterface_ -CallStaticDoubleMethodA src/enclave/Include/jni.h /^ jdouble CallStaticDoubleMethodA(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticDoubleMethodV src/enclave/Include/jni.h /^ jdouble (JNICALL *CallStaticDoubleMethodV)$/;" m struct:JNINativeInterface_ -CallStaticDoubleMethodV src/enclave/Include/jni.h /^ jdouble CallStaticDoubleMethodV(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticFloatMethod src/enclave/Include/jni.h /^ jfloat (JNICALL *CallStaticFloatMethod)$/;" m struct:JNINativeInterface_ -CallStaticFloatMethod src/enclave/Include/jni.h /^ jfloat CallStaticFloatMethod(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticFloatMethodA src/enclave/Include/jni.h /^ jfloat (JNICALL *CallStaticFloatMethodA)$/;" m struct:JNINativeInterface_ -CallStaticFloatMethodA src/enclave/Include/jni.h /^ jfloat CallStaticFloatMethodA(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticFloatMethodV src/enclave/Include/jni.h /^ jfloat (JNICALL *CallStaticFloatMethodV)$/;" m struct:JNINativeInterface_ -CallStaticFloatMethodV src/enclave/Include/jni.h /^ jfloat CallStaticFloatMethodV(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticIntMethod src/enclave/Include/jni.h /^ jint (JNICALL *CallStaticIntMethod)$/;" m struct:JNINativeInterface_ -CallStaticIntMethod src/enclave/Include/jni.h /^ jint CallStaticIntMethod(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticIntMethodA src/enclave/Include/jni.h /^ jint (JNICALL *CallStaticIntMethodA)$/;" m struct:JNINativeInterface_ -CallStaticIntMethodA src/enclave/Include/jni.h /^ jint CallStaticIntMethodA(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticIntMethodV src/enclave/Include/jni.h /^ jint (JNICALL *CallStaticIntMethodV)$/;" m struct:JNINativeInterface_ -CallStaticIntMethodV src/enclave/Include/jni.h /^ jint CallStaticIntMethodV(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticLongMethod src/enclave/Include/jni.h /^ jlong (JNICALL *CallStaticLongMethod)$/;" m struct:JNINativeInterface_ -CallStaticLongMethod src/enclave/Include/jni.h /^ jlong CallStaticLongMethod(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticLongMethodA src/enclave/Include/jni.h /^ jlong (JNICALL *CallStaticLongMethodA)$/;" m struct:JNINativeInterface_ -CallStaticLongMethodA src/enclave/Include/jni.h /^ jlong CallStaticLongMethodA(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticLongMethodV src/enclave/Include/jni.h /^ jlong (JNICALL *CallStaticLongMethodV)$/;" m struct:JNINativeInterface_ -CallStaticLongMethodV src/enclave/Include/jni.h /^ jlong CallStaticLongMethodV(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticObjectMethod src/enclave/Include/jni.h /^ jobject (JNICALL *CallStaticObjectMethod)$/;" m struct:JNINativeInterface_ -CallStaticObjectMethod src/enclave/Include/jni.h /^ jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID,$/;" f struct:JNIEnv_ -CallStaticObjectMethodA src/enclave/Include/jni.h /^ jobject (JNICALL *CallStaticObjectMethodA)$/;" m struct:JNINativeInterface_ -CallStaticObjectMethodA src/enclave/Include/jni.h /^ jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID,$/;" f struct:JNIEnv_ -CallStaticObjectMethodV src/enclave/Include/jni.h /^ jobject (JNICALL *CallStaticObjectMethodV)$/;" m struct:JNINativeInterface_ -CallStaticObjectMethodV src/enclave/Include/jni.h /^ jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID,$/;" f struct:JNIEnv_ -CallStaticShortMethod src/enclave/Include/jni.h /^ jshort (JNICALL *CallStaticShortMethod)$/;" m struct:JNINativeInterface_ -CallStaticShortMethod src/enclave/Include/jni.h /^ jshort CallStaticShortMethod(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticShortMethodA src/enclave/Include/jni.h /^ jshort (JNICALL *CallStaticShortMethodA)$/;" m struct:JNINativeInterface_ -CallStaticShortMethodA src/enclave/Include/jni.h /^ jshort CallStaticShortMethodA(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticShortMethodV src/enclave/Include/jni.h /^ jshort (JNICALL *CallStaticShortMethodV)$/;" m struct:JNINativeInterface_ -CallStaticShortMethodV src/enclave/Include/jni.h /^ jshort CallStaticShortMethodV(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticVoidMethod src/enclave/Include/jni.h /^ void (JNICALL *CallStaticVoidMethod)$/;" m struct:JNINativeInterface_ -CallStaticVoidMethod src/enclave/Include/jni.h /^ void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallStaticVoidMethodA src/enclave/Include/jni.h /^ void (JNICALL *CallStaticVoidMethodA)$/;" m struct:JNINativeInterface_ -CallStaticVoidMethodA src/enclave/Include/jni.h /^ void CallStaticVoidMethodA(jclass cls, jmethodID methodID,$/;" f struct:JNIEnv_ -CallStaticVoidMethodV src/enclave/Include/jni.h /^ void (JNICALL *CallStaticVoidMethodV)$/;" m struct:JNINativeInterface_ -CallStaticVoidMethodV src/enclave/Include/jni.h /^ void CallStaticVoidMethodV(jclass cls, jmethodID methodID,$/;" f struct:JNIEnv_ -CallVoidMethod src/enclave/Include/jni.h /^ void (JNICALL *CallVoidMethod)$/;" m struct:JNINativeInterface_ -CallVoidMethod src/enclave/Include/jni.h /^ void CallVoidMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallVoidMethodA src/enclave/Include/jni.h /^ void (JNICALL *CallVoidMethodA)$/;" m struct:JNINativeInterface_ -CallVoidMethodA src/enclave/Include/jni.h /^ void CallVoidMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallVoidMethodV src/enclave/Include/jni.h /^ void (JNICALL *CallVoidMethodV)$/;" m struct:JNINativeInterface_ -CallVoidMethodV src/enclave/Include/jni.h /^ void CallVoidMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -DATA_END src/enclave/Enclave/sgxaes_asm.S /^DATA_END:$/;" l -DAYS_PER_100Y src/enclave/Enclave/util.cpp /^#define DAYS_PER_100Y /;" d file: -DAYS_PER_400Y src/enclave/Enclave/util.cpp /^#define DAYS_PER_400Y /;" d file: -DAYS_PER_4Y src/enclave/Enclave/util.cpp /^#define DAYS_PER_4Y /;" d file: -DEFINE_H src/enclave/Include/define.h /^#define DEFINE_H$/;" d -DERIVE_KEY_MK_VK src/enclave/Enclave/isv_enclave.cpp /^ DERIVE_KEY_MK_VK,$/;" e enum:_derive_key_type_t file: -DERIVE_KEY_SMK_SK src/enclave/Enclave/isv_enclave.cpp /^ DERIVE_KEY_SMK_SK = 0,$/;" e enum:_derive_key_type_t file: -Date src/enclave/Enclave/Flatbuffers.h /^ Date(const int32_t &days_since_epoch) : days_since_epoch(days_since_epoch) {}$/;" f class:Date -Date src/enclave/Enclave/Flatbuffers.h /^class Date {$/;" c -Decrypting src/enclave/Enclave/sgxaes.h /^ Decrypting,$/;" e enum:State -DefineClass src/enclave/Include/jni.h /^ jclass (JNICALL *DefineClass)$/;" m struct:JNINativeInterface_ -DefineClass src/enclave/Include/jni.h /^ jclass DefineClass(const char *name, jobject loader, const jbyte *buf,$/;" f struct:JNIEnv_ -DeleteGlobalRef src/enclave/Include/jni.h /^ void (JNICALL *DeleteGlobalRef)$/;" m struct:JNINativeInterface_ -DeleteGlobalRef src/enclave/Include/jni.h /^ void DeleteGlobalRef(jobject gref) {$/;" f struct:JNIEnv_ -DeleteLocalRef src/enclave/Include/jni.h /^ void (JNICALL *DeleteLocalRef)$/;" m struct:JNINativeInterface_ -DeleteLocalRef src/enclave/Include/jni.h /^ void DeleteLocalRef(jobject obj) {$/;" f struct:JNIEnv_ -DeleteWeakGlobalRef src/enclave/Include/jni.h /^ void (JNICALL *DeleteWeakGlobalRef)$/;" m struct:JNINativeInterface_ -DeleteWeakGlobalRef src/enclave/Include/jni.h /^ void DeleteWeakGlobalRef(jweak ref) {$/;" f struct:JNIEnv_ -DestroyJavaVM src/enclave/Include/jni.h /^ jint (JNICALL *DestroyJavaVM)(JavaVM *vm);$/;" m struct:JNIInvokeInterface_ -DestroyJavaVM src/enclave/Include/jni.h /^ jint DestroyJavaVM() {$/;" f struct:JavaVM_ -DetachCurrentThread src/enclave/Include/jni.h /^ jint (JNICALL *DetachCurrentThread)(JavaVM *vm);$/;" m struct:JNIInvokeInterface_ -DetachCurrentThread src/enclave/Include/jni.h /^ jint DetachCurrentThread() {$/;" f struct:JavaVM_ -Done src/enclave/Enclave/sgxaes.h /^ Done,$/;" e enum:State -EC_DERIVATION_BUFFER_SIZE src/enclave/ServiceProvider/ecp.cpp /^#define EC_DERIVATION_BUFFER_SIZE(/;" d file: -ENCLAVE_FILENAME src/enclave/App/App.cpp /^# define ENCLAVE_FILENAME /;" d file: -EXPRESSION_EVALUATION_H src/enclave/Enclave/ExpressionEvaluation.h /^#define EXPRESSION_EVALUATION_H$/;" d -EXTERN_C src/enclave/ServiceProvider/sp_crypto.h /^ #define EXTERN_C /;" d -EXTERN_C src/enclave/ServiceProvider/sp_crypto.h /^ #define EXTERN_C$/;" d -EXTERN_C src/enclave/sample_libcrypto/sample_libcrypto.h /^ #define EXTERN_C /;" d -EncryptedBlockIterator src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Offset>::const_iterator EncryptedBlockIterator;$/;" t class:EncryptedBlocksToRowReader -EncryptedBlockToRowReader src/enclave/Enclave/Flatbuffers.h /^ EncryptedBlockToRowReader() : rows(nullptr), initialized(false) {}$/;" f class:EncryptedBlockToRowReader -EncryptedBlockToRowReader src/enclave/Enclave/Flatbuffers.h /^class EncryptedBlockToRowReader {$/;" c -EncryptedBlocksToEncryptedBlockReader src/enclave/Enclave/Flatbuffers.h /^ EncryptedBlocksToEncryptedBlockReader(uint8_t *buf, size_t len) {$/;" f class:EncryptedBlocksToEncryptedBlockReader -EncryptedBlocksToEncryptedBlockReader src/enclave/Enclave/Flatbuffers.h /^class EncryptedBlocksToEncryptedBlockReader {$/;" c -EncryptedBlocksToRowReader src/enclave/Enclave/Flatbuffers.h /^ EncryptedBlocksToRowReader(const tuix::EncryptedBlocks *encrypted_blocks)$/;" f class:EncryptedBlocksToRowReader -EncryptedBlocksToRowReader src/enclave/Enclave/Flatbuffers.h /^ EncryptedBlocksToRowReader(uint8_t *buf, size_t len)$/;" f class:EncryptedBlocksToRowReader -EncryptedBlocksToRowReader src/enclave/Enclave/Flatbuffers.h /^class EncryptedBlocksToRowReader {$/;" c -Encrypting src/enclave/Enclave/sgxaes.h /^ Encrypting,$/;" e enum:State -EnsureLocalCapacity src/enclave/Include/jni.h /^ jint (JNICALL *EnsureLocalCapacity)$/;" m struct:JNINativeInterface_ -EnsureLocalCapacity src/enclave/Include/jni.h /^ jint EnsureLocalCapacity(jint capacity) {$/;" f struct:JNIEnv_ -ExceptionCheck src/enclave/Include/jni.h /^ jboolean (JNICALL *ExceptionCheck)$/;" m struct:JNINativeInterface_ -ExceptionCheck src/enclave/Include/jni.h /^ jboolean ExceptionCheck() {$/;" f struct:JNIEnv_ -ExceptionClear src/enclave/Include/jni.h /^ void (JNICALL *ExceptionClear)$/;" m struct:JNINativeInterface_ -ExceptionClear src/enclave/Include/jni.h /^ void ExceptionClear() {$/;" f struct:JNIEnv_ -ExceptionDescribe src/enclave/Include/jni.h /^ void (JNICALL *ExceptionDescribe)$/;" m struct:JNINativeInterface_ -ExceptionDescribe src/enclave/Include/jni.h /^ void ExceptionDescribe() {$/;" f struct:JNIEnv_ -ExceptionOccurred src/enclave/Include/jni.h /^ jthrowable (JNICALL *ExceptionOccurred)$/;" m struct:JNINativeInterface_ -ExceptionOccurred src/enclave/Include/jni.h /^ jthrowable ExceptionOccurred() {$/;" f struct:JNIEnv_ -FALSE src/enclave/App/App.cpp /^# define FALSE /;" d file: -FILTER_H src/enclave/Enclave/Filter.h /^#define FILTER_H$/;" d -FLATBUFFERS_H src/enclave/Enclave/Flatbuffers.h /^#define FLATBUFFERS_H$/;" d -FatalError src/enclave/Include/jni.h /^ void (JNICALL *FatalError)$/;" m struct:JNINativeInterface_ -FatalError src/enclave/Include/jni.h /^ void FatalError(const char *msg) {$/;" f struct:JNIEnv_ -FindClass src/enclave/Include/jni.h /^ jclass (JNICALL *FindClass)$/;" m struct:JNINativeInterface_ -FindClass src/enclave/Include/jni.h /^ jclass FindClass(const char *name) {$/;" f struct:JNIEnv_ -FlatbuffersAggOpEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ FlatbuffersAggOpEvaluator(uint8_t *buf, size_t len)$/;" f class:FlatbuffersAggOpEvaluator -FlatbuffersAggOpEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^class FlatbuffersAggOpEvaluator {$/;" c -FlatbuffersExpressionEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ FlatbuffersExpressionEvaluator(const tuix::Expr *expr) : builder(), expr(expr) {}$/;" f class:FlatbuffersExpressionEvaluator -FlatbuffersExpressionEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^class FlatbuffersExpressionEvaluator {$/;" c -FlatbuffersJoinExprEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ FlatbuffersJoinExprEvaluator(uint8_t *buf, size_t len)$/;" f class:FlatbuffersJoinExprEvaluator -FlatbuffersJoinExprEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^class FlatbuffersJoinExprEvaluator {$/;" c -FlatbuffersRowWriter src/enclave/Enclave/Flatbuffers.h /^ FlatbuffersRowWriter()$/;" f class:FlatbuffersRowWriter -FlatbuffersRowWriter src/enclave/Enclave/Flatbuffers.h /^class FlatbuffersRowWriter {$/;" c -FlatbuffersSortOrderEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ FlatbuffersSortOrderEvaluator(const tuix::SortExpr *sort_expr)$/;" f class:FlatbuffersSortOrderEvaluator -FlatbuffersSortOrderEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ FlatbuffersSortOrderEvaluator(uint8_t *buf, size_t len) {$/;" f class:FlatbuffersSortOrderEvaluator -FlatbuffersSortOrderEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^class FlatbuffersSortOrderEvaluator {$/;" c -FlatbuffersTemporaryRow src/enclave/Enclave/Flatbuffers.h /^ FlatbuffersTemporaryRow() : builder(), row(nullptr) {}$/;" f class:FlatbuffersTemporaryRow -FlatbuffersTemporaryRow src/enclave/Enclave/Flatbuffers.h /^ FlatbuffersTemporaryRow(const tuix::Row *row) : FlatbuffersTemporaryRow() {$/;" f class:FlatbuffersTemporaryRow -FlatbuffersTemporaryRow src/enclave/Enclave/Flatbuffers.h /^class FlatbuffersTemporaryRow {$/;" c -FromReflectedField src/enclave/Include/jni.h /^ jfieldID (JNICALL *FromReflectedField)$/;" m struct:JNINativeInterface_ -FromReflectedField src/enclave/Include/jni.h /^ jfieldID FromReflectedField(jobject field) {$/;" f struct:JNIEnv_ -FromReflectedMethod src/enclave/Include/jni.h /^ jmethodID (JNICALL *FromReflectedMethod)$/;" m struct:JNINativeInterface_ -FromReflectedMethod src/enclave/Include/jni.h /^ jmethodID FromReflectedMethod(jobject method) {$/;" f struct:JNIEnv_ -GFMUL src/enclave/Enclave/sgxaes_asm.S /^GFMUL:$/;" l -GID_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define GID_SIZE /;" d -GID_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define GID_SIZE /;" d -GcmContext src/enclave/Enclave/sgxaes.cpp /^GcmContext::GcmContext() {$/;" f class:GcmContext -GcmContext src/enclave/Enclave/sgxaes.h /^ GcmContext(const GcmContext& other) {$/;" f struct:GcmContext -GcmContext src/enclave/Enclave/sgxaes.h /^struct GcmContext {$/;" s -GetArrayLength src/enclave/Include/jni.h /^ jsize (JNICALL *GetArrayLength)$/;" m struct:JNINativeInterface_ -GetArrayLength src/enclave/Include/jni.h /^ jsize GetArrayLength(jarray array) {$/;" f struct:JNIEnv_ -GetBooleanArrayElements src/enclave/Include/jni.h /^ jboolean * (JNICALL *GetBooleanArrayElements)$/;" m struct:JNINativeInterface_ -GetBooleanArrayElements src/enclave/Include/jni.h /^ jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetBooleanArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetBooleanArrayRegion)$/;" m struct:JNINativeInterface_ -GetBooleanArrayRegion src/enclave/Include/jni.h /^ void GetBooleanArrayRegion(jbooleanArray array,$/;" f struct:JNIEnv_ -GetBooleanField src/enclave/Include/jni.h /^ jboolean (JNICALL *GetBooleanField)$/;" m struct:JNINativeInterface_ -GetBooleanField src/enclave/Include/jni.h /^ jboolean GetBooleanField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetByteArrayElements src/enclave/Include/jni.h /^ jbyte * (JNICALL *GetByteArrayElements)$/;" m struct:JNINativeInterface_ -GetByteArrayElements src/enclave/Include/jni.h /^ jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetByteArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetByteArrayRegion)$/;" m struct:JNINativeInterface_ -GetByteArrayRegion src/enclave/Include/jni.h /^ void GetByteArrayRegion(jbyteArray array,$/;" f struct:JNIEnv_ -GetByteField src/enclave/Include/jni.h /^ jbyte (JNICALL *GetByteField)$/;" m struct:JNINativeInterface_ -GetByteField src/enclave/Include/jni.h /^ jbyte GetByteField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetCharArrayElements src/enclave/Include/jni.h /^ jchar * (JNICALL *GetCharArrayElements)$/;" m struct:JNINativeInterface_ -GetCharArrayElements src/enclave/Include/jni.h /^ jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetCharArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetCharArrayRegion)$/;" m struct:JNINativeInterface_ -GetCharArrayRegion src/enclave/Include/jni.h /^ void GetCharArrayRegion(jcharArray array,$/;" f struct:JNIEnv_ -GetCharField src/enclave/Include/jni.h /^ jchar (JNICALL *GetCharField)$/;" m struct:JNINativeInterface_ -GetCharField src/enclave/Include/jni.h /^ jchar GetCharField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetDirectBufferAddress src/enclave/Include/jni.h /^ void* (JNICALL *GetDirectBufferAddress)$/;" m struct:JNINativeInterface_ -GetDirectBufferAddress src/enclave/Include/jni.h /^ void* GetDirectBufferAddress(jobject buf) {$/;" f struct:JNIEnv_ -GetDirectBufferCapacity src/enclave/Include/jni.h /^ jlong (JNICALL *GetDirectBufferCapacity)$/;" m struct:JNINativeInterface_ -GetDirectBufferCapacity src/enclave/Include/jni.h /^ jlong GetDirectBufferCapacity(jobject buf) {$/;" f struct:JNIEnv_ -GetDoubleArrayElements src/enclave/Include/jni.h /^ jdouble * (JNICALL *GetDoubleArrayElements)$/;" m struct:JNINativeInterface_ -GetDoubleArrayElements src/enclave/Include/jni.h /^ jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetDoubleArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetDoubleArrayRegion)$/;" m struct:JNINativeInterface_ -GetDoubleArrayRegion src/enclave/Include/jni.h /^ void GetDoubleArrayRegion(jdoubleArray array,$/;" f struct:JNIEnv_ -GetDoubleField src/enclave/Include/jni.h /^ jdouble (JNICALL *GetDoubleField)$/;" m struct:JNINativeInterface_ -GetDoubleField src/enclave/Include/jni.h /^ jdouble GetDoubleField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetEnv src/enclave/Include/jni.h /^ jint (JNICALL *GetEnv)(JavaVM *vm, void **penv, jint version);$/;" m struct:JNIInvokeInterface_ -GetEnv src/enclave/Include/jni.h /^ jint GetEnv(void **penv, jint version) {$/;" f struct:JavaVM_ -GetFieldID src/enclave/Include/jni.h /^ jfieldID (JNICALL *GetFieldID)$/;" m struct:JNINativeInterface_ -GetFieldID src/enclave/Include/jni.h /^ jfieldID GetFieldID(jclass clazz, const char *name,$/;" f struct:JNIEnv_ -GetFloatArrayElements src/enclave/Include/jni.h /^ jfloat * (JNICALL *GetFloatArrayElements)$/;" m struct:JNINativeInterface_ -GetFloatArrayElements src/enclave/Include/jni.h /^ jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetFloatArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetFloatArrayRegion)$/;" m struct:JNINativeInterface_ -GetFloatArrayRegion src/enclave/Include/jni.h /^ void GetFloatArrayRegion(jfloatArray array,$/;" f struct:JNIEnv_ -GetFloatField src/enclave/Include/jni.h /^ jfloat (JNICALL *GetFloatField)$/;" m struct:JNINativeInterface_ -GetFloatField src/enclave/Include/jni.h /^ jfloat GetFloatField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetIntArrayElements src/enclave/Include/jni.h /^ jint * (JNICALL *GetIntArrayElements)$/;" m struct:JNINativeInterface_ -GetIntArrayElements src/enclave/Include/jni.h /^ jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetIntArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetIntArrayRegion)$/;" m struct:JNINativeInterface_ -GetIntArrayRegion src/enclave/Include/jni.h /^ void GetIntArrayRegion(jintArray array,$/;" f struct:JNIEnv_ -GetIntField src/enclave/Include/jni.h /^ jint (JNICALL *GetIntField)$/;" m struct:JNINativeInterface_ -GetIntField src/enclave/Include/jni.h /^ jint GetIntField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetJavaVM src/enclave/Include/jni.h /^ jint (JNICALL *GetJavaVM)$/;" m struct:JNINativeInterface_ -GetJavaVM src/enclave/Include/jni.h /^ jint GetJavaVM(JavaVM **vm) {$/;" f struct:JNIEnv_ -GetLongArrayElements src/enclave/Include/jni.h /^ jlong * (JNICALL *GetLongArrayElements)$/;" m struct:JNINativeInterface_ -GetLongArrayElements src/enclave/Include/jni.h /^ jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetLongArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetLongArrayRegion)$/;" m struct:JNINativeInterface_ -GetLongArrayRegion src/enclave/Include/jni.h /^ void GetLongArrayRegion(jlongArray array,$/;" f struct:JNIEnv_ -GetLongField src/enclave/Include/jni.h /^ jlong (JNICALL *GetLongField)$/;" m struct:JNINativeInterface_ -GetLongField src/enclave/Include/jni.h /^ jlong GetLongField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetMethodID src/enclave/Include/jni.h /^ jmethodID (JNICALL *GetMethodID)$/;" m struct:JNINativeInterface_ -GetMethodID src/enclave/Include/jni.h /^ jmethodID GetMethodID(jclass clazz, const char *name,$/;" f struct:JNIEnv_ -GetObjectArrayElement src/enclave/Include/jni.h /^ jobject (JNICALL *GetObjectArrayElement)$/;" m struct:JNINativeInterface_ -GetObjectArrayElement src/enclave/Include/jni.h /^ jobject GetObjectArrayElement(jobjectArray array, jsize index) {$/;" f struct:JNIEnv_ -GetObjectClass src/enclave/Include/jni.h /^ jclass (JNICALL *GetObjectClass)$/;" m struct:JNINativeInterface_ -GetObjectClass src/enclave/Include/jni.h /^ jclass GetObjectClass(jobject obj) {$/;" f struct:JNIEnv_ -GetObjectField src/enclave/Include/jni.h /^ jobject (JNICALL *GetObjectField)$/;" m struct:JNINativeInterface_ -GetObjectField src/enclave/Include/jni.h /^ jobject GetObjectField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetObjectRefType src/enclave/Include/jni.h /^ jobjectRefType (JNICALL *GetObjectRefType)$/;" m struct:JNINativeInterface_ -GetObjectRefType src/enclave/Include/jni.h /^ jobjectRefType GetObjectRefType(jobject obj) {$/;" f struct:JNIEnv_ -GetOffset src/enclave/Enclave/Flatbuffers.h /^template flatbuffers::Offset GetOffset($/;" f -GetPrimitiveArrayCritical src/enclave/Include/jni.h /^ void * (JNICALL *GetPrimitiveArrayCritical)$/;" m struct:JNINativeInterface_ -GetPrimitiveArrayCritical src/enclave/Include/jni.h /^ void * GetPrimitiveArrayCritical(jarray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetShortArrayElements src/enclave/Include/jni.h /^ jshort * (JNICALL *GetShortArrayElements)$/;" m struct:JNINativeInterface_ -GetShortArrayElements src/enclave/Include/jni.h /^ jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetShortArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetShortArrayRegion)$/;" m struct:JNINativeInterface_ -GetShortArrayRegion src/enclave/Include/jni.h /^ void GetShortArrayRegion(jshortArray array,$/;" f struct:JNIEnv_ -GetShortField src/enclave/Include/jni.h /^ jshort (JNICALL *GetShortField)$/;" m struct:JNINativeInterface_ -GetShortField src/enclave/Include/jni.h /^ jshort GetShortField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticBooleanField src/enclave/Include/jni.h /^ jboolean (JNICALL *GetStaticBooleanField)$/;" m struct:JNINativeInterface_ -GetStaticBooleanField src/enclave/Include/jni.h /^ jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticByteField src/enclave/Include/jni.h /^ jbyte (JNICALL *GetStaticByteField)$/;" m struct:JNINativeInterface_ -GetStaticByteField src/enclave/Include/jni.h /^ jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticCharField src/enclave/Include/jni.h /^ jchar (JNICALL *GetStaticCharField)$/;" m struct:JNINativeInterface_ -GetStaticCharField src/enclave/Include/jni.h /^ jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticDoubleField src/enclave/Include/jni.h /^ jdouble (JNICALL *GetStaticDoubleField)$/;" m struct:JNINativeInterface_ -GetStaticDoubleField src/enclave/Include/jni.h /^ jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticFieldID src/enclave/Include/jni.h /^ jfieldID (JNICALL *GetStaticFieldID)$/;" m struct:JNINativeInterface_ -GetStaticFieldID src/enclave/Include/jni.h /^ jfieldID GetStaticFieldID(jclass clazz, const char *name,$/;" f struct:JNIEnv_ -GetStaticFloatField src/enclave/Include/jni.h /^ jfloat (JNICALL *GetStaticFloatField)$/;" m struct:JNINativeInterface_ -GetStaticFloatField src/enclave/Include/jni.h /^ jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticIntField src/enclave/Include/jni.h /^ jint (JNICALL *GetStaticIntField)$/;" m struct:JNINativeInterface_ -GetStaticIntField src/enclave/Include/jni.h /^ jint GetStaticIntField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticLongField src/enclave/Include/jni.h /^ jlong (JNICALL *GetStaticLongField)$/;" m struct:JNINativeInterface_ -GetStaticLongField src/enclave/Include/jni.h /^ jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticMethodID src/enclave/Include/jni.h /^ jmethodID (JNICALL *GetStaticMethodID)$/;" m struct:JNINativeInterface_ -GetStaticMethodID src/enclave/Include/jni.h /^ jmethodID GetStaticMethodID(jclass clazz, const char *name,$/;" f struct:JNIEnv_ -GetStaticObjectField src/enclave/Include/jni.h /^ jobject (JNICALL *GetStaticObjectField)$/;" m struct:JNINativeInterface_ -GetStaticObjectField src/enclave/Include/jni.h /^ jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticShortField src/enclave/Include/jni.h /^ jshort (JNICALL *GetStaticShortField)$/;" m struct:JNINativeInterface_ -GetStaticShortField src/enclave/Include/jni.h /^ jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStringChars src/enclave/Include/jni.h /^ const jchar *(JNICALL *GetStringChars)$/;" m struct:JNINativeInterface_ -GetStringChars src/enclave/Include/jni.h /^ const jchar *GetStringChars(jstring str, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetStringCritical src/enclave/Include/jni.h /^ const jchar * (JNICALL *GetStringCritical)$/;" m struct:JNINativeInterface_ -GetStringCritical src/enclave/Include/jni.h /^ const jchar * GetStringCritical(jstring string, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetStringLength src/enclave/Include/jni.h /^ jsize (JNICALL *GetStringLength)$/;" m struct:JNINativeInterface_ -GetStringLength src/enclave/Include/jni.h /^ jsize GetStringLength(jstring str) {$/;" f struct:JNIEnv_ -GetStringRegion src/enclave/Include/jni.h /^ void (JNICALL *GetStringRegion)$/;" m struct:JNINativeInterface_ -GetStringRegion src/enclave/Include/jni.h /^ void GetStringRegion(jstring str, jsize start, jsize len, jchar *buf) {$/;" f struct:JNIEnv_ -GetStringUTFChars src/enclave/Include/jni.h /^ const char* (JNICALL *GetStringUTFChars)$/;" m struct:JNINativeInterface_ -GetStringUTFChars src/enclave/Include/jni.h /^ const char* GetStringUTFChars(jstring str, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetStringUTFLength src/enclave/Include/jni.h /^ jsize (JNICALL *GetStringUTFLength)$/;" m struct:JNINativeInterface_ -GetStringUTFLength src/enclave/Include/jni.h /^ jsize GetStringUTFLength(jstring str) {$/;" f struct:JNIEnv_ -GetStringUTFRegion src/enclave/Include/jni.h /^ void (JNICALL *GetStringUTFRegion)$/;" m struct:JNINativeInterface_ -GetStringUTFRegion src/enclave/Include/jni.h /^ void GetStringUTFRegion(jstring str, jsize start, jsize len, char *buf) {$/;" f struct:JNIEnv_ -GetSuperclass src/enclave/Include/jni.h /^ jclass (JNICALL *GetSuperclass)$/;" m struct:JNINativeInterface_ -GetSuperclass src/enclave/Include/jni.h /^ jclass GetSuperclass(jclass sub) {$/;" f struct:JNIEnv_ -GetVersion src/enclave/Include/jni.h /^ jint (JNICALL *GetVersion)(JNIEnv *env);$/;" m struct:JNINativeInterface_ -GetVersion src/enclave/Include/jni.h /^ jint GetVersion() {$/;" f struct:JNIEnv_ -IAS_EPID_GROUP_STATUS_REKEY_AVAILABLE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_EPID_GROUP_STATUS_REKEY_AVAILABLE_BIT_POS /;" d -IAS_EPID_GROUP_STATUS_REVOKED_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_EPID_GROUP_STATUS_REVOKED_BIT_POS /;" d -IAS_PSE_ATTRIBUTES_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_ATTRIBUTES_INVALID,$/;" e enum:__anon3 -IAS_PSE_DESC_TYPE_NOT_SUPPORTED src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_DESC_TYPE_NOT_SUPPORTED,$/;" e enum:__anon3 -IAS_PSE_EVAL_STATUS_EPID_GROUP_REVOKED_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_PSE_EVAL_STATUS_EPID_GROUP_REVOKED_BIT_POS /;" d -IAS_PSE_EVAL_STATUS_ISVSVN_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_PSE_EVAL_STATUS_ISVSVN_OUT_OF_DATE_BIT_POS /;" d -IAS_PSE_EVAL_STATUS_PRIVRL_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_PSE_EVAL_STATUS_PRIVRL_OUT_OF_DATE_BIT_POS /;" d -IAS_PSE_EVAL_STATUS_PSDASVN_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_PSE_EVAL_STATUS_PSDASVN_OUT_OF_DATE_BIT_POS /;" d -IAS_PSE_EVAL_STATUS_SIGRL_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_PSE_EVAL_STATUS_SIGRL_OUT_OF_DATE_BIT_POS /;" d -IAS_PSE_ISVSVN_OUT_OF_DATE src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_ISVSVN_OUT_OF_DATE,$/;" e enum:__anon3 -IAS_PSE_MISCSELECT_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_MISCSELECT_INVALID,$/;" e enum:__anon3 -IAS_PSE_MRSIGNER_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_MRSIGNER_INVALID,$/;" e enum:__anon3 -IAS_PSE_OK src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_OK,$/;" e enum:__anon3 -IAS_PS_HW_CA_ID_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_CA_ID_INVALID,$/;" e enum:__anon3 -IAS_PS_HW_GID_REVOKED src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_GID_REVOKED,$/;" e enum:__anon3 -IAS_PS_HW_PRIVKEY_RLVER_MISMATCH src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_PRIVKEY_RLVER_MISMATCH,$/;" e enum:__anon3 -IAS_PS_HW_PSDA_SVN_OUT_OF_DATE src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_PSDA_SVN_OUT_OF_DATE,$/;" e enum:__anon3 -IAS_PS_HW_SEC_INFO_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_SEC_INFO_INVALID,$/;" e enum:__anon3 -IAS_PS_HW_SIG_RLVER_MISMATCH src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_SIG_RLVER_MISMATCH,$/;" e enum:__anon3 -IAS_QUOTE_GROUP_OUT_OF_DATE src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_GROUP_OUT_OF_DATE,$/;" e enum:__anon2 -IAS_QUOTE_GROUP_REVOKED src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_GROUP_REVOKED,$/;" e enum:__anon2 -IAS_QUOTE_KEY_REVOKED src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_KEY_REVOKED,$/;" e enum:__anon2 -IAS_QUOTE_OK src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_OK,$/;" e enum:__anon2 -IAS_QUOTE_SIGNATURE_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_SIGNATURE_INVALID,$/;" e enum:__anon2 -IAS_QUOTE_SIGNATURE_REVOKED src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_SIGNATURE_REVOKED,$/;" e enum:__anon2 -IAS_QUOTE_SIGRL_VERSION_MISMATCH src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_SIGRL_VERSION_MISMATCH,$/;" e enum:__anon2 -IAS_REVOC_REASON_AA_COMPROMISE src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_AA_COMPROMISE,$/;" e enum:__anon4 -IAS_REVOC_REASON_CA_COMPROMISED src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_CA_COMPROMISED,$/;" e enum:__anon4 -IAS_REVOC_REASON_CERTIFICATE_HOLD src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_CERTIFICATE_HOLD,$/;" e enum:__anon4 -IAS_REVOC_REASON_CESSATION_OF_OPERATION src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_CESSATION_OF_OPERATION,$/;" e enum:__anon4 -IAS_REVOC_REASON_KEY_COMPROMISE src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_KEY_COMPROMISE,$/;" e enum:__anon4 -IAS_REVOC_REASON_NONE src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_NONE,$/;" e enum:__anon4 -IAS_REVOC_REASON_PRIVILEGE_WITHDRAWN src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_PRIVILEGE_WITHDRAWN,$/;" e enum:__anon4 -IAS_REVOC_REASON_SUPERCEDED src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_SUPERCEDED,$/;" e enum:__anon4 -IAS_TCB_EVAL_STATUS_CPUSVN_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_TCB_EVAL_STATUS_CPUSVN_OUT_OF_DATE_BIT_POS /;" d -IAS_TCB_EVAL_STATUS_ISVSVN_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_TCB_EVAL_STATUS_ISVSVN_OUT_OF_DATE_BIT_POS /;" d -ID_U src/enclave/Enclave/isv_enclave.cpp /^const char ID_U[] = "SGXRAENCLAVE";$/;" v -ID_U src/enclave/ServiceProvider/ecp.cpp /^const char ID_U[] = "SGXRAENCLAVE";$/;" v -ID_V src/enclave/Enclave/isv_enclave.cpp /^const char ID_V[] = "SGXRASERVER";$/;" v -ID_V src/enclave/ServiceProvider/ecp.cpp /^const char ID_V[] = "SGXRASERVER";$/;" v -ISVSVN_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define ISVSVN_SIZE /;" d -ISVSVN_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define ISVSVN_SIZE /;" d -ISV_KDF_ID src/enclave/Enclave/isv_enclave.cpp /^#define ISV_KDF_ID /;" d file: -ISV_KDF_ID src/enclave/ServiceProvider/service_provider.cpp /^#define ISV_KDF_ID /;" d file: -IsAssignableFrom src/enclave/Include/jni.h /^ jboolean (JNICALL *IsAssignableFrom)$/;" m struct:JNINativeInterface_ -IsAssignableFrom src/enclave/Include/jni.h /^ jboolean IsAssignableFrom(jclass sub, jclass sup) {$/;" f struct:JNIEnv_ -IsInstanceOf src/enclave/Include/jni.h /^ jboolean (JNICALL *IsInstanceOf)$/;" m struct:JNINativeInterface_ -IsInstanceOf src/enclave/Include/jni.h /^ jboolean IsInstanceOf(jobject obj, jclass clazz) {$/;" f struct:JNIEnv_ -IsSameObject src/enclave/Include/jni.h /^ jboolean (JNICALL *IsSameObject)$/;" m struct:JNINativeInterface_ -IsSameObject src/enclave/Include/jni.h /^ jboolean IsSameObject(jobject obj1, jobject obj2) {$/;" f struct:JNIEnv_ -JDK1_2 src/enclave/Include/jni.h /^#define JDK1_2$/;" d -JDK1_4 src/enclave/Include/jni.h /^#define JDK1_4$/;" d -JNICALL src/enclave/Include/jni_md.h /^#define JNICALL$/;" d -JNIEXPORT src/enclave/Include/jni_md.h /^ #define JNIEXPORT /;" d -JNIEXPORT src/enclave/Include/jni_md.h /^ #define JNIEXPORT$/;" d -JNIEnv src/enclave/Include/jni.h /^typedef JNIEnv_ JNIEnv;$/;" t -JNIEnv src/enclave/Include/jni.h /^typedef const struct JNINativeInterface_ *JNIEnv;$/;" t typeref:struct:JNINativeInterface_ -JNIEnv_ src/enclave/Include/jni.h /^struct JNIEnv_ {$/;" s -JNIGlobalRefType src/enclave/Include/jni.h /^ JNIGlobalRefType = 2,$/;" e enum:_jobjectType -JNIIMPORT src/enclave/Include/jni_md.h /^ #define JNIIMPORT /;" d -JNIIMPORT src/enclave/Include/jni_md.h /^ #define JNIIMPORT$/;" d -JNIInvalidRefType src/enclave/Include/jni.h /^ JNIInvalidRefType = 0,$/;" e enum:_jobjectType -JNIInvokeInterface_ src/enclave/Include/jni.h /^struct JNIInvokeInterface_ {$/;" s -JNILocalRefType src/enclave/Include/jni.h /^ JNILocalRefType = 1,$/;" e enum:_jobjectType -JNINativeInterface_ src/enclave/Include/jni.h /^struct JNINativeInterface_ {$/;" s -JNINativeMethod src/enclave/Include/jni.h /^} JNINativeMethod;$/;" t typeref:struct:__anon1 -JNIWeakGlobalRefType src/enclave/Include/jni.h /^ JNIWeakGlobalRefType = 3$/;" e enum:_jobjectType -JNI_ABORT src/enclave/Include/jni.h /^#define JNI_ABORT /;" d -JNI_COMMIT src/enclave/Include/jni.h /^#define JNI_COMMIT /;" d -JNI_EDETACHED src/enclave/Include/jni.h /^#define JNI_EDETACHED /;" d -JNI_EEXIST src/enclave/Include/jni.h /^#define JNI_EEXIST /;" d -JNI_EINVAL src/enclave/Include/jni.h /^#define JNI_EINVAL /;" d -JNI_ENOMEM src/enclave/Include/jni.h /^#define JNI_ENOMEM /;" d -JNI_ERR src/enclave/Include/jni.h /^#define JNI_ERR /;" d -JNI_EVERSION src/enclave/Include/jni.h /^#define JNI_EVERSION /;" d -JNI_FALSE src/enclave/Include/jni.h /^#define JNI_FALSE /;" d -JNI_OK src/enclave/Include/jni.h /^#define JNI_OK /;" d -JNI_TRUE src/enclave/Include/jni.h /^#define JNI_TRUE /;" d -JNI_VERSION_1_1 src/enclave/Include/jni.h /^#define JNI_VERSION_1_1 /;" d -JNI_VERSION_1_2 src/enclave/Include/jni.h /^#define JNI_VERSION_1_2 /;" d -JNI_VERSION_1_4 src/enclave/Include/jni.h /^#define JNI_VERSION_1_4 /;" d -JNI_VERSION_1_6 src/enclave/Include/jni.h /^#define JNI_VERSION_1_6 /;" d -JOIN_H src/enclave/Enclave/Join.h /^#define JOIN_H$/;" d -JavaVM src/enclave/Include/jni.h /^typedef JavaVM_ JavaVM;$/;" t -JavaVM src/enclave/Include/jni.h /^typedef const struct JNIInvokeInterface_ *JavaVM;$/;" t typeref:struct:JNIInvokeInterface_ -JavaVMAttachArgs src/enclave/Include/jni.h /^typedef struct JavaVMAttachArgs {$/;" s -JavaVMAttachArgs src/enclave/Include/jni.h /^} JavaVMAttachArgs;$/;" t typeref:struct:JavaVMAttachArgs -JavaVMInitArgs src/enclave/Include/jni.h /^typedef struct JavaVMInitArgs {$/;" s -JavaVMInitArgs src/enclave/Include/jni.h /^} JavaVMInitArgs;$/;" t typeref:struct:JavaVMInitArgs -JavaVMOption src/enclave/Include/jni.h /^typedef struct JavaVMOption {$/;" s -JavaVMOption src/enclave/Include/jni.h /^} JavaVMOption;$/;" t typeref:struct:JavaVMOption -JavaVM_ src/enclave/Include/jni.h /^struct JavaVM_ {$/;" s -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Decrypt src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Decrypt($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Encrypt src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Encrypt($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_ExternalSort src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_ExternalSort($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Filter src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Filter($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_FindRangeBounds src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_FindRangeBounds($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep1 src/enclave/App/App.cpp /^Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep1($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep2 src/enclave/App/App.cpp /^Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep2($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousSortMergeJoin src/enclave/App/App.cpp /^Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousSortMergeJoin($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_PartitionForSort src/enclave/App/App.cpp /^Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_PartitionForSort($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Project src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Project($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation0 src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation0($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation1 src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation1($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation2 src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation2($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation3 src/enclave/App/App.cpp /^JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation3($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Sample src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Sample($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_ScanCollectLastPrimary src/enclave/App/App.cpp /^Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_ScanCollectLastPrimary($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_StartEnclave src/enclave/App/App.cpp /^JNIEXPORT jlong JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_StartEnclave($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_StopEnclave src/enclave/App/App.cpp /^JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_StopEnclave($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SP_LoadKeys src/enclave/ServiceProvider/Main.cpp /^JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_LoadKeys($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg0 src/enclave/ServiceProvider/Main.cpp /^JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg0(JNIEnv *env, jobject obj, jbyteArray msg0_input) {$/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg1 src/enclave/ServiceProvider/Main.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg1(JNIEnv *env, jobject obj, jbyteArray msg1_input) {$/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg3 src/enclave/ServiceProvider/Main.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg3(JNIEnv *env, jobject obj, jbyteArray msg3_input) {$/;" f -KeySchedule src/enclave/Enclave/sgxaes.cpp /^KeySchedule::KeySchedule(const unsigned char* k, size_t k_len) {$/;" f class:KeySchedule -KeySchedule src/enclave/Enclave/sgxaes.h /^ KeySchedule(const KeySchedule& other) {$/;" f struct:KeySchedule -KeySchedule src/enclave/Enclave/sgxaes.h /^struct KeySchedule {$/;" s -LC_AESCTR_KEY_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_AESCTR_KEY_SIZE /;" d -LC_AESGCM_IV_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_AESGCM_IV_SIZE /;" d -LC_AESGCM_KEY_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_AESGCM_KEY_SIZE /;" d -LC_AESGCM_MAC_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_AESGCM_MAC_SIZE /;" d -LC_CMAC_KEY_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_CMAC_KEY_SIZE /;" d -LC_CMAC_MAC_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_CMAC_MAC_SIZE /;" d -LC_ECP256_KEY_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_ECP256_KEY_SIZE /;" d -LC_ERROR_INVALID_PARAMETER src/enclave/ServiceProvider/sp_crypto.h /^ LC_ERROR_INVALID_PARAMETER , \/\/ The parameter is incorrect$/;" e enum:lc_status_t -LC_ERROR_OUT_OF_MEMORY src/enclave/ServiceProvider/sp_crypto.h /^ LC_ERROR_OUT_OF_MEMORY , \/\/ Not enough memory is available to complete this operation$/;" e enum:lc_status_t -LC_ERROR_UNEXPECTED src/enclave/ServiceProvider/sp_crypto.h /^ LC_ERROR_UNEXPECTED , \/\/ Unexpected error$/;" e enum:lc_status_t -LC_LIBCRYPTO_API src/enclave/ServiceProvider/sp_crypto.h /^ #define LC_LIBCRYPTO_API /;" d -LC_LIBCRYPTO_API src/enclave/ServiceProvider/sp_crypto.h /^ #define LC_LIBCRYPTO_API /;" d -LC_NISTP_ECP256_KEY_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_NISTP_ECP256_KEY_SIZE /;" d -LC_SHA256_HASH_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_SHA256_HASH_SIZE /;" d -LC_SUCCESS src/enclave/ServiceProvider/sp_crypto.h /^ LC_SUCCESS = 0,$/;" e enum:lc_status_t -LEAPOCH src/enclave/Enclave/util.cpp /^#define LEAPOCH /;" d file: -MAC src/enclave/Enclave/Crypto.h /^ MAC() {$/;" f class:MAC -MAC src/enclave/Enclave/Crypto.h /^class MAC {$/;" c -MAC_KEY_SIZE src/enclave/ServiceProvider/ecp.cpp /^#define MAC_KEY_SIZE /;" d file: -MAX_BLOCK_SIZE src/enclave/Include/define.h /^#define MAX_BLOCK_SIZE /;" d -MAX_NUM_STREAMS src/enclave/Include/define.h /^#define MAX_NUM_STREAMS /;" d -MAX_PATH src/enclave/App/App.cpp /^# define MAX_PATH /;" d file: -MSG3_BODY_SIZE src/enclave/ServiceProvider/sample_messages.h /^#define MSG3_BODY_SIZE /;" d -MergeItem src/enclave/Enclave/Sort.cpp /^class MergeItem {$/;" c file: -MonitorEnter src/enclave/Include/jni.h /^ jint (JNICALL *MonitorEnter)$/;" m struct:JNINativeInterface_ -MonitorEnter src/enclave/Include/jni.h /^ jint MonitorEnter(jobject obj) {$/;" f struct:JNIEnv_ -MonitorExit src/enclave/Include/jni.h /^ jint (JNICALL *MonitorExit)$/;" m struct:JNINativeInterface_ -MonitorExit src/enclave/Include/jni.h /^ jint MonitorExit(jobject obj) {$/;" f struct:JNIEnv_ -New src/enclave/Enclave/sgxaes.h /^ New,$/;" e enum:State -NewBooleanArray src/enclave/Include/jni.h /^ jbooleanArray (JNICALL *NewBooleanArray)$/;" m struct:JNINativeInterface_ -NewBooleanArray src/enclave/Include/jni.h /^ jbooleanArray NewBooleanArray(jsize len) {$/;" f struct:JNIEnv_ -NewByteArray src/enclave/Include/jni.h /^ jbyteArray (JNICALL *NewByteArray)$/;" m struct:JNINativeInterface_ -NewByteArray src/enclave/Include/jni.h /^ jbyteArray NewByteArray(jsize len) {$/;" f struct:JNIEnv_ -NewCharArray src/enclave/Include/jni.h /^ jcharArray (JNICALL *NewCharArray)$/;" m struct:JNINativeInterface_ -NewCharArray src/enclave/Include/jni.h /^ jcharArray NewCharArray(jsize len) {$/;" f struct:JNIEnv_ -NewDirectByteBuffer src/enclave/Include/jni.h /^ jobject (JNICALL *NewDirectByteBuffer)$/;" m struct:JNINativeInterface_ -NewDirectByteBuffer src/enclave/Include/jni.h /^ jobject NewDirectByteBuffer(void* address, jlong capacity) {$/;" f struct:JNIEnv_ -NewDoubleArray src/enclave/Include/jni.h /^ jdoubleArray (JNICALL *NewDoubleArray)$/;" m struct:JNINativeInterface_ -NewDoubleArray src/enclave/Include/jni.h /^ jdoubleArray NewDoubleArray(jsize len) {$/;" f struct:JNIEnv_ -NewFloatArray src/enclave/Include/jni.h /^ jfloatArray (JNICALL *NewFloatArray)$/;" m struct:JNINativeInterface_ -NewFloatArray src/enclave/Include/jni.h /^ jfloatArray NewFloatArray(jsize len) {$/;" f struct:JNIEnv_ -NewGlobalRef src/enclave/Include/jni.h /^ jobject (JNICALL *NewGlobalRef)$/;" m struct:JNINativeInterface_ -NewGlobalRef src/enclave/Include/jni.h /^ jobject NewGlobalRef(jobject lobj) {$/;" f struct:JNIEnv_ -NewIntArray src/enclave/Include/jni.h /^ jintArray (JNICALL *NewIntArray)$/;" m struct:JNINativeInterface_ -NewIntArray src/enclave/Include/jni.h /^ jintArray NewIntArray(jsize len) {$/;" f struct:JNIEnv_ -NewLocalRef src/enclave/Include/jni.h /^ jobject (JNICALL *NewLocalRef)$/;" m struct:JNINativeInterface_ -NewLocalRef src/enclave/Include/jni.h /^ jobject NewLocalRef(jobject ref) {$/;" f struct:JNIEnv_ -NewLongArray src/enclave/Include/jni.h /^ jlongArray (JNICALL *NewLongArray)$/;" m struct:JNINativeInterface_ -NewLongArray src/enclave/Include/jni.h /^ jlongArray NewLongArray(jsize len) {$/;" f struct:JNIEnv_ -NewObject src/enclave/Include/jni.h /^ jobject (JNICALL *NewObject)$/;" m struct:JNINativeInterface_ -NewObject src/enclave/Include/jni.h /^ jobject NewObject(jclass clazz, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -NewObjectA src/enclave/Include/jni.h /^ jobject (JNICALL *NewObjectA)$/;" m struct:JNINativeInterface_ -NewObjectA src/enclave/Include/jni.h /^ jobject NewObjectA(jclass clazz, jmethodID methodID,$/;" f struct:JNIEnv_ -NewObjectArray src/enclave/Include/jni.h /^ jobjectArray (JNICALL *NewObjectArray)$/;" m struct:JNINativeInterface_ -NewObjectArray src/enclave/Include/jni.h /^ jobjectArray NewObjectArray(jsize len, jclass clazz,$/;" f struct:JNIEnv_ -NewObjectV src/enclave/Include/jni.h /^ jobject (JNICALL *NewObjectV)$/;" m struct:JNINativeInterface_ -NewObjectV src/enclave/Include/jni.h /^ jobject NewObjectV(jclass clazz, jmethodID methodID,$/;" f struct:JNIEnv_ -NewShortArray src/enclave/Include/jni.h /^ jshortArray (JNICALL *NewShortArray)$/;" m struct:JNINativeInterface_ -NewShortArray src/enclave/Include/jni.h /^ jshortArray NewShortArray(jsize len) {$/;" f struct:JNIEnv_ -NewString src/enclave/Include/jni.h /^ jstring (JNICALL *NewString)$/;" m struct:JNINativeInterface_ -NewString src/enclave/Include/jni.h /^ jstring NewString(const jchar *unicode, jsize len) {$/;" f struct:JNIEnv_ -NewStringUTF src/enclave/Include/jni.h /^ jstring (JNICALL *NewStringUTF)$/;" m struct:JNINativeInterface_ -NewStringUTF src/enclave/Include/jni.h /^ jstring NewStringUTF(const char *utf) {$/;" f struct:JNIEnv_ -NewWeakGlobalRef src/enclave/Include/jni.h /^ jweak (JNICALL *NewWeakGlobalRef)$/;" m struct:JNINativeInterface_ -NewWeakGlobalRef src/enclave/Include/jni.h /^ jweak NewWeakGlobalRef(jobject obj) {$/;" f struct:JNIEnv_ -PRINT_BYTE_ARRAY src/enclave/Common/common.h /^inline void PRINT_BYTE_ARRAY(void *file, void *mem, uint32_t len)$/;" f -PROJECT_H src/enclave/Enclave/Project.h /^#define PROJECT_H$/;" d -PSDA_SVN_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define PSDA_SVN_SIZE /;" d -PSDA_SVN_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define PSDA_SVN_SIZE /;" d -PSVN_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define PSVN_SIZE /;" d -PSVN_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define PSVN_SIZE /;" d -PopLocalFrame src/enclave/Include/jni.h /^ jobject (JNICALL *PopLocalFrame)$/;" m struct:JNINativeInterface_ -PopLocalFrame src/enclave/Include/jni.h /^ jobject PopLocalFrame(jobject result) {$/;" f struct:JNIEnv_ -PushLocalFrame src/enclave/Include/jni.h /^ jint (JNICALL *PushLocalFrame)$/;" m struct:JNINativeInterface_ -PushLocalFrame src/enclave/Include/jni.h /^ jint PushLocalFrame(jint capacity) {$/;" f struct:JNIEnv_ -RA_KEY_H src/enclave/Enclave/key.h /^#define RA_KEY_H$/;" d -REMOTE_ATTESTATION_H src/enclave/Enclave/isv_enclave.h /^#define REMOTE_ATTESTATION_H$/;" d -RegisterNatives src/enclave/Include/jni.h /^ jint (JNICALL *RegisterNatives)$/;" m struct:JNINativeInterface_ -RegisterNatives src/enclave/Include/jni.h /^ jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,$/;" f struct:JNIEnv_ -ReleaseBooleanArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseBooleanArrayElements)$/;" m struct:JNINativeInterface_ -ReleaseBooleanArrayElements src/enclave/Include/jni.h /^ void ReleaseBooleanArrayElements(jbooleanArray array,$/;" f struct:JNIEnv_ -ReleaseByteArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseByteArrayElements)$/;" m struct:JNINativeInterface_ -ReleaseByteArrayElements src/enclave/Include/jni.h /^ void ReleaseByteArrayElements(jbyteArray array,$/;" f struct:JNIEnv_ -ReleaseCharArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseCharArrayElements)$/;" m struct:JNINativeInterface_ -ReleaseCharArrayElements src/enclave/Include/jni.h /^ void ReleaseCharArrayElements(jcharArray array,$/;" f struct:JNIEnv_ -ReleaseDoubleArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseDoubleArrayElements)$/;" m struct:JNINativeInterface_ -ReleaseDoubleArrayElements src/enclave/Include/jni.h /^ void ReleaseDoubleArrayElements(jdoubleArray array,$/;" f struct:JNIEnv_ -ReleaseFloatArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseFloatArrayElements)$/;" m struct:JNINativeInterface_ -ReleaseFloatArrayElements src/enclave/Include/jni.h /^ void ReleaseFloatArrayElements(jfloatArray array,$/;" f struct:JNIEnv_ -ReleaseIntArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseIntArrayElements)$/;" m struct:JNINativeInterface_ -ReleaseIntArrayElements src/enclave/Include/jni.h /^ void ReleaseIntArrayElements(jintArray array,$/;" f struct:JNIEnv_ -ReleaseLongArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseLongArrayElements)$/;" m struct:JNINativeInterface_ -ReleaseLongArrayElements src/enclave/Include/jni.h /^ void ReleaseLongArrayElements(jlongArray array,$/;" f struct:JNIEnv_ -ReleasePrimitiveArrayCritical src/enclave/Include/jni.h /^ void (JNICALL *ReleasePrimitiveArrayCritical)$/;" m struct:JNINativeInterface_ -ReleasePrimitiveArrayCritical src/enclave/Include/jni.h /^ void ReleasePrimitiveArrayCritical(jarray array, void *carray, jint mode) {$/;" f struct:JNIEnv_ -ReleaseShortArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseShortArrayElements)$/;" m struct:JNINativeInterface_ -ReleaseShortArrayElements src/enclave/Include/jni.h /^ void ReleaseShortArrayElements(jshortArray array,$/;" f struct:JNIEnv_ -ReleaseStringChars src/enclave/Include/jni.h /^ void (JNICALL *ReleaseStringChars)$/;" m struct:JNINativeInterface_ -ReleaseStringChars src/enclave/Include/jni.h /^ void ReleaseStringChars(jstring str, const jchar *chars) {$/;" f struct:JNIEnv_ -ReleaseStringCritical src/enclave/Include/jni.h /^ void (JNICALL *ReleaseStringCritical)$/;" m struct:JNINativeInterface_ -ReleaseStringCritical src/enclave/Include/jni.h /^ void ReleaseStringCritical(jstring string, const jchar *cstring) {$/;" f struct:JNIEnv_ -ReleaseStringUTFChars src/enclave/Include/jni.h /^ void (JNICALL *ReleaseStringUTFChars)$/;" m struct:JNINativeInterface_ -ReleaseStringUTFChars src/enclave/Include/jni.h /^ void ReleaseStringUTFChars(jstring str, const char* chars) {$/;" f struct:JNIEnv_ -RowIterator src/enclave/Enclave/Flatbuffers.h /^ typedef flatbuffers::Vector>::const_iterator RowIterator;$/;" t class:EncryptedBlocksToRowReader -SAFE_FREE src/enclave/ServiceProvider/service_provider.cpp /^#define SAFE_FREE(/;" d file: -SAMPLE_AESCTR_KEY_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_AESCTR_KEY_SIZE /;" d -SAMPLE_AESGCM_IV_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_AESGCM_IV_SIZE /;" d -SAMPLE_AESGCM_KEY_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_AESGCM_KEY_SIZE /;" d -SAMPLE_AESGCM_MAC_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_AESGCM_MAC_SIZE /;" d -SAMPLE_AES_CMAC_KDF_ID src/enclave/ServiceProvider/service_provider.h /^const uint16_t SAMPLE_AES_CMAC_KDF_ID = 0x0001;$/;" v -SAMPLE_CMAC_KEY_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_CMAC_KEY_SIZE /;" d -SAMPLE_CMAC_MAC_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_CMAC_MAC_SIZE /;" d -SAMPLE_CPUSVN_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_CPUSVN_SIZE /;" d -SAMPLE_DERIVE_KEY_MK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_MK,$/;" e enum:_sample_derive_key_type_t -SAMPLE_DERIVE_KEY_MK_VK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_MK_VK,$/;" e enum:_sample_derive_key_type_t -SAMPLE_DERIVE_KEY_SK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_SK,$/;" e enum:_sample_derive_key_type_t -SAMPLE_DERIVE_KEY_SMK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_SMK = 0,$/;" e enum:_sample_derive_key_type_t -SAMPLE_DERIVE_KEY_SMK_SK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_SMK_SK = 0,$/;" e enum:_sample_derive_key_type_t -SAMPLE_DERIVE_KEY_VK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_VK,$/;" e enum:_sample_derive_key_type_t -SAMPLE_ECP256_KEY_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_ECP256_KEY_SIZE /;" d -SAMPLE_ECP_KEY_SIZE src/enclave/ServiceProvider/ecp.h /^#define SAMPLE_ECP_KEY_SIZE /;" d -SAMPLE_EC_MAC_SIZE src/enclave/ServiceProvider/ecp.h /^#define SAMPLE_EC_MAC_SIZE /;" d -SAMPLE_ERROR_INVALID_PARAMETER src/enclave/sample_libcrypto/sample_libcrypto.h /^ SAMPLE_ERROR_INVALID_PARAMETER , \/\/ The parameter is incorrect$/;" e enum:sample_status_t -SAMPLE_ERROR_OUT_OF_MEMORY src/enclave/sample_libcrypto/sample_libcrypto.h /^ SAMPLE_ERROR_OUT_OF_MEMORY , \/\/ Not enough memory is available to complete this operation$/;" e enum:sample_status_t -SAMPLE_ERROR_UNEXPECTED src/enclave/sample_libcrypto/sample_libcrypto.h /^ SAMPLE_ERROR_UNEXPECTED , \/\/ Unexpected error$/;" e enum:sample_status_t -SAMPLE_FEBITSIZE src/enclave/ServiceProvider/ecp.h /^ #define SAMPLE_FEBITSIZE /;" d -SAMPLE_FEBITSIZE src/enclave/ServiceProvider/remote_attestation_result.h /^ #define SAMPLE_FEBITSIZE /;" d -SAMPLE_HASH_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_HASH_SIZE /;" d -SAMPLE_LIBCRYPTO_API src/enclave/sample_libcrypto/sample_libcrypto.h /^ #define SAMPLE_LIBCRYPTO_API /;" d -SAMPLE_LIBCRYPTO_API src/enclave/sample_libcrypto/sample_libcrypto.h /^ #define SAMPLE_LIBCRYPTO_API /;" d -SAMPLE_MAC_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_MAC_SIZE /;" d -SAMPLE_MAC_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define SAMPLE_MAC_SIZE /;" d -SAMPLE_NISTP256_KEY_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define SAMPLE_NISTP256_KEY_SIZE /;" d -SAMPLE_NISTP_ECP256_KEY_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_NISTP_ECP256_KEY_SIZE /;" d -SAMPLE_QUOTE_LINKABLE_SIGNATURE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_QUOTE_LINKABLE_SIGNATURE /;" d -SAMPLE_QUOTE_UNLINKABLE_SIGNATURE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_QUOTE_UNLINKABLE_SIGNATURE /;" d -SAMPLE_REPORT_DATA_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_REPORT_DATA_SIZE /;" d -SAMPLE_SHA256_HASH_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_SHA256_HASH_SIZE /;" d -SAMPLE_SP_IV_SIZE src/enclave/ServiceProvider/service_provider.h /^#define SAMPLE_SP_IV_SIZE /;" d -SAMPLE_SP_TAG_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define SAMPLE_SP_TAG_SIZE /;" d -SAMPLE_SP_TAG_SIZE src/enclave/ServiceProvider/service_provider.h /^#define SAMPLE_SP_TAG_SIZE /;" d -SAMPLE_SUCCESS src/enclave/sample_libcrypto/sample_libcrypto.h /^ SAMPLE_SUCCESS = 0,$/;" e enum:sample_status_t -SGX_AES_H src/enclave/Enclave/sgxaes.h /^#define SGX_AES_H$/;" d -SP_IAS_FAILED src/enclave/ServiceProvider/service_provider.h /^ SP_IAS_FAILED,$/;" e enum:__anon5 -SP_INTEGRITY_FAILED src/enclave/ServiceProvider/service_provider.h /^ SP_INTEGRITY_FAILED,$/;" e enum:__anon5 -SP_INTERNAL_ERROR src/enclave/ServiceProvider/service_provider.h /^ SP_INTERNAL_ERROR,$/;" e enum:__anon5 -SP_OK src/enclave/ServiceProvider/service_provider.h /^ SP_OK,$/;" e enum:__anon5 -SP_PROTOCOL_ERROR src/enclave/ServiceProvider/service_provider.h /^ SP_PROTOCOL_ERROR,$/;" e enum:__anon5 -SP_QUOTE_VERIFICATION_FAILED src/enclave/ServiceProvider/service_provider.h /^ SP_QUOTE_VERIFICATION_FAILED,$/;" e enum:__anon5 -SP_QUOTE_VERSION_ERROR src/enclave/ServiceProvider/service_provider.h /^ SP_QUOTE_VERSION_ERROR,$/;" e enum:__anon5 -SP_UNSUPPORTED_EXTENDED_EPID_GROUP src/enclave/ServiceProvider/service_provider.h /^ SP_UNSUPPORTED_EXTENDED_EPID_GROUP,$/;" e enum:__anon5 -SWAP_ENDIAN_32B src/enclave/ServiceProvider/ias_ra.cpp /^ #define SWAP_ENDIAN_32B(/;" d file: -SWAP_ENDIAN_DW src/enclave/ServiceProvider/ias_ra.cpp /^ #define SWAP_ENDIAN_DW(/;" d file: -SetBooleanArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetBooleanArrayRegion)$/;" m struct:JNINativeInterface_ -SetBooleanArrayRegion src/enclave/Include/jni.h /^ void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ -SetBooleanField src/enclave/Include/jni.h /^ void (JNICALL *SetBooleanField)$/;" m struct:JNINativeInterface_ -SetBooleanField src/enclave/Include/jni.h /^ void SetBooleanField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetByteArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetByteArrayRegion)$/;" m struct:JNINativeInterface_ -SetByteArrayRegion src/enclave/Include/jni.h /^ void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ -SetByteField src/enclave/Include/jni.h /^ void (JNICALL *SetByteField)$/;" m struct:JNINativeInterface_ -SetByteField src/enclave/Include/jni.h /^ void SetByteField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetCharArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetCharArrayRegion)$/;" m struct:JNINativeInterface_ -SetCharArrayRegion src/enclave/Include/jni.h /^ void SetCharArrayRegion(jcharArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ -SetCharField src/enclave/Include/jni.h /^ void (JNICALL *SetCharField)$/;" m struct:JNINativeInterface_ -SetCharField src/enclave/Include/jni.h /^ void SetCharField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetDoubleArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetDoubleArrayRegion)$/;" m struct:JNINativeInterface_ -SetDoubleArrayRegion src/enclave/Include/jni.h /^ void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ -SetDoubleField src/enclave/Include/jni.h /^ void (JNICALL *SetDoubleField)$/;" m struct:JNINativeInterface_ -SetDoubleField src/enclave/Include/jni.h /^ void SetDoubleField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetFloatArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetFloatArrayRegion)$/;" m struct:JNINativeInterface_ -SetFloatArrayRegion src/enclave/Include/jni.h /^ void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ -SetFloatField src/enclave/Include/jni.h /^ void (JNICALL *SetFloatField)$/;" m struct:JNINativeInterface_ -SetFloatField src/enclave/Include/jni.h /^ void SetFloatField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetIntArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetIntArrayRegion)$/;" m struct:JNINativeInterface_ -SetIntArrayRegion src/enclave/Include/jni.h /^ void SetIntArrayRegion(jintArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ -SetIntField src/enclave/Include/jni.h /^ void (JNICALL *SetIntField)$/;" m struct:JNINativeInterface_ -SetIntField src/enclave/Include/jni.h /^ void SetIntField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetLongArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetLongArrayRegion)$/;" m struct:JNINativeInterface_ -SetLongArrayRegion src/enclave/Include/jni.h /^ void SetLongArrayRegion(jlongArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ -SetLongField src/enclave/Include/jni.h /^ void (JNICALL *SetLongField)$/;" m struct:JNINativeInterface_ -SetLongField src/enclave/Include/jni.h /^ void SetLongField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetObjectArrayElement src/enclave/Include/jni.h /^ void (JNICALL *SetObjectArrayElement)$/;" m struct:JNINativeInterface_ -SetObjectArrayElement src/enclave/Include/jni.h /^ void SetObjectArrayElement(jobjectArray array, jsize index,$/;" f struct:JNIEnv_ -SetObjectField src/enclave/Include/jni.h /^ void (JNICALL *SetObjectField)$/;" m struct:JNINativeInterface_ -SetObjectField src/enclave/Include/jni.h /^ void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {$/;" f struct:JNIEnv_ -SetShortArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetShortArrayRegion)$/;" m struct:JNINativeInterface_ -SetShortArrayRegion src/enclave/Include/jni.h /^ void SetShortArrayRegion(jshortArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ -SetShortField src/enclave/Include/jni.h /^ void (JNICALL *SetShortField)$/;" m struct:JNINativeInterface_ -SetShortField src/enclave/Include/jni.h /^ void SetShortField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticBooleanField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticBooleanField)$/;" m struct:JNINativeInterface_ -SetStaticBooleanField src/enclave/Include/jni.h /^ void SetStaticBooleanField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticByteField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticByteField)$/;" m struct:JNINativeInterface_ -SetStaticByteField src/enclave/Include/jni.h /^ void SetStaticByteField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticCharField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticCharField)$/;" m struct:JNINativeInterface_ -SetStaticCharField src/enclave/Include/jni.h /^ void SetStaticCharField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticDoubleField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticDoubleField)$/;" m struct:JNINativeInterface_ -SetStaticDoubleField src/enclave/Include/jni.h /^ void SetStaticDoubleField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticFloatField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticFloatField)$/;" m struct:JNINativeInterface_ -SetStaticFloatField src/enclave/Include/jni.h /^ void SetStaticFloatField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticIntField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticIntField)$/;" m struct:JNINativeInterface_ -SetStaticIntField src/enclave/Include/jni.h /^ void SetStaticIntField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticLongField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticLongField)$/;" m struct:JNINativeInterface_ -SetStaticLongField src/enclave/Include/jni.h /^ void SetStaticLongField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticObjectField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticObjectField)$/;" m struct:JNINativeInterface_ -SetStaticObjectField src/enclave/Include/jni.h /^ void SetStaticObjectField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticShortField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticShortField)$/;" m struct:JNINativeInterface_ -SetStaticShortField src/enclave/Include/jni.h /^ void SetStaticShortField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SortedRunsReader src/enclave/Enclave/Flatbuffers.h /^ SortedRunsReader(uint8_t *buf, size_t len)$/;" f class:SortedRunsReader -SortedRunsReader src/enclave/Enclave/Flatbuffers.h /^class SortedRunsReader {$/;" c -State src/enclave/Enclave/sgxaes.h /^enum State {$/;" g -StreamCipher src/enclave/Enclave/Crypto.cpp /^StreamCipher::StreamCipher(uint8_t *ciphertext_ptr) {$/;" f class:StreamCipher -StreamCipher src/enclave/Enclave/Crypto.h /^class StreamCipher {$/;" c -StreamDecipher src/enclave/Enclave/Crypto.cpp /^StreamDecipher::StreamDecipher(uint8_t *ciphertext_ptr, uint32_t enc_size) {$/;" f class:StreamDecipher -StreamDecipher src/enclave/Enclave/Crypto.h /^class StreamDecipher {$/;" c -TOKEN_FILENAME src/enclave/App/App.cpp /^# define TOKEN_FILENAME /;" d file: -TRUE src/enclave/App/App.cpp /^# define TRUE /;" d file: -TYPE_IAS_ATT_EVIDENCE src/enclave/ServiceProvider/service_provider.h /^ TYPE_IAS_ATT_EVIDENCE,$/;" e enum:_ias_msg_type_t -TYPE_IAS_ATT_RESULT src/enclave/ServiceProvider/service_provider.h /^ TYPE_IAS_ATT_RESULT,$/;" e enum:_ias_msg_type_t -TYPE_IAS_ENROLL src/enclave/ServiceProvider/service_provider.h /^ TYPE_IAS_ENROLL,$/;" e enum:_ias_msg_type_t -TYPE_IAS_GET_SIGRL src/enclave/ServiceProvider/service_provider.h /^ TYPE_IAS_GET_SIGRL,$/;" e enum:_ias_msg_type_t -TYPE_IAS_SIGRL src/enclave/ServiceProvider/service_provider.h /^ TYPE_IAS_SIGRL,$/;" e enum:_ias_msg_type_t -TYPE_RA_ATT_RESULT src/enclave/ServiceProvider/service_provider.h /^ TYPE_RA_ATT_RESULT,$/;" e enum:_ra_msg_type_t -TYPE_RA_MSG0 src/enclave/ServiceProvider/service_provider.h /^ TYPE_RA_MSG0,$/;" e enum:_ra_msg_type_t -TYPE_RA_MSG1 src/enclave/ServiceProvider/service_provider.h /^ TYPE_RA_MSG1,$/;" e enum:_ra_msg_type_t -TYPE_RA_MSG2 src/enclave/ServiceProvider/service_provider.h /^ TYPE_RA_MSG2,$/;" e enum:_ra_msg_type_t -TYPE_RA_MSG3 src/enclave/ServiceProvider/service_provider.h /^ TYPE_RA_MSG3,$/;" e enum:_ra_msg_type_t -Tag src/enclave/Enclave/sgxaes.h /^struct Tag {$/;" s -Throw src/enclave/Include/jni.h /^ jint (JNICALL *Throw)$/;" m struct:JNINativeInterface_ -Throw src/enclave/Include/jni.h /^ jint Throw(jthrowable obj) {$/;" f struct:JNIEnv_ -ThrowNew src/enclave/Include/jni.h /^ jint (JNICALL *ThrowNew)$/;" m struct:JNINativeInterface_ -ThrowNew src/enclave/Include/jni.h /^ jint ThrowNew(jclass clazz, const char *msg) {$/;" f struct:JNIEnv_ -ToReflectedField src/enclave/Include/jni.h /^ jobject (JNICALL *ToReflectedField)$/;" m struct:JNINativeInterface_ -ToReflectedField src/enclave/Include/jni.h /^ jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic) {$/;" f struct:JNIEnv_ -ToReflectedMethod src/enclave/Include/jni.h /^ jobject (JNICALL *ToReflectedMethod)$/;" m struct:JNINativeInterface_ -ToReflectedMethod src/enclave/Include/jni.h /^ jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic) {$/;" f struct:JNIEnv_ -UNUSED src/enclave/ServiceProvider/ias_ra.cpp /^#define UNUSED(/;" d file: -UTIL_H src/enclave/Enclave/util.h /^#define UTIL_H$/;" d -UnregisterNatives src/enclave/Include/jni.h /^ jint (JNICALL *UnregisterNatives)$/;" m struct:JNINativeInterface_ -UnregisterNatives src/enclave/Include/jni.h /^ jint UnregisterNatives(jclass clazz) {$/;" f struct:JNIEnv_ -UntrustedMemoryAllocator src/enclave/Enclave/Flatbuffers.h /^class UntrustedMemoryAllocator : public flatbuffers::simple_allocator {$/;" c -_ECP_H src/enclave/ServiceProvider/ecp.h /^#define _ECP_H$/;" d -_ERRNO_T_DEFINED src/enclave/ServiceProvider/ecp.h /^#define _ERRNO_T_DEFINED$/;" d -_IAS_RA_H src/enclave/ServiceProvider/ias_ra.h /^#define _IAS_RA_H$/;" d -_Included_SGXEnclave src/enclave/App/SGXEnclave.h /^#define _Included_SGXEnclave$/;" d -_Included_SP src/enclave/ServiceProvider/SP.h /^#define _Included_SP$/;" d -_JAVASOFT_JNI_H_ src/enclave/Include/jni.h /^#define _JAVASOFT_JNI_H_$/;" d -_JAVASOFT_JNI_MD_H_ src/enclave/Include/jni_md.h /^#define _JAVASOFT_JNI_MD_H_$/;" d -_JNI_IMPORT_OR_EXPORT_ src/enclave/Include/jni.h /^#define _JNI_IMPORT_OR_EXPORT_ /;" d -_REMOTE_ATTESTATION_RESULT_H_ src/enclave/ServiceProvider/remote_attestation_result.h /^#define _REMOTE_ATTESTATION_RESULT_H_$/;" d -_SERVICE_PROVIDER_H src/enclave/ServiceProvider/service_provider.h /^#define _SERVICE_PROVIDER_H$/;" d -_SORT_H_ src/enclave/Enclave/Sort.h /^#define _SORT_H_$/;" d -__has_attribute src/enclave/Include/jni_md.h /^ #define __has_attribute(/;" d -_derive_key_type_t src/enclave/Enclave/isv_enclave.cpp /^typedef enum _derive_key_type_t$/;" g file: -_hash_buffer_t src/enclave/Enclave/isv_enclave.cpp /^typedef struct _hash_buffer_t$/;" s file: -_hash_buffer_t src/enclave/ServiceProvider/ecp.cpp /^typedef struct _hash_buffer_t$/;" s file: -_ias_att_report_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct _ias_att_report_t$/;" s -_ias_msg_type_t src/enclave/ServiceProvider/service_provider.h /^typedef enum _ias_msg_type_t$/;" g -_jarray src/enclave/Include/jni.h /^class _jarray : public _jobject {};$/;" c -_jbooleanArray src/enclave/Include/jni.h /^class _jbooleanArray : public _jarray {};$/;" c -_jbyteArray src/enclave/Include/jni.h /^class _jbyteArray : public _jarray {};$/;" c -_jcharArray src/enclave/Include/jni.h /^class _jcharArray : public _jarray {};$/;" c -_jclass src/enclave/Include/jni.h /^class _jclass : public _jobject {};$/;" c -_jdoubleArray src/enclave/Include/jni.h /^class _jdoubleArray : public _jarray {};$/;" c -_jfloatArray src/enclave/Include/jni.h /^class _jfloatArray : public _jarray {};$/;" c -_jintArray src/enclave/Include/jni.h /^class _jintArray : public _jarray {};$/;" c -_jlongArray src/enclave/Include/jni.h /^class _jlongArray : public _jarray {};$/;" c -_jobject src/enclave/Include/jni.h /^class _jobject {};$/;" c -_jobjectArray src/enclave/Include/jni.h /^class _jobjectArray : public _jarray {};$/;" c -_jobjectType src/enclave/Include/jni.h /^typedef enum _jobjectType {$/;" g -_jshortArray src/enclave/Include/jni.h /^class _jshortArray : public _jarray {};$/;" c -_jstring src/enclave/Include/jni.h /^class _jstring : public _jobject {};$/;" c -_jthrowable src/enclave/Include/jni.h /^class _jthrowable : public _jobject {};$/;" c -_ra_msg_type_t src/enclave/ServiceProvider/service_provider.h /^typedef enum _ra_msg_type_t$/;" g -_ra_samp_request_header_t src/enclave/ServiceProvider/service_provider.h /^typedef struct _ra_samp_request_header_t {$/;" s -_ra_samp_response_header_t src/enclave/ServiceProvider/service_provider.h /^typedef struct _ra_samp_response_header_t {$/;" s -_sample_derive_key_type_t src/enclave/ServiceProvider/ecp.h /^typedef enum _sample_derive_key_type_t$/;" g -_sgx_errlist_t src/enclave/App/App.cpp /^typedef struct _sgx_errlist_t {$/;" s file: -_sp_db_item_t src/enclave/ServiceProvider/service_provider.cpp /^typedef struct _sp_db_item_t$/;" s file: -a src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Row *a;$/;" m class:FlatbuffersAggOpEvaluator -a_len src/enclave/Enclave/sgxaes.h /^ size_t a_len;$/;" m struct:AesGcm -aad src/enclave/Enclave/sgxaes.cpp /^void AesGcm::aad(const unsigned char* data, size_t data_len) {$/;" f class:AesGcm -acquire_sbt_jar build/sbt /^acquire_sbt_jar () {$/;" f -addDebugger build/sbt /^addDebugger () { addJava "-Xdebug" ; addJava "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1"; }$/;" f -addJava build/sbt /^addJava () { vlog "[addJava] arg = '$1'" ; java_args+=("$1"); }$/;" f -addResidual build/sbt /^addResidual () { vlog "[residual] arg = '$1'" ; residual_args+=("$1"); }$/;" f -addResolver build/sbt /^addResolver () { addSbt "set resolvers += $1"; }$/;" f -addSbt build/sbt /^addSbt () { vlog "[addSbt] arg = '$1'" ; sbt_commands+=("$1"); }$/;" f -addScalac build/sbt /^addScalac () { vlog "[addScalac] arg = '$1'" ; scalac_args+=("$1"); }$/;" f -aggregate src/enclave/Enclave/ExpressionEvaluation.h /^ void aggregate(const tuix::Row *row) {$/;" f class:FlatbuffersAggOpEvaluator -aggregate_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> aggregate_evaluators;$/;" m class:FlatbuffersAggOpEvaluator -algorithm_id src/enclave/Enclave/isv_enclave.cpp /^ uint8_t algorithm_id[4];$/;" m struct:_hash_buffer_t file: -algorithm_id src/enclave/ServiceProvider/ecp.cpp /^ uint8_t algorithm_id[4];$/;" m struct:_hash_buffer_t file: -align src/enclave/ServiceProvider/service_provider.h /^ uint8_t align[1];$/;" m struct:_ra_samp_response_header_t -align src/enclave/ServiceProvider/service_provider.h /^ uint8_t align[3];$/;" m struct:_ra_samp_request_header_t -allocate src/enclave/Enclave/Flatbuffers.h /^ virtual uint8_t *allocate(size_t size) const {$/;" f class:UntrustedMemoryAllocator -attestation_msg_sample1 src/enclave/ServiceProvider/sample_messages.h /^uint8_t attestation_msg_sample1[] =$/;" v -attestation_msg_sample2 src/enclave/ServiceProvider/sample_messages.h /^uint8_t attestation_msg_sample2[] =$/;" v -attributes src/enclave/ServiceProvider/ias_ra.h /^ sample_attributes_t attributes; \/\/ ( 48) Any special Capabilities$/;" m struct:sample_report_body_t -b src/enclave/Include/jni.h /^ jbyte b;$/;" m union:jvalue -b src/enclave/ServiceProvider/service_provider.cpp /^ lc_ec256_private_t b;$/;" m struct:_sp_db_item_t file: -basename src/enclave/ServiceProvider/ias_ra.h /^ sample_basename_t basename; \/\/ 16$/;" m struct:sample_quote_t -begin src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Vector>::const_iterator begin() {$/;" f class:EncryptedBlocksToEncryptedBlockReader -begin src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Vector>::const_iterator begin() {$/;" f class:EncryptedBlockToRowReader -block_idx src/enclave/Enclave/Flatbuffers.h /^ uint32_t block_idx;$/;" m class:EncryptedBlocksToRowReader -body src/enclave/ServiceProvider/service_provider.h /^ uint8_t body[];$/;" m struct:_ra_samp_response_header_t -body src/enclave/ServiceProvider/service_provider.h /^ uint8_t body[];$/;" m struct:_ra_samp_request_header_t -buf src/enclave/Enclave/Flatbuffers.h /^ uint8_t *buf;$/;" m class:SortedRunsReader -build_props_sbt build/sbt /^build_props_sbt () {$/;" f -build_props_scala build/sbt /^build_props_scala () {$/;" f -builder src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:AggregateExpressionEvaluator -builder src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersAggOpEvaluator -builder src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersExpressionEvaluator -builder src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersJoinExprEvaluator -builder src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersSortOrderEvaluator -builder src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersRowWriter -builder src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersTemporaryRow -builder2 src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder2;$/;" m class:FlatbuffersAggOpEvaluator -bytes_written src/enclave/Enclave/Crypto.cpp /^uint32_t StreamCipher::bytes_written() {$/;" f class:StreamCipher -c src/enclave/Include/jni.h /^ jchar c;$/;" m union:jvalue -check src/enclave/Common/common.h /^#define check(/;" d -check src/enclave/Enclave/ExpressionEvaluation.h /^#define check(/;" d -checkJava build/sbt /^checkJava() {$/;" f -cipher src/enclave/Enclave/Crypto.h /^ AesGcm *cipher;$/;" m class:StreamCipher -cipher src/enclave/Enclave/Crypto.h /^ AesGcm *cipher;$/;" m class:StreamDecipher -cipher_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *cipher_ptr;$/;" m class:StreamCipher -cipher_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *cipher_ptr;$/;" m class:StreamDecipher -ciphertext_size src/enclave/Enclave/Crypto.h /^ uint32_t ciphertext_size;$/;" m class:StreamCipher -clear src/enclave/Enclave/Flatbuffers.h /^ void clear() {$/;" f class:FlatbuffersRowWriter -clear src/enclave/Enclave/util.cpp /^void clear(uint8_t *dest, uint32_t len) {$/;" f -cmp src/enclave/Enclave/util.cpp /^int cmp(const uint8_t *value1, const uint8_t *value2, uint32_t len) {$/;" f -context src/enclave/App/App.cpp /^static sgx_ra_context_t context = INT_MAX;$/;" v file: -counter src/enclave/Enclave/isv_enclave.cpp /^ uint8_t counter[4];$/;" m struct:_hash_buffer_t file: -counter src/enclave/ServiceProvider/ecp.cpp /^ uint8_t counter[4];$/;" m struct:_hash_buffer_t file: -cpu_svn src/enclave/ServiceProvider/ias_ra.h /^ sample_cpu_svn_t cpu_svn; \/\/ ( 0) Security Version of the CPU$/;" m struct:sample_report_body_t -csv data/disease/synth_disease_data.py /^import csv$/;" i -ctr src/enclave/Enclave/sgxaes.h /^ unsigned char ctr[AES_BLOCK_SIZE];$/;" m struct:GcmContext -current_cipher_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *current_cipher_ptr;$/;" m class:StreamCipher -current_cipher_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *current_cipher_ptr;$/;" m class:StreamDecipher -d src/enclave/Include/jni.h /^ jdouble d;$/;" m union:jvalue -days_since_epoch src/enclave/Enclave/Flatbuffers.h /^ int32_t days_since_epoch;$/;" m class:Date -deallocate src/enclave/Enclave/Flatbuffers.h /^ virtual void deallocate(uint8_t *p) const {$/;" f class:UntrustedMemoryAllocator -debug src/enclave/Common/common.h /^#define debug(/;" d -dec_size src/enclave/Enclave/Crypto.cpp /^uint32_t dec_size(uint32_t ciphertext_size) {$/;" f -decrypt src/enclave/Enclave/Crypto.cpp /^void StreamDecipher::decrypt(uint8_t *plaintext_ptr, uint32_t size) {$/;" f class:StreamDecipher -decrypt src/enclave/Enclave/Crypto.cpp /^void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length,$/;" f -decrypt src/enclave/Enclave/sgxaes.cpp /^void AesGcm::decrypt(const unsigned char* ciphertext, size_t ciphertext_len, unsigned char* plaintext, size_t plaintext_len) {$/;" f class:AesGcm -decrypt src/enclave/ServiceProvider/sp_crypto.cpp /^void decrypt(lc_aes_gcm_128bit_key_t *key,$/;" f -decrypt_with_aad src/enclave/Enclave/Crypto.cpp /^void decrypt_with_aad(const uint8_t *ciphertext, uint32_t ciphertext_length,$/;" f -default_jvm_opts build/sbt /^default_jvm_opts () {$/;" f -derive_key src/enclave/Enclave/isv_enclave.cpp /^bool derive_key($/;" f -derive_key src/enclave/ServiceProvider/ecp.cpp /^bool derive_key(const lc_ec256_dh_shared_t *p_shared_key,$/;" f -derive_key src/enclave/ServiceProvider/ecp.cpp /^bool derive_key(const sample_ec256_dh_shared_t *p_shared_key,$/;" f -derive_key_type_t src/enclave/Enclave/isv_enclave.cpp /^} derive_key_type_t;$/;" t typeref:enum:_derive_key_type_t file: -die build/sbt /^die () { echo "Aborting: $@" ; exit 1; }$/;" f -download_url build/sbt /^download_url () {$/;" f -ecall_decrypt src/enclave/Enclave/Enclave.cpp /^void ecall_decrypt(uint8_t *ciphertext,$/;" f -ecall_enclave_init_ra src/enclave/Enclave/Enclave.cpp /^sgx_status_t ecall_enclave_init_ra(int b_pse, sgx_ra_context_t *p_context) {$/;" f -ecall_enclave_ra_close src/enclave/Enclave/Enclave.cpp /^void ecall_enclave_ra_close(sgx_ra_context_t context) {$/;" f -ecall_encrypt src/enclave/Enclave/Enclave.cpp /^void ecall_encrypt(uint8_t *plaintext, uint32_t plaintext_length,$/;" f -ecall_external_sort src/enclave/Enclave/Enclave.cpp /^void ecall_external_sort(uint8_t *sort_order, size_t sort_order_length,$/;" f -ecall_filter src/enclave/Enclave/Enclave.cpp /^void ecall_filter(uint8_t *condition, size_t condition_length,$/;" f -ecall_find_range_bounds src/enclave/Enclave/Enclave.cpp /^void ecall_find_range_bounds(uint8_t *sort_order, size_t sort_order_length,$/;" f -ecall_non_oblivious_aggregate_step1 src/enclave/Enclave/Enclave.cpp /^void ecall_non_oblivious_aggregate_step1($/;" f -ecall_non_oblivious_aggregate_step2 src/enclave/Enclave/Enclave.cpp /^void ecall_non_oblivious_aggregate_step2($/;" f -ecall_non_oblivious_sort_merge_join src/enclave/Enclave/Enclave.cpp /^void ecall_non_oblivious_sort_merge_join(uint8_t *join_expr, size_t join_expr_length,$/;" f -ecall_partition_for_sort src/enclave/Enclave/Enclave.cpp /^void ecall_partition_for_sort(uint8_t *sort_order, size_t sort_order_length,$/;" f -ecall_project src/enclave/Enclave/Enclave.cpp /^void ecall_project(uint8_t *condition, size_t condition_length,$/;" f -ecall_put_secret_data src/enclave/Enclave/Enclave.cpp /^sgx_status_t ecall_put_secret_data(sgx_ra_context_t context,$/;" f -ecall_sample src/enclave/Enclave/Enclave.cpp /^void ecall_sample(uint8_t *input_rows, size_t input_rows_length,$/;" f -ecall_scan_collect_last_primary src/enclave/Enclave/Enclave.cpp /^void ecall_scan_collect_last_primary(uint8_t *join_expr, size_t join_expr_length,$/;" f -ecall_verify_att_result_mac src/enclave/Enclave/Enclave.cpp /^sgx_status_t ecall_verify_att_result_mac(sgx_ra_context_t context, uint8_t* message,$/;" f -echoLine build/sbt /^ echoLine () {$/;" f -echoerr build/sbt /^echoerr () { echo >&2 "$@"; }$/;" f -enc_block_builder src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::FlatBufferBuilder enc_block_builder;$/;" m class:FlatbuffersRowWriter -enc_block_vector src/enclave/Enclave/Flatbuffers.h /^ std::vector> enc_block_vector;$/;" m class:FlatbuffersRowWriter -enc_size src/enclave/Enclave/Crypto.cpp /^uint32_t enc_size(uint32_t plaintext_size) {$/;" f -enclave_init_ra src/enclave/Enclave/isv_enclave.cpp /^sgx_status_t enclave_init_ra(int b_pse,$/;" f -enclave_ra_close src/enclave/Enclave/isv_enclave.cpp /^sgx_status_t SGXAPI enclave_ra_close(sgx_ra_context_t context) {$/;" f -encrypt src/enclave/Enclave/Crypto.cpp /^void StreamCipher::encrypt(uint8_t *plaintext, uint32_t size) {$/;" f class:StreamCipher -encrypt src/enclave/Enclave/Crypto.cpp /^void encrypt(uint8_t *plaintext, uint32_t plaintext_length,$/;" f -encrypt src/enclave/Enclave/sgxaes.cpp /^void AesGcm::encrypt(const unsigned char* plaintext, size_t plaintext_len, unsigned char* ciphertext, size_t ciphertext_len) {$/;" f class:AesGcm -encrypt src/enclave/ServiceProvider/sp_crypto.cpp /^void encrypt(lc_aes_gcm_128bit_key_t *key,$/;" f -encrypt_with_aad src/enclave/Enclave/Crypto.cpp /^void encrypt_with_aad(uint8_t *plaintext, uint32_t plaintext_length,$/;" f -encrypted_blocks src/enclave/Enclave/Flatbuffers.h /^ const tuix::EncryptedBlocks *encrypted_blocks;$/;" m class:EncryptedBlocksToEncryptedBlockReader -encrypted_blocks src/enclave/Enclave/Flatbuffers.h /^ const tuix::EncryptedBlocks *encrypted_blocks;$/;" m class:EncryptedBlocksToRowReader -end src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Vector>::const_iterator end() {$/;" f class:EncryptedBlocksToEncryptedBlockReader -end src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Vector>::const_iterator end() {$/;" f class:EncryptedBlockToRowReader -enroll src/enclave/ServiceProvider/service_provider.h /^ sample_enroll enroll;$/;" m struct:sample_extended_epid_group -epid_group_id src/enclave/ServiceProvider/ias_ra.h /^ sample_epid_group_id_t epid_group_id; \/\/ 4$/;" m struct:sample_quote_t -err src/enclave/App/App.cpp /^ sgx_status_t err;$/;" m struct:_sgx_errlist_t file: -errno_t src/enclave/ServiceProvider/ecp.h /^typedef int errno_t;$/;" t -eval src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Field *eval(const tuix::Row *row) {$/;" f class:FlatbuffersExpressionEvaluator -eval_binary_arithmetic_op src/enclave/Enclave/ExpressionEvaluation.h /^flatbuffers::Offset eval_binary_arithmetic_op($/;" f -eval_binary_comparison src/enclave/Enclave/ExpressionEvaluation.h /^flatbuffers::Offset eval_binary_comparison($/;" f -eval_helper src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::Offset eval_helper(const tuix::Row *row, const tuix::Expr *expr) {$/;" f class:FlatbuffersExpressionEvaluator -evaluate src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Field *evaluate(const tuix::Row *agg) {$/;" f class:AggregateExpressionEvaluator -evaluate src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Row *evaluate() {$/;" f class:FlatbuffersAggOpEvaluator -evaluate_evaluator src/enclave/Enclave/ExpressionEvaluation.h /^ std::unique_ptr evaluate_evaluator;$/;" m class:AggregateExpressionEvaluator -execRunner build/sbt /^execRunner () {$/;" f -exit src/enclave/Enclave/util.cpp /^void exit(int exit_code) {$/;" f -expr src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Expr *expr;$/;" m class:FlatbuffersExpressionEvaluator -extended_epid_group_id src/enclave/ServiceProvider/service_provider.h /^ uint32_t extended_epid_group_id;$/;" m struct:sample_ra_msg0_t -extended_epid_group_id src/enclave/ServiceProvider/service_provider.h /^ uint32_t extended_epid_group_id;$/;" m struct:sample_extended_epid_group -external_merge src/enclave/Enclave/Sort.cpp /^flatbuffers::Offset external_merge($/;" f -external_sort src/enclave/Enclave/Sort.cpp /^void external_sort(uint8_t *sort_order, size_t sort_order_length,$/;" f -extraInfo src/enclave/Include/jni.h /^ void *extraInfo;$/;" m struct:JavaVMOption -f src/enclave/Include/jni.h /^ jfloat f;$/;" m union:jvalue -filter src/enclave/Enclave/Filter.cpp /^void filter(uint8_t *condition, size_t condition_length,$/;" f -find_range_bounds src/enclave/Enclave/Sort.cpp /^void find_range_bounds(uint8_t *sort_order, size_t sort_order_length,$/;" f -finish src/enclave/Enclave/Crypto.cpp /^void StreamCipher::finish() {$/;" f class:StreamCipher -finish src/enclave/Enclave/Flatbuffers.h /^ void finish(flatbuffers::Offset root) {$/;" f class:FlatbuffersRowWriter -flags src/enclave/ServiceProvider/ias_ra.h /^ uint64_t flags;$/;" m struct:sample_attributes_t -flatbuffers_cast src/enclave/Enclave/Flatbuffers.h /^flatbuffers::Offset flatbuffers_cast($/;" f -flatbuffers_copy src/enclave/Enclave/Flatbuffers.cpp /^flatbuffers::Offset flatbuffers_copy($/;" f -flatbuffers_copy src/enclave/Enclave/Flatbuffers.cpp /^flatbuffers::Offset flatbuffers_copy($/;" f -fnPtr src/enclave/Include/jni.h /^ void *fnPtr;$/;" m struct:__anon1 -freebl_cipher_func src/enclave/Enclave/sgxaes.h /^ const void* freebl_cipher_func;$/;" m struct:KeySchedule -functions src/enclave/Include/jni.h /^ const struct JNIInvokeInterface_ *functions;$/;" m struct:JavaVM_ typeref:struct:JavaVM_::JNIInvokeInterface_ -functions src/enclave/Include/jni.h /^ const struct JNINativeInterface_ *functions;$/;" m struct:JNIEnv_ typeref:struct:JNIEnv_::JNINativeInterface_ -g_a src/enclave/ServiceProvider/service_provider.cpp /^ lc_ec256_public_t g_a;$/;" m struct:_sp_db_item_t file: -g_a src/enclave/ServiceProvider/service_provider.h /^ sample_ec_pub_t g_a; \/* the Endian-ness of Ga is$/;" m struct:sample_ra_msg1_t -g_a src/enclave/ServiceProvider/service_provider.h /^ sample_ec_pub_t g_a; \/* the Endian-ness of Ga is*\/$/;" m struct:sample_ra_msg3_t -g_authentication_token src/enclave/ServiceProvider/service_provider.cpp /^static int g_authentication_token = 0;$/;" v file: -g_b src/enclave/ServiceProvider/service_provider.cpp /^ lc_ec256_public_t g_b;$/;" m struct:_sp_db_item_t file: -g_b src/enclave/ServiceProvider/service_provider.h /^ sample_ec_pub_t g_b; \/* the Endian-ness of Gb is$/;" m struct:sample_ra_msg2_t -g_extended_epid_groups src/enclave/ServiceProvider/service_provider.cpp /^static const sample_extended_epid_group g_extended_epid_groups[] = {$/;" v file: -g_is_sp_registered src/enclave/ServiceProvider/service_provider.cpp /^static bool g_is_sp_registered = false;$/;" v file: -g_rk_priv_key src/enclave/ServiceProvider/ias_ra.cpp /^static const lc_ec256_private_t g_rk_priv_key =$/;" v file: -g_secret src/enclave/Enclave/isv_enclave.cpp /^uint8_t g_secret[8] = {0};$/;" v -g_secret src/enclave/ServiceProvider/service_provider.cpp /^uint8_t g_secret[8] = {0,1,2,3,4,5,6,7};$/;" v -g_sim_spid src/enclave/ServiceProvider/ias_ra.cpp /^static sample_spid_t g_sim_spid = {"Service X"};$/;" v file: -g_sp_credentials src/enclave/ServiceProvider/service_provider.cpp /^static int g_sp_credentials = 0;$/;" v file: -g_sp_db src/enclave/ServiceProvider/service_provider.cpp /^static sp_db_item_t g_sp_db;$/;" v file: -g_sp_extended_epid_group_id src/enclave/ServiceProvider/service_provider.cpp /^static const sample_extended_epid_group* g_sp_extended_epid_group_id= NULL;$/;" v file: -g_sp_priv_key src/enclave/ServiceProvider/service_provider.cpp /^sgx_ec256_private_t g_sp_priv_key = {{0}};$/;" v -g_sp_pub_key src/enclave/ServiceProvider/service_provider.cpp /^sgx_ec256_public_t g_sp_pub_key = {{0}, {0}};$/;" v -g_spid src/enclave/ServiceProvider/service_provider.cpp /^sample_spid_t g_spid;$/;" v -gcKeySchedule src/enclave/Enclave/Crypto.cpp /^void gcKeySchedule() {$/;" f -gctx src/enclave/Enclave/sgxaes.h /^ GcmContext gctx;$/;" m struct:AesGcm -get src/enclave/Enclave/Flatbuffers.h /^ const tuix::Row *get() {$/;" f class:FlatbuffersTemporaryRow -getJavaVersion build/sbt /^getJavaVersion() { "$1" -version 2>&1 | grep -E -e '(java|openjdk) version' | awk '{ print $3 }' | tr -d \\"; }$/;" f -get_ec_point src/enclave/ServiceProvider/sp_crypto.cpp /^EC_POINT *get_ec_point(lc_ec256_public_t *p_public) {$/;" f -get_partial_agg src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Row *get_partial_agg() {$/;" f class:FlatbuffersAggOpEvaluator -get_priv_key src/enclave/ServiceProvider/sp_crypto.cpp /^EC_KEY *get_priv_key(lc_ec256_private_t *p_private) {$/;" f -get_script_path build/sbt /^get_script_path () {$/;" f -get_sigrl src/enclave/ServiceProvider/service_provider.h /^ sample_get_sigrl get_sigrl;$/;" m struct:sample_extended_epid_group -gid src/enclave/ServiceProvider/service_provider.h /^ sample_epid_group_id_t gid; \/* the Endian-ness of GID is$/;" m struct:sample_ra_msg1_t -global_eid src/enclave/App/App.cpp /^sgx_enclave_id_t global_eid = 0;$/;" v -group src/enclave/Include/jni.h /^ jobject group;$/;" m struct:JavaVMAttachArgs -grouping_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> grouping_evaluators;$/;" m class:FlatbuffersAggOpEvaluator -gx src/enclave/ServiceProvider/service_provider.h /^ uint8_t gx[SAMPLE_ECP_KEY_SIZE];$/;" m struct:sample_ec_pub_t -gx src/enclave/ServiceProvider/sp_crypto.h /^ uint8_t gx[LC_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_public_t -gx src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint8_t gx[SAMPLE_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_public_t -gy src/enclave/ServiceProvider/service_provider.h /^ uint8_t gy[SAMPLE_ECP_KEY_SIZE];$/;" m struct:sample_ec_pub_t -gy src/enclave/ServiceProvider/sp_crypto.h /^ uint8_t gy[LC_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_public_t -gy src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint8_t gy[SAMPLE_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_public_t -has_next src/enclave/Enclave/Flatbuffers.h /^ bool has_next() {$/;" f class:EncryptedBlockToRowReader -has_next src/enclave/Enclave/Flatbuffers.h /^ bool has_next() {$/;" f class:EncryptedBlocksToRowReader -hash_buffer_t src/enclave/Enclave/isv_enclave.cpp /^} hash_buffer_t;$/;" t typeref:struct:_hash_buffer_t file: -hash_buffer_t src/enclave/ServiceProvider/ecp.cpp /^} hash_buffer_t;$/;" t typeref:struct:_hash_buffer_t file: -htbl src/enclave/Enclave/sgxaes.h /^ unsigned char htbl[16*AES_BLOCK_SIZE];$/;" m struct:GcmContext -i src/enclave/Include/jni.h /^ jint i;$/;" m union:jvalue -ias_att_report_t src/enclave/ServiceProvider/ias_ra.h /^} ias_att_report_t;$/;" t typeref:struct:_ias_att_report_t -ias_enroll src/enclave/ServiceProvider/ias_ra.cpp /^int ias_enroll($/;" f -ias_get_sigrl src/enclave/ServiceProvider/ias_ra.cpp /^int ias_get_sigrl($/;" f -ias_msg_type_t src/enclave/ServiceProvider/service_provider.h /^} ias_msg_type_t;$/;" t typeref:enum:_ias_msg_type_t -ias_platform_info_blob_t src/enclave/ServiceProvider/remote_attestation_result.h /^typedef struct ias_platform_info_blob_t$/;" s -ias_platform_info_blob_t src/enclave/ServiceProvider/remote_attestation_result.h /^} ias_platform_info_blob_t;$/;" t typeref:struct:ias_platform_info_blob_t -ias_pse_status_t src/enclave/ServiceProvider/ias_ra.h /^} ias_pse_status_t;$/;" t typeref:enum:__anon3 -ias_quote_status_t src/enclave/ServiceProvider/ias_ra.h /^} ias_quote_status_t;$/;" t typeref:enum:__anon2 -ias_revoc_reason_t src/enclave/ServiceProvider/ias_ra.h /^} ias_revoc_reason_t;$/;" t typeref:enum:__anon4 -ias_verify_attestation_evidence src/enclave/ServiceProvider/ias_ra.cpp /^int ias_verify_attestation_evidence($/;" f -id src/enclave/ServiceProvider/ias_ra.h /^ uint32_t id;$/;" m struct:_ias_att_report_t -id src/enclave/ServiceProvider/ias_ra.h /^ uint8_t id[16];$/;" m struct:sample_spid_t -ignoreUnrecognized src/enclave/Include/jni.h /^ jboolean ignoreUnrecognized;$/;" m struct:JavaVMInitArgs -info_blob src/enclave/ServiceProvider/ias_ra.h /^ ias_platform_info_blob_t info_blob;$/;" m struct:_ias_att_report_t -init src/enclave/Enclave/Flatbuffers.h /^ void init(const tuix::EncryptedBlock *encrypted_block) {$/;" f class:EncryptedBlockToRowReader -initKeySchedule src/enclave/Enclave/Crypto.cpp /^void initKeySchedule() {$/;" f -init_default_option_file build/sbt /^init_default_option_file () {$/;" f -init_row_reader src/enclave/Enclave/Flatbuffers.h /^ void init_row_reader() {$/;" f class:EncryptedBlocksToRowReader -initial_value_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> initial_value_evaluators;$/;" m class:AggregateExpressionEvaluator -initial_values src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector initial_values(const tuix::Row *unused) {$/;" f class:AggregateExpressionEvaluator -initialize_enclave src/enclave/App/App.cpp /^int initialize_enclave(void)$/;" f -initialized src/enclave/Enclave/Flatbuffers.h /^ bool initialized;$/;" m class:EncryptedBlockToRowReader -intel_aes_encrypt_init_128 src/enclave/Enclave/sgxaes_asm.S /^intel_aes_encrypt_init_128:$/;" l -intel_aes_encrypt_init_192 src/enclave/Enclave/sgxaes_asm.S /^intel_aes_encrypt_init_192:$/;" l -intel_aes_encrypt_init_256 src/enclave/Enclave/sgxaes_asm.S /^intel_aes_encrypt_init_256:$/;" l -intel_aes_gcmAAD src/enclave/Enclave/sgxaes_asm.S /^intel_aes_gcmAAD:$/;" l -intel_aes_gcmDEC src/enclave/Enclave/sgxaes_asm.S /^intel_aes_gcmDEC:$/;" l -intel_aes_gcmENC src/enclave/Enclave/sgxaes_asm.S /^intel_aes_gcmENC:$/;" l -intel_aes_gcmINIT src/enclave/Enclave/sgxaes_asm.S /^intel_aes_gcmINIT:$/;" l -intel_aes_gcmTAG src/enclave/Enclave/sgxaes_asm.S /^intel_aes_gcmTAG:$/;" l -is_cygwin build/sbt /^is_cygwin () [[ "$(uname -a)" == "CYGWIN"* ]]$/;" f -is_primary src/enclave/Enclave/ExpressionEvaluation.h /^ bool is_primary(const tuix::Row *row) {$/;" f class:FlatbuffersJoinExprEvaluator -is_same_group src/enclave/Enclave/ExpressionEvaluation.h /^ bool is_same_group(const tuix::Row *row1, const tuix::Row *row2) {$/;" f class:FlatbuffersAggOpEvaluator -is_same_group src/enclave/Enclave/ExpressionEvaluation.h /^ bool is_same_group(const tuix::Row *row1, const tuix::Row *row2) {$/;" f class:FlatbuffersJoinExprEvaluator -isv_prod_id src/enclave/ServiceProvider/ias_ra.h /^ sample_prod_id_t isv_prod_id; \/\/ (256) Product ID of the Enclave$/;" m struct:sample_report_body_t -isv_svn src/enclave/ServiceProvider/ias_ra.h /^ sample_isv_svn_t isv_svn; \/\/ (258) Security Version of the$/;" m struct:sample_report_body_t -iv src/enclave/Enclave/sgxaes.h /^ unsigned char iv[AES_BLOCK_SIZE*2];$/;" m struct:KeySchedule -iv_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *iv_ptr;$/;" m class:StreamCipher -iv_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *iv_ptr;$/;" m class:StreamDecipher -j src/enclave/Include/jni.h /^ jlong j;$/;" m union:jvalue -jar_file build/sbt /^jar_file () {$/;" f -jar_url build/sbt /^jar_url () { make_url "$1"; }$/;" f -jarray src/enclave/Include/jni.h /^typedef _jarray *jarray;$/;" t -jarray src/enclave/Include/jni.h /^typedef jobject jarray;$/;" t -java_version build/sbt /^java_version () {$/;" f -jboolean src/enclave/Include/jni.h /^typedef unsigned char jboolean;$/;" t -jbooleanArray src/enclave/Include/jni.h /^typedef _jbooleanArray *jbooleanArray;$/;" t -jbooleanArray src/enclave/Include/jni.h /^typedef jarray jbooleanArray;$/;" t -jbyte src/enclave/Include/jni_md.h /^typedef signed char jbyte;$/;" t -jbyteArray src/enclave/Include/jni.h /^typedef _jbyteArray *jbyteArray;$/;" t -jbyteArray src/enclave/Include/jni.h /^typedef jarray jbyteArray;$/;" t -jchar src/enclave/Include/jni.h /^typedef unsigned short jchar;$/;" t -jcharArray src/enclave/Include/jni.h /^typedef _jcharArray *jcharArray;$/;" t -jcharArray src/enclave/Include/jni.h /^typedef jarray jcharArray;$/;" t -jclass src/enclave/Include/jni.h /^typedef _jclass *jclass;$/;" t -jclass src/enclave/Include/jni.h /^typedef jobject jclass;$/;" t -jdouble src/enclave/Include/jni.h /^typedef double jdouble;$/;" t -jdoubleArray src/enclave/Include/jni.h /^typedef _jdoubleArray *jdoubleArray;$/;" t -jdoubleArray src/enclave/Include/jni.h /^typedef jarray jdoubleArray;$/;" t -jfieldID src/enclave/Include/jni.h /^typedef struct _jfieldID *jfieldID;$/;" t typeref:struct:_jfieldID -jfloat src/enclave/Include/jni.h /^typedef float jfloat;$/;" t -jfloatArray src/enclave/Include/jni.h /^typedef _jfloatArray *jfloatArray;$/;" t -jfloatArray src/enclave/Include/jni.h /^typedef jarray jfloatArray;$/;" t -jint src/enclave/Include/jni_md.h /^typedef int jint;$/;" t -jintArray src/enclave/Include/jni.h /^typedef _jintArray *jintArray;$/;" t -jintArray src/enclave/Include/jni.h /^typedef jarray jintArray;$/;" t -jlong src/enclave/Include/jni_md.h /^typedef long jlong;$/;" t -jlong src/enclave/Include/jni_md.h /^typedef long long jlong;$/;" t -jlongArray src/enclave/Include/jni.h /^typedef _jlongArray *jlongArray;$/;" t -jlongArray src/enclave/Include/jni.h /^typedef jarray jlongArray;$/;" t -jmethodID src/enclave/Include/jni.h /^typedef struct _jmethodID *jmethodID;$/;" t typeref:struct:_jmethodID -jobject src/enclave/Include/jni.h /^typedef _jobject *jobject;$/;" t -jobject src/enclave/Include/jni.h /^typedef struct _jobject *jobject;$/;" t typeref:struct:_jobject -jobjectArray src/enclave/Include/jni.h /^typedef _jobjectArray *jobjectArray;$/;" t -jobjectArray src/enclave/Include/jni.h /^typedef jarray jobjectArray;$/;" t -jobjectRefType src/enclave/Include/jni.h /^} jobjectRefType;$/;" t typeref:enum:_jobjectType -jshort src/enclave/Include/jni.h /^typedef short jshort;$/;" t -jshortArray src/enclave/Include/jni.h /^typedef _jshortArray *jshortArray;$/;" t -jshortArray src/enclave/Include/jni.h /^typedef jarray jshortArray;$/;" t -jsize src/enclave/Include/jni.h /^typedef jint jsize;$/;" t -jstring src/enclave/Include/jni.h /^typedef _jstring *jstring;$/;" t -jstring src/enclave/Include/jni.h /^typedef jobject jstring;$/;" t -jthrowable src/enclave/Include/jni.h /^typedef _jthrowable *jthrowable;$/;" t -jthrowable src/enclave/Include/jni.h /^typedef jobject jthrowable;$/;" t -jvalue src/enclave/Include/jni.h /^typedef union jvalue {$/;" u -jvalue src/enclave/Include/jni.h /^} jvalue;$/;" t typeref:union:jvalue -jweak src/enclave/Include/jni.h /^typedef jobject jweak;$/;" t -kdf_id src/enclave/ServiceProvider/service_provider.h /^ uint16_t kdf_id; \/* key derivation function id in little endian. $/;" m struct:sample_ra_msg2_t -key src/enclave/Enclave/Crypto.cpp /^sgx_aes_gcm_128bit_key_t *key = &key_data;$/;" v -key src/enclave/ServiceProvider/Main.cpp /^lc_aes_gcm_128bit_key_t key = "helloworld12312";$/;" v -key_data src/enclave/Enclave/Crypto.cpp /^sgx_aes_gcm_128bit_key_t key_data = {0};$/;" v -key_derivation src/enclave/Enclave/isv_enclave.cpp /^sgx_status_t key_derivation(const sgx_ec256_dh_shared_t* shared_key,$/;" f -key_expansion128 src/enclave/Enclave/sgxaes_asm.S /^key_expansion128:$/;" l -key_expansion192 src/enclave/Enclave/sgxaes_asm.S /^key_expansion192:$/;" l -key_expansion256 src/enclave/Enclave/sgxaes_asm.S /^key_expansion256:$/;" l -key_str src/enclave/ServiceProvider/service_provider.cpp /^const char *key_str = "helloworld123123";$/;" v -ks src/enclave/Enclave/Crypto.cpp /^KeySchedule *ks = (KeySchedule *) &ks_backup;$/;" v -ks src/enclave/Enclave/sgxaes.h /^ const KeySchedule* ks;$/;" m struct:GcmContext -ks src/enclave/Enclave/sgxaes.h /^ uint32_t ks[AES_MAX_EXP_KEY_SIZE];$/;" m struct:KeySchedule -ks_backup src/enclave/Enclave/Crypto.cpp /^const KeySchedule ks_backup = KeySchedule((unsigned char *) key_data, SGX_AESGCM_KEY_SIZE);$/;" v -l src/enclave/Include/jni.h /^ jobject l;$/;" m union:jvalue -latest_equivalent_tcb_psvn src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t latest_equivalent_tcb_psvn[PSVN_SIZE];$/;" m struct:ias_platform_info_blob_t -latest_psda_svn src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t latest_psda_svn[PSDA_SVN_SIZE];$/;" m struct:ias_platform_info_blob_t -latest_pse_isvsvn src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t latest_pse_isvsvn[ISVSVN_SIZE];$/;" m struct:ias_platform_info_blob_t -lc_aes_ctr_128bit_key_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_aes_ctr_128bit_key_t[LC_AESCTR_KEY_SIZE];$/;" t -lc_aes_gcm_128bit_key_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_aes_gcm_128bit_key_t[LC_AESGCM_KEY_SIZE];$/;" t -lc_aes_gcm_128bit_tag_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_aes_gcm_128bit_tag_t[LC_AESGCM_MAC_SIZE];$/;" t -lc_cmac_128bit_key_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_cmac_128bit_key_t[LC_CMAC_KEY_SIZE];$/;" t -lc_cmac_128bit_tag_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_cmac_128bit_tag_t[LC_CMAC_MAC_SIZE];$/;" t -lc_cmac_state_handle_t src/enclave/ServiceProvider/sp_crypto.h /^typedef void* lc_cmac_state_handle_t;$/;" t -lc_ec256_dh_shared_t src/enclave/ServiceProvider/sp_crypto.h /^typedef struct lc_ec256_dh_shared_t$/;" s -lc_ec256_dh_shared_t src/enclave/ServiceProvider/sp_crypto.h /^} lc_ec256_dh_shared_t;$/;" t typeref:struct:lc_ec256_dh_shared_t -lc_ec256_private_t src/enclave/ServiceProvider/sp_crypto.h /^typedef struct lc_ec256_private_t$/;" s -lc_ec256_private_t src/enclave/ServiceProvider/sp_crypto.h /^} lc_ec256_private_t;$/;" t typeref:struct:lc_ec256_private_t -lc_ec256_public_t src/enclave/ServiceProvider/sp_crypto.h /^typedef struct lc_ec256_public_t$/;" s -lc_ec256_public_t src/enclave/ServiceProvider/sp_crypto.h /^} lc_ec256_public_t;$/;" t typeref:struct:lc_ec256_public_t -lc_ec256_signature_t src/enclave/ServiceProvider/sp_crypto.h /^typedef struct lc_ec256_signature_t$/;" s -lc_ec256_signature_t src/enclave/ServiceProvider/sp_crypto.h /^} lc_ec256_signature_t;$/;" t typeref:struct:lc_ec256_signature_t -lc_ec_dh_shared_t src/enclave/ServiceProvider/ecp.h /^} lc_ec_dh_shared_t;$/;" t typeref:struct:sample_ec_dh_shared_t -lc_ecc256_close_context src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ecc256_close_context(lc_ecc_state_handle_t ecc_handle) {$/;" f -lc_ecc256_compute_shared_dhkey src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ecc256_compute_shared_dhkey(lc_ec256_private_t *p_private_b,$/;" f -lc_ecc256_create_key_pair src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ecc256_create_key_pair(lc_ec256_private_t *p_private,$/;" f -lc_ecc256_open_context src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ecc256_open_context(lc_ecc_state_handle_t* ecc_handle) {$/;" f -lc_ecc_state_handle_t src/enclave/ServiceProvider/sp_crypto.h /^typedef void* lc_ecc_state_handle_t;$/;" t -lc_ecdsa_sign src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ecdsa_sign(const uint8_t *p_data,$/;" f -lc_rijndael128GCM_decrypt src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_rijndael128GCM_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *aad,$/;" f -lc_rijndael128GCM_encrypt src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_rijndael128GCM_encrypt(const lc_aes_gcm_128bit_key_t *p_key,$/;" f -lc_rijndael128_cmac_msg src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_rijndael128_cmac_msg(const lc_cmac_128bit_key_t *p_key,$/;" f -lc_sha256_close src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_sha256_close(lc_sha_state_handle_t sha_handle) {$/;" f -lc_sha256_get_hash src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_sha256_get_hash(lc_sha_state_handle_t sha_handle, lc_sha256_hash_t *p_hash) {$/;" f -lc_sha256_hash_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_sha256_hash_t[LC_SHA256_HASH_SIZE];$/;" t -lc_sha256_init src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_sha256_init(lc_sha_state_handle_t* p_sha_handle) {$/;" f -lc_sha256_update src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_sha256_update(const uint8_t *p_src, uint32_t src_len, lc_sha_state_handle_t sha_handle) {$/;" f -lc_sha_state_handle_t src/enclave/ServiceProvider/sp_crypto.h /^typedef SHA256_CTX* lc_sha_state_handle_t;$/;" t -lc_ssl2sgx src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ssl2sgx(EC_KEY *ssl_key,$/;" f -lc_status_t src/enclave/ServiceProvider/sp_crypto.h /^typedef enum lc_status_t {$/;" g -lc_status_t src/enclave/ServiceProvider/sp_crypto.h /^} lc_status_t;$/;" t typeref:enum:lc_status_t -left_key_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> left_key_evaluators;$/;" m class:FlatbuffersJoinExprEvaluator -leftover_plaintext src/enclave/Enclave/Crypto.h /^ uint8_t leftover_plaintext[AES_BLOCK_SIZE];$/;" m class:StreamCipher -leftover_plaintext src/enclave/Enclave/Crypto.h /^ uint8_t leftover_plaintext[AES_BLOCK_SIZE];$/;" m class:StreamDecipher -leftover_plaintext_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *leftover_plaintext_ptr;$/;" m class:StreamDecipher -leftover_plaintext_size src/enclave/Enclave/Crypto.h /^ uint32_t leftover_plaintext_size;$/;" m class:StreamCipher -leftover_plaintext_size src/enclave/Enclave/Crypto.h /^ uint32_t leftover_plaintext_size;$/;" m class:StreamDecipher -less_than src/enclave/Enclave/ExpressionEvaluation.h /^ bool less_than(const tuix::Row *row1, const tuix::Row *row2) {$/;" f class:FlatbuffersSortOrderEvaluator -m_len src/enclave/Enclave/sgxaes.h /^ size_t m_len;$/;" m struct:AesGcm -mac src/enclave/Enclave/Crypto.cpp /^void MAC::mac(uint8_t *mac_ptr, uint32_t len) {$/;" f class:MAC -mac src/enclave/ServiceProvider/remote_attestation_result.h /^ lc_cmac_128bit_tag_t mac; \/* mac_smk(attestation_status)*\/$/;" m struct:sample_ra_att_result_msg_t -mac src/enclave/ServiceProvider/service_provider.h /^ sample_mac_t mac; \/* mac_smk(g_b||spid||quote_type||$/;" m struct:sample_ra_msg2_t -mac src/enclave/ServiceProvider/service_provider.h /^ sample_mac_t mac; \/* mac_smk(g_a||ps_sec_prop||quote)*\/$/;" m struct:sample_ra_msg3_t -mac_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *mac_ptr;$/;" m class:StreamCipher -mac_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *mac_ptr;$/;" m class:StreamDecipher -main build/sbt /^main () {$/;" f -main data/disease/synth_disease_data.py /^def main():$/;" f -main src/enclave/App/App.cpp /^int SGX_CDECL main(int argc, char *argv[])$/;" f -main src/enclave/ServiceProvider/Main.cpp /^int main(int argc, char **argv) {$/;" f -mainFiltered build/sbt /^mainFiltered () {$/;" f -make_url build/sbt /^make_url () {$/;" f -maybe_finish_block src/enclave/Enclave/Flatbuffers.h /^ void maybe_finish_block() {$/;" f class:FlatbuffersRowWriter -memcpy_s src/enclave/Common/common.h /^inline int memcpy_s(void *dest,$/;" f -mk_key src/enclave/ServiceProvider/service_provider.cpp /^ lc_aes_gcm_128bit_key_t mk_key; \/\/ Shared secret key for generating MAC's$/;" m struct:_sp_db_item_t file: -mr_enclave src/enclave/ServiceProvider/ias_ra.h /^ sample_measurement_t mr_enclave; \/\/ ( 64) The value of the enclave's$/;" m struct:sample_report_body_t -mr_reserved1 src/enclave/ServiceProvider/ias_ra.h /^ sample_measurement_t mr_reserved1; \/\/ (192)$/;" m struct:sample_report_body_t -mr_reserved2 src/enclave/ServiceProvider/ias_ra.h /^ sample_measurement_t mr_reserved2; \/\/ (224)$/;" m struct:sample_report_body_t -mr_signer src/enclave/ServiceProvider/ias_ra.h /^ sample_measurement_t mr_signer; \/\/ (128) The value of the enclave's$/;" m struct:sample_report_body_t -msg src/enclave/App/App.cpp /^ const char *msg;$/;" m struct:_sgx_errlist_t file: -msg1_sample1 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg1_sample1[] =$/;" v -msg1_sample2 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg1_sample2[] =$/;" v -msg2_sample1 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg2_sample1[] =$/;" v -msg2_sample2 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg2_sample2[] =$/;" v -msg3_sample1 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg3_sample1[MSG3_BODY_SIZE] = $/;" v -msg3_sample2 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg3_sample2[MSG3_BODY_SIZE] = $/;" v -nOptions src/enclave/Include/jni.h /^ jint nOptions;$/;" m struct:JavaVMInitArgs -name src/enclave/Include/jni.h /^ char *name;$/;" m struct:JavaVMAttachArgs -name src/enclave/Include/jni.h /^ char *name;$/;" m struct:__anon1 -name src/enclave/ServiceProvider/ias_ra.h /^ uint8_t name[32];$/;" m struct:sample_basename_t -name_max_length data/disease/synth_disease_data.py /^name_max_length = 16$/;" v -name_min_length data/disease/synth_disease_data.py /^name_min_length = 3$/;" v -nb src/enclave/Enclave/sgxaes.h /^ uint32_t nb;$/;" m struct:KeySchedule -next src/enclave/Enclave/Flatbuffers.h /^ const tuix::Row *next() {$/;" f class:EncryptedBlockToRowReader -next src/enclave/Enclave/Flatbuffers.h /^ const tuix::Row *next() {$/;" f class:EncryptedBlocksToRowReader -next_from_run src/enclave/Enclave/Flatbuffers.h /^ const tuix::Row *next_from_run(uint32_t run_idx) {$/;" f class:SortedRunsReader -non_oblivious_aggregate_step1 src/enclave/Enclave/Aggregate.cpp /^void non_oblivious_aggregate_step1($/;" f -non_oblivious_aggregate_step2 src/enclave/Enclave/Aggregate.cpp /^void non_oblivious_aggregate_step2($/;" f -non_oblivious_sort_merge_join src/enclave/Enclave/Join.cpp /^void non_oblivious_sort_merge_join($/;" f -nr src/enclave/Enclave/sgxaes.h /^ uint32_t nr;$/;" m struct:KeySchedule -num_rows src/enclave/Enclave/Flatbuffers.h /^ uint32_t num_rows() {$/;" f class:EncryptedBlocksToRowReader -num_runs src/enclave/Enclave/Flatbuffers.h /^ uint32_t num_runs() {$/;" f class:SortedRunsReader -ocall_exit src/enclave/App/App.cpp /^void ocall_exit(int exit_code) {$/;" f -ocall_free src/enclave/App/App.cpp /^void ocall_free(uint8_t *buf) {$/;" f -ocall_malloc src/enclave/App/App.cpp /^void ocall_malloc(size_t size, uint8_t **ret) {$/;" f -ocall_print_string src/enclave/App/App.cpp /^void ocall_print_string(const char *str)$/;" f -onSbtRunnerExit build/sbt /^onSbtRunnerExit() {$/;" f -operator double src/enclave/Enclave/Flatbuffers.h /^ explicit operator double() const { return days_since_epoch; }$/;" f class:Date -operator float src/enclave/Enclave/Flatbuffers.h /^ explicit operator float() const { return days_since_epoch; }$/;" f class:Date -operator int32_t src/enclave/Enclave/Flatbuffers.h /^ explicit operator int32_t() const { return days_since_epoch; }$/;" f class:Date -operator int64_t src/enclave/Enclave/Flatbuffers.h /^ explicit operator int64_t() const { return days_since_epoch; }$/;" f class:Date -optionString src/enclave/Include/jni.h /^ char *optionString;$/;" m struct:JavaVMOption -options src/enclave/Include/jni.h /^ JavaVMOption *options;$/;" m struct:JavaVMInitArgs -output_buffer src/enclave/Enclave/Flatbuffers.h /^ std::unique_ptr output_buffer() {$/;" f class:FlatbuffersRowWriter -output_num_rows src/enclave/Enclave/Flatbuffers.h /^ uint32_t output_num_rows() {$/;" f class:FlatbuffersRowWriter -output_size src/enclave/Enclave/Flatbuffers.h /^ size_t output_size() {$/;" f class:FlatbuffersRowWriter -partition_for_sort src/enclave/Enclave/Sort.cpp /^void partition_for_sort(uint8_t *sort_order, size_t sort_order_length,$/;" f -payload src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t payload[32]; \/* 32: Ciphertext of the payload; this should be the secret key*\/$/;" m struct:sp_aes_gcm_data_t -payload_size src/enclave/ServiceProvider/remote_attestation_result.h /^ uint32_t payload_size; \/* 0: Size of the payload which is*\/$/;" m struct:sp_aes_gcm_data_t -payload_tag src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t payload_tag[SAMPLE_SP_TAG_SIZE]; \/* 16: AES-GMAC of the plain text, payload, and the sizes*\/$/;" m struct:sp_aes_gcm_data_t -perf src/enclave/Common/common.h /^#define perf(/;" d -performance_rekey_gid src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t performance_rekey_gid[GID_SIZE];$/;" m struct:ias_platform_info_blob_t -platform_info_blob src/enclave/ServiceProvider/remote_attestation_result.h /^ ias_platform_info_blob_t platform_info_blob;$/;" m struct:sample_ra_att_result_msg_t -policy_report src/enclave/ServiceProvider/ias_ra.h /^ uint8_t policy_report[];\/\/ IAS_Q: Why does it specify a$/;" m struct:_ias_att_report_t -policy_report_size src/enclave/ServiceProvider/ias_ra.h /^ uint32_t policy_report_size;$/;" m struct:_ias_att_report_t -print src/enclave/Enclave/Flatbuffers.cpp /^void print(const tuix::Field *field) {$/;" f -print src/enclave/Enclave/Flatbuffers.cpp /^void print(const tuix::Row *in) {$/;" f -print_bytes src/enclave/Enclave/util.cpp /^void print_bytes(uint8_t *ptr, uint32_t len) {$/;" f -print_ec_key src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t print_ec_key(EC_KEY *ec_key) {$/;" f -print_error_message src/enclave/App/App.cpp /^void print_error_message(sgx_status_t ret)$/;" f -print_hex src/enclave/Common/common.h /^inline void print_hex(unsigned char *mem, uint32_t len) {$/;" f -print_priv_key src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t print_priv_key(lc_ec256_private_t p_private) {$/;" f -print_pub_key src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t print_pub_key(lc_ec256_public_t p_public) {$/;" f -printf src/enclave/Enclave/util.cpp /^int printf(const char *fmt, ...) {$/;" f -process_args build/sbt /^process_args () {$/;" f -project src/enclave/Enclave/Project.cpp /^void project(uint8_t *project_list, size_t project_list_length,$/;" f -ps_sec_prop src/enclave/ServiceProvider/service_provider.cpp /^ sample_ps_sec_prop_desc_t ps_sec_prop;$/;" m struct:_sp_db_item_t file: -ps_sec_prop src/enclave/ServiceProvider/service_provider.h /^ sample_ps_sec_prop_desc_t ps_sec_prop;$/;" m struct:sample_ra_msg3_t -pse_evaluation_status src/enclave/ServiceProvider/remote_attestation_result.h /^ uint16_t pse_evaluation_status;$/;" m struct:ias_platform_info_blob_t -pse_status src/enclave/ServiceProvider/ias_ra.h /^ ias_pse_status_t pse_status;$/;" m struct:_ias_att_report_t -put_secret_data src/enclave/Enclave/isv_enclave.cpp /^sgx_status_t put_secret_data($/;" f -qe_svn src/enclave/ServiceProvider/ias_ra.h /^ sample_isv_svn_t qe_svn; \/\/ 8$/;" m struct:sample_quote_t -query_sgx_status src/enclave/App/App.cpp /^int query_sgx_status()$/;" f -quote src/enclave/ServiceProvider/service_provider.h /^ uint8_t quote[];$/;" m struct:sample_ra_msg3_t -quote_type src/enclave/ServiceProvider/service_provider.h /^ uint16_t quote_type; \/* unlinkable Quote(0) or linkable Quote(0) in little endian*\/$/;" m struct:sample_ra_msg2_t -r src/enclave/Enclave/Flatbuffers.h /^ EncryptedBlockToRowReader r;$/;" m class:EncryptedBlocksToRowReader -r src/enclave/ServiceProvider/ecp.h /^ uint8_t r[SAMPLE_ECP_KEY_SIZE];$/;" m struct:sample_ec_priv_t -r src/enclave/ServiceProvider/sp_crypto.h /^ uint8_t r[LC_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_private_t -r src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint8_t r[SAMPLE_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_private_t -ra_msg_type_t src/enclave/ServiceProvider/service_provider.h /^} ra_msg_type_t;$/;" t typeref:enum:_ra_msg_type_t -ra_samp_request_header_t src/enclave/ServiceProvider/service_provider.h /^} ra_samp_request_header_t;$/;" t typeref:struct:_ra_samp_request_header_t -ra_samp_response_header_t src/enclave/ServiceProvider/service_provider.h /^} ra_samp_response_header_t;$/;" t typeref:struct:_ra_samp_response_header_t -rand src/enclave/ServiceProvider/ias_ra.h /^ uint8_t rand[16];$/;" m struct:sample_quote_nonce_t -random data/disease/synth_disease_data.py /^import random$/;" i -randomword data/disease/synth_disease_data.py /^def randomword():$/;" f -readConfigFile build/sbt /^readConfigFile() {$/;" f -read_secret_key src/enclave/ServiceProvider/service_provider.cpp /^int read_secret_key(const char *filename,$/;" f -report_body src/enclave/ServiceProvider/ias_ra.h /^ sample_report_body_t report_body; \/\/ 48$/;" m struct:sample_quote_t -report_data src/enclave/ServiceProvider/ias_ra.h /^ sample_report_data_t report_data; \/\/ (320) Data provided by the user$/;" m struct:sample_report_body_t -require_arg build/sbt /^ require_arg () {$/;" f -reserved src/enclave/ServiceProvider/ias_ra.h /^ uint8_t reserved[6]; \/\/ 10$/;" m struct:sample_quote_t -reserved src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t reserved[12]; \/* 4: Reserved bits*\/$/;" m struct:sp_aes_gcm_data_t -reserved0 src/enclave/Include/jni.h /^ void *reserved0;$/;" m struct:JNIInvokeInterface_ -reserved0 src/enclave/Include/jni.h /^ void *reserved0;$/;" m struct:JNINativeInterface_ -reserved1 src/enclave/Include/jni.h /^ void *reserved1;$/;" m struct:JNIInvokeInterface_ -reserved1 src/enclave/Include/jni.h /^ void *reserved1;$/;" m struct:JNINativeInterface_ -reserved1 src/enclave/ServiceProvider/ias_ra.h /^ uint8_t reserved1[32]; \/\/ ( 16)$/;" m struct:sample_report_body_t -reserved2 src/enclave/Include/jni.h /^ void *reserved2;$/;" m struct:JNIInvokeInterface_ -reserved2 src/enclave/Include/jni.h /^ void *reserved2;$/;" m struct:JNINativeInterface_ -reserved2 src/enclave/ServiceProvider/ias_ra.h /^ uint8_t reserved2[32]; \/\/ ( 96)$/;" m struct:sample_report_body_t -reserved3 src/enclave/Include/jni.h /^ void *reserved3;$/;" m struct:JNINativeInterface_ -reserved3 src/enclave/ServiceProvider/ias_ra.h /^ uint8_t reserved3[32]; \/\/ (160)$/;" m struct:sample_report_body_t -reserved4 src/enclave/ServiceProvider/ias_ra.h /^ uint8_t reserved4[60]; \/\/ (260)$/;" m struct:sample_report_body_t -reset src/enclave/Enclave/Crypto.cpp /^void StreamCipher::reset(uint8_t *new_ciphertext_ptr) {$/;" f class:StreamCipher -reset src/enclave/Enclave/Crypto.cpp /^void StreamDecipher::reset(uint8_t *new_ciphertext_ptr, uint32_t enc_size) {$/;" f class:StreamDecipher -reset src/enclave/Enclave/Flatbuffers.h /^ void reset(const tuix::EncryptedBlock *encrypted_block) {$/;" f class:EncryptedBlockToRowReader -reset src/enclave/Enclave/Flatbuffers.h /^ void reset(uint8_t *buf, size_t len) {$/;" f class:EncryptedBlockToRowReader -reset src/enclave/Enclave/Flatbuffers.h /^ void reset(uint8_t *buf, size_t len) {$/;" f class:SortedRunsReader -reset_group src/enclave/Enclave/ExpressionEvaluation.h /^ void reset_group() {$/;" f class:FlatbuffersAggOpEvaluator -ret src/enclave/Enclave/sgxaes_asm.S /^ret$/;" l -reverse_endian src/enclave/ServiceProvider/sp_crypto.cpp /^void reverse_endian(uint8_t *input, uint8_t *output, uint32_t len) {$/;" f -reverse_endian_by_32 src/enclave/ServiceProvider/sp_crypto.cpp /^void reverse_endian_by_32(uint8_t *input, uint8_t *output, uint32_t len) {$/;" f -revocation_reason src/enclave/ServiceProvider/ias_ra.h /^ uint32_t revocation_reason;$/;" m struct:_ias_att_report_t -right_key_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> right_key_evaluators;$/;" m class:FlatbuffersJoinExprEvaluator -row src/enclave/Enclave/Flatbuffers.h /^ const tuix::Row *row;$/;" m class:FlatbuffersTemporaryRow -row_idx src/enclave/Enclave/Flatbuffers.h /^ uint32_t row_idx;$/;" m class:EncryptedBlockToRowReader -rows src/enclave/Enclave/Flatbuffers.h /^ const tuix::Rows *rows;$/;" m class:EncryptedBlockToRowReader -rows_buf src/enclave/Enclave/Flatbuffers.h /^ std::unique_ptr rows_buf;$/;" m class:EncryptedBlockToRowReader -rows_vector src/enclave/Enclave/Flatbuffers.h /^ std::vector> rows_vector;$/;" m class:FlatbuffersRowWriter -run_has_next src/enclave/Enclave/Flatbuffers.h /^ bool run_has_next(uint32_t run_idx) {$/;" f class:SortedRunsReader -run_idx src/enclave/Enclave/Sort.cpp /^ uint32_t run_idx;$/;" m class:MergeItem file: -run_readers src/enclave/Enclave/Flatbuffers.h /^ std::vector run_readers;$/;" m class:SortedRunsReader -s src/enclave/Include/jni.h /^ jshort s;$/;" m union:jvalue -s src/enclave/ServiceProvider/ecp.h /^ uint8_t s[SAMPLE_ECP_KEY_SIZE];$/;" m struct:sample_ec_dh_shared_t -s src/enclave/ServiceProvider/sp_crypto.h /^ uint8_t s[LC_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_dh_shared_t -s src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint8_t s[SAMPLE_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_dh_shared_t -sample src/enclave/Enclave/Sort.cpp /^void sample(uint8_t *input_rows, size_t input_rows_length,$/;" f -sample_aes_ctr_128bit_key_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_aes_ctr_128bit_key_t[SAMPLE_AESCTR_KEY_SIZE];$/;" t -sample_aes_gcm_128bit_key_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_aes_gcm_128bit_key_t[SAMPLE_AESGCM_KEY_SIZE];$/;" t -sample_aes_gcm_128bit_tag_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_aes_gcm_128bit_tag_t[SAMPLE_AESGCM_MAC_SIZE];$/;" t -sample_attributes_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_attributes_t$/;" s -sample_attributes_t src/enclave/ServiceProvider/ias_ra.h /^} sample_attributes_t;$/;" t typeref:struct:sample_attributes_t -sample_basename_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_basename_t$/;" s -sample_basename_t src/enclave/ServiceProvider/ias_ra.h /^} sample_basename_t;$/;" t typeref:struct:sample_basename_t -sample_cmac_128bit_key_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_cmac_128bit_key_t[SAMPLE_CMAC_KEY_SIZE];$/;" t -sample_cmac_128bit_tag_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_cmac_128bit_tag_t[SAMPLE_CMAC_MAC_SIZE];$/;" t -sample_cmac_state_handle_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef void* sample_cmac_state_handle_t;$/;" t -sample_cpu_svn_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint8_t sample_cpu_svn_t[SAMPLE_CPUSVN_SIZE];$/;" t -sample_derive_key_type_t src/enclave/ServiceProvider/ecp.h /^} sample_derive_key_type_t;$/;" t typeref:enum:_sample_derive_key_type_t -sample_ec256_dh_shared_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef struct sample_ec256_dh_shared_t$/;" s -sample_ec256_dh_shared_t src/enclave/sample_libcrypto/sample_libcrypto.h /^} sample_ec256_dh_shared_t;$/;" t typeref:struct:sample_ec256_dh_shared_t -sample_ec256_private_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef struct sample_ec256_private_t$/;" s -sample_ec256_private_t src/enclave/sample_libcrypto/sample_libcrypto.h /^} sample_ec256_private_t;$/;" t typeref:struct:sample_ec256_private_t -sample_ec256_public_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef struct sample_ec256_public_t$/;" s -sample_ec256_public_t src/enclave/sample_libcrypto/sample_libcrypto.h /^} sample_ec256_public_t;$/;" t typeref:struct:sample_ec256_public_t -sample_ec256_signature_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef struct sample_ec256_signature_t$/;" s -sample_ec256_signature_t src/enclave/sample_libcrypto/sample_libcrypto.h /^} sample_ec256_signature_t;$/;" t typeref:struct:sample_ec256_signature_t -sample_ec_dh_shared_t src/enclave/ServiceProvider/ecp.h /^typedef struct sample_ec_dh_shared_t$/;" s -sample_ec_key_128bit_t src/enclave/ServiceProvider/ecp.h /^typedef uint8_t sample_ec_key_128bit_t[16];$/;" t -sample_ec_priv_t src/enclave/ServiceProvider/ecp.h /^typedef struct sample_ec_priv_t$/;" s -sample_ec_priv_t src/enclave/ServiceProvider/ecp.h /^} sample_ec_priv_t;$/;" t typeref:struct:sample_ec_priv_t -sample_ec_pub_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ec_pub_t$/;" s -sample_ec_pub_t src/enclave/ServiceProvider/service_provider.h /^} sample_ec_pub_t;$/;" t typeref:struct:sample_ec_pub_t -sample_ec_sign256_t src/enclave/ServiceProvider/remote_attestation_result.h /^typedef struct sample_ec_sign256_t$/;" s -sample_ec_sign256_t src/enclave/ServiceProvider/remote_attestation_result.h /^} sample_ec_sign256_t;$/;" t typeref:struct:sample_ec_sign256_t -sample_ecc_state_handle_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef void* sample_ecc_state_handle_t;$/;" t -sample_enroll src/enclave/ServiceProvider/service_provider.h /^ typedef int (*sample_enroll)(int sp_credentials, sample_spid_t* spid,$/;" t -sample_epid_group_id_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint8_t sample_epid_group_id_t[4];$/;" t -sample_epid_group_status src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t sample_epid_group_status;$/;" m struct:ias_platform_info_blob_t -sample_extended_epid_group src/enclave/ServiceProvider/service_provider.h /^ typedef struct sample_extended_epid_group$/;" s -sample_extended_epid_group src/enclave/ServiceProvider/service_provider.h /^ } sample_extended_epid_group;$/;" t typeref:struct:sample_extended_epid_group -sample_get_sigrl src/enclave/ServiceProvider/service_provider.h /^ typedef int(*sample_get_sigrl)(const sample_epid_group_id_t gid, uint32_t* p_sig_rl_size,$/;" t -sample_isv_svn_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint16_t sample_isv_svn_t;$/;" t -sample_key_128bit_t src/enclave/ServiceProvider/service_provider.h /^typedef uint8_t sample_key_128bit_t[16];$/;" t -sample_mac_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint8_t sample_mac_t[SAMPLE_MAC_SIZE];$/;" t -sample_mac_t src/enclave/ServiceProvider/remote_attestation_result.h /^typedef uint8_t sample_mac_t[SAMPLE_MAC_SIZE];$/;" t -sample_measurement_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint8_t sample_measurement_t[SAMPLE_HASH_SIZE];$/;" t -sample_prod_id_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint16_t sample_prod_id_t;$/;" t -sample_ps_sec_prop_desc src/enclave/ServiceProvider/service_provider.h /^ uint8_t sample_ps_sec_prop_desc[256];$/;" m struct:sample_ps_sec_prop_desc_t -sample_ps_sec_prop_desc_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ps_sec_prop_desc_t$/;" s -sample_ps_sec_prop_desc_t src/enclave/ServiceProvider/service_provider.h /^} sample_ps_sec_prop_desc_t;$/;" t typeref:struct:sample_ps_sec_prop_desc_t -sample_quote_nonce_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_quote_nonce_t$/;" s -sample_quote_nonce_t src/enclave/ServiceProvider/ias_ra.h /^} sample_quote_nonce_t;$/;" t typeref:struct:sample_quote_nonce_t -sample_quote_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_quote_t {$/;" s -sample_quote_t src/enclave/ServiceProvider/ias_ra.h /^} sample_quote_t;$/;" t typeref:struct:sample_quote_t -sample_ra_att_result_msg_t src/enclave/ServiceProvider/remote_attestation_result.h /^typedef struct sample_ra_att_result_msg_t {$/;" s -sample_ra_att_result_msg_t src/enclave/ServiceProvider/remote_attestation_result.h /^} sample_ra_att_result_msg_t;$/;" t typeref:struct:sample_ra_att_result_msg_t -sample_ra_context_t src/enclave/ServiceProvider/service_provider.h /^typedef uint32_t sample_ra_context_t;$/;" t -sample_ra_key_128_t src/enclave/ServiceProvider/service_provider.h /^typedef sample_key_128bit_t sample_ra_key_128_t;$/;" t -sample_ra_msg0_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ra_msg0_t$/;" s -sample_ra_msg0_t src/enclave/ServiceProvider/service_provider.h /^} sample_ra_msg0_t;$/;" t typeref:struct:sample_ra_msg0_t -sample_ra_msg1_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ra_msg1_t$/;" s -sample_ra_msg1_t src/enclave/ServiceProvider/service_provider.h /^} sample_ra_msg1_t;$/;" t typeref:struct:sample_ra_msg1_t -sample_ra_msg2_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ra_msg2_t$/;" s -sample_ra_msg2_t src/enclave/ServiceProvider/service_provider.h /^} sample_ra_msg2_t;$/;" t typeref:struct:sample_ra_msg2_t -sample_ra_msg3_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ra_msg3_t$/;" s -sample_ra_msg3_t src/enclave/ServiceProvider/service_provider.h /^} sample_ra_msg3_t;$/;" t typeref:struct:sample_ra_msg3_t -sample_report_body_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_report_body_t {$/;" s -sample_report_body_t src/enclave/ServiceProvider/ias_ra.h /^} sample_report_body_t;$/;" t typeref:struct:sample_report_body_t -sample_report_data_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint8_t sample_report_data_t[SAMPLE_REPORT_DATA_SIZE];$/;" t -sample_sha256_hash_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_sha256_hash_t[SAMPLE_SHA256_HASH_SIZE];$/;" t -sample_sha_state_handle_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef void* sample_sha_state_handle_t;$/;" t -sample_spid_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_spid_t$/;" s -sample_spid_t src/enclave/ServiceProvider/ias_ra.h /^} sample_spid_t;$/;" t typeref:struct:sample_spid_t -sample_status_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef enum sample_status_t$/;" g -sample_status_t src/enclave/sample_libcrypto/sample_libcrypto.h /^} sample_status_t;$/;" t typeref:enum:sample_status_t -sample_tcb_evaluation_status src/enclave/ServiceProvider/remote_attestation_result.h /^ uint16_t sample_tcb_evaluation_status;$/;" m struct:ias_platform_info_blob_t -sample_verify_attestation_evidence src/enclave/ServiceProvider/service_provider.h /^ typedef int(*sample_verify_attestation_evidence)(sample_quote_t* p_isv_quote,$/;" t -scan_collect_last_primary src/enclave/Enclave/Join.cpp /^void scan_collect_last_primary($/;" f -scoped_timer src/enclave/App/App.cpp /^ scoped_timer(uint64_t *total_time) {$/;" f class:scoped_timer -scoped_timer src/enclave/App/App.cpp /^class scoped_timer {$/;" c file: -secret src/enclave/ServiceProvider/remote_attestation_result.h /^ sp_aes_gcm_data_t secret;$/;" m struct:sample_ra_att_result_msg_t -secs_to_tm src/enclave/Enclave/util.cpp /^int secs_to_tm(long long t, struct tm *tm) {$/;" f -set src/enclave/Enclave/ExpressionEvaluation.h /^ void set(const tuix::Row *agg_row) {$/;" f class:FlatbuffersAggOpEvaluator -set src/enclave/Enclave/Flatbuffers.h /^ void set(const tuix::Row *row) {$/;" f class:FlatbuffersTemporaryRow -setJavaHome build/sbt /^setJavaHome () {$/;" f -setScalaVersion build/sbt /^setScalaVersion () {$/;" f -setThisBuild build/sbt /^setThisBuild () {$/;" f -setTraceLevel build/sbt /^setTraceLevel() {$/;" f -set_sbt_version build/sbt /^set_sbt_version () {$/;" f -sgx_check src/enclave/App/App.cpp /^#define sgx_check(/;" d file: -sgx_check_quiet src/enclave/App/App.cpp /^void sgx_check_quiet(const char* message, sgx_status_t ret)$/;" f -sgx_errlist src/enclave/App/App.cpp /^static sgx_errlist_t sgx_errlist[] = {$/;" v file: -sgx_errlist_t src/enclave/App/App.cpp /^} sgx_errlist_t;$/;" t typeref:struct:_sgx_errlist_t file: -shared_secret src/enclave/Enclave/isv_enclave.cpp /^ sgx_ec256_dh_shared_t shared_secret;$/;" m struct:_hash_buffer_t file: -shared_secret src/enclave/ServiceProvider/ecp.cpp /^ sgx_ec_dh_shared_t shared_secret;$/;" m struct:_hash_buffer_t file: -shouldFilter build/sbt /^shouldFilter () { [[ -f ~\/.sbtignore ]] && ! egrep -q '\\b(shell|console|consoleProject)\\b' <<<"${residual_args[@]}"; }$/;" f -sig_rl src/enclave/ServiceProvider/service_provider.h /^ uint8_t sig_rl[];$/;" m struct:sample_ra_msg2_t -sig_rl_size src/enclave/ServiceProvider/service_provider.h /^ uint32_t sig_rl_size;$/;" m struct:sample_ra_msg2_t -sign_gb_ga src/enclave/ServiceProvider/service_provider.h /^ sample_ec_sign256_t sign_gb_ga; \/* In little endian*\/$/;" m struct:sample_ra_msg2_t -sign_type src/enclave/ServiceProvider/ias_ra.h /^ uint16_t sign_type; \/\/ 2$/;" m struct:sample_quote_t -signature src/enclave/Include/jni.h /^ char *signature;$/;" m struct:__anon1 -signature src/enclave/ServiceProvider/ias_ra.h /^ uint8_t signature[]; \/\/ 436$/;" m struct:sample_quote_t -signature src/enclave/ServiceProvider/remote_attestation_result.h /^ sample_ec_sign256_t signature;$/;" m struct:ias_platform_info_blob_t -signature_len src/enclave/ServiceProvider/ias_ra.h /^ uint32_t signature_len; \/\/ 432$/;" m struct:sample_quote_t -size src/enclave/ServiceProvider/service_provider.h /^ uint32_t size; \/*size of the response body*\/$/;" m struct:_ra_samp_response_header_t -size src/enclave/ServiceProvider/service_provider.h /^ uint32_t size; \/*size of request body*\/$/;" m struct:_ra_samp_request_header_t -sk_key src/enclave/ServiceProvider/service_provider.cpp /^ lc_aes_gcm_128bit_key_t sk_key; \/\/ Shared secret key for encryption$/;" m struct:_sp_db_item_t file: -smk_key src/enclave/ServiceProvider/service_provider.cpp /^ lc_aes_gcm_128bit_key_t smk_key; \/\/ Used only for SIGMA protocol$/;" m struct:_sp_db_item_t file: -sort_expr src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::SortExpr *sort_expr;$/;" m class:FlatbuffersSortOrderEvaluator -sort_order_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> sort_order_evaluators;$/;" m class:FlatbuffersSortOrderEvaluator -sort_single_encrypted_block src/enclave/Enclave/Sort.cpp /^flatbuffers::Offset sort_single_encrypted_block($/;" f -sorted_runs src/enclave/Enclave/Flatbuffers.h /^ const tuix::SortedRuns *sorted_runs;$/;" m class:SortedRunsReader -sp_aes_gcm_data_t src/enclave/ServiceProvider/remote_attestation_result.h /^typedef struct sp_aes_gcm_data_t {$/;" s -sp_aes_gcm_data_t src/enclave/ServiceProvider/remote_attestation_result.h /^} sp_aes_gcm_data_t;$/;" t typeref:struct:sp_aes_gcm_data_t -sp_db_item_t src/enclave/ServiceProvider/service_provider.cpp /^} sp_db_item_t;$/;" t typeref:struct:_sp_db_item_t file: -sp_ra_msg_status_t src/enclave/ServiceProvider/service_provider.h /^} sp_ra_msg_status_t;$/;" t typeref:enum:__anon5 -sp_ra_proc_msg0_req src/enclave/ServiceProvider/service_provider.cpp /^int sp_ra_proc_msg0_req(uint32_t extended_epid_group_id) {$/;" f -sp_ra_proc_msg1_req src/enclave/ServiceProvider/service_provider.cpp /^int sp_ra_proc_msg1_req(sgx_ra_msg1_t *p_msg1,$/;" f -sp_ra_proc_msg3_req src/enclave/ServiceProvider/service_provider.cpp /^int sp_ra_proc_msg3_req(sgx_ra_msg3_t *p_msg3,$/;" f -spid src/enclave/ServiceProvider/service_provider.h /^ sample_spid_t spid; \/* In little endian*\/$/;" m struct:sample_ra_msg2_t -state src/enclave/Enclave/sgxaes.h /^ State state;$/;" m struct:AesGcm -status src/enclave/ServiceProvider/ias_ra.h /^ ias_quote_status_t status;$/;" m struct:_ias_att_report_t -status src/enclave/ServiceProvider/service_provider.h /^ uint8_t status[2];$/;" m struct:_ra_samp_response_header_t -std src/enclave/Common/common.h /^namespace std {$/;" n -std src/enclave/Enclave/util.h /^namespace std {$/;" n -str_MK src/enclave/ServiceProvider/ecp.cpp /^const char str_MK[] = "MK";$/;" v -str_SK src/enclave/ServiceProvider/ecp.cpp /^const char str_SK[] = "SK";$/;" v -str_SMK src/enclave/ServiceProvider/ecp.cpp /^const char str_SMK[] = "SMK";$/;" v -str_VK src/enclave/ServiceProvider/ecp.cpp /^const char str_VK[] = "VK";$/;" v -string data/disease/synth_disease_data.py /^import string$/;" i -sug src/enclave/App/App.cpp /^ const char *sug; \/* Suggestion *\/$/;" m struct:_sgx_errlist_t file: -sys data/disease/synth_disease_data.py /^import sys$/;" i -t src/enclave/Enclave/sgxaes.h /^ unsigned char t[16];$/;" m struct:Tag -t src/enclave/Enclave/sgxaes.h /^ unsigned char t[AES_BLOCK_SIZE];$/;" m struct:GcmContext -tag src/enclave/Enclave/sgxaes.cpp /^Tag AesGcm::tag() const {$/;" f class:AesGcm -time_end src/enclave/App/App.cpp /^ uint64_t time_start, time_end;$/;" m class:scoped_timer file: -time_start src/enclave/App/App.cpp /^ uint64_t time_start, time_end;$/;" m class:scoped_timer file: -to_string src/enclave/Enclave/Flatbuffers.cpp /^std::string to_string(const Date &date) {$/;" f -total_cipher_size src/enclave/Enclave/Crypto.h /^ uint32_t total_cipher_size;$/;" m class:StreamDecipher -total_num_rows src/enclave/Enclave/Flatbuffers.h /^ uint32_t total_num_rows;$/;" m class:FlatbuffersRowWriter -total_time src/enclave/App/App.cpp /^ uint64_t * total_time;$/;" m class:scoped_timer file: -type src/enclave/ServiceProvider/service_provider.h /^ uint8_t type; \/* set to one of ra_msg_type_t*\/$/;" m struct:_ra_samp_response_header_t -type src/enclave/ServiceProvider/service_provider.h /^ uint8_t type; \/* set to one of ra_msg_type_t*\/$/;" m struct:_ra_samp_request_header_t -untrusted_alloc src/enclave/Enclave/Flatbuffers.h /^ UntrustedMemoryAllocator untrusted_alloc;$/;" m class:FlatbuffersRowWriter -update src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector update(const tuix::Row *concat) {$/;" f class:AggregateExpressionEvaluator -update_build_props_sbt build/sbt /^update_build_props_sbt () {$/;" f -update_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> update_evaluators;$/;" m class:AggregateExpressionEvaluator -url_base build/sbt /^url_base () {$/;" f -usage build/sbt /^usage () {$/;" f -v src/enclave/Enclave/Sort.cpp /^ const tuix::Row *v;$/;" m class:MergeItem file: -verify_att_result_mac src/enclave/Enclave/isv_enclave.cpp /^sgx_status_t verify_att_result_mac(sgx_ra_context_t context,$/;" f -verify_attestation_evidence src/enclave/ServiceProvider/service_provider.h /^ sample_verify_attestation_evidence verify_attestation_evidence;$/;" m struct:sample_extended_epid_group -verify_cmac128 src/enclave/ServiceProvider/ecp.cpp /^bool verify_cmac128(lc_cmac_128bit_key_t mac_key,$/;" f -version src/enclave/Include/jni.h /^ jint version;$/;" m struct:JavaVMAttachArgs -version src/enclave/Include/jni.h /^ jint version;$/;" m struct:JavaVMInitArgs -version src/enclave/ServiceProvider/ias_ra.h /^ uint16_t version; \/\/ 0$/;" m struct:sample_quote_t -vk_key src/enclave/ServiceProvider/service_provider.cpp /^ lc_aes_gcm_128bit_key_t vk_key; \/\/ Shared secret key for the REPORT_DATA$/;" m struct:_sp_db_item_t file: -vlog build/sbt /^vlog () { [[ -n "$verbose" ]] && echoerr "$@"; }$/;" f -write src/enclave/Enclave/Flatbuffers.h /^ void write(const std::vector &row_fields) {$/;" f class:FlatbuffersRowWriter -write src/enclave/Enclave/Flatbuffers.h /^ void write(const tuix::Row *row) {$/;" f class:FlatbuffersRowWriter -write src/enclave/Enclave/Flatbuffers.h /^ void write(const tuix::Row *row1, const tuix::Row *row2) {$/;" f class:FlatbuffersRowWriter -write_encrypted_block src/enclave/Enclave/Flatbuffers.h /^ void write_encrypted_block() {$/;" f class:FlatbuffersRowWriter -write_encrypted_blocks src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Offset write_encrypted_blocks() {$/;" f class:FlatbuffersRowWriter -write_pubkey src/enclave/ServiceProvider/service_provider.cpp /^void write_pubkey(const char *filename,$/;" f -write_sorted_runs src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Offset write_sorted_runs($/;" f class:FlatbuffersRowWriter -x src/enclave/ServiceProvider/remote_attestation_result.h /^ uint32_t x[SAMPLE_NISTP256_KEY_SIZE];$/;" m struct:sample_ec_sign256_t -x src/enclave/ServiceProvider/sp_crypto.h /^ uint32_t x[LC_NISTP_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_signature_t -x src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint32_t x[SAMPLE_NISTP_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_signature_t -x0 src/enclave/Enclave/sgxaes.h /^ unsigned char x0[AES_BLOCK_SIZE];$/;" m struct:GcmContext -xfrm src/enclave/ServiceProvider/ias_ra.h /^ uint64_t xfrm;$/;" m struct:sample_attributes_t -y src/enclave/ServiceProvider/remote_attestation_result.h /^ uint32_t y[SAMPLE_NISTP256_KEY_SIZE];$/;" m struct:sample_ec_sign256_t -y src/enclave/ServiceProvider/sp_crypto.h /^ uint32_t y[LC_NISTP_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_signature_t -y src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint32_t y[SAMPLE_NISTP_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_signature_t -z src/enclave/Include/jni.h /^ jboolean z;$/;" m union:jvalue -~MAC src/enclave/Enclave/Crypto.h /^ ~MAC() {$/;" f class:MAC -~StreamCipher src/enclave/Enclave/Crypto.cpp /^StreamCipher::~StreamCipher() {$/;" f class:StreamCipher -~StreamDecipher src/enclave/Enclave/Crypto.cpp /^StreamDecipher::~StreamDecipher() {$/;" f class:StreamDecipher -~scoped_timer src/enclave/App/App.cpp /^ ~scoped_timer() {$/;" f class:scoped_timer diff --git a/type_test.txt b/type_test.txt deleted file mode 100644 index 085c4ebf6a..0000000000 --- a/type_test.txt +++ /dev/null @@ -1,27 +0,0 @@ -import org.apache.spark.sql.types._ -import org.apache.spark.sql.Row -import edu.berkeley.cs.rise.opaque.implicits._ - -import java.math.BigDecimal - - -val decimal = new BigDecimal(100000.555555) - - -val data = Seq( - Row(decimal, "dog"), - Row(decimal, "cat"), - Row(decimal, "ant")) - -val schema = StructType( - List( - StructField("decimal", DecimalType, true), - StructField("animal_type", StringType, true) - ) -) - -val df = spark.createDataFrame( - spark.sparkContext.parallelize(data), - schema -) - From 813c8331dad3f38ff98c1cfee039fd057c69f896 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Mon, 2 Nov 2020 21:09:03 +0000 Subject: [PATCH 065/101] Opaqueenv --- opaqueenv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opaqueenv b/opaqueenv index b92738aa22..3f4353b97f 100644 --- a/opaqueenv +++ b/opaqueenv @@ -1,5 +1,5 @@ -export OPAQUE_HOME=$(pwd) +export OPAQUE_HOME=/home/mc2/opaque export SPARKSGX_DATA_DIR=${OPAQUE_HOME}/data/ export PRIVATE_KEY_PATH=${OPAQUE_HOME}/private_key.pem export MODE=HARDWARE -export OE_SDK_PATH=/opt/openenclave/ \ No newline at end of file +export OE_SDK_PATH=/opt/openenclave/ From d220d1f4238d344ec01ffd474dbedd51daa75111 Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Mon, 2 Nov 2020 21:18:41 +0000 Subject: [PATCH 066/101] Clean up --- .../breast_cancer_dataset-checkpoint.ipynb | 6 - .tags | 1430 ----------------- dfEncrypted/.schema.crc | Bin 16 -> 0 bytes dfEncrypted/data/._SUCCESS.crc | Bin 8 -> 0 bytes dfEncrypted/data/.part-00000.crc | Bin 16 -> 0 bytes dfEncrypted/data/_SUCCESS | 0 dfEncrypted/data/part-00000 | Bin 566 -> 0 bytes dfEncrypted/schema | Bin 806 -> 0 bytes dfEncrypted2/.schema.crc | Bin 16 -> 0 bytes dfEncrypted2/data/._SUCCESS.crc | Bin 8 -> 0 bytes dfEncrypted2/data/.part-00000.crc | Bin 16 -> 0 bytes dfEncrypted2/data/_SUCCESS | 0 dfEncrypted2/data/part-00000 | Bin 566 -> 0 bytes dfEncrypted2/schema | Bin 806 -> 0 bytes load.scala | 15 - setup-script.sh | 14 - src/enclave/CMakeLists.txt | 4 - src/enclave/Enclave/Crypto.cpp | 11 +- src/enclave/Enclave/Filter.cpp | 1 - src/enclave/Enclave/FlatbuffersReaders.cpp | 1 - src/enclave/Enclave/FlatbuffersWriters.cpp | 1 - src/enclave/Enclave/Sort.cpp | 3 - src/enclave/Enclave/key.h | 26 - .../edu/berkeley/cs/rise/opaque/Utils.scala | 3 - .../cs/rise/opaque/execution/operators.scala | 2 - .../cs/rise/opaque/OpaqueOperatorTests.scala | 2 +- .../berkeley/cs/rise/opaque/QEDSuite.scala | 12 +- type_test.txt | 27 - 28 files changed, 9 insertions(+), 1549 deletions(-) delete mode 100644 .ipynb_checkpoints/breast_cancer_dataset-checkpoint.ipynb delete mode 100644 .tags delete mode 100644 dfEncrypted/.schema.crc delete mode 100644 dfEncrypted/data/._SUCCESS.crc delete mode 100644 dfEncrypted/data/.part-00000.crc delete mode 100644 dfEncrypted/data/_SUCCESS delete mode 100644 dfEncrypted/data/part-00000 delete mode 100644 dfEncrypted/schema delete mode 100644 dfEncrypted2/.schema.crc delete mode 100644 dfEncrypted2/data/._SUCCESS.crc delete mode 100644 dfEncrypted2/data/.part-00000.crc delete mode 100644 dfEncrypted2/data/_SUCCESS delete mode 100644 dfEncrypted2/data/part-00000 delete mode 100644 dfEncrypted2/schema delete mode 100644 load.scala delete mode 100755 setup-script.sh delete mode 100644 src/enclave/Enclave/key.h delete mode 100644 type_test.txt diff --git a/.ipynb_checkpoints/breast_cancer_dataset-checkpoint.ipynb b/.ipynb_checkpoints/breast_cancer_dataset-checkpoint.ipynb deleted file mode 100644 index 2fd64429bf..0000000000 --- a/.ipynb_checkpoints/breast_cancer_dataset-checkpoint.ipynb +++ /dev/null @@ -1,6 +0,0 @@ -{ - "cells": [], - "metadata": {}, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/.tags b/.tags deleted file mode 100644 index 73362fa771..0000000000 --- a/.tags +++ /dev/null @@ -1,1430 +0,0 @@ -!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ -!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ -!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/ -!_TAG_PROGRAM_NAME Exuberant Ctags // -!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ -!_TAG_PROGRAM_VERSION 5.8 // -AES_BLOCK_SIZE src/enclave/Enclave/sgxaes.h /^const size_t AES_BLOCK_SIZE = 16;$/;" v -AES_MAX_EXP_KEY_SIZE src/enclave/Enclave/sgxaes.h /^const size_t AES_MAX_EXP_KEY_SIZE = 8*15;$/;" v -AGGREGATE_H src/enclave/Enclave/Aggregate.h /^#define AGGREGATE_H$/;" d -Aad src/enclave/Enclave/sgxaes.h /^ Aad,$/;" e enum:State -AadFinal src/enclave/Enclave/sgxaes.h /^ AadFinal,$/;" e enum:State -AesGcm src/enclave/Enclave/sgxaes.cpp /^AesGcm::AesGcm(const AesGcm& other) {$/;" f class:AesGcm -AesGcm src/enclave/Enclave/sgxaes.cpp /^AesGcm::AesGcm(const KeySchedule* ks, const unsigned char* iv, size_t iv_len) {$/;" f class:AesGcm -AesGcm src/enclave/Enclave/sgxaes.h /^struct AesGcm {$/;" s -AggregateExpressionEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ AggregateExpressionEvaluator(const tuix::AggregateExpr *expr) : builder() {$/;" f class:AggregateExpressionEvaluator -AggregateExpressionEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^class AggregateExpressionEvaluator {$/;" c -AllocObject src/enclave/Include/jni.h /^ jobject (JNICALL *AllocObject)$/;" m struct:JNINativeInterface_ -AllocObject src/enclave/Include/jni.h /^ jobject AllocObject(jclass clazz) {$/;" f struct:JNIEnv_ -AttachCurrentThread src/enclave/Include/jni.h /^ jint (JNICALL *AttachCurrentThread)(JavaVM *vm, void **penv, void *args);$/;" m struct:JNIInvokeInterface_ -AttachCurrentThread src/enclave/Include/jni.h /^ jint AttachCurrentThread(void **penv, void *args) {$/;" f struct:JavaVM_ -AttachCurrentThreadAsDaemon src/enclave/Include/jni.h /^ jint (JNICALL *AttachCurrentThreadAsDaemon)(JavaVM *vm, void **penv, void *args);$/;" m struct:JNIInvokeInterface_ -AttachCurrentThreadAsDaemon src/enclave/Include/jni.h /^ jint AttachCurrentThreadAsDaemon(void **penv, void *args) {$/;" f struct:JavaVM_ -CALCULATE_POWERS_OF_H src/enclave/Enclave/sgxaes_asm.S /^CALCULATE_POWERS_OF_H:$/;" l -COMMON_H src/enclave/Common/common.h /^#define COMMON_H$/;" d -CRYPTO_H src/enclave/Enclave/Crypto.h /^#define CRYPTO_H$/;" d -CallBooleanMethod src/enclave/Include/jni.h /^ jboolean (JNICALL *CallBooleanMethod)$/;" m struct:JNINativeInterface_ -CallBooleanMethod src/enclave/Include/jni.h /^ jboolean CallBooleanMethod(jobject obj,$/;" f struct:JNIEnv_ -CallBooleanMethodA src/enclave/Include/jni.h /^ jboolean (JNICALL *CallBooleanMethodA)$/;" m struct:JNINativeInterface_ -CallBooleanMethodA src/enclave/Include/jni.h /^ jboolean CallBooleanMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallBooleanMethodV src/enclave/Include/jni.h /^ jboolean (JNICALL *CallBooleanMethodV)$/;" m struct:JNINativeInterface_ -CallBooleanMethodV src/enclave/Include/jni.h /^ jboolean CallBooleanMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallByteMethod src/enclave/Include/jni.h /^ jbyte (JNICALL *CallByteMethod)$/;" m struct:JNINativeInterface_ -CallByteMethod src/enclave/Include/jni.h /^ jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallByteMethodA src/enclave/Include/jni.h /^ jbyte (JNICALL *CallByteMethodA)$/;" m struct:JNINativeInterface_ -CallByteMethodA src/enclave/Include/jni.h /^ jbyte CallByteMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallByteMethodV src/enclave/Include/jni.h /^ jbyte (JNICALL *CallByteMethodV)$/;" m struct:JNINativeInterface_ -CallByteMethodV src/enclave/Include/jni.h /^ jbyte CallByteMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallCharMethod src/enclave/Include/jni.h /^ jchar (JNICALL *CallCharMethod)$/;" m struct:JNINativeInterface_ -CallCharMethod src/enclave/Include/jni.h /^ jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallCharMethodA src/enclave/Include/jni.h /^ jchar (JNICALL *CallCharMethodA)$/;" m struct:JNINativeInterface_ -CallCharMethodA src/enclave/Include/jni.h /^ jchar CallCharMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallCharMethodV src/enclave/Include/jni.h /^ jchar (JNICALL *CallCharMethodV)$/;" m struct:JNINativeInterface_ -CallCharMethodV src/enclave/Include/jni.h /^ jchar CallCharMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallDoubleMethod src/enclave/Include/jni.h /^ jdouble (JNICALL *CallDoubleMethod)$/;" m struct:JNINativeInterface_ -CallDoubleMethod src/enclave/Include/jni.h /^ jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallDoubleMethodA src/enclave/Include/jni.h /^ jdouble (JNICALL *CallDoubleMethodA)$/;" m struct:JNINativeInterface_ -CallDoubleMethodA src/enclave/Include/jni.h /^ jdouble CallDoubleMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallDoubleMethodV src/enclave/Include/jni.h /^ jdouble (JNICALL *CallDoubleMethodV)$/;" m struct:JNINativeInterface_ -CallDoubleMethodV src/enclave/Include/jni.h /^ jdouble CallDoubleMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallFloatMethod src/enclave/Include/jni.h /^ jfloat (JNICALL *CallFloatMethod)$/;" m struct:JNINativeInterface_ -CallFloatMethod src/enclave/Include/jni.h /^ jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallFloatMethodA src/enclave/Include/jni.h /^ jfloat (JNICALL *CallFloatMethodA)$/;" m struct:JNINativeInterface_ -CallFloatMethodA src/enclave/Include/jni.h /^ jfloat CallFloatMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallFloatMethodV src/enclave/Include/jni.h /^ jfloat (JNICALL *CallFloatMethodV)$/;" m struct:JNINativeInterface_ -CallFloatMethodV src/enclave/Include/jni.h /^ jfloat CallFloatMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallIntMethod src/enclave/Include/jni.h /^ jint (JNICALL *CallIntMethod)$/;" m struct:JNINativeInterface_ -CallIntMethod src/enclave/Include/jni.h /^ jint CallIntMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallIntMethodA src/enclave/Include/jni.h /^ jint (JNICALL *CallIntMethodA)$/;" m struct:JNINativeInterface_ -CallIntMethodA src/enclave/Include/jni.h /^ jint CallIntMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallIntMethodV src/enclave/Include/jni.h /^ jint (JNICALL *CallIntMethodV)$/;" m struct:JNINativeInterface_ -CallIntMethodV src/enclave/Include/jni.h /^ jint CallIntMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallLongMethod src/enclave/Include/jni.h /^ jlong (JNICALL *CallLongMethod)$/;" m struct:JNINativeInterface_ -CallLongMethod src/enclave/Include/jni.h /^ jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallLongMethodA src/enclave/Include/jni.h /^ jlong (JNICALL *CallLongMethodA)$/;" m struct:JNINativeInterface_ -CallLongMethodA src/enclave/Include/jni.h /^ jlong CallLongMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallLongMethodV src/enclave/Include/jni.h /^ jlong (JNICALL *CallLongMethodV)$/;" m struct:JNINativeInterface_ -CallLongMethodV src/enclave/Include/jni.h /^ jlong CallLongMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallNonvirtualBooleanMethod src/enclave/Include/jni.h /^ jboolean (JNICALL *CallNonvirtualBooleanMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualBooleanMethod src/enclave/Include/jni.h /^ jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualBooleanMethodA src/enclave/Include/jni.h /^ jboolean (JNICALL *CallNonvirtualBooleanMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualBooleanMethodA src/enclave/Include/jni.h /^ jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualBooleanMethodV src/enclave/Include/jni.h /^ jboolean (JNICALL *CallNonvirtualBooleanMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualBooleanMethodV src/enclave/Include/jni.h /^ jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualByteMethod src/enclave/Include/jni.h /^ jbyte (JNICALL *CallNonvirtualByteMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualByteMethod src/enclave/Include/jni.h /^ jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualByteMethodA src/enclave/Include/jni.h /^ jbyte (JNICALL *CallNonvirtualByteMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualByteMethodA src/enclave/Include/jni.h /^ jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualByteMethodV src/enclave/Include/jni.h /^ jbyte (JNICALL *CallNonvirtualByteMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualByteMethodV src/enclave/Include/jni.h /^ jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualCharMethod src/enclave/Include/jni.h /^ jchar (JNICALL *CallNonvirtualCharMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualCharMethod src/enclave/Include/jni.h /^ jchar CallNonvirtualCharMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualCharMethodA src/enclave/Include/jni.h /^ jchar (JNICALL *CallNonvirtualCharMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualCharMethodA src/enclave/Include/jni.h /^ jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualCharMethodV src/enclave/Include/jni.h /^ jchar (JNICALL *CallNonvirtualCharMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualCharMethodV src/enclave/Include/jni.h /^ jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualDoubleMethod src/enclave/Include/jni.h /^ jdouble (JNICALL *CallNonvirtualDoubleMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualDoubleMethod src/enclave/Include/jni.h /^ jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualDoubleMethodA src/enclave/Include/jni.h /^ jdouble (JNICALL *CallNonvirtualDoubleMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualDoubleMethodA src/enclave/Include/jni.h /^ jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualDoubleMethodV src/enclave/Include/jni.h /^ jdouble (JNICALL *CallNonvirtualDoubleMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualDoubleMethodV src/enclave/Include/jni.h /^ jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualFloatMethod src/enclave/Include/jni.h /^ jfloat (JNICALL *CallNonvirtualFloatMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualFloatMethod src/enclave/Include/jni.h /^ jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualFloatMethodA src/enclave/Include/jni.h /^ jfloat (JNICALL *CallNonvirtualFloatMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualFloatMethodA src/enclave/Include/jni.h /^ jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualFloatMethodV src/enclave/Include/jni.h /^ jfloat (JNICALL *CallNonvirtualFloatMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualFloatMethodV src/enclave/Include/jni.h /^ jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualIntMethod src/enclave/Include/jni.h /^ jint (JNICALL *CallNonvirtualIntMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualIntMethod src/enclave/Include/jni.h /^ jint CallNonvirtualIntMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualIntMethodA src/enclave/Include/jni.h /^ jint (JNICALL *CallNonvirtualIntMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualIntMethodA src/enclave/Include/jni.h /^ jint CallNonvirtualIntMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualIntMethodV src/enclave/Include/jni.h /^ jint (JNICALL *CallNonvirtualIntMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualIntMethodV src/enclave/Include/jni.h /^ jint CallNonvirtualIntMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualLongMethod src/enclave/Include/jni.h /^ jlong (JNICALL *CallNonvirtualLongMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualLongMethod src/enclave/Include/jni.h /^ jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualLongMethodA src/enclave/Include/jni.h /^ jlong (JNICALL *CallNonvirtualLongMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualLongMethodA src/enclave/Include/jni.h /^ jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualLongMethodV src/enclave/Include/jni.h /^ jlong (JNICALL *CallNonvirtualLongMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualLongMethodV src/enclave/Include/jni.h /^ jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualObjectMethod src/enclave/Include/jni.h /^ jobject (JNICALL *CallNonvirtualObjectMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualObjectMethod src/enclave/Include/jni.h /^ jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualObjectMethodA src/enclave/Include/jni.h /^ jobject (JNICALL *CallNonvirtualObjectMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualObjectMethodA src/enclave/Include/jni.h /^ jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualObjectMethodV src/enclave/Include/jni.h /^ jobject (JNICALL *CallNonvirtualObjectMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualObjectMethodV src/enclave/Include/jni.h /^ jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualShortMethod src/enclave/Include/jni.h /^ jshort (JNICALL *CallNonvirtualShortMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualShortMethod src/enclave/Include/jni.h /^ jshort CallNonvirtualShortMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualShortMethodA src/enclave/Include/jni.h /^ jshort (JNICALL *CallNonvirtualShortMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualShortMethodA src/enclave/Include/jni.h /^ jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualShortMethodV src/enclave/Include/jni.h /^ jshort (JNICALL *CallNonvirtualShortMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualShortMethodV src/enclave/Include/jni.h /^ jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualVoidMethod src/enclave/Include/jni.h /^ void (JNICALL *CallNonvirtualVoidMethod)$/;" m struct:JNINativeInterface_ -CallNonvirtualVoidMethod src/enclave/Include/jni.h /^ void CallNonvirtualVoidMethod(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualVoidMethodA src/enclave/Include/jni.h /^ void (JNICALL *CallNonvirtualVoidMethodA)$/;" m struct:JNINativeInterface_ -CallNonvirtualVoidMethodA src/enclave/Include/jni.h /^ void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallNonvirtualVoidMethodV src/enclave/Include/jni.h /^ void (JNICALL *CallNonvirtualVoidMethodV)$/;" m struct:JNINativeInterface_ -CallNonvirtualVoidMethodV src/enclave/Include/jni.h /^ void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,$/;" f struct:JNIEnv_ -CallObjectMethod src/enclave/Include/jni.h /^ jobject (JNICALL *CallObjectMethod)$/;" m struct:JNINativeInterface_ -CallObjectMethod src/enclave/Include/jni.h /^ jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallObjectMethodA src/enclave/Include/jni.h /^ jobject (JNICALL *CallObjectMethodA)$/;" m struct:JNINativeInterface_ -CallObjectMethodA src/enclave/Include/jni.h /^ jobject CallObjectMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallObjectMethodV src/enclave/Include/jni.h /^ jobject (JNICALL *CallObjectMethodV)$/;" m struct:JNINativeInterface_ -CallObjectMethodV src/enclave/Include/jni.h /^ jobject CallObjectMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallShortMethod src/enclave/Include/jni.h /^ jshort (JNICALL *CallShortMethod)$/;" m struct:JNINativeInterface_ -CallShortMethod src/enclave/Include/jni.h /^ jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallShortMethodA src/enclave/Include/jni.h /^ jshort (JNICALL *CallShortMethodA)$/;" m struct:JNINativeInterface_ -CallShortMethodA src/enclave/Include/jni.h /^ jshort CallShortMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallShortMethodV src/enclave/Include/jni.h /^ jshort (JNICALL *CallShortMethodV)$/;" m struct:JNINativeInterface_ -CallShortMethodV src/enclave/Include/jni.h /^ jshort CallShortMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallStaticBooleanMethod src/enclave/Include/jni.h /^ jboolean (JNICALL *CallStaticBooleanMethod)$/;" m struct:JNINativeInterface_ -CallStaticBooleanMethod src/enclave/Include/jni.h /^ jboolean CallStaticBooleanMethod(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticBooleanMethodA src/enclave/Include/jni.h /^ jboolean (JNICALL *CallStaticBooleanMethodA)$/;" m struct:JNINativeInterface_ -CallStaticBooleanMethodA src/enclave/Include/jni.h /^ jboolean CallStaticBooleanMethodA(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticBooleanMethodV src/enclave/Include/jni.h /^ jboolean (JNICALL *CallStaticBooleanMethodV)$/;" m struct:JNINativeInterface_ -CallStaticBooleanMethodV src/enclave/Include/jni.h /^ jboolean CallStaticBooleanMethodV(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticByteMethod src/enclave/Include/jni.h /^ jbyte (JNICALL *CallStaticByteMethod)$/;" m struct:JNINativeInterface_ -CallStaticByteMethod src/enclave/Include/jni.h /^ jbyte CallStaticByteMethod(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticByteMethodA src/enclave/Include/jni.h /^ jbyte (JNICALL *CallStaticByteMethodA)$/;" m struct:JNINativeInterface_ -CallStaticByteMethodA src/enclave/Include/jni.h /^ jbyte CallStaticByteMethodA(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticByteMethodV src/enclave/Include/jni.h /^ jbyte (JNICALL *CallStaticByteMethodV)$/;" m struct:JNINativeInterface_ -CallStaticByteMethodV src/enclave/Include/jni.h /^ jbyte CallStaticByteMethodV(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticCharMethod src/enclave/Include/jni.h /^ jchar (JNICALL *CallStaticCharMethod)$/;" m struct:JNINativeInterface_ -CallStaticCharMethod src/enclave/Include/jni.h /^ jchar CallStaticCharMethod(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticCharMethodA src/enclave/Include/jni.h /^ jchar (JNICALL *CallStaticCharMethodA)$/;" m struct:JNINativeInterface_ -CallStaticCharMethodA src/enclave/Include/jni.h /^ jchar CallStaticCharMethodA(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticCharMethodV src/enclave/Include/jni.h /^ jchar (JNICALL *CallStaticCharMethodV)$/;" m struct:JNINativeInterface_ -CallStaticCharMethodV src/enclave/Include/jni.h /^ jchar CallStaticCharMethodV(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticDoubleMethod src/enclave/Include/jni.h /^ jdouble (JNICALL *CallStaticDoubleMethod)$/;" m struct:JNINativeInterface_ -CallStaticDoubleMethod src/enclave/Include/jni.h /^ jdouble CallStaticDoubleMethod(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticDoubleMethodA src/enclave/Include/jni.h /^ jdouble (JNICALL *CallStaticDoubleMethodA)$/;" m struct:JNINativeInterface_ -CallStaticDoubleMethodA src/enclave/Include/jni.h /^ jdouble CallStaticDoubleMethodA(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticDoubleMethodV src/enclave/Include/jni.h /^ jdouble (JNICALL *CallStaticDoubleMethodV)$/;" m struct:JNINativeInterface_ -CallStaticDoubleMethodV src/enclave/Include/jni.h /^ jdouble CallStaticDoubleMethodV(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticFloatMethod src/enclave/Include/jni.h /^ jfloat (JNICALL *CallStaticFloatMethod)$/;" m struct:JNINativeInterface_ -CallStaticFloatMethod src/enclave/Include/jni.h /^ jfloat CallStaticFloatMethod(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticFloatMethodA src/enclave/Include/jni.h /^ jfloat (JNICALL *CallStaticFloatMethodA)$/;" m struct:JNINativeInterface_ -CallStaticFloatMethodA src/enclave/Include/jni.h /^ jfloat CallStaticFloatMethodA(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticFloatMethodV src/enclave/Include/jni.h /^ jfloat (JNICALL *CallStaticFloatMethodV)$/;" m struct:JNINativeInterface_ -CallStaticFloatMethodV src/enclave/Include/jni.h /^ jfloat CallStaticFloatMethodV(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticIntMethod src/enclave/Include/jni.h /^ jint (JNICALL *CallStaticIntMethod)$/;" m struct:JNINativeInterface_ -CallStaticIntMethod src/enclave/Include/jni.h /^ jint CallStaticIntMethod(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticIntMethodA src/enclave/Include/jni.h /^ jint (JNICALL *CallStaticIntMethodA)$/;" m struct:JNINativeInterface_ -CallStaticIntMethodA src/enclave/Include/jni.h /^ jint CallStaticIntMethodA(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticIntMethodV src/enclave/Include/jni.h /^ jint (JNICALL *CallStaticIntMethodV)$/;" m struct:JNINativeInterface_ -CallStaticIntMethodV src/enclave/Include/jni.h /^ jint CallStaticIntMethodV(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticLongMethod src/enclave/Include/jni.h /^ jlong (JNICALL *CallStaticLongMethod)$/;" m struct:JNINativeInterface_ -CallStaticLongMethod src/enclave/Include/jni.h /^ jlong CallStaticLongMethod(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticLongMethodA src/enclave/Include/jni.h /^ jlong (JNICALL *CallStaticLongMethodA)$/;" m struct:JNINativeInterface_ -CallStaticLongMethodA src/enclave/Include/jni.h /^ jlong CallStaticLongMethodA(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticLongMethodV src/enclave/Include/jni.h /^ jlong (JNICALL *CallStaticLongMethodV)$/;" m struct:JNINativeInterface_ -CallStaticLongMethodV src/enclave/Include/jni.h /^ jlong CallStaticLongMethodV(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticObjectMethod src/enclave/Include/jni.h /^ jobject (JNICALL *CallStaticObjectMethod)$/;" m struct:JNINativeInterface_ -CallStaticObjectMethod src/enclave/Include/jni.h /^ jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID,$/;" f struct:JNIEnv_ -CallStaticObjectMethodA src/enclave/Include/jni.h /^ jobject (JNICALL *CallStaticObjectMethodA)$/;" m struct:JNINativeInterface_ -CallStaticObjectMethodA src/enclave/Include/jni.h /^ jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID,$/;" f struct:JNIEnv_ -CallStaticObjectMethodV src/enclave/Include/jni.h /^ jobject (JNICALL *CallStaticObjectMethodV)$/;" m struct:JNINativeInterface_ -CallStaticObjectMethodV src/enclave/Include/jni.h /^ jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID,$/;" f struct:JNIEnv_ -CallStaticShortMethod src/enclave/Include/jni.h /^ jshort (JNICALL *CallStaticShortMethod)$/;" m struct:JNINativeInterface_ -CallStaticShortMethod src/enclave/Include/jni.h /^ jshort CallStaticShortMethod(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticShortMethodA src/enclave/Include/jni.h /^ jshort (JNICALL *CallStaticShortMethodA)$/;" m struct:JNINativeInterface_ -CallStaticShortMethodA src/enclave/Include/jni.h /^ jshort CallStaticShortMethodA(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticShortMethodV src/enclave/Include/jni.h /^ jshort (JNICALL *CallStaticShortMethodV)$/;" m struct:JNINativeInterface_ -CallStaticShortMethodV src/enclave/Include/jni.h /^ jshort CallStaticShortMethodV(jclass clazz,$/;" f struct:JNIEnv_ -CallStaticVoidMethod src/enclave/Include/jni.h /^ void (JNICALL *CallStaticVoidMethod)$/;" m struct:JNINativeInterface_ -CallStaticVoidMethod src/enclave/Include/jni.h /^ void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallStaticVoidMethodA src/enclave/Include/jni.h /^ void (JNICALL *CallStaticVoidMethodA)$/;" m struct:JNINativeInterface_ -CallStaticVoidMethodA src/enclave/Include/jni.h /^ void CallStaticVoidMethodA(jclass cls, jmethodID methodID,$/;" f struct:JNIEnv_ -CallStaticVoidMethodV src/enclave/Include/jni.h /^ void (JNICALL *CallStaticVoidMethodV)$/;" m struct:JNINativeInterface_ -CallStaticVoidMethodV src/enclave/Include/jni.h /^ void CallStaticVoidMethodV(jclass cls, jmethodID methodID,$/;" f struct:JNIEnv_ -CallVoidMethod src/enclave/Include/jni.h /^ void (JNICALL *CallVoidMethod)$/;" m struct:JNINativeInterface_ -CallVoidMethod src/enclave/Include/jni.h /^ void CallVoidMethod(jobject obj, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -CallVoidMethodA src/enclave/Include/jni.h /^ void (JNICALL *CallVoidMethodA)$/;" m struct:JNINativeInterface_ -CallVoidMethodA src/enclave/Include/jni.h /^ void CallVoidMethodA(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -CallVoidMethodV src/enclave/Include/jni.h /^ void (JNICALL *CallVoidMethodV)$/;" m struct:JNINativeInterface_ -CallVoidMethodV src/enclave/Include/jni.h /^ void CallVoidMethodV(jobject obj, jmethodID methodID,$/;" f struct:JNIEnv_ -DATA_END src/enclave/Enclave/sgxaes_asm.S /^DATA_END:$/;" l -DAYS_PER_100Y src/enclave/Enclave/util.cpp /^#define DAYS_PER_100Y /;" d file: -DAYS_PER_400Y src/enclave/Enclave/util.cpp /^#define DAYS_PER_400Y /;" d file: -DAYS_PER_4Y src/enclave/Enclave/util.cpp /^#define DAYS_PER_4Y /;" d file: -DEFINE_H src/enclave/Include/define.h /^#define DEFINE_H$/;" d -DERIVE_KEY_MK_VK src/enclave/Enclave/isv_enclave.cpp /^ DERIVE_KEY_MK_VK,$/;" e enum:_derive_key_type_t file: -DERIVE_KEY_SMK_SK src/enclave/Enclave/isv_enclave.cpp /^ DERIVE_KEY_SMK_SK = 0,$/;" e enum:_derive_key_type_t file: -Date src/enclave/Enclave/Flatbuffers.h /^ Date(const int32_t &days_since_epoch) : days_since_epoch(days_since_epoch) {}$/;" f class:Date -Date src/enclave/Enclave/Flatbuffers.h /^class Date {$/;" c -Decrypting src/enclave/Enclave/sgxaes.h /^ Decrypting,$/;" e enum:State -DefineClass src/enclave/Include/jni.h /^ jclass (JNICALL *DefineClass)$/;" m struct:JNINativeInterface_ -DefineClass src/enclave/Include/jni.h /^ jclass DefineClass(const char *name, jobject loader, const jbyte *buf,$/;" f struct:JNIEnv_ -DeleteGlobalRef src/enclave/Include/jni.h /^ void (JNICALL *DeleteGlobalRef)$/;" m struct:JNINativeInterface_ -DeleteGlobalRef src/enclave/Include/jni.h /^ void DeleteGlobalRef(jobject gref) {$/;" f struct:JNIEnv_ -DeleteLocalRef src/enclave/Include/jni.h /^ void (JNICALL *DeleteLocalRef)$/;" m struct:JNINativeInterface_ -DeleteLocalRef src/enclave/Include/jni.h /^ void DeleteLocalRef(jobject obj) {$/;" f struct:JNIEnv_ -DeleteWeakGlobalRef src/enclave/Include/jni.h /^ void (JNICALL *DeleteWeakGlobalRef)$/;" m struct:JNINativeInterface_ -DeleteWeakGlobalRef src/enclave/Include/jni.h /^ void DeleteWeakGlobalRef(jweak ref) {$/;" f struct:JNIEnv_ -DestroyJavaVM src/enclave/Include/jni.h /^ jint (JNICALL *DestroyJavaVM)(JavaVM *vm);$/;" m struct:JNIInvokeInterface_ -DestroyJavaVM src/enclave/Include/jni.h /^ jint DestroyJavaVM() {$/;" f struct:JavaVM_ -DetachCurrentThread src/enclave/Include/jni.h /^ jint (JNICALL *DetachCurrentThread)(JavaVM *vm);$/;" m struct:JNIInvokeInterface_ -DetachCurrentThread src/enclave/Include/jni.h /^ jint DetachCurrentThread() {$/;" f struct:JavaVM_ -Done src/enclave/Enclave/sgxaes.h /^ Done,$/;" e enum:State -EC_DERIVATION_BUFFER_SIZE src/enclave/ServiceProvider/ecp.cpp /^#define EC_DERIVATION_BUFFER_SIZE(/;" d file: -ENCLAVE_FILENAME src/enclave/App/App.cpp /^# define ENCLAVE_FILENAME /;" d file: -EXPRESSION_EVALUATION_H src/enclave/Enclave/ExpressionEvaluation.h /^#define EXPRESSION_EVALUATION_H$/;" d -EXTERN_C src/enclave/ServiceProvider/sp_crypto.h /^ #define EXTERN_C /;" d -EXTERN_C src/enclave/ServiceProvider/sp_crypto.h /^ #define EXTERN_C$/;" d -EXTERN_C src/enclave/sample_libcrypto/sample_libcrypto.h /^ #define EXTERN_C /;" d -EncryptedBlockIterator src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Offset>::const_iterator EncryptedBlockIterator;$/;" t class:EncryptedBlocksToRowReader -EncryptedBlockToRowReader src/enclave/Enclave/Flatbuffers.h /^ EncryptedBlockToRowReader() : rows(nullptr), initialized(false) {}$/;" f class:EncryptedBlockToRowReader -EncryptedBlockToRowReader src/enclave/Enclave/Flatbuffers.h /^class EncryptedBlockToRowReader {$/;" c -EncryptedBlocksToEncryptedBlockReader src/enclave/Enclave/Flatbuffers.h /^ EncryptedBlocksToEncryptedBlockReader(uint8_t *buf, size_t len) {$/;" f class:EncryptedBlocksToEncryptedBlockReader -EncryptedBlocksToEncryptedBlockReader src/enclave/Enclave/Flatbuffers.h /^class EncryptedBlocksToEncryptedBlockReader {$/;" c -EncryptedBlocksToRowReader src/enclave/Enclave/Flatbuffers.h /^ EncryptedBlocksToRowReader(const tuix::EncryptedBlocks *encrypted_blocks)$/;" f class:EncryptedBlocksToRowReader -EncryptedBlocksToRowReader src/enclave/Enclave/Flatbuffers.h /^ EncryptedBlocksToRowReader(uint8_t *buf, size_t len)$/;" f class:EncryptedBlocksToRowReader -EncryptedBlocksToRowReader src/enclave/Enclave/Flatbuffers.h /^class EncryptedBlocksToRowReader {$/;" c -Encrypting src/enclave/Enclave/sgxaes.h /^ Encrypting,$/;" e enum:State -EnsureLocalCapacity src/enclave/Include/jni.h /^ jint (JNICALL *EnsureLocalCapacity)$/;" m struct:JNINativeInterface_ -EnsureLocalCapacity src/enclave/Include/jni.h /^ jint EnsureLocalCapacity(jint capacity) {$/;" f struct:JNIEnv_ -ExceptionCheck src/enclave/Include/jni.h /^ jboolean (JNICALL *ExceptionCheck)$/;" m struct:JNINativeInterface_ -ExceptionCheck src/enclave/Include/jni.h /^ jboolean ExceptionCheck() {$/;" f struct:JNIEnv_ -ExceptionClear src/enclave/Include/jni.h /^ void (JNICALL *ExceptionClear)$/;" m struct:JNINativeInterface_ -ExceptionClear src/enclave/Include/jni.h /^ void ExceptionClear() {$/;" f struct:JNIEnv_ -ExceptionDescribe src/enclave/Include/jni.h /^ void (JNICALL *ExceptionDescribe)$/;" m struct:JNINativeInterface_ -ExceptionDescribe src/enclave/Include/jni.h /^ void ExceptionDescribe() {$/;" f struct:JNIEnv_ -ExceptionOccurred src/enclave/Include/jni.h /^ jthrowable (JNICALL *ExceptionOccurred)$/;" m struct:JNINativeInterface_ -ExceptionOccurred src/enclave/Include/jni.h /^ jthrowable ExceptionOccurred() {$/;" f struct:JNIEnv_ -FALSE src/enclave/App/App.cpp /^# define FALSE /;" d file: -FILTER_H src/enclave/Enclave/Filter.h /^#define FILTER_H$/;" d -FLATBUFFERS_H src/enclave/Enclave/Flatbuffers.h /^#define FLATBUFFERS_H$/;" d -FatalError src/enclave/Include/jni.h /^ void (JNICALL *FatalError)$/;" m struct:JNINativeInterface_ -FatalError src/enclave/Include/jni.h /^ void FatalError(const char *msg) {$/;" f struct:JNIEnv_ -FindClass src/enclave/Include/jni.h /^ jclass (JNICALL *FindClass)$/;" m struct:JNINativeInterface_ -FindClass src/enclave/Include/jni.h /^ jclass FindClass(const char *name) {$/;" f struct:JNIEnv_ -FlatbuffersAggOpEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ FlatbuffersAggOpEvaluator(uint8_t *buf, size_t len)$/;" f class:FlatbuffersAggOpEvaluator -FlatbuffersAggOpEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^class FlatbuffersAggOpEvaluator {$/;" c -FlatbuffersExpressionEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ FlatbuffersExpressionEvaluator(const tuix::Expr *expr) : builder(), expr(expr) {}$/;" f class:FlatbuffersExpressionEvaluator -FlatbuffersExpressionEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^class FlatbuffersExpressionEvaluator {$/;" c -FlatbuffersJoinExprEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ FlatbuffersJoinExprEvaluator(uint8_t *buf, size_t len)$/;" f class:FlatbuffersJoinExprEvaluator -FlatbuffersJoinExprEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^class FlatbuffersJoinExprEvaluator {$/;" c -FlatbuffersRowWriter src/enclave/Enclave/Flatbuffers.h /^ FlatbuffersRowWriter()$/;" f class:FlatbuffersRowWriter -FlatbuffersRowWriter src/enclave/Enclave/Flatbuffers.h /^class FlatbuffersRowWriter {$/;" c -FlatbuffersSortOrderEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ FlatbuffersSortOrderEvaluator(const tuix::SortExpr *sort_expr)$/;" f class:FlatbuffersSortOrderEvaluator -FlatbuffersSortOrderEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^ FlatbuffersSortOrderEvaluator(uint8_t *buf, size_t len) {$/;" f class:FlatbuffersSortOrderEvaluator -FlatbuffersSortOrderEvaluator src/enclave/Enclave/ExpressionEvaluation.h /^class FlatbuffersSortOrderEvaluator {$/;" c -FlatbuffersTemporaryRow src/enclave/Enclave/Flatbuffers.h /^ FlatbuffersTemporaryRow() : builder(), row(nullptr) {}$/;" f class:FlatbuffersTemporaryRow -FlatbuffersTemporaryRow src/enclave/Enclave/Flatbuffers.h /^ FlatbuffersTemporaryRow(const tuix::Row *row) : FlatbuffersTemporaryRow() {$/;" f class:FlatbuffersTemporaryRow -FlatbuffersTemporaryRow src/enclave/Enclave/Flatbuffers.h /^class FlatbuffersTemporaryRow {$/;" c -FromReflectedField src/enclave/Include/jni.h /^ jfieldID (JNICALL *FromReflectedField)$/;" m struct:JNINativeInterface_ -FromReflectedField src/enclave/Include/jni.h /^ jfieldID FromReflectedField(jobject field) {$/;" f struct:JNIEnv_ -FromReflectedMethod src/enclave/Include/jni.h /^ jmethodID (JNICALL *FromReflectedMethod)$/;" m struct:JNINativeInterface_ -FromReflectedMethod src/enclave/Include/jni.h /^ jmethodID FromReflectedMethod(jobject method) {$/;" f struct:JNIEnv_ -GFMUL src/enclave/Enclave/sgxaes_asm.S /^GFMUL:$/;" l -GID_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define GID_SIZE /;" d -GID_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define GID_SIZE /;" d -GcmContext src/enclave/Enclave/sgxaes.cpp /^GcmContext::GcmContext() {$/;" f class:GcmContext -GcmContext src/enclave/Enclave/sgxaes.h /^ GcmContext(const GcmContext& other) {$/;" f struct:GcmContext -GcmContext src/enclave/Enclave/sgxaes.h /^struct GcmContext {$/;" s -GetArrayLength src/enclave/Include/jni.h /^ jsize (JNICALL *GetArrayLength)$/;" m struct:JNINativeInterface_ -GetArrayLength src/enclave/Include/jni.h /^ jsize GetArrayLength(jarray array) {$/;" f struct:JNIEnv_ -GetBooleanArrayElements src/enclave/Include/jni.h /^ jboolean * (JNICALL *GetBooleanArrayElements)$/;" m struct:JNINativeInterface_ -GetBooleanArrayElements src/enclave/Include/jni.h /^ jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetBooleanArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetBooleanArrayRegion)$/;" m struct:JNINativeInterface_ -GetBooleanArrayRegion src/enclave/Include/jni.h /^ void GetBooleanArrayRegion(jbooleanArray array,$/;" f struct:JNIEnv_ -GetBooleanField src/enclave/Include/jni.h /^ jboolean (JNICALL *GetBooleanField)$/;" m struct:JNINativeInterface_ -GetBooleanField src/enclave/Include/jni.h /^ jboolean GetBooleanField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetByteArrayElements src/enclave/Include/jni.h /^ jbyte * (JNICALL *GetByteArrayElements)$/;" m struct:JNINativeInterface_ -GetByteArrayElements src/enclave/Include/jni.h /^ jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetByteArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetByteArrayRegion)$/;" m struct:JNINativeInterface_ -GetByteArrayRegion src/enclave/Include/jni.h /^ void GetByteArrayRegion(jbyteArray array,$/;" f struct:JNIEnv_ -GetByteField src/enclave/Include/jni.h /^ jbyte (JNICALL *GetByteField)$/;" m struct:JNINativeInterface_ -GetByteField src/enclave/Include/jni.h /^ jbyte GetByteField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetCharArrayElements src/enclave/Include/jni.h /^ jchar * (JNICALL *GetCharArrayElements)$/;" m struct:JNINativeInterface_ -GetCharArrayElements src/enclave/Include/jni.h /^ jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetCharArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetCharArrayRegion)$/;" m struct:JNINativeInterface_ -GetCharArrayRegion src/enclave/Include/jni.h /^ void GetCharArrayRegion(jcharArray array,$/;" f struct:JNIEnv_ -GetCharField src/enclave/Include/jni.h /^ jchar (JNICALL *GetCharField)$/;" m struct:JNINativeInterface_ -GetCharField src/enclave/Include/jni.h /^ jchar GetCharField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetDirectBufferAddress src/enclave/Include/jni.h /^ void* (JNICALL *GetDirectBufferAddress)$/;" m struct:JNINativeInterface_ -GetDirectBufferAddress src/enclave/Include/jni.h /^ void* GetDirectBufferAddress(jobject buf) {$/;" f struct:JNIEnv_ -GetDirectBufferCapacity src/enclave/Include/jni.h /^ jlong (JNICALL *GetDirectBufferCapacity)$/;" m struct:JNINativeInterface_ -GetDirectBufferCapacity src/enclave/Include/jni.h /^ jlong GetDirectBufferCapacity(jobject buf) {$/;" f struct:JNIEnv_ -GetDoubleArrayElements src/enclave/Include/jni.h /^ jdouble * (JNICALL *GetDoubleArrayElements)$/;" m struct:JNINativeInterface_ -GetDoubleArrayElements src/enclave/Include/jni.h /^ jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetDoubleArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetDoubleArrayRegion)$/;" m struct:JNINativeInterface_ -GetDoubleArrayRegion src/enclave/Include/jni.h /^ void GetDoubleArrayRegion(jdoubleArray array,$/;" f struct:JNIEnv_ -GetDoubleField src/enclave/Include/jni.h /^ jdouble (JNICALL *GetDoubleField)$/;" m struct:JNINativeInterface_ -GetDoubleField src/enclave/Include/jni.h /^ jdouble GetDoubleField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetEnv src/enclave/Include/jni.h /^ jint (JNICALL *GetEnv)(JavaVM *vm, void **penv, jint version);$/;" m struct:JNIInvokeInterface_ -GetEnv src/enclave/Include/jni.h /^ jint GetEnv(void **penv, jint version) {$/;" f struct:JavaVM_ -GetFieldID src/enclave/Include/jni.h /^ jfieldID (JNICALL *GetFieldID)$/;" m struct:JNINativeInterface_ -GetFieldID src/enclave/Include/jni.h /^ jfieldID GetFieldID(jclass clazz, const char *name,$/;" f struct:JNIEnv_ -GetFloatArrayElements src/enclave/Include/jni.h /^ jfloat * (JNICALL *GetFloatArrayElements)$/;" m struct:JNINativeInterface_ -GetFloatArrayElements src/enclave/Include/jni.h /^ jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetFloatArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetFloatArrayRegion)$/;" m struct:JNINativeInterface_ -GetFloatArrayRegion src/enclave/Include/jni.h /^ void GetFloatArrayRegion(jfloatArray array,$/;" f struct:JNIEnv_ -GetFloatField src/enclave/Include/jni.h /^ jfloat (JNICALL *GetFloatField)$/;" m struct:JNINativeInterface_ -GetFloatField src/enclave/Include/jni.h /^ jfloat GetFloatField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetIntArrayElements src/enclave/Include/jni.h /^ jint * (JNICALL *GetIntArrayElements)$/;" m struct:JNINativeInterface_ -GetIntArrayElements src/enclave/Include/jni.h /^ jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetIntArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetIntArrayRegion)$/;" m struct:JNINativeInterface_ -GetIntArrayRegion src/enclave/Include/jni.h /^ void GetIntArrayRegion(jintArray array,$/;" f struct:JNIEnv_ -GetIntField src/enclave/Include/jni.h /^ jint (JNICALL *GetIntField)$/;" m struct:JNINativeInterface_ -GetIntField src/enclave/Include/jni.h /^ jint GetIntField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetJavaVM src/enclave/Include/jni.h /^ jint (JNICALL *GetJavaVM)$/;" m struct:JNINativeInterface_ -GetJavaVM src/enclave/Include/jni.h /^ jint GetJavaVM(JavaVM **vm) {$/;" f struct:JNIEnv_ -GetLongArrayElements src/enclave/Include/jni.h /^ jlong * (JNICALL *GetLongArrayElements)$/;" m struct:JNINativeInterface_ -GetLongArrayElements src/enclave/Include/jni.h /^ jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetLongArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetLongArrayRegion)$/;" m struct:JNINativeInterface_ -GetLongArrayRegion src/enclave/Include/jni.h /^ void GetLongArrayRegion(jlongArray array,$/;" f struct:JNIEnv_ -GetLongField src/enclave/Include/jni.h /^ jlong (JNICALL *GetLongField)$/;" m struct:JNINativeInterface_ -GetLongField src/enclave/Include/jni.h /^ jlong GetLongField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetMethodID src/enclave/Include/jni.h /^ jmethodID (JNICALL *GetMethodID)$/;" m struct:JNINativeInterface_ -GetMethodID src/enclave/Include/jni.h /^ jmethodID GetMethodID(jclass clazz, const char *name,$/;" f struct:JNIEnv_ -GetObjectArrayElement src/enclave/Include/jni.h /^ jobject (JNICALL *GetObjectArrayElement)$/;" m struct:JNINativeInterface_ -GetObjectArrayElement src/enclave/Include/jni.h /^ jobject GetObjectArrayElement(jobjectArray array, jsize index) {$/;" f struct:JNIEnv_ -GetObjectClass src/enclave/Include/jni.h /^ jclass (JNICALL *GetObjectClass)$/;" m struct:JNINativeInterface_ -GetObjectClass src/enclave/Include/jni.h /^ jclass GetObjectClass(jobject obj) {$/;" f struct:JNIEnv_ -GetObjectField src/enclave/Include/jni.h /^ jobject (JNICALL *GetObjectField)$/;" m struct:JNINativeInterface_ -GetObjectField src/enclave/Include/jni.h /^ jobject GetObjectField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetObjectRefType src/enclave/Include/jni.h /^ jobjectRefType (JNICALL *GetObjectRefType)$/;" m struct:JNINativeInterface_ -GetObjectRefType src/enclave/Include/jni.h /^ jobjectRefType GetObjectRefType(jobject obj) {$/;" f struct:JNIEnv_ -GetOffset src/enclave/Enclave/Flatbuffers.h /^template flatbuffers::Offset GetOffset($/;" f -GetPrimitiveArrayCritical src/enclave/Include/jni.h /^ void * (JNICALL *GetPrimitiveArrayCritical)$/;" m struct:JNINativeInterface_ -GetPrimitiveArrayCritical src/enclave/Include/jni.h /^ void * GetPrimitiveArrayCritical(jarray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetShortArrayElements src/enclave/Include/jni.h /^ jshort * (JNICALL *GetShortArrayElements)$/;" m struct:JNINativeInterface_ -GetShortArrayElements src/enclave/Include/jni.h /^ jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetShortArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *GetShortArrayRegion)$/;" m struct:JNINativeInterface_ -GetShortArrayRegion src/enclave/Include/jni.h /^ void GetShortArrayRegion(jshortArray array,$/;" f struct:JNIEnv_ -GetShortField src/enclave/Include/jni.h /^ jshort (JNICALL *GetShortField)$/;" m struct:JNINativeInterface_ -GetShortField src/enclave/Include/jni.h /^ jshort GetShortField(jobject obj, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticBooleanField src/enclave/Include/jni.h /^ jboolean (JNICALL *GetStaticBooleanField)$/;" m struct:JNINativeInterface_ -GetStaticBooleanField src/enclave/Include/jni.h /^ jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticByteField src/enclave/Include/jni.h /^ jbyte (JNICALL *GetStaticByteField)$/;" m struct:JNINativeInterface_ -GetStaticByteField src/enclave/Include/jni.h /^ jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticCharField src/enclave/Include/jni.h /^ jchar (JNICALL *GetStaticCharField)$/;" m struct:JNINativeInterface_ -GetStaticCharField src/enclave/Include/jni.h /^ jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticDoubleField src/enclave/Include/jni.h /^ jdouble (JNICALL *GetStaticDoubleField)$/;" m struct:JNINativeInterface_ -GetStaticDoubleField src/enclave/Include/jni.h /^ jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticFieldID src/enclave/Include/jni.h /^ jfieldID (JNICALL *GetStaticFieldID)$/;" m struct:JNINativeInterface_ -GetStaticFieldID src/enclave/Include/jni.h /^ jfieldID GetStaticFieldID(jclass clazz, const char *name,$/;" f struct:JNIEnv_ -GetStaticFloatField src/enclave/Include/jni.h /^ jfloat (JNICALL *GetStaticFloatField)$/;" m struct:JNINativeInterface_ -GetStaticFloatField src/enclave/Include/jni.h /^ jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticIntField src/enclave/Include/jni.h /^ jint (JNICALL *GetStaticIntField)$/;" m struct:JNINativeInterface_ -GetStaticIntField src/enclave/Include/jni.h /^ jint GetStaticIntField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticLongField src/enclave/Include/jni.h /^ jlong (JNICALL *GetStaticLongField)$/;" m struct:JNINativeInterface_ -GetStaticLongField src/enclave/Include/jni.h /^ jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticMethodID src/enclave/Include/jni.h /^ jmethodID (JNICALL *GetStaticMethodID)$/;" m struct:JNINativeInterface_ -GetStaticMethodID src/enclave/Include/jni.h /^ jmethodID GetStaticMethodID(jclass clazz, const char *name,$/;" f struct:JNIEnv_ -GetStaticObjectField src/enclave/Include/jni.h /^ jobject (JNICALL *GetStaticObjectField)$/;" m struct:JNINativeInterface_ -GetStaticObjectField src/enclave/Include/jni.h /^ jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStaticShortField src/enclave/Include/jni.h /^ jshort (JNICALL *GetStaticShortField)$/;" m struct:JNINativeInterface_ -GetStaticShortField src/enclave/Include/jni.h /^ jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {$/;" f struct:JNIEnv_ -GetStringChars src/enclave/Include/jni.h /^ const jchar *(JNICALL *GetStringChars)$/;" m struct:JNINativeInterface_ -GetStringChars src/enclave/Include/jni.h /^ const jchar *GetStringChars(jstring str, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetStringCritical src/enclave/Include/jni.h /^ const jchar * (JNICALL *GetStringCritical)$/;" m struct:JNINativeInterface_ -GetStringCritical src/enclave/Include/jni.h /^ const jchar * GetStringCritical(jstring string, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetStringLength src/enclave/Include/jni.h /^ jsize (JNICALL *GetStringLength)$/;" m struct:JNINativeInterface_ -GetStringLength src/enclave/Include/jni.h /^ jsize GetStringLength(jstring str) {$/;" f struct:JNIEnv_ -GetStringRegion src/enclave/Include/jni.h /^ void (JNICALL *GetStringRegion)$/;" m struct:JNINativeInterface_ -GetStringRegion src/enclave/Include/jni.h /^ void GetStringRegion(jstring str, jsize start, jsize len, jchar *buf) {$/;" f struct:JNIEnv_ -GetStringUTFChars src/enclave/Include/jni.h /^ const char* (JNICALL *GetStringUTFChars)$/;" m struct:JNINativeInterface_ -GetStringUTFChars src/enclave/Include/jni.h /^ const char* GetStringUTFChars(jstring str, jboolean *isCopy) {$/;" f struct:JNIEnv_ -GetStringUTFLength src/enclave/Include/jni.h /^ jsize (JNICALL *GetStringUTFLength)$/;" m struct:JNINativeInterface_ -GetStringUTFLength src/enclave/Include/jni.h /^ jsize GetStringUTFLength(jstring str) {$/;" f struct:JNIEnv_ -GetStringUTFRegion src/enclave/Include/jni.h /^ void (JNICALL *GetStringUTFRegion)$/;" m struct:JNINativeInterface_ -GetStringUTFRegion src/enclave/Include/jni.h /^ void GetStringUTFRegion(jstring str, jsize start, jsize len, char *buf) {$/;" f struct:JNIEnv_ -GetSuperclass src/enclave/Include/jni.h /^ jclass (JNICALL *GetSuperclass)$/;" m struct:JNINativeInterface_ -GetSuperclass src/enclave/Include/jni.h /^ jclass GetSuperclass(jclass sub) {$/;" f struct:JNIEnv_ -GetVersion src/enclave/Include/jni.h /^ jint (JNICALL *GetVersion)(JNIEnv *env);$/;" m struct:JNINativeInterface_ -GetVersion src/enclave/Include/jni.h /^ jint GetVersion() {$/;" f struct:JNIEnv_ -IAS_EPID_GROUP_STATUS_REKEY_AVAILABLE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_EPID_GROUP_STATUS_REKEY_AVAILABLE_BIT_POS /;" d -IAS_EPID_GROUP_STATUS_REVOKED_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_EPID_GROUP_STATUS_REVOKED_BIT_POS /;" d -IAS_PSE_ATTRIBUTES_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_ATTRIBUTES_INVALID,$/;" e enum:__anon3 -IAS_PSE_DESC_TYPE_NOT_SUPPORTED src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_DESC_TYPE_NOT_SUPPORTED,$/;" e enum:__anon3 -IAS_PSE_EVAL_STATUS_EPID_GROUP_REVOKED_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_PSE_EVAL_STATUS_EPID_GROUP_REVOKED_BIT_POS /;" d -IAS_PSE_EVAL_STATUS_ISVSVN_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_PSE_EVAL_STATUS_ISVSVN_OUT_OF_DATE_BIT_POS /;" d -IAS_PSE_EVAL_STATUS_PRIVRL_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_PSE_EVAL_STATUS_PRIVRL_OUT_OF_DATE_BIT_POS /;" d -IAS_PSE_EVAL_STATUS_PSDASVN_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_PSE_EVAL_STATUS_PSDASVN_OUT_OF_DATE_BIT_POS /;" d -IAS_PSE_EVAL_STATUS_SIGRL_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_PSE_EVAL_STATUS_SIGRL_OUT_OF_DATE_BIT_POS /;" d -IAS_PSE_ISVSVN_OUT_OF_DATE src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_ISVSVN_OUT_OF_DATE,$/;" e enum:__anon3 -IAS_PSE_MISCSELECT_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_MISCSELECT_INVALID,$/;" e enum:__anon3 -IAS_PSE_MRSIGNER_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_MRSIGNER_INVALID,$/;" e enum:__anon3 -IAS_PSE_OK src/enclave/ServiceProvider/ias_ra.h /^ IAS_PSE_OK,$/;" e enum:__anon3 -IAS_PS_HW_CA_ID_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_CA_ID_INVALID,$/;" e enum:__anon3 -IAS_PS_HW_GID_REVOKED src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_GID_REVOKED,$/;" e enum:__anon3 -IAS_PS_HW_PRIVKEY_RLVER_MISMATCH src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_PRIVKEY_RLVER_MISMATCH,$/;" e enum:__anon3 -IAS_PS_HW_PSDA_SVN_OUT_OF_DATE src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_PSDA_SVN_OUT_OF_DATE,$/;" e enum:__anon3 -IAS_PS_HW_SEC_INFO_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_SEC_INFO_INVALID,$/;" e enum:__anon3 -IAS_PS_HW_SIG_RLVER_MISMATCH src/enclave/ServiceProvider/ias_ra.h /^ IAS_PS_HW_SIG_RLVER_MISMATCH,$/;" e enum:__anon3 -IAS_QUOTE_GROUP_OUT_OF_DATE src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_GROUP_OUT_OF_DATE,$/;" e enum:__anon2 -IAS_QUOTE_GROUP_REVOKED src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_GROUP_REVOKED,$/;" e enum:__anon2 -IAS_QUOTE_KEY_REVOKED src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_KEY_REVOKED,$/;" e enum:__anon2 -IAS_QUOTE_OK src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_OK,$/;" e enum:__anon2 -IAS_QUOTE_SIGNATURE_INVALID src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_SIGNATURE_INVALID,$/;" e enum:__anon2 -IAS_QUOTE_SIGNATURE_REVOKED src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_SIGNATURE_REVOKED,$/;" e enum:__anon2 -IAS_QUOTE_SIGRL_VERSION_MISMATCH src/enclave/ServiceProvider/ias_ra.h /^ IAS_QUOTE_SIGRL_VERSION_MISMATCH,$/;" e enum:__anon2 -IAS_REVOC_REASON_AA_COMPROMISE src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_AA_COMPROMISE,$/;" e enum:__anon4 -IAS_REVOC_REASON_CA_COMPROMISED src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_CA_COMPROMISED,$/;" e enum:__anon4 -IAS_REVOC_REASON_CERTIFICATE_HOLD src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_CERTIFICATE_HOLD,$/;" e enum:__anon4 -IAS_REVOC_REASON_CESSATION_OF_OPERATION src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_CESSATION_OF_OPERATION,$/;" e enum:__anon4 -IAS_REVOC_REASON_KEY_COMPROMISE src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_KEY_COMPROMISE,$/;" e enum:__anon4 -IAS_REVOC_REASON_NONE src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_NONE,$/;" e enum:__anon4 -IAS_REVOC_REASON_PRIVILEGE_WITHDRAWN src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_PRIVILEGE_WITHDRAWN,$/;" e enum:__anon4 -IAS_REVOC_REASON_SUPERCEDED src/enclave/ServiceProvider/ias_ra.h /^ IAS_REVOC_REASON_SUPERCEDED,$/;" e enum:__anon4 -IAS_TCB_EVAL_STATUS_CPUSVN_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_TCB_EVAL_STATUS_CPUSVN_OUT_OF_DATE_BIT_POS /;" d -IAS_TCB_EVAL_STATUS_ISVSVN_OUT_OF_DATE_BIT_POS src/enclave/ServiceProvider/ias_ra.h /^#define IAS_TCB_EVAL_STATUS_ISVSVN_OUT_OF_DATE_BIT_POS /;" d -ID_U src/enclave/Enclave/isv_enclave.cpp /^const char ID_U[] = "SGXRAENCLAVE";$/;" v -ID_U src/enclave/ServiceProvider/ecp.cpp /^const char ID_U[] = "SGXRAENCLAVE";$/;" v -ID_V src/enclave/Enclave/isv_enclave.cpp /^const char ID_V[] = "SGXRASERVER";$/;" v -ID_V src/enclave/ServiceProvider/ecp.cpp /^const char ID_V[] = "SGXRASERVER";$/;" v -ISVSVN_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define ISVSVN_SIZE /;" d -ISVSVN_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define ISVSVN_SIZE /;" d -ISV_KDF_ID src/enclave/Enclave/isv_enclave.cpp /^#define ISV_KDF_ID /;" d file: -ISV_KDF_ID src/enclave/ServiceProvider/service_provider.cpp /^#define ISV_KDF_ID /;" d file: -IsAssignableFrom src/enclave/Include/jni.h /^ jboolean (JNICALL *IsAssignableFrom)$/;" m struct:JNINativeInterface_ -IsAssignableFrom src/enclave/Include/jni.h /^ jboolean IsAssignableFrom(jclass sub, jclass sup) {$/;" f struct:JNIEnv_ -IsInstanceOf src/enclave/Include/jni.h /^ jboolean (JNICALL *IsInstanceOf)$/;" m struct:JNINativeInterface_ -IsInstanceOf src/enclave/Include/jni.h /^ jboolean IsInstanceOf(jobject obj, jclass clazz) {$/;" f struct:JNIEnv_ -IsSameObject src/enclave/Include/jni.h /^ jboolean (JNICALL *IsSameObject)$/;" m struct:JNINativeInterface_ -IsSameObject src/enclave/Include/jni.h /^ jboolean IsSameObject(jobject obj1, jobject obj2) {$/;" f struct:JNIEnv_ -JDK1_2 src/enclave/Include/jni.h /^#define JDK1_2$/;" d -JDK1_4 src/enclave/Include/jni.h /^#define JDK1_4$/;" d -JNICALL src/enclave/Include/jni_md.h /^#define JNICALL$/;" d -JNIEXPORT src/enclave/Include/jni_md.h /^ #define JNIEXPORT /;" d -JNIEXPORT src/enclave/Include/jni_md.h /^ #define JNIEXPORT$/;" d -JNIEnv src/enclave/Include/jni.h /^typedef JNIEnv_ JNIEnv;$/;" t -JNIEnv src/enclave/Include/jni.h /^typedef const struct JNINativeInterface_ *JNIEnv;$/;" t typeref:struct:JNINativeInterface_ -JNIEnv_ src/enclave/Include/jni.h /^struct JNIEnv_ {$/;" s -JNIGlobalRefType src/enclave/Include/jni.h /^ JNIGlobalRefType = 2,$/;" e enum:_jobjectType -JNIIMPORT src/enclave/Include/jni_md.h /^ #define JNIIMPORT /;" d -JNIIMPORT src/enclave/Include/jni_md.h /^ #define JNIIMPORT$/;" d -JNIInvalidRefType src/enclave/Include/jni.h /^ JNIInvalidRefType = 0,$/;" e enum:_jobjectType -JNIInvokeInterface_ src/enclave/Include/jni.h /^struct JNIInvokeInterface_ {$/;" s -JNILocalRefType src/enclave/Include/jni.h /^ JNILocalRefType = 1,$/;" e enum:_jobjectType -JNINativeInterface_ src/enclave/Include/jni.h /^struct JNINativeInterface_ {$/;" s -JNINativeMethod src/enclave/Include/jni.h /^} JNINativeMethod;$/;" t typeref:struct:__anon1 -JNIWeakGlobalRefType src/enclave/Include/jni.h /^ JNIWeakGlobalRefType = 3$/;" e enum:_jobjectType -JNI_ABORT src/enclave/Include/jni.h /^#define JNI_ABORT /;" d -JNI_COMMIT src/enclave/Include/jni.h /^#define JNI_COMMIT /;" d -JNI_EDETACHED src/enclave/Include/jni.h /^#define JNI_EDETACHED /;" d -JNI_EEXIST src/enclave/Include/jni.h /^#define JNI_EEXIST /;" d -JNI_EINVAL src/enclave/Include/jni.h /^#define JNI_EINVAL /;" d -JNI_ENOMEM src/enclave/Include/jni.h /^#define JNI_ENOMEM /;" d -JNI_ERR src/enclave/Include/jni.h /^#define JNI_ERR /;" d -JNI_EVERSION src/enclave/Include/jni.h /^#define JNI_EVERSION /;" d -JNI_FALSE src/enclave/Include/jni.h /^#define JNI_FALSE /;" d -JNI_OK src/enclave/Include/jni.h /^#define JNI_OK /;" d -JNI_TRUE src/enclave/Include/jni.h /^#define JNI_TRUE /;" d -JNI_VERSION_1_1 src/enclave/Include/jni.h /^#define JNI_VERSION_1_1 /;" d -JNI_VERSION_1_2 src/enclave/Include/jni.h /^#define JNI_VERSION_1_2 /;" d -JNI_VERSION_1_4 src/enclave/Include/jni.h /^#define JNI_VERSION_1_4 /;" d -JNI_VERSION_1_6 src/enclave/Include/jni.h /^#define JNI_VERSION_1_6 /;" d -JOIN_H src/enclave/Enclave/Join.h /^#define JOIN_H$/;" d -JavaVM src/enclave/Include/jni.h /^typedef JavaVM_ JavaVM;$/;" t -JavaVM src/enclave/Include/jni.h /^typedef const struct JNIInvokeInterface_ *JavaVM;$/;" t typeref:struct:JNIInvokeInterface_ -JavaVMAttachArgs src/enclave/Include/jni.h /^typedef struct JavaVMAttachArgs {$/;" s -JavaVMAttachArgs src/enclave/Include/jni.h /^} JavaVMAttachArgs;$/;" t typeref:struct:JavaVMAttachArgs -JavaVMInitArgs src/enclave/Include/jni.h /^typedef struct JavaVMInitArgs {$/;" s -JavaVMInitArgs src/enclave/Include/jni.h /^} JavaVMInitArgs;$/;" t typeref:struct:JavaVMInitArgs -JavaVMOption src/enclave/Include/jni.h /^typedef struct JavaVMOption {$/;" s -JavaVMOption src/enclave/Include/jni.h /^} JavaVMOption;$/;" t typeref:struct:JavaVMOption -JavaVM_ src/enclave/Include/jni.h /^struct JavaVM_ {$/;" s -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Decrypt src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Decrypt($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Encrypt src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Encrypt($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_ExternalSort src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_ExternalSort($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Filter src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Filter($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_FindRangeBounds src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_FindRangeBounds($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep1 src/enclave/App/App.cpp /^Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep1($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep2 src/enclave/App/App.cpp /^Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep2($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousSortMergeJoin src/enclave/App/App.cpp /^Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousSortMergeJoin($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_PartitionForSort src/enclave/App/App.cpp /^Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_PartitionForSort($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Project src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Project($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation0 src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation0($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation1 src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation1($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation2 src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation2($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation3 src/enclave/App/App.cpp /^JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_RemoteAttestation3($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Sample src/enclave/App/App.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Sample($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_ScanCollectLastPrimary src/enclave/App/App.cpp /^Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_ScanCollectLastPrimary($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_StartEnclave src/enclave/App/App.cpp /^JNIEXPORT jlong JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_StartEnclave($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_StopEnclave src/enclave/App/App.cpp /^JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_StopEnclave($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SP_LoadKeys src/enclave/ServiceProvider/Main.cpp /^JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_LoadKeys($/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg0 src/enclave/ServiceProvider/Main.cpp /^JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg0(JNIEnv *env, jobject obj, jbyteArray msg0_input) {$/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg1 src/enclave/ServiceProvider/Main.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg1(JNIEnv *env, jobject obj, jbyteArray msg1_input) {$/;" f -Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg3 src/enclave/ServiceProvider/Main.cpp /^JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg3(JNIEnv *env, jobject obj, jbyteArray msg3_input) {$/;" f -KeySchedule src/enclave/Enclave/sgxaes.cpp /^KeySchedule::KeySchedule(const unsigned char* k, size_t k_len) {$/;" f class:KeySchedule -KeySchedule src/enclave/Enclave/sgxaes.h /^ KeySchedule(const KeySchedule& other) {$/;" f struct:KeySchedule -KeySchedule src/enclave/Enclave/sgxaes.h /^struct KeySchedule {$/;" s -LC_AESCTR_KEY_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_AESCTR_KEY_SIZE /;" d -LC_AESGCM_IV_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_AESGCM_IV_SIZE /;" d -LC_AESGCM_KEY_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_AESGCM_KEY_SIZE /;" d -LC_AESGCM_MAC_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_AESGCM_MAC_SIZE /;" d -LC_CMAC_KEY_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_CMAC_KEY_SIZE /;" d -LC_CMAC_MAC_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_CMAC_MAC_SIZE /;" d -LC_ECP256_KEY_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_ECP256_KEY_SIZE /;" d -LC_ERROR_INVALID_PARAMETER src/enclave/ServiceProvider/sp_crypto.h /^ LC_ERROR_INVALID_PARAMETER , \/\/ The parameter is incorrect$/;" e enum:lc_status_t -LC_ERROR_OUT_OF_MEMORY src/enclave/ServiceProvider/sp_crypto.h /^ LC_ERROR_OUT_OF_MEMORY , \/\/ Not enough memory is available to complete this operation$/;" e enum:lc_status_t -LC_ERROR_UNEXPECTED src/enclave/ServiceProvider/sp_crypto.h /^ LC_ERROR_UNEXPECTED , \/\/ Unexpected error$/;" e enum:lc_status_t -LC_LIBCRYPTO_API src/enclave/ServiceProvider/sp_crypto.h /^ #define LC_LIBCRYPTO_API /;" d -LC_LIBCRYPTO_API src/enclave/ServiceProvider/sp_crypto.h /^ #define LC_LIBCRYPTO_API /;" d -LC_NISTP_ECP256_KEY_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_NISTP_ECP256_KEY_SIZE /;" d -LC_SHA256_HASH_SIZE src/enclave/ServiceProvider/sp_crypto.h /^#define LC_SHA256_HASH_SIZE /;" d -LC_SUCCESS src/enclave/ServiceProvider/sp_crypto.h /^ LC_SUCCESS = 0,$/;" e enum:lc_status_t -LEAPOCH src/enclave/Enclave/util.cpp /^#define LEAPOCH /;" d file: -MAC src/enclave/Enclave/Crypto.h /^ MAC() {$/;" f class:MAC -MAC src/enclave/Enclave/Crypto.h /^class MAC {$/;" c -MAC_KEY_SIZE src/enclave/ServiceProvider/ecp.cpp /^#define MAC_KEY_SIZE /;" d file: -MAX_BLOCK_SIZE src/enclave/Include/define.h /^#define MAX_BLOCK_SIZE /;" d -MAX_NUM_STREAMS src/enclave/Include/define.h /^#define MAX_NUM_STREAMS /;" d -MAX_PATH src/enclave/App/App.cpp /^# define MAX_PATH /;" d file: -MSG3_BODY_SIZE src/enclave/ServiceProvider/sample_messages.h /^#define MSG3_BODY_SIZE /;" d -MergeItem src/enclave/Enclave/Sort.cpp /^class MergeItem {$/;" c file: -MonitorEnter src/enclave/Include/jni.h /^ jint (JNICALL *MonitorEnter)$/;" m struct:JNINativeInterface_ -MonitorEnter src/enclave/Include/jni.h /^ jint MonitorEnter(jobject obj) {$/;" f struct:JNIEnv_ -MonitorExit src/enclave/Include/jni.h /^ jint (JNICALL *MonitorExit)$/;" m struct:JNINativeInterface_ -MonitorExit src/enclave/Include/jni.h /^ jint MonitorExit(jobject obj) {$/;" f struct:JNIEnv_ -New src/enclave/Enclave/sgxaes.h /^ New,$/;" e enum:State -NewBooleanArray src/enclave/Include/jni.h /^ jbooleanArray (JNICALL *NewBooleanArray)$/;" m struct:JNINativeInterface_ -NewBooleanArray src/enclave/Include/jni.h /^ jbooleanArray NewBooleanArray(jsize len) {$/;" f struct:JNIEnv_ -NewByteArray src/enclave/Include/jni.h /^ jbyteArray (JNICALL *NewByteArray)$/;" m struct:JNINativeInterface_ -NewByteArray src/enclave/Include/jni.h /^ jbyteArray NewByteArray(jsize len) {$/;" f struct:JNIEnv_ -NewCharArray src/enclave/Include/jni.h /^ jcharArray (JNICALL *NewCharArray)$/;" m struct:JNINativeInterface_ -NewCharArray src/enclave/Include/jni.h /^ jcharArray NewCharArray(jsize len) {$/;" f struct:JNIEnv_ -NewDirectByteBuffer src/enclave/Include/jni.h /^ jobject (JNICALL *NewDirectByteBuffer)$/;" m struct:JNINativeInterface_ -NewDirectByteBuffer src/enclave/Include/jni.h /^ jobject NewDirectByteBuffer(void* address, jlong capacity) {$/;" f struct:JNIEnv_ -NewDoubleArray src/enclave/Include/jni.h /^ jdoubleArray (JNICALL *NewDoubleArray)$/;" m struct:JNINativeInterface_ -NewDoubleArray src/enclave/Include/jni.h /^ jdoubleArray NewDoubleArray(jsize len) {$/;" f struct:JNIEnv_ -NewFloatArray src/enclave/Include/jni.h /^ jfloatArray (JNICALL *NewFloatArray)$/;" m struct:JNINativeInterface_ -NewFloatArray src/enclave/Include/jni.h /^ jfloatArray NewFloatArray(jsize len) {$/;" f struct:JNIEnv_ -NewGlobalRef src/enclave/Include/jni.h /^ jobject (JNICALL *NewGlobalRef)$/;" m struct:JNINativeInterface_ -NewGlobalRef src/enclave/Include/jni.h /^ jobject NewGlobalRef(jobject lobj) {$/;" f struct:JNIEnv_ -NewIntArray src/enclave/Include/jni.h /^ jintArray (JNICALL *NewIntArray)$/;" m struct:JNINativeInterface_ -NewIntArray src/enclave/Include/jni.h /^ jintArray NewIntArray(jsize len) {$/;" f struct:JNIEnv_ -NewLocalRef src/enclave/Include/jni.h /^ jobject (JNICALL *NewLocalRef)$/;" m struct:JNINativeInterface_ -NewLocalRef src/enclave/Include/jni.h /^ jobject NewLocalRef(jobject ref) {$/;" f struct:JNIEnv_ -NewLongArray src/enclave/Include/jni.h /^ jlongArray (JNICALL *NewLongArray)$/;" m struct:JNINativeInterface_ -NewLongArray src/enclave/Include/jni.h /^ jlongArray NewLongArray(jsize len) {$/;" f struct:JNIEnv_ -NewObject src/enclave/Include/jni.h /^ jobject (JNICALL *NewObject)$/;" m struct:JNINativeInterface_ -NewObject src/enclave/Include/jni.h /^ jobject NewObject(jclass clazz, jmethodID methodID, ...) {$/;" f struct:JNIEnv_ -NewObjectA src/enclave/Include/jni.h /^ jobject (JNICALL *NewObjectA)$/;" m struct:JNINativeInterface_ -NewObjectA src/enclave/Include/jni.h /^ jobject NewObjectA(jclass clazz, jmethodID methodID,$/;" f struct:JNIEnv_ -NewObjectArray src/enclave/Include/jni.h /^ jobjectArray (JNICALL *NewObjectArray)$/;" m struct:JNINativeInterface_ -NewObjectArray src/enclave/Include/jni.h /^ jobjectArray NewObjectArray(jsize len, jclass clazz,$/;" f struct:JNIEnv_ -NewObjectV src/enclave/Include/jni.h /^ jobject (JNICALL *NewObjectV)$/;" m struct:JNINativeInterface_ -NewObjectV src/enclave/Include/jni.h /^ jobject NewObjectV(jclass clazz, jmethodID methodID,$/;" f struct:JNIEnv_ -NewShortArray src/enclave/Include/jni.h /^ jshortArray (JNICALL *NewShortArray)$/;" m struct:JNINativeInterface_ -NewShortArray src/enclave/Include/jni.h /^ jshortArray NewShortArray(jsize len) {$/;" f struct:JNIEnv_ -NewString src/enclave/Include/jni.h /^ jstring (JNICALL *NewString)$/;" m struct:JNINativeInterface_ -NewString src/enclave/Include/jni.h /^ jstring NewString(const jchar *unicode, jsize len) {$/;" f struct:JNIEnv_ -NewStringUTF src/enclave/Include/jni.h /^ jstring (JNICALL *NewStringUTF)$/;" m struct:JNINativeInterface_ -NewStringUTF src/enclave/Include/jni.h /^ jstring NewStringUTF(const char *utf) {$/;" f struct:JNIEnv_ -NewWeakGlobalRef src/enclave/Include/jni.h /^ jweak (JNICALL *NewWeakGlobalRef)$/;" m struct:JNINativeInterface_ -NewWeakGlobalRef src/enclave/Include/jni.h /^ jweak NewWeakGlobalRef(jobject obj) {$/;" f struct:JNIEnv_ -PRINT_BYTE_ARRAY src/enclave/Common/common.h /^inline void PRINT_BYTE_ARRAY(void *file, void *mem, uint32_t len)$/;" f -PROJECT_H src/enclave/Enclave/Project.h /^#define PROJECT_H$/;" d -PSDA_SVN_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define PSDA_SVN_SIZE /;" d -PSDA_SVN_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define PSDA_SVN_SIZE /;" d -PSVN_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define PSVN_SIZE /;" d -PSVN_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define PSVN_SIZE /;" d -PopLocalFrame src/enclave/Include/jni.h /^ jobject (JNICALL *PopLocalFrame)$/;" m struct:JNINativeInterface_ -PopLocalFrame src/enclave/Include/jni.h /^ jobject PopLocalFrame(jobject result) {$/;" f struct:JNIEnv_ -PushLocalFrame src/enclave/Include/jni.h /^ jint (JNICALL *PushLocalFrame)$/;" m struct:JNINativeInterface_ -PushLocalFrame src/enclave/Include/jni.h /^ jint PushLocalFrame(jint capacity) {$/;" f struct:JNIEnv_ -RA_KEY_H src/enclave/Enclave/key.h /^#define RA_KEY_H$/;" d -REMOTE_ATTESTATION_H src/enclave/Enclave/isv_enclave.h /^#define REMOTE_ATTESTATION_H$/;" d -RegisterNatives src/enclave/Include/jni.h /^ jint (JNICALL *RegisterNatives)$/;" m struct:JNINativeInterface_ -RegisterNatives src/enclave/Include/jni.h /^ jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,$/;" f struct:JNIEnv_ -ReleaseBooleanArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseBooleanArrayElements)$/;" m struct:JNINativeInterface_ -ReleaseBooleanArrayElements src/enclave/Include/jni.h /^ void ReleaseBooleanArrayElements(jbooleanArray array,$/;" f struct:JNIEnv_ -ReleaseByteArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseByteArrayElements)$/;" m struct:JNINativeInterface_ -ReleaseByteArrayElements src/enclave/Include/jni.h /^ void ReleaseByteArrayElements(jbyteArray array,$/;" f struct:JNIEnv_ -ReleaseCharArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseCharArrayElements)$/;" m struct:JNINativeInterface_ -ReleaseCharArrayElements src/enclave/Include/jni.h /^ void ReleaseCharArrayElements(jcharArray array,$/;" f struct:JNIEnv_ -ReleaseDoubleArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseDoubleArrayElements)$/;" m struct:JNINativeInterface_ -ReleaseDoubleArrayElements src/enclave/Include/jni.h /^ void ReleaseDoubleArrayElements(jdoubleArray array,$/;" f struct:JNIEnv_ -ReleaseFloatArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseFloatArrayElements)$/;" m struct:JNINativeInterface_ -ReleaseFloatArrayElements src/enclave/Include/jni.h /^ void ReleaseFloatArrayElements(jfloatArray array,$/;" f struct:JNIEnv_ -ReleaseIntArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseIntArrayElements)$/;" m struct:JNINativeInterface_ -ReleaseIntArrayElements src/enclave/Include/jni.h /^ void ReleaseIntArrayElements(jintArray array,$/;" f struct:JNIEnv_ -ReleaseLongArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseLongArrayElements)$/;" m struct:JNINativeInterface_ -ReleaseLongArrayElements src/enclave/Include/jni.h /^ void ReleaseLongArrayElements(jlongArray array,$/;" f struct:JNIEnv_ -ReleasePrimitiveArrayCritical src/enclave/Include/jni.h /^ void (JNICALL *ReleasePrimitiveArrayCritical)$/;" m struct:JNINativeInterface_ -ReleasePrimitiveArrayCritical src/enclave/Include/jni.h /^ void ReleasePrimitiveArrayCritical(jarray array, void *carray, jint mode) {$/;" f struct:JNIEnv_ -ReleaseShortArrayElements src/enclave/Include/jni.h /^ void (JNICALL *ReleaseShortArrayElements)$/;" m struct:JNINativeInterface_ -ReleaseShortArrayElements src/enclave/Include/jni.h /^ void ReleaseShortArrayElements(jshortArray array,$/;" f struct:JNIEnv_ -ReleaseStringChars src/enclave/Include/jni.h /^ void (JNICALL *ReleaseStringChars)$/;" m struct:JNINativeInterface_ -ReleaseStringChars src/enclave/Include/jni.h /^ void ReleaseStringChars(jstring str, const jchar *chars) {$/;" f struct:JNIEnv_ -ReleaseStringCritical src/enclave/Include/jni.h /^ void (JNICALL *ReleaseStringCritical)$/;" m struct:JNINativeInterface_ -ReleaseStringCritical src/enclave/Include/jni.h /^ void ReleaseStringCritical(jstring string, const jchar *cstring) {$/;" f struct:JNIEnv_ -ReleaseStringUTFChars src/enclave/Include/jni.h /^ void (JNICALL *ReleaseStringUTFChars)$/;" m struct:JNINativeInterface_ -ReleaseStringUTFChars src/enclave/Include/jni.h /^ void ReleaseStringUTFChars(jstring str, const char* chars) {$/;" f struct:JNIEnv_ -RowIterator src/enclave/Enclave/Flatbuffers.h /^ typedef flatbuffers::Vector>::const_iterator RowIterator;$/;" t class:EncryptedBlocksToRowReader -SAFE_FREE src/enclave/ServiceProvider/service_provider.cpp /^#define SAFE_FREE(/;" d file: -SAMPLE_AESCTR_KEY_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_AESCTR_KEY_SIZE /;" d -SAMPLE_AESGCM_IV_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_AESGCM_IV_SIZE /;" d -SAMPLE_AESGCM_KEY_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_AESGCM_KEY_SIZE /;" d -SAMPLE_AESGCM_MAC_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_AESGCM_MAC_SIZE /;" d -SAMPLE_AES_CMAC_KDF_ID src/enclave/ServiceProvider/service_provider.h /^const uint16_t SAMPLE_AES_CMAC_KDF_ID = 0x0001;$/;" v -SAMPLE_CMAC_KEY_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_CMAC_KEY_SIZE /;" d -SAMPLE_CMAC_MAC_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_CMAC_MAC_SIZE /;" d -SAMPLE_CPUSVN_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_CPUSVN_SIZE /;" d -SAMPLE_DERIVE_KEY_MK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_MK,$/;" e enum:_sample_derive_key_type_t -SAMPLE_DERIVE_KEY_MK_VK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_MK_VK,$/;" e enum:_sample_derive_key_type_t -SAMPLE_DERIVE_KEY_SK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_SK,$/;" e enum:_sample_derive_key_type_t -SAMPLE_DERIVE_KEY_SMK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_SMK = 0,$/;" e enum:_sample_derive_key_type_t -SAMPLE_DERIVE_KEY_SMK_SK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_SMK_SK = 0,$/;" e enum:_sample_derive_key_type_t -SAMPLE_DERIVE_KEY_VK src/enclave/ServiceProvider/ecp.h /^ SAMPLE_DERIVE_KEY_VK,$/;" e enum:_sample_derive_key_type_t -SAMPLE_ECP256_KEY_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_ECP256_KEY_SIZE /;" d -SAMPLE_ECP_KEY_SIZE src/enclave/ServiceProvider/ecp.h /^#define SAMPLE_ECP_KEY_SIZE /;" d -SAMPLE_EC_MAC_SIZE src/enclave/ServiceProvider/ecp.h /^#define SAMPLE_EC_MAC_SIZE /;" d -SAMPLE_ERROR_INVALID_PARAMETER src/enclave/sample_libcrypto/sample_libcrypto.h /^ SAMPLE_ERROR_INVALID_PARAMETER , \/\/ The parameter is incorrect$/;" e enum:sample_status_t -SAMPLE_ERROR_OUT_OF_MEMORY src/enclave/sample_libcrypto/sample_libcrypto.h /^ SAMPLE_ERROR_OUT_OF_MEMORY , \/\/ Not enough memory is available to complete this operation$/;" e enum:sample_status_t -SAMPLE_ERROR_UNEXPECTED src/enclave/sample_libcrypto/sample_libcrypto.h /^ SAMPLE_ERROR_UNEXPECTED , \/\/ Unexpected error$/;" e enum:sample_status_t -SAMPLE_FEBITSIZE src/enclave/ServiceProvider/ecp.h /^ #define SAMPLE_FEBITSIZE /;" d -SAMPLE_FEBITSIZE src/enclave/ServiceProvider/remote_attestation_result.h /^ #define SAMPLE_FEBITSIZE /;" d -SAMPLE_HASH_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_HASH_SIZE /;" d -SAMPLE_LIBCRYPTO_API src/enclave/sample_libcrypto/sample_libcrypto.h /^ #define SAMPLE_LIBCRYPTO_API /;" d -SAMPLE_LIBCRYPTO_API src/enclave/sample_libcrypto/sample_libcrypto.h /^ #define SAMPLE_LIBCRYPTO_API /;" d -SAMPLE_MAC_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_MAC_SIZE /;" d -SAMPLE_MAC_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define SAMPLE_MAC_SIZE /;" d -SAMPLE_NISTP256_KEY_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define SAMPLE_NISTP256_KEY_SIZE /;" d -SAMPLE_NISTP_ECP256_KEY_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_NISTP_ECP256_KEY_SIZE /;" d -SAMPLE_QUOTE_LINKABLE_SIGNATURE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_QUOTE_LINKABLE_SIGNATURE /;" d -SAMPLE_QUOTE_UNLINKABLE_SIGNATURE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_QUOTE_UNLINKABLE_SIGNATURE /;" d -SAMPLE_REPORT_DATA_SIZE src/enclave/ServiceProvider/ias_ra.h /^#define SAMPLE_REPORT_DATA_SIZE /;" d -SAMPLE_SHA256_HASH_SIZE src/enclave/sample_libcrypto/sample_libcrypto.h /^#define SAMPLE_SHA256_HASH_SIZE /;" d -SAMPLE_SP_IV_SIZE src/enclave/ServiceProvider/service_provider.h /^#define SAMPLE_SP_IV_SIZE /;" d -SAMPLE_SP_TAG_SIZE src/enclave/ServiceProvider/remote_attestation_result.h /^#define SAMPLE_SP_TAG_SIZE /;" d -SAMPLE_SP_TAG_SIZE src/enclave/ServiceProvider/service_provider.h /^#define SAMPLE_SP_TAG_SIZE /;" d -SAMPLE_SUCCESS src/enclave/sample_libcrypto/sample_libcrypto.h /^ SAMPLE_SUCCESS = 0,$/;" e enum:sample_status_t -SGX_AES_H src/enclave/Enclave/sgxaes.h /^#define SGX_AES_H$/;" d -SP_IAS_FAILED src/enclave/ServiceProvider/service_provider.h /^ SP_IAS_FAILED,$/;" e enum:__anon5 -SP_INTEGRITY_FAILED src/enclave/ServiceProvider/service_provider.h /^ SP_INTEGRITY_FAILED,$/;" e enum:__anon5 -SP_INTERNAL_ERROR src/enclave/ServiceProvider/service_provider.h /^ SP_INTERNAL_ERROR,$/;" e enum:__anon5 -SP_OK src/enclave/ServiceProvider/service_provider.h /^ SP_OK,$/;" e enum:__anon5 -SP_PROTOCOL_ERROR src/enclave/ServiceProvider/service_provider.h /^ SP_PROTOCOL_ERROR,$/;" e enum:__anon5 -SP_QUOTE_VERIFICATION_FAILED src/enclave/ServiceProvider/service_provider.h /^ SP_QUOTE_VERIFICATION_FAILED,$/;" e enum:__anon5 -SP_QUOTE_VERSION_ERROR src/enclave/ServiceProvider/service_provider.h /^ SP_QUOTE_VERSION_ERROR,$/;" e enum:__anon5 -SP_UNSUPPORTED_EXTENDED_EPID_GROUP src/enclave/ServiceProvider/service_provider.h /^ SP_UNSUPPORTED_EXTENDED_EPID_GROUP,$/;" e enum:__anon5 -SWAP_ENDIAN_32B src/enclave/ServiceProvider/ias_ra.cpp /^ #define SWAP_ENDIAN_32B(/;" d file: -SWAP_ENDIAN_DW src/enclave/ServiceProvider/ias_ra.cpp /^ #define SWAP_ENDIAN_DW(/;" d file: -SetBooleanArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetBooleanArrayRegion)$/;" m struct:JNINativeInterface_ -SetBooleanArrayRegion src/enclave/Include/jni.h /^ void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ -SetBooleanField src/enclave/Include/jni.h /^ void (JNICALL *SetBooleanField)$/;" m struct:JNINativeInterface_ -SetBooleanField src/enclave/Include/jni.h /^ void SetBooleanField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetByteArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetByteArrayRegion)$/;" m struct:JNINativeInterface_ -SetByteArrayRegion src/enclave/Include/jni.h /^ void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ -SetByteField src/enclave/Include/jni.h /^ void (JNICALL *SetByteField)$/;" m struct:JNINativeInterface_ -SetByteField src/enclave/Include/jni.h /^ void SetByteField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetCharArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetCharArrayRegion)$/;" m struct:JNINativeInterface_ -SetCharArrayRegion src/enclave/Include/jni.h /^ void SetCharArrayRegion(jcharArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ -SetCharField src/enclave/Include/jni.h /^ void (JNICALL *SetCharField)$/;" m struct:JNINativeInterface_ -SetCharField src/enclave/Include/jni.h /^ void SetCharField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetDoubleArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetDoubleArrayRegion)$/;" m struct:JNINativeInterface_ -SetDoubleArrayRegion src/enclave/Include/jni.h /^ void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ -SetDoubleField src/enclave/Include/jni.h /^ void (JNICALL *SetDoubleField)$/;" m struct:JNINativeInterface_ -SetDoubleField src/enclave/Include/jni.h /^ void SetDoubleField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetFloatArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetFloatArrayRegion)$/;" m struct:JNINativeInterface_ -SetFloatArrayRegion src/enclave/Include/jni.h /^ void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ -SetFloatField src/enclave/Include/jni.h /^ void (JNICALL *SetFloatField)$/;" m struct:JNINativeInterface_ -SetFloatField src/enclave/Include/jni.h /^ void SetFloatField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetIntArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetIntArrayRegion)$/;" m struct:JNINativeInterface_ -SetIntArrayRegion src/enclave/Include/jni.h /^ void SetIntArrayRegion(jintArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ -SetIntField src/enclave/Include/jni.h /^ void (JNICALL *SetIntField)$/;" m struct:JNINativeInterface_ -SetIntField src/enclave/Include/jni.h /^ void SetIntField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetLongArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetLongArrayRegion)$/;" m struct:JNINativeInterface_ -SetLongArrayRegion src/enclave/Include/jni.h /^ void SetLongArrayRegion(jlongArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ -SetLongField src/enclave/Include/jni.h /^ void (JNICALL *SetLongField)$/;" m struct:JNINativeInterface_ -SetLongField src/enclave/Include/jni.h /^ void SetLongField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetObjectArrayElement src/enclave/Include/jni.h /^ void (JNICALL *SetObjectArrayElement)$/;" m struct:JNINativeInterface_ -SetObjectArrayElement src/enclave/Include/jni.h /^ void SetObjectArrayElement(jobjectArray array, jsize index,$/;" f struct:JNIEnv_ -SetObjectField src/enclave/Include/jni.h /^ void (JNICALL *SetObjectField)$/;" m struct:JNINativeInterface_ -SetObjectField src/enclave/Include/jni.h /^ void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {$/;" f struct:JNIEnv_ -SetShortArrayRegion src/enclave/Include/jni.h /^ void (JNICALL *SetShortArrayRegion)$/;" m struct:JNINativeInterface_ -SetShortArrayRegion src/enclave/Include/jni.h /^ void SetShortArrayRegion(jshortArray array, jsize start, jsize len,$/;" f struct:JNIEnv_ -SetShortField src/enclave/Include/jni.h /^ void (JNICALL *SetShortField)$/;" m struct:JNINativeInterface_ -SetShortField src/enclave/Include/jni.h /^ void SetShortField(jobject obj, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticBooleanField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticBooleanField)$/;" m struct:JNINativeInterface_ -SetStaticBooleanField src/enclave/Include/jni.h /^ void SetStaticBooleanField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticByteField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticByteField)$/;" m struct:JNINativeInterface_ -SetStaticByteField src/enclave/Include/jni.h /^ void SetStaticByteField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticCharField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticCharField)$/;" m struct:JNINativeInterface_ -SetStaticCharField src/enclave/Include/jni.h /^ void SetStaticCharField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticDoubleField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticDoubleField)$/;" m struct:JNINativeInterface_ -SetStaticDoubleField src/enclave/Include/jni.h /^ void SetStaticDoubleField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticFloatField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticFloatField)$/;" m struct:JNINativeInterface_ -SetStaticFloatField src/enclave/Include/jni.h /^ void SetStaticFloatField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticIntField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticIntField)$/;" m struct:JNINativeInterface_ -SetStaticIntField src/enclave/Include/jni.h /^ void SetStaticIntField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticLongField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticLongField)$/;" m struct:JNINativeInterface_ -SetStaticLongField src/enclave/Include/jni.h /^ void SetStaticLongField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticObjectField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticObjectField)$/;" m struct:JNINativeInterface_ -SetStaticObjectField src/enclave/Include/jni.h /^ void SetStaticObjectField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SetStaticShortField src/enclave/Include/jni.h /^ void (JNICALL *SetStaticShortField)$/;" m struct:JNINativeInterface_ -SetStaticShortField src/enclave/Include/jni.h /^ void SetStaticShortField(jclass clazz, jfieldID fieldID,$/;" f struct:JNIEnv_ -SortedRunsReader src/enclave/Enclave/Flatbuffers.h /^ SortedRunsReader(uint8_t *buf, size_t len)$/;" f class:SortedRunsReader -SortedRunsReader src/enclave/Enclave/Flatbuffers.h /^class SortedRunsReader {$/;" c -State src/enclave/Enclave/sgxaes.h /^enum State {$/;" g -StreamCipher src/enclave/Enclave/Crypto.cpp /^StreamCipher::StreamCipher(uint8_t *ciphertext_ptr) {$/;" f class:StreamCipher -StreamCipher src/enclave/Enclave/Crypto.h /^class StreamCipher {$/;" c -StreamDecipher src/enclave/Enclave/Crypto.cpp /^StreamDecipher::StreamDecipher(uint8_t *ciphertext_ptr, uint32_t enc_size) {$/;" f class:StreamDecipher -StreamDecipher src/enclave/Enclave/Crypto.h /^class StreamDecipher {$/;" c -TOKEN_FILENAME src/enclave/App/App.cpp /^# define TOKEN_FILENAME /;" d file: -TRUE src/enclave/App/App.cpp /^# define TRUE /;" d file: -TYPE_IAS_ATT_EVIDENCE src/enclave/ServiceProvider/service_provider.h /^ TYPE_IAS_ATT_EVIDENCE,$/;" e enum:_ias_msg_type_t -TYPE_IAS_ATT_RESULT src/enclave/ServiceProvider/service_provider.h /^ TYPE_IAS_ATT_RESULT,$/;" e enum:_ias_msg_type_t -TYPE_IAS_ENROLL src/enclave/ServiceProvider/service_provider.h /^ TYPE_IAS_ENROLL,$/;" e enum:_ias_msg_type_t -TYPE_IAS_GET_SIGRL src/enclave/ServiceProvider/service_provider.h /^ TYPE_IAS_GET_SIGRL,$/;" e enum:_ias_msg_type_t -TYPE_IAS_SIGRL src/enclave/ServiceProvider/service_provider.h /^ TYPE_IAS_SIGRL,$/;" e enum:_ias_msg_type_t -TYPE_RA_ATT_RESULT src/enclave/ServiceProvider/service_provider.h /^ TYPE_RA_ATT_RESULT,$/;" e enum:_ra_msg_type_t -TYPE_RA_MSG0 src/enclave/ServiceProvider/service_provider.h /^ TYPE_RA_MSG0,$/;" e enum:_ra_msg_type_t -TYPE_RA_MSG1 src/enclave/ServiceProvider/service_provider.h /^ TYPE_RA_MSG1,$/;" e enum:_ra_msg_type_t -TYPE_RA_MSG2 src/enclave/ServiceProvider/service_provider.h /^ TYPE_RA_MSG2,$/;" e enum:_ra_msg_type_t -TYPE_RA_MSG3 src/enclave/ServiceProvider/service_provider.h /^ TYPE_RA_MSG3,$/;" e enum:_ra_msg_type_t -Tag src/enclave/Enclave/sgxaes.h /^struct Tag {$/;" s -Throw src/enclave/Include/jni.h /^ jint (JNICALL *Throw)$/;" m struct:JNINativeInterface_ -Throw src/enclave/Include/jni.h /^ jint Throw(jthrowable obj) {$/;" f struct:JNIEnv_ -ThrowNew src/enclave/Include/jni.h /^ jint (JNICALL *ThrowNew)$/;" m struct:JNINativeInterface_ -ThrowNew src/enclave/Include/jni.h /^ jint ThrowNew(jclass clazz, const char *msg) {$/;" f struct:JNIEnv_ -ToReflectedField src/enclave/Include/jni.h /^ jobject (JNICALL *ToReflectedField)$/;" m struct:JNINativeInterface_ -ToReflectedField src/enclave/Include/jni.h /^ jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic) {$/;" f struct:JNIEnv_ -ToReflectedMethod src/enclave/Include/jni.h /^ jobject (JNICALL *ToReflectedMethod)$/;" m struct:JNINativeInterface_ -ToReflectedMethod src/enclave/Include/jni.h /^ jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic) {$/;" f struct:JNIEnv_ -UNUSED src/enclave/ServiceProvider/ias_ra.cpp /^#define UNUSED(/;" d file: -UTIL_H src/enclave/Enclave/util.h /^#define UTIL_H$/;" d -UnregisterNatives src/enclave/Include/jni.h /^ jint (JNICALL *UnregisterNatives)$/;" m struct:JNINativeInterface_ -UnregisterNatives src/enclave/Include/jni.h /^ jint UnregisterNatives(jclass clazz) {$/;" f struct:JNIEnv_ -UntrustedMemoryAllocator src/enclave/Enclave/Flatbuffers.h /^class UntrustedMemoryAllocator : public flatbuffers::simple_allocator {$/;" c -_ECP_H src/enclave/ServiceProvider/ecp.h /^#define _ECP_H$/;" d -_ERRNO_T_DEFINED src/enclave/ServiceProvider/ecp.h /^#define _ERRNO_T_DEFINED$/;" d -_IAS_RA_H src/enclave/ServiceProvider/ias_ra.h /^#define _IAS_RA_H$/;" d -_Included_SGXEnclave src/enclave/App/SGXEnclave.h /^#define _Included_SGXEnclave$/;" d -_Included_SP src/enclave/ServiceProvider/SP.h /^#define _Included_SP$/;" d -_JAVASOFT_JNI_H_ src/enclave/Include/jni.h /^#define _JAVASOFT_JNI_H_$/;" d -_JAVASOFT_JNI_MD_H_ src/enclave/Include/jni_md.h /^#define _JAVASOFT_JNI_MD_H_$/;" d -_JNI_IMPORT_OR_EXPORT_ src/enclave/Include/jni.h /^#define _JNI_IMPORT_OR_EXPORT_ /;" d -_REMOTE_ATTESTATION_RESULT_H_ src/enclave/ServiceProvider/remote_attestation_result.h /^#define _REMOTE_ATTESTATION_RESULT_H_$/;" d -_SERVICE_PROVIDER_H src/enclave/ServiceProvider/service_provider.h /^#define _SERVICE_PROVIDER_H$/;" d -_SORT_H_ src/enclave/Enclave/Sort.h /^#define _SORT_H_$/;" d -__has_attribute src/enclave/Include/jni_md.h /^ #define __has_attribute(/;" d -_derive_key_type_t src/enclave/Enclave/isv_enclave.cpp /^typedef enum _derive_key_type_t$/;" g file: -_hash_buffer_t src/enclave/Enclave/isv_enclave.cpp /^typedef struct _hash_buffer_t$/;" s file: -_hash_buffer_t src/enclave/ServiceProvider/ecp.cpp /^typedef struct _hash_buffer_t$/;" s file: -_ias_att_report_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct _ias_att_report_t$/;" s -_ias_msg_type_t src/enclave/ServiceProvider/service_provider.h /^typedef enum _ias_msg_type_t$/;" g -_jarray src/enclave/Include/jni.h /^class _jarray : public _jobject {};$/;" c -_jbooleanArray src/enclave/Include/jni.h /^class _jbooleanArray : public _jarray {};$/;" c -_jbyteArray src/enclave/Include/jni.h /^class _jbyteArray : public _jarray {};$/;" c -_jcharArray src/enclave/Include/jni.h /^class _jcharArray : public _jarray {};$/;" c -_jclass src/enclave/Include/jni.h /^class _jclass : public _jobject {};$/;" c -_jdoubleArray src/enclave/Include/jni.h /^class _jdoubleArray : public _jarray {};$/;" c -_jfloatArray src/enclave/Include/jni.h /^class _jfloatArray : public _jarray {};$/;" c -_jintArray src/enclave/Include/jni.h /^class _jintArray : public _jarray {};$/;" c -_jlongArray src/enclave/Include/jni.h /^class _jlongArray : public _jarray {};$/;" c -_jobject src/enclave/Include/jni.h /^class _jobject {};$/;" c -_jobjectArray src/enclave/Include/jni.h /^class _jobjectArray : public _jarray {};$/;" c -_jobjectType src/enclave/Include/jni.h /^typedef enum _jobjectType {$/;" g -_jshortArray src/enclave/Include/jni.h /^class _jshortArray : public _jarray {};$/;" c -_jstring src/enclave/Include/jni.h /^class _jstring : public _jobject {};$/;" c -_jthrowable src/enclave/Include/jni.h /^class _jthrowable : public _jobject {};$/;" c -_ra_msg_type_t src/enclave/ServiceProvider/service_provider.h /^typedef enum _ra_msg_type_t$/;" g -_ra_samp_request_header_t src/enclave/ServiceProvider/service_provider.h /^typedef struct _ra_samp_request_header_t {$/;" s -_ra_samp_response_header_t src/enclave/ServiceProvider/service_provider.h /^typedef struct _ra_samp_response_header_t {$/;" s -_sample_derive_key_type_t src/enclave/ServiceProvider/ecp.h /^typedef enum _sample_derive_key_type_t$/;" g -_sgx_errlist_t src/enclave/App/App.cpp /^typedef struct _sgx_errlist_t {$/;" s file: -_sp_db_item_t src/enclave/ServiceProvider/service_provider.cpp /^typedef struct _sp_db_item_t$/;" s file: -a src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Row *a;$/;" m class:FlatbuffersAggOpEvaluator -a_len src/enclave/Enclave/sgxaes.h /^ size_t a_len;$/;" m struct:AesGcm -aad src/enclave/Enclave/sgxaes.cpp /^void AesGcm::aad(const unsigned char* data, size_t data_len) {$/;" f class:AesGcm -acquire_sbt_jar build/sbt /^acquire_sbt_jar () {$/;" f -addDebugger build/sbt /^addDebugger () { addJava "-Xdebug" ; addJava "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1"; }$/;" f -addJava build/sbt /^addJava () { vlog "[addJava] arg = '$1'" ; java_args+=("$1"); }$/;" f -addResidual build/sbt /^addResidual () { vlog "[residual] arg = '$1'" ; residual_args+=("$1"); }$/;" f -addResolver build/sbt /^addResolver () { addSbt "set resolvers += $1"; }$/;" f -addSbt build/sbt /^addSbt () { vlog "[addSbt] arg = '$1'" ; sbt_commands+=("$1"); }$/;" f -addScalac build/sbt /^addScalac () { vlog "[addScalac] arg = '$1'" ; scalac_args+=("$1"); }$/;" f -aggregate src/enclave/Enclave/ExpressionEvaluation.h /^ void aggregate(const tuix::Row *row) {$/;" f class:FlatbuffersAggOpEvaluator -aggregate_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> aggregate_evaluators;$/;" m class:FlatbuffersAggOpEvaluator -algorithm_id src/enclave/Enclave/isv_enclave.cpp /^ uint8_t algorithm_id[4];$/;" m struct:_hash_buffer_t file: -algorithm_id src/enclave/ServiceProvider/ecp.cpp /^ uint8_t algorithm_id[4];$/;" m struct:_hash_buffer_t file: -align src/enclave/ServiceProvider/service_provider.h /^ uint8_t align[1];$/;" m struct:_ra_samp_response_header_t -align src/enclave/ServiceProvider/service_provider.h /^ uint8_t align[3];$/;" m struct:_ra_samp_request_header_t -allocate src/enclave/Enclave/Flatbuffers.h /^ virtual uint8_t *allocate(size_t size) const {$/;" f class:UntrustedMemoryAllocator -attestation_msg_sample1 src/enclave/ServiceProvider/sample_messages.h /^uint8_t attestation_msg_sample1[] =$/;" v -attestation_msg_sample2 src/enclave/ServiceProvider/sample_messages.h /^uint8_t attestation_msg_sample2[] =$/;" v -attributes src/enclave/ServiceProvider/ias_ra.h /^ sample_attributes_t attributes; \/\/ ( 48) Any special Capabilities$/;" m struct:sample_report_body_t -b src/enclave/Include/jni.h /^ jbyte b;$/;" m union:jvalue -b src/enclave/ServiceProvider/service_provider.cpp /^ lc_ec256_private_t b;$/;" m struct:_sp_db_item_t file: -basename src/enclave/ServiceProvider/ias_ra.h /^ sample_basename_t basename; \/\/ 16$/;" m struct:sample_quote_t -begin src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Vector>::const_iterator begin() {$/;" f class:EncryptedBlocksToEncryptedBlockReader -begin src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Vector>::const_iterator begin() {$/;" f class:EncryptedBlockToRowReader -block_idx src/enclave/Enclave/Flatbuffers.h /^ uint32_t block_idx;$/;" m class:EncryptedBlocksToRowReader -body src/enclave/ServiceProvider/service_provider.h /^ uint8_t body[];$/;" m struct:_ra_samp_response_header_t -body src/enclave/ServiceProvider/service_provider.h /^ uint8_t body[];$/;" m struct:_ra_samp_request_header_t -buf src/enclave/Enclave/Flatbuffers.h /^ uint8_t *buf;$/;" m class:SortedRunsReader -build_props_sbt build/sbt /^build_props_sbt () {$/;" f -build_props_scala build/sbt /^build_props_scala () {$/;" f -builder src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:AggregateExpressionEvaluator -builder src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersAggOpEvaluator -builder src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersExpressionEvaluator -builder src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersJoinExprEvaluator -builder src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersSortOrderEvaluator -builder src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersRowWriter -builder src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::FlatBufferBuilder builder;$/;" m class:FlatbuffersTemporaryRow -builder2 src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::FlatBufferBuilder builder2;$/;" m class:FlatbuffersAggOpEvaluator -bytes_written src/enclave/Enclave/Crypto.cpp /^uint32_t StreamCipher::bytes_written() {$/;" f class:StreamCipher -c src/enclave/Include/jni.h /^ jchar c;$/;" m union:jvalue -check src/enclave/Common/common.h /^#define check(/;" d -check src/enclave/Enclave/ExpressionEvaluation.h /^#define check(/;" d -checkJava build/sbt /^checkJava() {$/;" f -cipher src/enclave/Enclave/Crypto.h /^ AesGcm *cipher;$/;" m class:StreamCipher -cipher src/enclave/Enclave/Crypto.h /^ AesGcm *cipher;$/;" m class:StreamDecipher -cipher_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *cipher_ptr;$/;" m class:StreamCipher -cipher_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *cipher_ptr;$/;" m class:StreamDecipher -ciphertext_size src/enclave/Enclave/Crypto.h /^ uint32_t ciphertext_size;$/;" m class:StreamCipher -clear src/enclave/Enclave/Flatbuffers.h /^ void clear() {$/;" f class:FlatbuffersRowWriter -clear src/enclave/Enclave/util.cpp /^void clear(uint8_t *dest, uint32_t len) {$/;" f -cmp src/enclave/Enclave/util.cpp /^int cmp(const uint8_t *value1, const uint8_t *value2, uint32_t len) {$/;" f -context src/enclave/App/App.cpp /^static sgx_ra_context_t context = INT_MAX;$/;" v file: -counter src/enclave/Enclave/isv_enclave.cpp /^ uint8_t counter[4];$/;" m struct:_hash_buffer_t file: -counter src/enclave/ServiceProvider/ecp.cpp /^ uint8_t counter[4];$/;" m struct:_hash_buffer_t file: -cpu_svn src/enclave/ServiceProvider/ias_ra.h /^ sample_cpu_svn_t cpu_svn; \/\/ ( 0) Security Version of the CPU$/;" m struct:sample_report_body_t -csv data/disease/synth_disease_data.py /^import csv$/;" i -ctr src/enclave/Enclave/sgxaes.h /^ unsigned char ctr[AES_BLOCK_SIZE];$/;" m struct:GcmContext -current_cipher_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *current_cipher_ptr;$/;" m class:StreamCipher -current_cipher_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *current_cipher_ptr;$/;" m class:StreamDecipher -d src/enclave/Include/jni.h /^ jdouble d;$/;" m union:jvalue -days_since_epoch src/enclave/Enclave/Flatbuffers.h /^ int32_t days_since_epoch;$/;" m class:Date -deallocate src/enclave/Enclave/Flatbuffers.h /^ virtual void deallocate(uint8_t *p) const {$/;" f class:UntrustedMemoryAllocator -debug src/enclave/Common/common.h /^#define debug(/;" d -dec_size src/enclave/Enclave/Crypto.cpp /^uint32_t dec_size(uint32_t ciphertext_size) {$/;" f -decrypt src/enclave/Enclave/Crypto.cpp /^void StreamDecipher::decrypt(uint8_t *plaintext_ptr, uint32_t size) {$/;" f class:StreamDecipher -decrypt src/enclave/Enclave/Crypto.cpp /^void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length,$/;" f -decrypt src/enclave/Enclave/sgxaes.cpp /^void AesGcm::decrypt(const unsigned char* ciphertext, size_t ciphertext_len, unsigned char* plaintext, size_t plaintext_len) {$/;" f class:AesGcm -decrypt src/enclave/ServiceProvider/sp_crypto.cpp /^void decrypt(lc_aes_gcm_128bit_key_t *key,$/;" f -decrypt_with_aad src/enclave/Enclave/Crypto.cpp /^void decrypt_with_aad(const uint8_t *ciphertext, uint32_t ciphertext_length,$/;" f -default_jvm_opts build/sbt /^default_jvm_opts () {$/;" f -derive_key src/enclave/Enclave/isv_enclave.cpp /^bool derive_key($/;" f -derive_key src/enclave/ServiceProvider/ecp.cpp /^bool derive_key(const lc_ec256_dh_shared_t *p_shared_key,$/;" f -derive_key src/enclave/ServiceProvider/ecp.cpp /^bool derive_key(const sample_ec256_dh_shared_t *p_shared_key,$/;" f -derive_key_type_t src/enclave/Enclave/isv_enclave.cpp /^} derive_key_type_t;$/;" t typeref:enum:_derive_key_type_t file: -die build/sbt /^die () { echo "Aborting: $@" ; exit 1; }$/;" f -download_url build/sbt /^download_url () {$/;" f -ecall_decrypt src/enclave/Enclave/Enclave.cpp /^void ecall_decrypt(uint8_t *ciphertext,$/;" f -ecall_enclave_init_ra src/enclave/Enclave/Enclave.cpp /^sgx_status_t ecall_enclave_init_ra(int b_pse, sgx_ra_context_t *p_context) {$/;" f -ecall_enclave_ra_close src/enclave/Enclave/Enclave.cpp /^void ecall_enclave_ra_close(sgx_ra_context_t context) {$/;" f -ecall_encrypt src/enclave/Enclave/Enclave.cpp /^void ecall_encrypt(uint8_t *plaintext, uint32_t plaintext_length,$/;" f -ecall_external_sort src/enclave/Enclave/Enclave.cpp /^void ecall_external_sort(uint8_t *sort_order, size_t sort_order_length,$/;" f -ecall_filter src/enclave/Enclave/Enclave.cpp /^void ecall_filter(uint8_t *condition, size_t condition_length,$/;" f -ecall_find_range_bounds src/enclave/Enclave/Enclave.cpp /^void ecall_find_range_bounds(uint8_t *sort_order, size_t sort_order_length,$/;" f -ecall_non_oblivious_aggregate_step1 src/enclave/Enclave/Enclave.cpp /^void ecall_non_oblivious_aggregate_step1($/;" f -ecall_non_oblivious_aggregate_step2 src/enclave/Enclave/Enclave.cpp /^void ecall_non_oblivious_aggregate_step2($/;" f -ecall_non_oblivious_sort_merge_join src/enclave/Enclave/Enclave.cpp /^void ecall_non_oblivious_sort_merge_join(uint8_t *join_expr, size_t join_expr_length,$/;" f -ecall_partition_for_sort src/enclave/Enclave/Enclave.cpp /^void ecall_partition_for_sort(uint8_t *sort_order, size_t sort_order_length,$/;" f -ecall_project src/enclave/Enclave/Enclave.cpp /^void ecall_project(uint8_t *condition, size_t condition_length,$/;" f -ecall_put_secret_data src/enclave/Enclave/Enclave.cpp /^sgx_status_t ecall_put_secret_data(sgx_ra_context_t context,$/;" f -ecall_sample src/enclave/Enclave/Enclave.cpp /^void ecall_sample(uint8_t *input_rows, size_t input_rows_length,$/;" f -ecall_scan_collect_last_primary src/enclave/Enclave/Enclave.cpp /^void ecall_scan_collect_last_primary(uint8_t *join_expr, size_t join_expr_length,$/;" f -ecall_verify_att_result_mac src/enclave/Enclave/Enclave.cpp /^sgx_status_t ecall_verify_att_result_mac(sgx_ra_context_t context, uint8_t* message,$/;" f -echoLine build/sbt /^ echoLine () {$/;" f -echoerr build/sbt /^echoerr () { echo >&2 "$@"; }$/;" f -enc_block_builder src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::FlatBufferBuilder enc_block_builder;$/;" m class:FlatbuffersRowWriter -enc_block_vector src/enclave/Enclave/Flatbuffers.h /^ std::vector> enc_block_vector;$/;" m class:FlatbuffersRowWriter -enc_size src/enclave/Enclave/Crypto.cpp /^uint32_t enc_size(uint32_t plaintext_size) {$/;" f -enclave_init_ra src/enclave/Enclave/isv_enclave.cpp /^sgx_status_t enclave_init_ra(int b_pse,$/;" f -enclave_ra_close src/enclave/Enclave/isv_enclave.cpp /^sgx_status_t SGXAPI enclave_ra_close(sgx_ra_context_t context) {$/;" f -encrypt src/enclave/Enclave/Crypto.cpp /^void StreamCipher::encrypt(uint8_t *plaintext, uint32_t size) {$/;" f class:StreamCipher -encrypt src/enclave/Enclave/Crypto.cpp /^void encrypt(uint8_t *plaintext, uint32_t plaintext_length,$/;" f -encrypt src/enclave/Enclave/sgxaes.cpp /^void AesGcm::encrypt(const unsigned char* plaintext, size_t plaintext_len, unsigned char* ciphertext, size_t ciphertext_len) {$/;" f class:AesGcm -encrypt src/enclave/ServiceProvider/sp_crypto.cpp /^void encrypt(lc_aes_gcm_128bit_key_t *key,$/;" f -encrypt_with_aad src/enclave/Enclave/Crypto.cpp /^void encrypt_with_aad(uint8_t *plaintext, uint32_t plaintext_length,$/;" f -encrypted_blocks src/enclave/Enclave/Flatbuffers.h /^ const tuix::EncryptedBlocks *encrypted_blocks;$/;" m class:EncryptedBlocksToEncryptedBlockReader -encrypted_blocks src/enclave/Enclave/Flatbuffers.h /^ const tuix::EncryptedBlocks *encrypted_blocks;$/;" m class:EncryptedBlocksToRowReader -end src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Vector>::const_iterator end() {$/;" f class:EncryptedBlocksToEncryptedBlockReader -end src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Vector>::const_iterator end() {$/;" f class:EncryptedBlockToRowReader -enroll src/enclave/ServiceProvider/service_provider.h /^ sample_enroll enroll;$/;" m struct:sample_extended_epid_group -epid_group_id src/enclave/ServiceProvider/ias_ra.h /^ sample_epid_group_id_t epid_group_id; \/\/ 4$/;" m struct:sample_quote_t -err src/enclave/App/App.cpp /^ sgx_status_t err;$/;" m struct:_sgx_errlist_t file: -errno_t src/enclave/ServiceProvider/ecp.h /^typedef int errno_t;$/;" t -eval src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Field *eval(const tuix::Row *row) {$/;" f class:FlatbuffersExpressionEvaluator -eval_binary_arithmetic_op src/enclave/Enclave/ExpressionEvaluation.h /^flatbuffers::Offset eval_binary_arithmetic_op($/;" f -eval_binary_comparison src/enclave/Enclave/ExpressionEvaluation.h /^flatbuffers::Offset eval_binary_comparison($/;" f -eval_helper src/enclave/Enclave/ExpressionEvaluation.h /^ flatbuffers::Offset eval_helper(const tuix::Row *row, const tuix::Expr *expr) {$/;" f class:FlatbuffersExpressionEvaluator -evaluate src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Field *evaluate(const tuix::Row *agg) {$/;" f class:AggregateExpressionEvaluator -evaluate src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Row *evaluate() {$/;" f class:FlatbuffersAggOpEvaluator -evaluate_evaluator src/enclave/Enclave/ExpressionEvaluation.h /^ std::unique_ptr evaluate_evaluator;$/;" m class:AggregateExpressionEvaluator -execRunner build/sbt /^execRunner () {$/;" f -exit src/enclave/Enclave/util.cpp /^void exit(int exit_code) {$/;" f -expr src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Expr *expr;$/;" m class:FlatbuffersExpressionEvaluator -extended_epid_group_id src/enclave/ServiceProvider/service_provider.h /^ uint32_t extended_epid_group_id;$/;" m struct:sample_ra_msg0_t -extended_epid_group_id src/enclave/ServiceProvider/service_provider.h /^ uint32_t extended_epid_group_id;$/;" m struct:sample_extended_epid_group -external_merge src/enclave/Enclave/Sort.cpp /^flatbuffers::Offset external_merge($/;" f -external_sort src/enclave/Enclave/Sort.cpp /^void external_sort(uint8_t *sort_order, size_t sort_order_length,$/;" f -extraInfo src/enclave/Include/jni.h /^ void *extraInfo;$/;" m struct:JavaVMOption -f src/enclave/Include/jni.h /^ jfloat f;$/;" m union:jvalue -filter src/enclave/Enclave/Filter.cpp /^void filter(uint8_t *condition, size_t condition_length,$/;" f -find_range_bounds src/enclave/Enclave/Sort.cpp /^void find_range_bounds(uint8_t *sort_order, size_t sort_order_length,$/;" f -finish src/enclave/Enclave/Crypto.cpp /^void StreamCipher::finish() {$/;" f class:StreamCipher -finish src/enclave/Enclave/Flatbuffers.h /^ void finish(flatbuffers::Offset root) {$/;" f class:FlatbuffersRowWriter -flags src/enclave/ServiceProvider/ias_ra.h /^ uint64_t flags;$/;" m struct:sample_attributes_t -flatbuffers_cast src/enclave/Enclave/Flatbuffers.h /^flatbuffers::Offset flatbuffers_cast($/;" f -flatbuffers_copy src/enclave/Enclave/Flatbuffers.cpp /^flatbuffers::Offset flatbuffers_copy($/;" f -flatbuffers_copy src/enclave/Enclave/Flatbuffers.cpp /^flatbuffers::Offset flatbuffers_copy($/;" f -fnPtr src/enclave/Include/jni.h /^ void *fnPtr;$/;" m struct:__anon1 -freebl_cipher_func src/enclave/Enclave/sgxaes.h /^ const void* freebl_cipher_func;$/;" m struct:KeySchedule -functions src/enclave/Include/jni.h /^ const struct JNIInvokeInterface_ *functions;$/;" m struct:JavaVM_ typeref:struct:JavaVM_::JNIInvokeInterface_ -functions src/enclave/Include/jni.h /^ const struct JNINativeInterface_ *functions;$/;" m struct:JNIEnv_ typeref:struct:JNIEnv_::JNINativeInterface_ -g_a src/enclave/ServiceProvider/service_provider.cpp /^ lc_ec256_public_t g_a;$/;" m struct:_sp_db_item_t file: -g_a src/enclave/ServiceProvider/service_provider.h /^ sample_ec_pub_t g_a; \/* the Endian-ness of Ga is$/;" m struct:sample_ra_msg1_t -g_a src/enclave/ServiceProvider/service_provider.h /^ sample_ec_pub_t g_a; \/* the Endian-ness of Ga is*\/$/;" m struct:sample_ra_msg3_t -g_authentication_token src/enclave/ServiceProvider/service_provider.cpp /^static int g_authentication_token = 0;$/;" v file: -g_b src/enclave/ServiceProvider/service_provider.cpp /^ lc_ec256_public_t g_b;$/;" m struct:_sp_db_item_t file: -g_b src/enclave/ServiceProvider/service_provider.h /^ sample_ec_pub_t g_b; \/* the Endian-ness of Gb is$/;" m struct:sample_ra_msg2_t -g_extended_epid_groups src/enclave/ServiceProvider/service_provider.cpp /^static const sample_extended_epid_group g_extended_epid_groups[] = {$/;" v file: -g_is_sp_registered src/enclave/ServiceProvider/service_provider.cpp /^static bool g_is_sp_registered = false;$/;" v file: -g_rk_priv_key src/enclave/ServiceProvider/ias_ra.cpp /^static const lc_ec256_private_t g_rk_priv_key =$/;" v file: -g_secret src/enclave/Enclave/isv_enclave.cpp /^uint8_t g_secret[8] = {0};$/;" v -g_secret src/enclave/ServiceProvider/service_provider.cpp /^uint8_t g_secret[8] = {0,1,2,3,4,5,6,7};$/;" v -g_sim_spid src/enclave/ServiceProvider/ias_ra.cpp /^static sample_spid_t g_sim_spid = {"Service X"};$/;" v file: -g_sp_credentials src/enclave/ServiceProvider/service_provider.cpp /^static int g_sp_credentials = 0;$/;" v file: -g_sp_db src/enclave/ServiceProvider/service_provider.cpp /^static sp_db_item_t g_sp_db;$/;" v file: -g_sp_extended_epid_group_id src/enclave/ServiceProvider/service_provider.cpp /^static const sample_extended_epid_group* g_sp_extended_epid_group_id= NULL;$/;" v file: -g_sp_priv_key src/enclave/ServiceProvider/service_provider.cpp /^sgx_ec256_private_t g_sp_priv_key = {{0}};$/;" v -g_sp_pub_key src/enclave/ServiceProvider/service_provider.cpp /^sgx_ec256_public_t g_sp_pub_key = {{0}, {0}};$/;" v -g_spid src/enclave/ServiceProvider/service_provider.cpp /^sample_spid_t g_spid;$/;" v -gcKeySchedule src/enclave/Enclave/Crypto.cpp /^void gcKeySchedule() {$/;" f -gctx src/enclave/Enclave/sgxaes.h /^ GcmContext gctx;$/;" m struct:AesGcm -get src/enclave/Enclave/Flatbuffers.h /^ const tuix::Row *get() {$/;" f class:FlatbuffersTemporaryRow -getJavaVersion build/sbt /^getJavaVersion() { "$1" -version 2>&1 | grep -E -e '(java|openjdk) version' | awk '{ print $3 }' | tr -d \\"; }$/;" f -get_ec_point src/enclave/ServiceProvider/sp_crypto.cpp /^EC_POINT *get_ec_point(lc_ec256_public_t *p_public) {$/;" f -get_partial_agg src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::Row *get_partial_agg() {$/;" f class:FlatbuffersAggOpEvaluator -get_priv_key src/enclave/ServiceProvider/sp_crypto.cpp /^EC_KEY *get_priv_key(lc_ec256_private_t *p_private) {$/;" f -get_script_path build/sbt /^get_script_path () {$/;" f -get_sigrl src/enclave/ServiceProvider/service_provider.h /^ sample_get_sigrl get_sigrl;$/;" m struct:sample_extended_epid_group -gid src/enclave/ServiceProvider/service_provider.h /^ sample_epid_group_id_t gid; \/* the Endian-ness of GID is$/;" m struct:sample_ra_msg1_t -global_eid src/enclave/App/App.cpp /^sgx_enclave_id_t global_eid = 0;$/;" v -group src/enclave/Include/jni.h /^ jobject group;$/;" m struct:JavaVMAttachArgs -grouping_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> grouping_evaluators;$/;" m class:FlatbuffersAggOpEvaluator -gx src/enclave/ServiceProvider/service_provider.h /^ uint8_t gx[SAMPLE_ECP_KEY_SIZE];$/;" m struct:sample_ec_pub_t -gx src/enclave/ServiceProvider/sp_crypto.h /^ uint8_t gx[LC_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_public_t -gx src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint8_t gx[SAMPLE_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_public_t -gy src/enclave/ServiceProvider/service_provider.h /^ uint8_t gy[SAMPLE_ECP_KEY_SIZE];$/;" m struct:sample_ec_pub_t -gy src/enclave/ServiceProvider/sp_crypto.h /^ uint8_t gy[LC_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_public_t -gy src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint8_t gy[SAMPLE_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_public_t -has_next src/enclave/Enclave/Flatbuffers.h /^ bool has_next() {$/;" f class:EncryptedBlockToRowReader -has_next src/enclave/Enclave/Flatbuffers.h /^ bool has_next() {$/;" f class:EncryptedBlocksToRowReader -hash_buffer_t src/enclave/Enclave/isv_enclave.cpp /^} hash_buffer_t;$/;" t typeref:struct:_hash_buffer_t file: -hash_buffer_t src/enclave/ServiceProvider/ecp.cpp /^} hash_buffer_t;$/;" t typeref:struct:_hash_buffer_t file: -htbl src/enclave/Enclave/sgxaes.h /^ unsigned char htbl[16*AES_BLOCK_SIZE];$/;" m struct:GcmContext -i src/enclave/Include/jni.h /^ jint i;$/;" m union:jvalue -ias_att_report_t src/enclave/ServiceProvider/ias_ra.h /^} ias_att_report_t;$/;" t typeref:struct:_ias_att_report_t -ias_enroll src/enclave/ServiceProvider/ias_ra.cpp /^int ias_enroll($/;" f -ias_get_sigrl src/enclave/ServiceProvider/ias_ra.cpp /^int ias_get_sigrl($/;" f -ias_msg_type_t src/enclave/ServiceProvider/service_provider.h /^} ias_msg_type_t;$/;" t typeref:enum:_ias_msg_type_t -ias_platform_info_blob_t src/enclave/ServiceProvider/remote_attestation_result.h /^typedef struct ias_platform_info_blob_t$/;" s -ias_platform_info_blob_t src/enclave/ServiceProvider/remote_attestation_result.h /^} ias_platform_info_blob_t;$/;" t typeref:struct:ias_platform_info_blob_t -ias_pse_status_t src/enclave/ServiceProvider/ias_ra.h /^} ias_pse_status_t;$/;" t typeref:enum:__anon3 -ias_quote_status_t src/enclave/ServiceProvider/ias_ra.h /^} ias_quote_status_t;$/;" t typeref:enum:__anon2 -ias_revoc_reason_t src/enclave/ServiceProvider/ias_ra.h /^} ias_revoc_reason_t;$/;" t typeref:enum:__anon4 -ias_verify_attestation_evidence src/enclave/ServiceProvider/ias_ra.cpp /^int ias_verify_attestation_evidence($/;" f -id src/enclave/ServiceProvider/ias_ra.h /^ uint32_t id;$/;" m struct:_ias_att_report_t -id src/enclave/ServiceProvider/ias_ra.h /^ uint8_t id[16];$/;" m struct:sample_spid_t -ignoreUnrecognized src/enclave/Include/jni.h /^ jboolean ignoreUnrecognized;$/;" m struct:JavaVMInitArgs -info_blob src/enclave/ServiceProvider/ias_ra.h /^ ias_platform_info_blob_t info_blob;$/;" m struct:_ias_att_report_t -init src/enclave/Enclave/Flatbuffers.h /^ void init(const tuix::EncryptedBlock *encrypted_block) {$/;" f class:EncryptedBlockToRowReader -initKeySchedule src/enclave/Enclave/Crypto.cpp /^void initKeySchedule() {$/;" f -init_default_option_file build/sbt /^init_default_option_file () {$/;" f -init_row_reader src/enclave/Enclave/Flatbuffers.h /^ void init_row_reader() {$/;" f class:EncryptedBlocksToRowReader -initial_value_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> initial_value_evaluators;$/;" m class:AggregateExpressionEvaluator -initial_values src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector initial_values(const tuix::Row *unused) {$/;" f class:AggregateExpressionEvaluator -initialize_enclave src/enclave/App/App.cpp /^int initialize_enclave(void)$/;" f -initialized src/enclave/Enclave/Flatbuffers.h /^ bool initialized;$/;" m class:EncryptedBlockToRowReader -intel_aes_encrypt_init_128 src/enclave/Enclave/sgxaes_asm.S /^intel_aes_encrypt_init_128:$/;" l -intel_aes_encrypt_init_192 src/enclave/Enclave/sgxaes_asm.S /^intel_aes_encrypt_init_192:$/;" l -intel_aes_encrypt_init_256 src/enclave/Enclave/sgxaes_asm.S /^intel_aes_encrypt_init_256:$/;" l -intel_aes_gcmAAD src/enclave/Enclave/sgxaes_asm.S /^intel_aes_gcmAAD:$/;" l -intel_aes_gcmDEC src/enclave/Enclave/sgxaes_asm.S /^intel_aes_gcmDEC:$/;" l -intel_aes_gcmENC src/enclave/Enclave/sgxaes_asm.S /^intel_aes_gcmENC:$/;" l -intel_aes_gcmINIT src/enclave/Enclave/sgxaes_asm.S /^intel_aes_gcmINIT:$/;" l -intel_aes_gcmTAG src/enclave/Enclave/sgxaes_asm.S /^intel_aes_gcmTAG:$/;" l -is_cygwin build/sbt /^is_cygwin () [[ "$(uname -a)" == "CYGWIN"* ]]$/;" f -is_primary src/enclave/Enclave/ExpressionEvaluation.h /^ bool is_primary(const tuix::Row *row) {$/;" f class:FlatbuffersJoinExprEvaluator -is_same_group src/enclave/Enclave/ExpressionEvaluation.h /^ bool is_same_group(const tuix::Row *row1, const tuix::Row *row2) {$/;" f class:FlatbuffersAggOpEvaluator -is_same_group src/enclave/Enclave/ExpressionEvaluation.h /^ bool is_same_group(const tuix::Row *row1, const tuix::Row *row2) {$/;" f class:FlatbuffersJoinExprEvaluator -isv_prod_id src/enclave/ServiceProvider/ias_ra.h /^ sample_prod_id_t isv_prod_id; \/\/ (256) Product ID of the Enclave$/;" m struct:sample_report_body_t -isv_svn src/enclave/ServiceProvider/ias_ra.h /^ sample_isv_svn_t isv_svn; \/\/ (258) Security Version of the$/;" m struct:sample_report_body_t -iv src/enclave/Enclave/sgxaes.h /^ unsigned char iv[AES_BLOCK_SIZE*2];$/;" m struct:KeySchedule -iv_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *iv_ptr;$/;" m class:StreamCipher -iv_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *iv_ptr;$/;" m class:StreamDecipher -j src/enclave/Include/jni.h /^ jlong j;$/;" m union:jvalue -jar_file build/sbt /^jar_file () {$/;" f -jar_url build/sbt /^jar_url () { make_url "$1"; }$/;" f -jarray src/enclave/Include/jni.h /^typedef _jarray *jarray;$/;" t -jarray src/enclave/Include/jni.h /^typedef jobject jarray;$/;" t -java_version build/sbt /^java_version () {$/;" f -jboolean src/enclave/Include/jni.h /^typedef unsigned char jboolean;$/;" t -jbooleanArray src/enclave/Include/jni.h /^typedef _jbooleanArray *jbooleanArray;$/;" t -jbooleanArray src/enclave/Include/jni.h /^typedef jarray jbooleanArray;$/;" t -jbyte src/enclave/Include/jni_md.h /^typedef signed char jbyte;$/;" t -jbyteArray src/enclave/Include/jni.h /^typedef _jbyteArray *jbyteArray;$/;" t -jbyteArray src/enclave/Include/jni.h /^typedef jarray jbyteArray;$/;" t -jchar src/enclave/Include/jni.h /^typedef unsigned short jchar;$/;" t -jcharArray src/enclave/Include/jni.h /^typedef _jcharArray *jcharArray;$/;" t -jcharArray src/enclave/Include/jni.h /^typedef jarray jcharArray;$/;" t -jclass src/enclave/Include/jni.h /^typedef _jclass *jclass;$/;" t -jclass src/enclave/Include/jni.h /^typedef jobject jclass;$/;" t -jdouble src/enclave/Include/jni.h /^typedef double jdouble;$/;" t -jdoubleArray src/enclave/Include/jni.h /^typedef _jdoubleArray *jdoubleArray;$/;" t -jdoubleArray src/enclave/Include/jni.h /^typedef jarray jdoubleArray;$/;" t -jfieldID src/enclave/Include/jni.h /^typedef struct _jfieldID *jfieldID;$/;" t typeref:struct:_jfieldID -jfloat src/enclave/Include/jni.h /^typedef float jfloat;$/;" t -jfloatArray src/enclave/Include/jni.h /^typedef _jfloatArray *jfloatArray;$/;" t -jfloatArray src/enclave/Include/jni.h /^typedef jarray jfloatArray;$/;" t -jint src/enclave/Include/jni_md.h /^typedef int jint;$/;" t -jintArray src/enclave/Include/jni.h /^typedef _jintArray *jintArray;$/;" t -jintArray src/enclave/Include/jni.h /^typedef jarray jintArray;$/;" t -jlong src/enclave/Include/jni_md.h /^typedef long jlong;$/;" t -jlong src/enclave/Include/jni_md.h /^typedef long long jlong;$/;" t -jlongArray src/enclave/Include/jni.h /^typedef _jlongArray *jlongArray;$/;" t -jlongArray src/enclave/Include/jni.h /^typedef jarray jlongArray;$/;" t -jmethodID src/enclave/Include/jni.h /^typedef struct _jmethodID *jmethodID;$/;" t typeref:struct:_jmethodID -jobject src/enclave/Include/jni.h /^typedef _jobject *jobject;$/;" t -jobject src/enclave/Include/jni.h /^typedef struct _jobject *jobject;$/;" t typeref:struct:_jobject -jobjectArray src/enclave/Include/jni.h /^typedef _jobjectArray *jobjectArray;$/;" t -jobjectArray src/enclave/Include/jni.h /^typedef jarray jobjectArray;$/;" t -jobjectRefType src/enclave/Include/jni.h /^} jobjectRefType;$/;" t typeref:enum:_jobjectType -jshort src/enclave/Include/jni.h /^typedef short jshort;$/;" t -jshortArray src/enclave/Include/jni.h /^typedef _jshortArray *jshortArray;$/;" t -jshortArray src/enclave/Include/jni.h /^typedef jarray jshortArray;$/;" t -jsize src/enclave/Include/jni.h /^typedef jint jsize;$/;" t -jstring src/enclave/Include/jni.h /^typedef _jstring *jstring;$/;" t -jstring src/enclave/Include/jni.h /^typedef jobject jstring;$/;" t -jthrowable src/enclave/Include/jni.h /^typedef _jthrowable *jthrowable;$/;" t -jthrowable src/enclave/Include/jni.h /^typedef jobject jthrowable;$/;" t -jvalue src/enclave/Include/jni.h /^typedef union jvalue {$/;" u -jvalue src/enclave/Include/jni.h /^} jvalue;$/;" t typeref:union:jvalue -jweak src/enclave/Include/jni.h /^typedef jobject jweak;$/;" t -kdf_id src/enclave/ServiceProvider/service_provider.h /^ uint16_t kdf_id; \/* key derivation function id in little endian. $/;" m struct:sample_ra_msg2_t -key src/enclave/Enclave/Crypto.cpp /^sgx_aes_gcm_128bit_key_t *key = &key_data;$/;" v -key src/enclave/ServiceProvider/Main.cpp /^lc_aes_gcm_128bit_key_t key = "helloworld12312";$/;" v -key_data src/enclave/Enclave/Crypto.cpp /^sgx_aes_gcm_128bit_key_t key_data = {0};$/;" v -key_derivation src/enclave/Enclave/isv_enclave.cpp /^sgx_status_t key_derivation(const sgx_ec256_dh_shared_t* shared_key,$/;" f -key_expansion128 src/enclave/Enclave/sgxaes_asm.S /^key_expansion128:$/;" l -key_expansion192 src/enclave/Enclave/sgxaes_asm.S /^key_expansion192:$/;" l -key_expansion256 src/enclave/Enclave/sgxaes_asm.S /^key_expansion256:$/;" l -key_str src/enclave/ServiceProvider/service_provider.cpp /^const char *key_str = "helloworld123123";$/;" v -ks src/enclave/Enclave/Crypto.cpp /^KeySchedule *ks = (KeySchedule *) &ks_backup;$/;" v -ks src/enclave/Enclave/sgxaes.h /^ const KeySchedule* ks;$/;" m struct:GcmContext -ks src/enclave/Enclave/sgxaes.h /^ uint32_t ks[AES_MAX_EXP_KEY_SIZE];$/;" m struct:KeySchedule -ks_backup src/enclave/Enclave/Crypto.cpp /^const KeySchedule ks_backup = KeySchedule((unsigned char *) key_data, SGX_AESGCM_KEY_SIZE);$/;" v -l src/enclave/Include/jni.h /^ jobject l;$/;" m union:jvalue -latest_equivalent_tcb_psvn src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t latest_equivalent_tcb_psvn[PSVN_SIZE];$/;" m struct:ias_platform_info_blob_t -latest_psda_svn src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t latest_psda_svn[PSDA_SVN_SIZE];$/;" m struct:ias_platform_info_blob_t -latest_pse_isvsvn src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t latest_pse_isvsvn[ISVSVN_SIZE];$/;" m struct:ias_platform_info_blob_t -lc_aes_ctr_128bit_key_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_aes_ctr_128bit_key_t[LC_AESCTR_KEY_SIZE];$/;" t -lc_aes_gcm_128bit_key_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_aes_gcm_128bit_key_t[LC_AESGCM_KEY_SIZE];$/;" t -lc_aes_gcm_128bit_tag_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_aes_gcm_128bit_tag_t[LC_AESGCM_MAC_SIZE];$/;" t -lc_cmac_128bit_key_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_cmac_128bit_key_t[LC_CMAC_KEY_SIZE];$/;" t -lc_cmac_128bit_tag_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_cmac_128bit_tag_t[LC_CMAC_MAC_SIZE];$/;" t -lc_cmac_state_handle_t src/enclave/ServiceProvider/sp_crypto.h /^typedef void* lc_cmac_state_handle_t;$/;" t -lc_ec256_dh_shared_t src/enclave/ServiceProvider/sp_crypto.h /^typedef struct lc_ec256_dh_shared_t$/;" s -lc_ec256_dh_shared_t src/enclave/ServiceProvider/sp_crypto.h /^} lc_ec256_dh_shared_t;$/;" t typeref:struct:lc_ec256_dh_shared_t -lc_ec256_private_t src/enclave/ServiceProvider/sp_crypto.h /^typedef struct lc_ec256_private_t$/;" s -lc_ec256_private_t src/enclave/ServiceProvider/sp_crypto.h /^} lc_ec256_private_t;$/;" t typeref:struct:lc_ec256_private_t -lc_ec256_public_t src/enclave/ServiceProvider/sp_crypto.h /^typedef struct lc_ec256_public_t$/;" s -lc_ec256_public_t src/enclave/ServiceProvider/sp_crypto.h /^} lc_ec256_public_t;$/;" t typeref:struct:lc_ec256_public_t -lc_ec256_signature_t src/enclave/ServiceProvider/sp_crypto.h /^typedef struct lc_ec256_signature_t$/;" s -lc_ec256_signature_t src/enclave/ServiceProvider/sp_crypto.h /^} lc_ec256_signature_t;$/;" t typeref:struct:lc_ec256_signature_t -lc_ec_dh_shared_t src/enclave/ServiceProvider/ecp.h /^} lc_ec_dh_shared_t;$/;" t typeref:struct:sample_ec_dh_shared_t -lc_ecc256_close_context src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ecc256_close_context(lc_ecc_state_handle_t ecc_handle) {$/;" f -lc_ecc256_compute_shared_dhkey src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ecc256_compute_shared_dhkey(lc_ec256_private_t *p_private_b,$/;" f -lc_ecc256_create_key_pair src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ecc256_create_key_pair(lc_ec256_private_t *p_private,$/;" f -lc_ecc256_open_context src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ecc256_open_context(lc_ecc_state_handle_t* ecc_handle) {$/;" f -lc_ecc_state_handle_t src/enclave/ServiceProvider/sp_crypto.h /^typedef void* lc_ecc_state_handle_t;$/;" t -lc_ecdsa_sign src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ecdsa_sign(const uint8_t *p_data,$/;" f -lc_rijndael128GCM_decrypt src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_rijndael128GCM_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *aad,$/;" f -lc_rijndael128GCM_encrypt src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_rijndael128GCM_encrypt(const lc_aes_gcm_128bit_key_t *p_key,$/;" f -lc_rijndael128_cmac_msg src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_rijndael128_cmac_msg(const lc_cmac_128bit_key_t *p_key,$/;" f -lc_sha256_close src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_sha256_close(lc_sha_state_handle_t sha_handle) {$/;" f -lc_sha256_get_hash src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_sha256_get_hash(lc_sha_state_handle_t sha_handle, lc_sha256_hash_t *p_hash) {$/;" f -lc_sha256_hash_t src/enclave/ServiceProvider/sp_crypto.h /^typedef uint8_t lc_sha256_hash_t[LC_SHA256_HASH_SIZE];$/;" t -lc_sha256_init src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_sha256_init(lc_sha_state_handle_t* p_sha_handle) {$/;" f -lc_sha256_update src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_sha256_update(const uint8_t *p_src, uint32_t src_len, lc_sha_state_handle_t sha_handle) {$/;" f -lc_sha_state_handle_t src/enclave/ServiceProvider/sp_crypto.h /^typedef SHA256_CTX* lc_sha_state_handle_t;$/;" t -lc_ssl2sgx src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t lc_ssl2sgx(EC_KEY *ssl_key,$/;" f -lc_status_t src/enclave/ServiceProvider/sp_crypto.h /^typedef enum lc_status_t {$/;" g -lc_status_t src/enclave/ServiceProvider/sp_crypto.h /^} lc_status_t;$/;" t typeref:enum:lc_status_t -left_key_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> left_key_evaluators;$/;" m class:FlatbuffersJoinExprEvaluator -leftover_plaintext src/enclave/Enclave/Crypto.h /^ uint8_t leftover_plaintext[AES_BLOCK_SIZE];$/;" m class:StreamCipher -leftover_plaintext src/enclave/Enclave/Crypto.h /^ uint8_t leftover_plaintext[AES_BLOCK_SIZE];$/;" m class:StreamDecipher -leftover_plaintext_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *leftover_plaintext_ptr;$/;" m class:StreamDecipher -leftover_plaintext_size src/enclave/Enclave/Crypto.h /^ uint32_t leftover_plaintext_size;$/;" m class:StreamCipher -leftover_plaintext_size src/enclave/Enclave/Crypto.h /^ uint32_t leftover_plaintext_size;$/;" m class:StreamDecipher -less_than src/enclave/Enclave/ExpressionEvaluation.h /^ bool less_than(const tuix::Row *row1, const tuix::Row *row2) {$/;" f class:FlatbuffersSortOrderEvaluator -m_len src/enclave/Enclave/sgxaes.h /^ size_t m_len;$/;" m struct:AesGcm -mac src/enclave/Enclave/Crypto.cpp /^void MAC::mac(uint8_t *mac_ptr, uint32_t len) {$/;" f class:MAC -mac src/enclave/ServiceProvider/remote_attestation_result.h /^ lc_cmac_128bit_tag_t mac; \/* mac_smk(attestation_status)*\/$/;" m struct:sample_ra_att_result_msg_t -mac src/enclave/ServiceProvider/service_provider.h /^ sample_mac_t mac; \/* mac_smk(g_b||spid||quote_type||$/;" m struct:sample_ra_msg2_t -mac src/enclave/ServiceProvider/service_provider.h /^ sample_mac_t mac; \/* mac_smk(g_a||ps_sec_prop||quote)*\/$/;" m struct:sample_ra_msg3_t -mac_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *mac_ptr;$/;" m class:StreamCipher -mac_ptr src/enclave/Enclave/Crypto.h /^ uint8_t *mac_ptr;$/;" m class:StreamDecipher -main build/sbt /^main () {$/;" f -main data/disease/synth_disease_data.py /^def main():$/;" f -main src/enclave/App/App.cpp /^int SGX_CDECL main(int argc, char *argv[])$/;" f -main src/enclave/ServiceProvider/Main.cpp /^int main(int argc, char **argv) {$/;" f -mainFiltered build/sbt /^mainFiltered () {$/;" f -make_url build/sbt /^make_url () {$/;" f -maybe_finish_block src/enclave/Enclave/Flatbuffers.h /^ void maybe_finish_block() {$/;" f class:FlatbuffersRowWriter -memcpy_s src/enclave/Common/common.h /^inline int memcpy_s(void *dest,$/;" f -mk_key src/enclave/ServiceProvider/service_provider.cpp /^ lc_aes_gcm_128bit_key_t mk_key; \/\/ Shared secret key for generating MAC's$/;" m struct:_sp_db_item_t file: -mr_enclave src/enclave/ServiceProvider/ias_ra.h /^ sample_measurement_t mr_enclave; \/\/ ( 64) The value of the enclave's$/;" m struct:sample_report_body_t -mr_reserved1 src/enclave/ServiceProvider/ias_ra.h /^ sample_measurement_t mr_reserved1; \/\/ (192)$/;" m struct:sample_report_body_t -mr_reserved2 src/enclave/ServiceProvider/ias_ra.h /^ sample_measurement_t mr_reserved2; \/\/ (224)$/;" m struct:sample_report_body_t -mr_signer src/enclave/ServiceProvider/ias_ra.h /^ sample_measurement_t mr_signer; \/\/ (128) The value of the enclave's$/;" m struct:sample_report_body_t -msg src/enclave/App/App.cpp /^ const char *msg;$/;" m struct:_sgx_errlist_t file: -msg1_sample1 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg1_sample1[] =$/;" v -msg1_sample2 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg1_sample2[] =$/;" v -msg2_sample1 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg2_sample1[] =$/;" v -msg2_sample2 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg2_sample2[] =$/;" v -msg3_sample1 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg3_sample1[MSG3_BODY_SIZE] = $/;" v -msg3_sample2 src/enclave/ServiceProvider/sample_messages.h /^uint8_t msg3_sample2[MSG3_BODY_SIZE] = $/;" v -nOptions src/enclave/Include/jni.h /^ jint nOptions;$/;" m struct:JavaVMInitArgs -name src/enclave/Include/jni.h /^ char *name;$/;" m struct:JavaVMAttachArgs -name src/enclave/Include/jni.h /^ char *name;$/;" m struct:__anon1 -name src/enclave/ServiceProvider/ias_ra.h /^ uint8_t name[32];$/;" m struct:sample_basename_t -name_max_length data/disease/synth_disease_data.py /^name_max_length = 16$/;" v -name_min_length data/disease/synth_disease_data.py /^name_min_length = 3$/;" v -nb src/enclave/Enclave/sgxaes.h /^ uint32_t nb;$/;" m struct:KeySchedule -next src/enclave/Enclave/Flatbuffers.h /^ const tuix::Row *next() {$/;" f class:EncryptedBlockToRowReader -next src/enclave/Enclave/Flatbuffers.h /^ const tuix::Row *next() {$/;" f class:EncryptedBlocksToRowReader -next_from_run src/enclave/Enclave/Flatbuffers.h /^ const tuix::Row *next_from_run(uint32_t run_idx) {$/;" f class:SortedRunsReader -non_oblivious_aggregate_step1 src/enclave/Enclave/Aggregate.cpp /^void non_oblivious_aggregate_step1($/;" f -non_oblivious_aggregate_step2 src/enclave/Enclave/Aggregate.cpp /^void non_oblivious_aggregate_step2($/;" f -non_oblivious_sort_merge_join src/enclave/Enclave/Join.cpp /^void non_oblivious_sort_merge_join($/;" f -nr src/enclave/Enclave/sgxaes.h /^ uint32_t nr;$/;" m struct:KeySchedule -num_rows src/enclave/Enclave/Flatbuffers.h /^ uint32_t num_rows() {$/;" f class:EncryptedBlocksToRowReader -num_runs src/enclave/Enclave/Flatbuffers.h /^ uint32_t num_runs() {$/;" f class:SortedRunsReader -ocall_exit src/enclave/App/App.cpp /^void ocall_exit(int exit_code) {$/;" f -ocall_free src/enclave/App/App.cpp /^void ocall_free(uint8_t *buf) {$/;" f -ocall_malloc src/enclave/App/App.cpp /^void ocall_malloc(size_t size, uint8_t **ret) {$/;" f -ocall_print_string src/enclave/App/App.cpp /^void ocall_print_string(const char *str)$/;" f -onSbtRunnerExit build/sbt /^onSbtRunnerExit() {$/;" f -operator double src/enclave/Enclave/Flatbuffers.h /^ explicit operator double() const { return days_since_epoch; }$/;" f class:Date -operator float src/enclave/Enclave/Flatbuffers.h /^ explicit operator float() const { return days_since_epoch; }$/;" f class:Date -operator int32_t src/enclave/Enclave/Flatbuffers.h /^ explicit operator int32_t() const { return days_since_epoch; }$/;" f class:Date -operator int64_t src/enclave/Enclave/Flatbuffers.h /^ explicit operator int64_t() const { return days_since_epoch; }$/;" f class:Date -optionString src/enclave/Include/jni.h /^ char *optionString;$/;" m struct:JavaVMOption -options src/enclave/Include/jni.h /^ JavaVMOption *options;$/;" m struct:JavaVMInitArgs -output_buffer src/enclave/Enclave/Flatbuffers.h /^ std::unique_ptr output_buffer() {$/;" f class:FlatbuffersRowWriter -output_num_rows src/enclave/Enclave/Flatbuffers.h /^ uint32_t output_num_rows() {$/;" f class:FlatbuffersRowWriter -output_size src/enclave/Enclave/Flatbuffers.h /^ size_t output_size() {$/;" f class:FlatbuffersRowWriter -partition_for_sort src/enclave/Enclave/Sort.cpp /^void partition_for_sort(uint8_t *sort_order, size_t sort_order_length,$/;" f -payload src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t payload[32]; \/* 32: Ciphertext of the payload; this should be the secret key*\/$/;" m struct:sp_aes_gcm_data_t -payload_size src/enclave/ServiceProvider/remote_attestation_result.h /^ uint32_t payload_size; \/* 0: Size of the payload which is*\/$/;" m struct:sp_aes_gcm_data_t -payload_tag src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t payload_tag[SAMPLE_SP_TAG_SIZE]; \/* 16: AES-GMAC of the plain text, payload, and the sizes*\/$/;" m struct:sp_aes_gcm_data_t -perf src/enclave/Common/common.h /^#define perf(/;" d -performance_rekey_gid src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t performance_rekey_gid[GID_SIZE];$/;" m struct:ias_platform_info_blob_t -platform_info_blob src/enclave/ServiceProvider/remote_attestation_result.h /^ ias_platform_info_blob_t platform_info_blob;$/;" m struct:sample_ra_att_result_msg_t -policy_report src/enclave/ServiceProvider/ias_ra.h /^ uint8_t policy_report[];\/\/ IAS_Q: Why does it specify a$/;" m struct:_ias_att_report_t -policy_report_size src/enclave/ServiceProvider/ias_ra.h /^ uint32_t policy_report_size;$/;" m struct:_ias_att_report_t -print src/enclave/Enclave/Flatbuffers.cpp /^void print(const tuix::Field *field) {$/;" f -print src/enclave/Enclave/Flatbuffers.cpp /^void print(const tuix::Row *in) {$/;" f -print_bytes src/enclave/Enclave/util.cpp /^void print_bytes(uint8_t *ptr, uint32_t len) {$/;" f -print_ec_key src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t print_ec_key(EC_KEY *ec_key) {$/;" f -print_error_message src/enclave/App/App.cpp /^void print_error_message(sgx_status_t ret)$/;" f -print_hex src/enclave/Common/common.h /^inline void print_hex(unsigned char *mem, uint32_t len) {$/;" f -print_priv_key src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t print_priv_key(lc_ec256_private_t p_private) {$/;" f -print_pub_key src/enclave/ServiceProvider/sp_crypto.cpp /^lc_status_t print_pub_key(lc_ec256_public_t p_public) {$/;" f -printf src/enclave/Enclave/util.cpp /^int printf(const char *fmt, ...) {$/;" f -process_args build/sbt /^process_args () {$/;" f -project src/enclave/Enclave/Project.cpp /^void project(uint8_t *project_list, size_t project_list_length,$/;" f -ps_sec_prop src/enclave/ServiceProvider/service_provider.cpp /^ sample_ps_sec_prop_desc_t ps_sec_prop;$/;" m struct:_sp_db_item_t file: -ps_sec_prop src/enclave/ServiceProvider/service_provider.h /^ sample_ps_sec_prop_desc_t ps_sec_prop;$/;" m struct:sample_ra_msg3_t -pse_evaluation_status src/enclave/ServiceProvider/remote_attestation_result.h /^ uint16_t pse_evaluation_status;$/;" m struct:ias_platform_info_blob_t -pse_status src/enclave/ServiceProvider/ias_ra.h /^ ias_pse_status_t pse_status;$/;" m struct:_ias_att_report_t -put_secret_data src/enclave/Enclave/isv_enclave.cpp /^sgx_status_t put_secret_data($/;" f -qe_svn src/enclave/ServiceProvider/ias_ra.h /^ sample_isv_svn_t qe_svn; \/\/ 8$/;" m struct:sample_quote_t -query_sgx_status src/enclave/App/App.cpp /^int query_sgx_status()$/;" f -quote src/enclave/ServiceProvider/service_provider.h /^ uint8_t quote[];$/;" m struct:sample_ra_msg3_t -quote_type src/enclave/ServiceProvider/service_provider.h /^ uint16_t quote_type; \/* unlinkable Quote(0) or linkable Quote(0) in little endian*\/$/;" m struct:sample_ra_msg2_t -r src/enclave/Enclave/Flatbuffers.h /^ EncryptedBlockToRowReader r;$/;" m class:EncryptedBlocksToRowReader -r src/enclave/ServiceProvider/ecp.h /^ uint8_t r[SAMPLE_ECP_KEY_SIZE];$/;" m struct:sample_ec_priv_t -r src/enclave/ServiceProvider/sp_crypto.h /^ uint8_t r[LC_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_private_t -r src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint8_t r[SAMPLE_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_private_t -ra_msg_type_t src/enclave/ServiceProvider/service_provider.h /^} ra_msg_type_t;$/;" t typeref:enum:_ra_msg_type_t -ra_samp_request_header_t src/enclave/ServiceProvider/service_provider.h /^} ra_samp_request_header_t;$/;" t typeref:struct:_ra_samp_request_header_t -ra_samp_response_header_t src/enclave/ServiceProvider/service_provider.h /^} ra_samp_response_header_t;$/;" t typeref:struct:_ra_samp_response_header_t -rand src/enclave/ServiceProvider/ias_ra.h /^ uint8_t rand[16];$/;" m struct:sample_quote_nonce_t -random data/disease/synth_disease_data.py /^import random$/;" i -randomword data/disease/synth_disease_data.py /^def randomword():$/;" f -readConfigFile build/sbt /^readConfigFile() {$/;" f -read_secret_key src/enclave/ServiceProvider/service_provider.cpp /^int read_secret_key(const char *filename,$/;" f -report_body src/enclave/ServiceProvider/ias_ra.h /^ sample_report_body_t report_body; \/\/ 48$/;" m struct:sample_quote_t -report_data src/enclave/ServiceProvider/ias_ra.h /^ sample_report_data_t report_data; \/\/ (320) Data provided by the user$/;" m struct:sample_report_body_t -require_arg build/sbt /^ require_arg () {$/;" f -reserved src/enclave/ServiceProvider/ias_ra.h /^ uint8_t reserved[6]; \/\/ 10$/;" m struct:sample_quote_t -reserved src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t reserved[12]; \/* 4: Reserved bits*\/$/;" m struct:sp_aes_gcm_data_t -reserved0 src/enclave/Include/jni.h /^ void *reserved0;$/;" m struct:JNIInvokeInterface_ -reserved0 src/enclave/Include/jni.h /^ void *reserved0;$/;" m struct:JNINativeInterface_ -reserved1 src/enclave/Include/jni.h /^ void *reserved1;$/;" m struct:JNIInvokeInterface_ -reserved1 src/enclave/Include/jni.h /^ void *reserved1;$/;" m struct:JNINativeInterface_ -reserved1 src/enclave/ServiceProvider/ias_ra.h /^ uint8_t reserved1[32]; \/\/ ( 16)$/;" m struct:sample_report_body_t -reserved2 src/enclave/Include/jni.h /^ void *reserved2;$/;" m struct:JNIInvokeInterface_ -reserved2 src/enclave/Include/jni.h /^ void *reserved2;$/;" m struct:JNINativeInterface_ -reserved2 src/enclave/ServiceProvider/ias_ra.h /^ uint8_t reserved2[32]; \/\/ ( 96)$/;" m struct:sample_report_body_t -reserved3 src/enclave/Include/jni.h /^ void *reserved3;$/;" m struct:JNINativeInterface_ -reserved3 src/enclave/ServiceProvider/ias_ra.h /^ uint8_t reserved3[32]; \/\/ (160)$/;" m struct:sample_report_body_t -reserved4 src/enclave/ServiceProvider/ias_ra.h /^ uint8_t reserved4[60]; \/\/ (260)$/;" m struct:sample_report_body_t -reset src/enclave/Enclave/Crypto.cpp /^void StreamCipher::reset(uint8_t *new_ciphertext_ptr) {$/;" f class:StreamCipher -reset src/enclave/Enclave/Crypto.cpp /^void StreamDecipher::reset(uint8_t *new_ciphertext_ptr, uint32_t enc_size) {$/;" f class:StreamDecipher -reset src/enclave/Enclave/Flatbuffers.h /^ void reset(const tuix::EncryptedBlock *encrypted_block) {$/;" f class:EncryptedBlockToRowReader -reset src/enclave/Enclave/Flatbuffers.h /^ void reset(uint8_t *buf, size_t len) {$/;" f class:EncryptedBlockToRowReader -reset src/enclave/Enclave/Flatbuffers.h /^ void reset(uint8_t *buf, size_t len) {$/;" f class:SortedRunsReader -reset_group src/enclave/Enclave/ExpressionEvaluation.h /^ void reset_group() {$/;" f class:FlatbuffersAggOpEvaluator -ret src/enclave/Enclave/sgxaes_asm.S /^ret$/;" l -reverse_endian src/enclave/ServiceProvider/sp_crypto.cpp /^void reverse_endian(uint8_t *input, uint8_t *output, uint32_t len) {$/;" f -reverse_endian_by_32 src/enclave/ServiceProvider/sp_crypto.cpp /^void reverse_endian_by_32(uint8_t *input, uint8_t *output, uint32_t len) {$/;" f -revocation_reason src/enclave/ServiceProvider/ias_ra.h /^ uint32_t revocation_reason;$/;" m struct:_ias_att_report_t -right_key_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> right_key_evaluators;$/;" m class:FlatbuffersJoinExprEvaluator -row src/enclave/Enclave/Flatbuffers.h /^ const tuix::Row *row;$/;" m class:FlatbuffersTemporaryRow -row_idx src/enclave/Enclave/Flatbuffers.h /^ uint32_t row_idx;$/;" m class:EncryptedBlockToRowReader -rows src/enclave/Enclave/Flatbuffers.h /^ const tuix::Rows *rows;$/;" m class:EncryptedBlockToRowReader -rows_buf src/enclave/Enclave/Flatbuffers.h /^ std::unique_ptr rows_buf;$/;" m class:EncryptedBlockToRowReader -rows_vector src/enclave/Enclave/Flatbuffers.h /^ std::vector> rows_vector;$/;" m class:FlatbuffersRowWriter -run_has_next src/enclave/Enclave/Flatbuffers.h /^ bool run_has_next(uint32_t run_idx) {$/;" f class:SortedRunsReader -run_idx src/enclave/Enclave/Sort.cpp /^ uint32_t run_idx;$/;" m class:MergeItem file: -run_readers src/enclave/Enclave/Flatbuffers.h /^ std::vector run_readers;$/;" m class:SortedRunsReader -s src/enclave/Include/jni.h /^ jshort s;$/;" m union:jvalue -s src/enclave/ServiceProvider/ecp.h /^ uint8_t s[SAMPLE_ECP_KEY_SIZE];$/;" m struct:sample_ec_dh_shared_t -s src/enclave/ServiceProvider/sp_crypto.h /^ uint8_t s[LC_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_dh_shared_t -s src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint8_t s[SAMPLE_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_dh_shared_t -sample src/enclave/Enclave/Sort.cpp /^void sample(uint8_t *input_rows, size_t input_rows_length,$/;" f -sample_aes_ctr_128bit_key_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_aes_ctr_128bit_key_t[SAMPLE_AESCTR_KEY_SIZE];$/;" t -sample_aes_gcm_128bit_key_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_aes_gcm_128bit_key_t[SAMPLE_AESGCM_KEY_SIZE];$/;" t -sample_aes_gcm_128bit_tag_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_aes_gcm_128bit_tag_t[SAMPLE_AESGCM_MAC_SIZE];$/;" t -sample_attributes_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_attributes_t$/;" s -sample_attributes_t src/enclave/ServiceProvider/ias_ra.h /^} sample_attributes_t;$/;" t typeref:struct:sample_attributes_t -sample_basename_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_basename_t$/;" s -sample_basename_t src/enclave/ServiceProvider/ias_ra.h /^} sample_basename_t;$/;" t typeref:struct:sample_basename_t -sample_cmac_128bit_key_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_cmac_128bit_key_t[SAMPLE_CMAC_KEY_SIZE];$/;" t -sample_cmac_128bit_tag_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_cmac_128bit_tag_t[SAMPLE_CMAC_MAC_SIZE];$/;" t -sample_cmac_state_handle_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef void* sample_cmac_state_handle_t;$/;" t -sample_cpu_svn_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint8_t sample_cpu_svn_t[SAMPLE_CPUSVN_SIZE];$/;" t -sample_derive_key_type_t src/enclave/ServiceProvider/ecp.h /^} sample_derive_key_type_t;$/;" t typeref:enum:_sample_derive_key_type_t -sample_ec256_dh_shared_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef struct sample_ec256_dh_shared_t$/;" s -sample_ec256_dh_shared_t src/enclave/sample_libcrypto/sample_libcrypto.h /^} sample_ec256_dh_shared_t;$/;" t typeref:struct:sample_ec256_dh_shared_t -sample_ec256_private_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef struct sample_ec256_private_t$/;" s -sample_ec256_private_t src/enclave/sample_libcrypto/sample_libcrypto.h /^} sample_ec256_private_t;$/;" t typeref:struct:sample_ec256_private_t -sample_ec256_public_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef struct sample_ec256_public_t$/;" s -sample_ec256_public_t src/enclave/sample_libcrypto/sample_libcrypto.h /^} sample_ec256_public_t;$/;" t typeref:struct:sample_ec256_public_t -sample_ec256_signature_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef struct sample_ec256_signature_t$/;" s -sample_ec256_signature_t src/enclave/sample_libcrypto/sample_libcrypto.h /^} sample_ec256_signature_t;$/;" t typeref:struct:sample_ec256_signature_t -sample_ec_dh_shared_t src/enclave/ServiceProvider/ecp.h /^typedef struct sample_ec_dh_shared_t$/;" s -sample_ec_key_128bit_t src/enclave/ServiceProvider/ecp.h /^typedef uint8_t sample_ec_key_128bit_t[16];$/;" t -sample_ec_priv_t src/enclave/ServiceProvider/ecp.h /^typedef struct sample_ec_priv_t$/;" s -sample_ec_priv_t src/enclave/ServiceProvider/ecp.h /^} sample_ec_priv_t;$/;" t typeref:struct:sample_ec_priv_t -sample_ec_pub_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ec_pub_t$/;" s -sample_ec_pub_t src/enclave/ServiceProvider/service_provider.h /^} sample_ec_pub_t;$/;" t typeref:struct:sample_ec_pub_t -sample_ec_sign256_t src/enclave/ServiceProvider/remote_attestation_result.h /^typedef struct sample_ec_sign256_t$/;" s -sample_ec_sign256_t src/enclave/ServiceProvider/remote_attestation_result.h /^} sample_ec_sign256_t;$/;" t typeref:struct:sample_ec_sign256_t -sample_ecc_state_handle_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef void* sample_ecc_state_handle_t;$/;" t -sample_enroll src/enclave/ServiceProvider/service_provider.h /^ typedef int (*sample_enroll)(int sp_credentials, sample_spid_t* spid,$/;" t -sample_epid_group_id_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint8_t sample_epid_group_id_t[4];$/;" t -sample_epid_group_status src/enclave/ServiceProvider/remote_attestation_result.h /^ uint8_t sample_epid_group_status;$/;" m struct:ias_platform_info_blob_t -sample_extended_epid_group src/enclave/ServiceProvider/service_provider.h /^ typedef struct sample_extended_epid_group$/;" s -sample_extended_epid_group src/enclave/ServiceProvider/service_provider.h /^ } sample_extended_epid_group;$/;" t typeref:struct:sample_extended_epid_group -sample_get_sigrl src/enclave/ServiceProvider/service_provider.h /^ typedef int(*sample_get_sigrl)(const sample_epid_group_id_t gid, uint32_t* p_sig_rl_size,$/;" t -sample_isv_svn_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint16_t sample_isv_svn_t;$/;" t -sample_key_128bit_t src/enclave/ServiceProvider/service_provider.h /^typedef uint8_t sample_key_128bit_t[16];$/;" t -sample_mac_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint8_t sample_mac_t[SAMPLE_MAC_SIZE];$/;" t -sample_mac_t src/enclave/ServiceProvider/remote_attestation_result.h /^typedef uint8_t sample_mac_t[SAMPLE_MAC_SIZE];$/;" t -sample_measurement_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint8_t sample_measurement_t[SAMPLE_HASH_SIZE];$/;" t -sample_prod_id_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint16_t sample_prod_id_t;$/;" t -sample_ps_sec_prop_desc src/enclave/ServiceProvider/service_provider.h /^ uint8_t sample_ps_sec_prop_desc[256];$/;" m struct:sample_ps_sec_prop_desc_t -sample_ps_sec_prop_desc_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ps_sec_prop_desc_t$/;" s -sample_ps_sec_prop_desc_t src/enclave/ServiceProvider/service_provider.h /^} sample_ps_sec_prop_desc_t;$/;" t typeref:struct:sample_ps_sec_prop_desc_t -sample_quote_nonce_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_quote_nonce_t$/;" s -sample_quote_nonce_t src/enclave/ServiceProvider/ias_ra.h /^} sample_quote_nonce_t;$/;" t typeref:struct:sample_quote_nonce_t -sample_quote_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_quote_t {$/;" s -sample_quote_t src/enclave/ServiceProvider/ias_ra.h /^} sample_quote_t;$/;" t typeref:struct:sample_quote_t -sample_ra_att_result_msg_t src/enclave/ServiceProvider/remote_attestation_result.h /^typedef struct sample_ra_att_result_msg_t {$/;" s -sample_ra_att_result_msg_t src/enclave/ServiceProvider/remote_attestation_result.h /^} sample_ra_att_result_msg_t;$/;" t typeref:struct:sample_ra_att_result_msg_t -sample_ra_context_t src/enclave/ServiceProvider/service_provider.h /^typedef uint32_t sample_ra_context_t;$/;" t -sample_ra_key_128_t src/enclave/ServiceProvider/service_provider.h /^typedef sample_key_128bit_t sample_ra_key_128_t;$/;" t -sample_ra_msg0_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ra_msg0_t$/;" s -sample_ra_msg0_t src/enclave/ServiceProvider/service_provider.h /^} sample_ra_msg0_t;$/;" t typeref:struct:sample_ra_msg0_t -sample_ra_msg1_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ra_msg1_t$/;" s -sample_ra_msg1_t src/enclave/ServiceProvider/service_provider.h /^} sample_ra_msg1_t;$/;" t typeref:struct:sample_ra_msg1_t -sample_ra_msg2_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ra_msg2_t$/;" s -sample_ra_msg2_t src/enclave/ServiceProvider/service_provider.h /^} sample_ra_msg2_t;$/;" t typeref:struct:sample_ra_msg2_t -sample_ra_msg3_t src/enclave/ServiceProvider/service_provider.h /^typedef struct sample_ra_msg3_t$/;" s -sample_ra_msg3_t src/enclave/ServiceProvider/service_provider.h /^} sample_ra_msg3_t;$/;" t typeref:struct:sample_ra_msg3_t -sample_report_body_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_report_body_t {$/;" s -sample_report_body_t src/enclave/ServiceProvider/ias_ra.h /^} sample_report_body_t;$/;" t typeref:struct:sample_report_body_t -sample_report_data_t src/enclave/ServiceProvider/ias_ra.h /^typedef uint8_t sample_report_data_t[SAMPLE_REPORT_DATA_SIZE];$/;" t -sample_sha256_hash_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef uint8_t sample_sha256_hash_t[SAMPLE_SHA256_HASH_SIZE];$/;" t -sample_sha_state_handle_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef void* sample_sha_state_handle_t;$/;" t -sample_spid_t src/enclave/ServiceProvider/ias_ra.h /^typedef struct sample_spid_t$/;" s -sample_spid_t src/enclave/ServiceProvider/ias_ra.h /^} sample_spid_t;$/;" t typeref:struct:sample_spid_t -sample_status_t src/enclave/sample_libcrypto/sample_libcrypto.h /^typedef enum sample_status_t$/;" g -sample_status_t src/enclave/sample_libcrypto/sample_libcrypto.h /^} sample_status_t;$/;" t typeref:enum:sample_status_t -sample_tcb_evaluation_status src/enclave/ServiceProvider/remote_attestation_result.h /^ uint16_t sample_tcb_evaluation_status;$/;" m struct:ias_platform_info_blob_t -sample_verify_attestation_evidence src/enclave/ServiceProvider/service_provider.h /^ typedef int(*sample_verify_attestation_evidence)(sample_quote_t* p_isv_quote,$/;" t -scan_collect_last_primary src/enclave/Enclave/Join.cpp /^void scan_collect_last_primary($/;" f -scoped_timer src/enclave/App/App.cpp /^ scoped_timer(uint64_t *total_time) {$/;" f class:scoped_timer -scoped_timer src/enclave/App/App.cpp /^class scoped_timer {$/;" c file: -secret src/enclave/ServiceProvider/remote_attestation_result.h /^ sp_aes_gcm_data_t secret;$/;" m struct:sample_ra_att_result_msg_t -secs_to_tm src/enclave/Enclave/util.cpp /^int secs_to_tm(long long t, struct tm *tm) {$/;" f -set src/enclave/Enclave/ExpressionEvaluation.h /^ void set(const tuix::Row *agg_row) {$/;" f class:FlatbuffersAggOpEvaluator -set src/enclave/Enclave/Flatbuffers.h /^ void set(const tuix::Row *row) {$/;" f class:FlatbuffersTemporaryRow -setJavaHome build/sbt /^setJavaHome () {$/;" f -setScalaVersion build/sbt /^setScalaVersion () {$/;" f -setThisBuild build/sbt /^setThisBuild () {$/;" f -setTraceLevel build/sbt /^setTraceLevel() {$/;" f -set_sbt_version build/sbt /^set_sbt_version () {$/;" f -sgx_check src/enclave/App/App.cpp /^#define sgx_check(/;" d file: -sgx_check_quiet src/enclave/App/App.cpp /^void sgx_check_quiet(const char* message, sgx_status_t ret)$/;" f -sgx_errlist src/enclave/App/App.cpp /^static sgx_errlist_t sgx_errlist[] = {$/;" v file: -sgx_errlist_t src/enclave/App/App.cpp /^} sgx_errlist_t;$/;" t typeref:struct:_sgx_errlist_t file: -shared_secret src/enclave/Enclave/isv_enclave.cpp /^ sgx_ec256_dh_shared_t shared_secret;$/;" m struct:_hash_buffer_t file: -shared_secret src/enclave/ServiceProvider/ecp.cpp /^ sgx_ec_dh_shared_t shared_secret;$/;" m struct:_hash_buffer_t file: -shouldFilter build/sbt /^shouldFilter () { [[ -f ~\/.sbtignore ]] && ! egrep -q '\\b(shell|console|consoleProject)\\b' <<<"${residual_args[@]}"; }$/;" f -sig_rl src/enclave/ServiceProvider/service_provider.h /^ uint8_t sig_rl[];$/;" m struct:sample_ra_msg2_t -sig_rl_size src/enclave/ServiceProvider/service_provider.h /^ uint32_t sig_rl_size;$/;" m struct:sample_ra_msg2_t -sign_gb_ga src/enclave/ServiceProvider/service_provider.h /^ sample_ec_sign256_t sign_gb_ga; \/* In little endian*\/$/;" m struct:sample_ra_msg2_t -sign_type src/enclave/ServiceProvider/ias_ra.h /^ uint16_t sign_type; \/\/ 2$/;" m struct:sample_quote_t -signature src/enclave/Include/jni.h /^ char *signature;$/;" m struct:__anon1 -signature src/enclave/ServiceProvider/ias_ra.h /^ uint8_t signature[]; \/\/ 436$/;" m struct:sample_quote_t -signature src/enclave/ServiceProvider/remote_attestation_result.h /^ sample_ec_sign256_t signature;$/;" m struct:ias_platform_info_blob_t -signature_len src/enclave/ServiceProvider/ias_ra.h /^ uint32_t signature_len; \/\/ 432$/;" m struct:sample_quote_t -size src/enclave/ServiceProvider/service_provider.h /^ uint32_t size; \/*size of the response body*\/$/;" m struct:_ra_samp_response_header_t -size src/enclave/ServiceProvider/service_provider.h /^ uint32_t size; \/*size of request body*\/$/;" m struct:_ra_samp_request_header_t -sk_key src/enclave/ServiceProvider/service_provider.cpp /^ lc_aes_gcm_128bit_key_t sk_key; \/\/ Shared secret key for encryption$/;" m struct:_sp_db_item_t file: -smk_key src/enclave/ServiceProvider/service_provider.cpp /^ lc_aes_gcm_128bit_key_t smk_key; \/\/ Used only for SIGMA protocol$/;" m struct:_sp_db_item_t file: -sort_expr src/enclave/Enclave/ExpressionEvaluation.h /^ const tuix::SortExpr *sort_expr;$/;" m class:FlatbuffersSortOrderEvaluator -sort_order_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> sort_order_evaluators;$/;" m class:FlatbuffersSortOrderEvaluator -sort_single_encrypted_block src/enclave/Enclave/Sort.cpp /^flatbuffers::Offset sort_single_encrypted_block($/;" f -sorted_runs src/enclave/Enclave/Flatbuffers.h /^ const tuix::SortedRuns *sorted_runs;$/;" m class:SortedRunsReader -sp_aes_gcm_data_t src/enclave/ServiceProvider/remote_attestation_result.h /^typedef struct sp_aes_gcm_data_t {$/;" s -sp_aes_gcm_data_t src/enclave/ServiceProvider/remote_attestation_result.h /^} sp_aes_gcm_data_t;$/;" t typeref:struct:sp_aes_gcm_data_t -sp_db_item_t src/enclave/ServiceProvider/service_provider.cpp /^} sp_db_item_t;$/;" t typeref:struct:_sp_db_item_t file: -sp_ra_msg_status_t src/enclave/ServiceProvider/service_provider.h /^} sp_ra_msg_status_t;$/;" t typeref:enum:__anon5 -sp_ra_proc_msg0_req src/enclave/ServiceProvider/service_provider.cpp /^int sp_ra_proc_msg0_req(uint32_t extended_epid_group_id) {$/;" f -sp_ra_proc_msg1_req src/enclave/ServiceProvider/service_provider.cpp /^int sp_ra_proc_msg1_req(sgx_ra_msg1_t *p_msg1,$/;" f -sp_ra_proc_msg3_req src/enclave/ServiceProvider/service_provider.cpp /^int sp_ra_proc_msg3_req(sgx_ra_msg3_t *p_msg3,$/;" f -spid src/enclave/ServiceProvider/service_provider.h /^ sample_spid_t spid; \/* In little endian*\/$/;" m struct:sample_ra_msg2_t -state src/enclave/Enclave/sgxaes.h /^ State state;$/;" m struct:AesGcm -status src/enclave/ServiceProvider/ias_ra.h /^ ias_quote_status_t status;$/;" m struct:_ias_att_report_t -status src/enclave/ServiceProvider/service_provider.h /^ uint8_t status[2];$/;" m struct:_ra_samp_response_header_t -std src/enclave/Common/common.h /^namespace std {$/;" n -std src/enclave/Enclave/util.h /^namespace std {$/;" n -str_MK src/enclave/ServiceProvider/ecp.cpp /^const char str_MK[] = "MK";$/;" v -str_SK src/enclave/ServiceProvider/ecp.cpp /^const char str_SK[] = "SK";$/;" v -str_SMK src/enclave/ServiceProvider/ecp.cpp /^const char str_SMK[] = "SMK";$/;" v -str_VK src/enclave/ServiceProvider/ecp.cpp /^const char str_VK[] = "VK";$/;" v -string data/disease/synth_disease_data.py /^import string$/;" i -sug src/enclave/App/App.cpp /^ const char *sug; \/* Suggestion *\/$/;" m struct:_sgx_errlist_t file: -sys data/disease/synth_disease_data.py /^import sys$/;" i -t src/enclave/Enclave/sgxaes.h /^ unsigned char t[16];$/;" m struct:Tag -t src/enclave/Enclave/sgxaes.h /^ unsigned char t[AES_BLOCK_SIZE];$/;" m struct:GcmContext -tag src/enclave/Enclave/sgxaes.cpp /^Tag AesGcm::tag() const {$/;" f class:AesGcm -time_end src/enclave/App/App.cpp /^ uint64_t time_start, time_end;$/;" m class:scoped_timer file: -time_start src/enclave/App/App.cpp /^ uint64_t time_start, time_end;$/;" m class:scoped_timer file: -to_string src/enclave/Enclave/Flatbuffers.cpp /^std::string to_string(const Date &date) {$/;" f -total_cipher_size src/enclave/Enclave/Crypto.h /^ uint32_t total_cipher_size;$/;" m class:StreamDecipher -total_num_rows src/enclave/Enclave/Flatbuffers.h /^ uint32_t total_num_rows;$/;" m class:FlatbuffersRowWriter -total_time src/enclave/App/App.cpp /^ uint64_t * total_time;$/;" m class:scoped_timer file: -type src/enclave/ServiceProvider/service_provider.h /^ uint8_t type; \/* set to one of ra_msg_type_t*\/$/;" m struct:_ra_samp_response_header_t -type src/enclave/ServiceProvider/service_provider.h /^ uint8_t type; \/* set to one of ra_msg_type_t*\/$/;" m struct:_ra_samp_request_header_t -untrusted_alloc src/enclave/Enclave/Flatbuffers.h /^ UntrustedMemoryAllocator untrusted_alloc;$/;" m class:FlatbuffersRowWriter -update src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector update(const tuix::Row *concat) {$/;" f class:AggregateExpressionEvaluator -update_build_props_sbt build/sbt /^update_build_props_sbt () {$/;" f -update_evaluators src/enclave/Enclave/ExpressionEvaluation.h /^ std::vector> update_evaluators;$/;" m class:AggregateExpressionEvaluator -url_base build/sbt /^url_base () {$/;" f -usage build/sbt /^usage () {$/;" f -v src/enclave/Enclave/Sort.cpp /^ const tuix::Row *v;$/;" m class:MergeItem file: -verify_att_result_mac src/enclave/Enclave/isv_enclave.cpp /^sgx_status_t verify_att_result_mac(sgx_ra_context_t context,$/;" f -verify_attestation_evidence src/enclave/ServiceProvider/service_provider.h /^ sample_verify_attestation_evidence verify_attestation_evidence;$/;" m struct:sample_extended_epid_group -verify_cmac128 src/enclave/ServiceProvider/ecp.cpp /^bool verify_cmac128(lc_cmac_128bit_key_t mac_key,$/;" f -version src/enclave/Include/jni.h /^ jint version;$/;" m struct:JavaVMAttachArgs -version src/enclave/Include/jni.h /^ jint version;$/;" m struct:JavaVMInitArgs -version src/enclave/ServiceProvider/ias_ra.h /^ uint16_t version; \/\/ 0$/;" m struct:sample_quote_t -vk_key src/enclave/ServiceProvider/service_provider.cpp /^ lc_aes_gcm_128bit_key_t vk_key; \/\/ Shared secret key for the REPORT_DATA$/;" m struct:_sp_db_item_t file: -vlog build/sbt /^vlog () { [[ -n "$verbose" ]] && echoerr "$@"; }$/;" f -write src/enclave/Enclave/Flatbuffers.h /^ void write(const std::vector &row_fields) {$/;" f class:FlatbuffersRowWriter -write src/enclave/Enclave/Flatbuffers.h /^ void write(const tuix::Row *row) {$/;" f class:FlatbuffersRowWriter -write src/enclave/Enclave/Flatbuffers.h /^ void write(const tuix::Row *row1, const tuix::Row *row2) {$/;" f class:FlatbuffersRowWriter -write_encrypted_block src/enclave/Enclave/Flatbuffers.h /^ void write_encrypted_block() {$/;" f class:FlatbuffersRowWriter -write_encrypted_blocks src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Offset write_encrypted_blocks() {$/;" f class:FlatbuffersRowWriter -write_pubkey src/enclave/ServiceProvider/service_provider.cpp /^void write_pubkey(const char *filename,$/;" f -write_sorted_runs src/enclave/Enclave/Flatbuffers.h /^ flatbuffers::Offset write_sorted_runs($/;" f class:FlatbuffersRowWriter -x src/enclave/ServiceProvider/remote_attestation_result.h /^ uint32_t x[SAMPLE_NISTP256_KEY_SIZE];$/;" m struct:sample_ec_sign256_t -x src/enclave/ServiceProvider/sp_crypto.h /^ uint32_t x[LC_NISTP_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_signature_t -x src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint32_t x[SAMPLE_NISTP_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_signature_t -x0 src/enclave/Enclave/sgxaes.h /^ unsigned char x0[AES_BLOCK_SIZE];$/;" m struct:GcmContext -xfrm src/enclave/ServiceProvider/ias_ra.h /^ uint64_t xfrm;$/;" m struct:sample_attributes_t -y src/enclave/ServiceProvider/remote_attestation_result.h /^ uint32_t y[SAMPLE_NISTP256_KEY_SIZE];$/;" m struct:sample_ec_sign256_t -y src/enclave/ServiceProvider/sp_crypto.h /^ uint32_t y[LC_NISTP_ECP256_KEY_SIZE];$/;" m struct:lc_ec256_signature_t -y src/enclave/sample_libcrypto/sample_libcrypto.h /^ uint32_t y[SAMPLE_NISTP_ECP256_KEY_SIZE];$/;" m struct:sample_ec256_signature_t -z src/enclave/Include/jni.h /^ jboolean z;$/;" m union:jvalue -~MAC src/enclave/Enclave/Crypto.h /^ ~MAC() {$/;" f class:MAC -~StreamCipher src/enclave/Enclave/Crypto.cpp /^StreamCipher::~StreamCipher() {$/;" f class:StreamCipher -~StreamDecipher src/enclave/Enclave/Crypto.cpp /^StreamDecipher::~StreamDecipher() {$/;" f class:StreamDecipher -~scoped_timer src/enclave/App/App.cpp /^ ~scoped_timer() {$/;" f class:scoped_timer diff --git a/dfEncrypted/.schema.crc b/dfEncrypted/.schema.crc deleted file mode 100644 index daeb614161cae89c3a71b1b8b05201c87dc3d773..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16 XcmYc;N@ieSU}CuZW5(gIPpd2dEae7^ diff --git a/dfEncrypted/data/._SUCCESS.crc b/dfEncrypted/data/._SUCCESS.crc deleted file mode 100644 index 3b7b044936a890cd8d651d349a752d819d71d22c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 PcmYc;N@ieSU}69O2$TUk diff --git a/dfEncrypted/data/.part-00000.crc b/dfEncrypted/data/.part-00000.crc deleted file mode 100644 index b2d23515ae7c8a8d044c77d332a804fa942b86e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16 XcmYc;N@ieSU}A_{-1XGT!lDoWBliTx diff --git a/dfEncrypted/data/_SUCCESS b/dfEncrypted/data/_SUCCESS deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/dfEncrypted/data/part-00000 b/dfEncrypted/data/part-00000 deleted file mode 100644 index ad1ccf5a85426a04b498b93d5b152638f1c65b6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 566 zcmWG`4P;ZuFG|--EJ#ewNY%?oOv%qL(96u%^UNy=FUl-QOv*`B!m7ZjvLv+_ri1|u zj-FS%Uc+Z^JaOe$Kf{hKZy6XEF90Q2AhL`nc)$!c1`ePQ8&rZ3NQ1;VfFui$}x-1 zs<8ag;#RH7wI?bA-?jeL75m4>KC2?9$nMk%!_XNT9ho6-B_*~gzx3!$e^-6{IQRdR zyp94vG6f~4R;^ulPR;6T4$Jmaf7EWXi9DDeJ;Qk3eyu$$x0{0UKRazqt+zhB{>_fv z&3el+0!9Bb2-*m%8ZMP^QP!=xsw$Vp;&Ao;vVaq5-W?BH535xNHP{uFf6R1vT)Sn$ ztGN=w%vL&Kg$0vVtjm3qG}HfS>eGT_8W-0mEWCENe#-ePL7SdE;k4iO>fblJyw-pv z@ykEye_1r~!9Cj_^K~}eP`Y_c&dyw%b^o*e;*!s$7p_l>`n}<%s`~zuk{fPttG?2_ z9&CNyNTBYd-<7L!I~??KWKD}r-JF<;XCz48c%FE%L8N*~nZxo=Ur+E!WPDz7fp=}- TT&-!(P2z02eA^!KF4_wKj5hA4 diff --git a/dfEncrypted/schema b/dfEncrypted/schema deleted file mode 100644 index b4892f8f4973f30d8218869f5508cf9bffbb85b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 806 zcmah{Jx?1!6nva*ViZ{@5lyHfVe%nGw~xJV#i>7W3bgd%y|ZR`tsd&})Ru$$1Q zrlUbfh=!I5(NR#O3Qd$hkQ9O6klnQtQ=PZkmEO#onVr)csOSu4)2!{I!mz`AtuWj2 z^|tV-r?~dlD9b}yH+QQ1UaC!oGo}Pp{bc~PPcawK3MO2y zaUyse=nw_6FcpG_6sMBKNs<$83eL<#V*|z=L=!yU2#gNa*TI|)W^^#8gY|X1we*bu z?n|>`J$26!Tb5A`0WBHv?lydZQdfaJD$fRsiv#E{J_|29AE#@J9)QDpCcGyj!*kfx z=C7kiP1y6G{2r<@7s6%`Ks7=_7ca~f`JW$*886j@6IvJ*LzV|)22!?p5j+e&;|?-` zvTXy6WxLT;W1~%&K`XKT;_&N%T)Ccf{taxV!27@LJ#6m(oOw|4pmeu3CWK*aN~S({ zf5lKgbH(w8#qs|a$2VVEUq}@7?B&(v-1oh2C&x|`L3uaLB5ld;fuVU?ps*#0w|VBA X!Re2y+jqNv9E(Ly5>&!8m!#BRlOGht diff --git a/dfEncrypted2/.schema.crc b/dfEncrypted2/.schema.crc deleted file mode 100644 index daeb614161cae89c3a71b1b8b05201c87dc3d773..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16 XcmYc;N@ieSU}CuZW5(gIPpd2dEae7^ diff --git a/dfEncrypted2/data/._SUCCESS.crc b/dfEncrypted2/data/._SUCCESS.crc deleted file mode 100644 index 3b7b044936a890cd8d651d349a752d819d71d22c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 PcmYc;N@ieSU}69O2$TUk diff --git a/dfEncrypted2/data/.part-00000.crc b/dfEncrypted2/data/.part-00000.crc deleted file mode 100644 index fd2f4f697eb480b77dc9689f6f4b1112cfd38440..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16 XcmYc;N@ieSU}7k=Q)yuRe!~+0AMgaL diff --git a/dfEncrypted2/data/_SUCCESS b/dfEncrypted2/data/_SUCCESS deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/dfEncrypted2/data/part-00000 b/dfEncrypted2/data/part-00000 deleted file mode 100644 index 31552ac98a3ce97c3b6c4cb9aa9aef0b462a87ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 566 zcmWG`4P;ZuFG|--EJ#ewNY%?oOv%qL(96u%^UNy=FUl-QOv*`B!m7ZjvLv+_ri1|u z*8C55UCFtt)!xeQ;pyW{d<+bX7l0Bh5Lw0(JYWVJ0|!uu4JyG1q(R~wK#~PWazMpF znx+6H=k)xw@LI07evgLSqC4uUh6QKB&dHzj=rJw$FtfSfrg_J?tb%s+SDTeXA6D)U zx!u{bYg(3nGu1Dw@!e9cGNE1IW<*(t^Q_4ev(nv6 zY^>*K{N19Gd;Lg%jts*#nXotOA1F3|5m~IB_4mbJ=2(r4j=fW3nG2b|EH2(Bd#01? zZ|0FtC(M-98GPD4rc_?*bTbR?=E#eR{r9J%>&f};p2rLN{SMF7zq&|ZcG&WD7TbC* zip1&vNfXjgKYZ?p%{ejUuGo3Mcb~lGzr@$xQhC*fi`K7>+n6x%*rx5c$LeL2s2;Yw zA#Fl%!rJLoO3@Q|wd>CQEOY8G5bhS3@k?vdxn$m~bzGIZmroAAu4yA=sBonG#N*_d z>yGsPc)moaZ{dqOAD$ad{kHoxJV#i>7W3bgd%y|ZR`tsd&})Ru$$1Q zrlUbfh=!I5(NR#O3Qd$hkQ9O6klnQtQ=PZkmEO#onVr)csOSu4)2!{I!mz`AtuWj2 z^|tV-r?~dlD9b}yH+QQ1UaC!oGo}Pp{bc~PPcawK3MO2y zaUyse=nw_6FcpG_6sMBKNs<$83eL<#V*|z=L=!yU2#gNa*TI|)W^^#8gY|X1we*bu z?n|>`J$26!Tb5A`0WBHv?lydZQdfaJD$fRsiv#E{J_|29AE#@J9)QDpCcGyj!*kfx z=C7kiP1y6G{2r<@7s6%`Ks7=_7ca~f`JW$*886j@6IvJ*LzV|)22!?p5j+e&;|?-` zvTXy6WxLT;W1~%&K`XKT;_&N%T)Ccf{taxV!27@LJ#6m(oOw|4pmeu3CWK*aN~S({ zf5lKgbH(w8#qs|a$2VVEUq}@7?B&(v-1oh2C&x|`L3uaLB5ld;fuVU?ps*#0w|VBA X!Re2y+jqNv9E(Ly5>&!8m!#BRlOGht diff --git a/load.scala b/load.scala deleted file mode 100644 index 11a7bf20a8..0000000000 --- a/load.scala +++ /dev/null @@ -1,15 +0,0 @@ -// This script tests loading from two dataframes, each encrypted with a different key -// -// import org.apache.spark.sql.types._ -// -// val df = (spark.read.format("edu.berkeley.cs.rise.opaque.EncryptedSource") -// .schema(StructType(Seq(StructField("word", StringType), StructField("count", IntegerType)))) -// .load("dfEncrypted")) -// println("dfEncrypted") -// df.show() -// -// val df2 = (spark.read.format("edu.berkeley.cs.rise.opaque.EncryptedSource") -// .schema(StructType(Seq(StructField("word", StringType), StructField("count", IntegerType)))) -// .load("dfEncrypted2")) -// println("dfEncrypted2") -// df2.show() diff --git a/setup-script.sh b/setup-script.sh deleted file mode 100755 index 7636357899..0000000000 --- a/setup-script.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash -OPAQUE_HOME=/home/vitikoo/my_code/opaque -source ~/sgxsdk/environment -# create keypair on master for remote attestation -# DO WE NEED THIS WITH OE SDK?? -# cd ${OPAQUE_HOME} -#openssl ecparam -name prime256v1 -genkey -noout -out private_key.pem -export SPARKSGX_DATA_DIR=${OPAQUE_HOME}/data -export PRIVATE_KEY_PATH=${OPAQUE_HOME}/private_key.pem -export SGX_MODE=HW - -export SPARK_HOME=/home/vitikoo/spark-2.4.4-bin-hadoop2.7/ - -export OE_SDK_PATH=/opt/openenclave \ No newline at end of file diff --git a/src/enclave/CMakeLists.txt b/src/enclave/CMakeLists.txt index e55932a2c4..e29a67be65 100644 --- a/src/enclave/CMakeLists.txt +++ b/src/enclave/CMakeLists.txt @@ -26,10 +26,6 @@ else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64") endif() -# set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "$ENV{OE_SDK_PATH}/lib") # not clear about this. Ask someone to verify -# set(OE_ENCLAVE_SIGNER "$ENV{OE_SDK_PATH}/bin/oesign") -# set(OE_EDGER8R "$ENV{OE_SDK_PATH}/bin/oeedger8r") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -Werror") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -DDEBUG -UNDEBUG -UEDEBUG") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -DNDEBUG -DEDEBUG -UDEBUG") diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index 52c1d08ece..dfcf64f3c1 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -10,7 +10,6 @@ #include #include #include -//#include "rdrand.h" // Set this number before creating the enclave uint8_t num_clients = 1; @@ -57,7 +56,7 @@ void initKeySchedule() { void add_client_key(uint8_t *client_key_bytes, uint32_t client_key_size, char* username) { if (client_key_size <= 0) { - throw std::runtime_error("Remote attestation step 2: Invalid client key size"); + throw std::runtime_error("Add client key failed: Invalid client key size"); } std::vector user_private_key(client_key_bytes, client_key_bytes + client_key_size); @@ -77,7 +76,7 @@ void add_client_key(uint8_t *client_key_bytes, uint32_t client_key_size, char* u void xor_shared_key(uint8_t *key_share_bytes, uint32_t key_share_size) { if (key_share_size <= 0 || key_share_size != SGX_AESGCM_KEY_SIZE) { - throw std::runtime_error("Remote attestation step 2: Invalid key share size."); + throw std::runtime_error("Add client key failed: Invalid key share size."); } // XOR key shares @@ -119,8 +118,6 @@ void xor_shared_key(uint8_t *key_share_bytes, uint32_t key_share_size) { void encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphertext) { - // std::cout << "C++ encrypting inside enclave\n"; - if (!ks) { throw std::runtime_error( "Cannot encrypt without a shared key. Ensure all enclaves have completed attestation."); @@ -135,7 +132,6 @@ void encrypt(uint8_t *plaintext, uint32_t plaintext_length, AesGcm cipher(ks.get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); - // std::cout << "Encrypting with xor shared key\n"; } void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *plaintext) { @@ -150,11 +146,8 @@ void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *pla sgx_aes_gcm_128bit_tag_t *mac_ptr = (sgx_aes_gcm_128bit_tag_t *) (ciphertext + SGX_AESGCM_IV_SIZE + plaintext_length); - // std::cout << "do we make it here\n"; AesGcm decipher(ks.get(), iv_ptr, SGX_AESGCM_IV_SIZE); - // std::cout << "Initialized decipher\n"; decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); - // std::cout << "tried shared key\n"; if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) != 0) { // Shared key doesn't work // Perhaps we need to use a client key instead diff --git a/src/enclave/Enclave/Filter.cpp b/src/enclave/Enclave/Filter.cpp index 157f6568e0..e66fd7dd9e 100644 --- a/src/enclave/Enclave/Filter.cpp +++ b/src/enclave/Enclave/Filter.cpp @@ -4,7 +4,6 @@ #include "FlatbuffersReaders.h" #include "FlatbuffersWriters.h" #include "common.h" -#include using namespace edu::berkeley::cs::rise::opaque; diff --git a/src/enclave/Enclave/FlatbuffersReaders.cpp b/src/enclave/Enclave/FlatbuffersReaders.cpp index 1ceea93ff0..b281925779 100644 --- a/src/enclave/Enclave/FlatbuffersReaders.cpp +++ b/src/enclave/Enclave/FlatbuffersReaders.cpp @@ -1,5 +1,4 @@ #include "FlatbuffersReaders.h" -#include void EncryptedBlockToRowReader::reset(const tuix::EncryptedBlock *encrypted_block) { uint32_t num_rows = encrypted_block->num_rows(); diff --git a/src/enclave/Enclave/FlatbuffersWriters.cpp b/src/enclave/Enclave/FlatbuffersWriters.cpp index 8b409228db..8773fc5514 100644 --- a/src/enclave/Enclave/FlatbuffersWriters.cpp +++ b/src/enclave/Enclave/FlatbuffersWriters.cpp @@ -1,5 +1,4 @@ #include "FlatbuffersWriters.h" -#include void RowWriter::clear() { builder.Clear(); diff --git a/src/enclave/Enclave/Sort.cpp b/src/enclave/Enclave/Sort.cpp index 376c147556..22dbec1c54 100644 --- a/src/enclave/Enclave/Sort.cpp +++ b/src/enclave/Enclave/Sort.cpp @@ -7,9 +7,6 @@ #include "ExpressionEvaluation.h" #include "FlatbuffersReaders.h" #include "FlatbuffersWriters.h" -//#include "rdrand.h" - - class MergeItem { public: diff --git a/src/enclave/Enclave/key.h b/src/enclave/Enclave/key.h deleted file mode 100644 index cfc9d56bf2..0000000000 --- a/src/enclave/Enclave/key.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef RA_KEY_H -#define RA_KEY_H - -#include -//#include -#define SGX_ECP256_KEY_SIZE 32 -typedef struct _sgx_ec256_public_t -{ - uint8_t gx[SGX_ECP256_KEY_SIZE]; - uint8_t gy[SGX_ECP256_KEY_SIZE]; -} sgx_ec256_public_t; - -// This is the public EC key of the SP. The corresponding private EC key is -// used by the SP to sign data used in the remote attestation SIGMA protocol -// to sign channel binding data in MSG2. A successful verification of the -// signature confirms the identity of the SP to the ISV app in remote -// attestation secure channel binding. The public EC key should be hardcoded in -// the enclave or delivered in a trustworthy manner. The use of a spoofed public -// EC key in the remote attestation with secure channel binding session may lead -// to a security compromise. Every different SP the enlcave communicates to -// must have a unique SP public key. Delivery of the SP public key is -// determined by the ISV. The TKE SIGMA protocl expects an Elliptical Curve key -// based on NIST P-256 -extern const sgx_ec256_public_t g_sp_pub_key; - -#endif diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index 515e240812..122a4ab112 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -253,10 +253,7 @@ object Utils extends Logging { * Symmetric key used to encrypt row data. This key is securely sent to the enclaves if * attestation succeeds. For development, we use a hardcoded key. You should change it. */ - // var clientKey: Array[Byte] = "Opaque devel key".getBytes("UTF-8") var clientKey: Array[Byte] = null - // val clientKeys:Map[String, Array[Byte]] = Map() - // assert(sharedKey.size == GCM_KEY_LENGTH) def addClientKey(key: Array[Byte]) : Unit = { clientKey = key diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index cbc7f36448..fa50c23f7e 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -142,8 +142,6 @@ trait OpaqueOperatorExec extends SparkPlan { } override def executeTake(n: Int): Array[InternalRow] = { - // Internally, executeTake gets an RDD of byte array of n unsafe rows and scans the RDD partitions one by one until n is reached or all partitions were processed. - // This method called when decrypting dataframe from file if (n == 0) { return new Array[InternalRow](0) } diff --git a/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala b/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala index 0d1b493628..75e519247b 100644 --- a/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala +++ b/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala @@ -438,7 +438,7 @@ trait OpaqueOperatorTests extends FunSuite with BeforeAndAfterAll { self => assert(df.groupBy("word").agg(sum("count")).collect.toSet === df2.groupBy("word").agg(sum("count")).collect.toSet) } finally { - // Utils.deleteRecursively(path) + Utils.deleteRecursively(path) } } diff --git a/src/test/scala/edu/berkeley/cs/rise/opaque/QEDSuite.scala b/src/test/scala/edu/berkeley/cs/rise/opaque/QEDSuite.scala index 8e2a73e65c..ea30f87007 100644 --- a/src/test/scala/edu/berkeley/cs/rise/opaque/QEDSuite.scala +++ b/src/test/scala/edu/berkeley/cs/rise/opaque/QEDSuite.scala @@ -33,12 +33,12 @@ class QEDSuite extends FunSuite with BeforeAndAfterAll { spark.stop() } - // test("java encryption/decryption") { - // val data = Array[Byte](0, 1, 2) - // val (enclave, eid) = Utils.initEnclave() - // assert(data === Utils.decrypt(Utils.encrypt(data))) - // assert(data === Utils.decrypt(enclave.Encrypt(eid, data))) - // } + test("java encryption/decryption") { + val data = Array[Byte](0, 1, 2) + val (enclave, eid) = Utils.initEnclave() + assert(data === Utils.decrypt(Utils.encrypt(data))) + assert(data === Utils.decrypt(enclave.Encrypt(eid, data))) + } } diff --git a/type_test.txt b/type_test.txt deleted file mode 100644 index 085c4ebf6a..0000000000 --- a/type_test.txt +++ /dev/null @@ -1,27 +0,0 @@ -import org.apache.spark.sql.types._ -import org.apache.spark.sql.Row -import edu.berkeley.cs.rise.opaque.implicits._ - -import java.math.BigDecimal - - -val decimal = new BigDecimal(100000.555555) - - -val data = Seq( - Row(decimal, "dog"), - Row(decimal, "cat"), - Row(decimal, "ant")) - -val schema = StructType( - List( - StructField("decimal", DecimalType, true), - StructField("animal_type", StringType, true) - ) -) - -val df = spark.createDataFrame( - spark.sparkContext.parallelize(data), - schema -) - From 9c87e8ee19d53894b543f1d6c83ae335a97c4c4e Mon Sep 17 00:00:00 2001 From: Chester Leung Date: Mon, 2 Nov 2020 21:32:06 +0000 Subject: [PATCH 067/101] Clean up --- build.sbt | 5 ----- src/main/scala/crypto/Encrypt.scala | 7 ------- test.scala | 15 --------------- 3 files changed, 27 deletions(-) delete mode 100644 src/main/scala/crypto/Encrypt.scala delete mode 100644 test.scala diff --git a/build.sbt b/build.sbt index 64faf12d98..b743fc7133 100644 --- a/build.sbt +++ b/build.sbt @@ -125,11 +125,6 @@ def sgxGdbCommand = Command.command("sgx-gdb") { state => commands += sgxGdbCommand -// Task to encrypt a plaintext serialized dataframe -lazy val encrypt = InputKey[Unit]("encrypt", "Encrypt a plaintext serialized dataframe.") - -fullRunInputTask(encrypt, Compile, "crypto.Encrypt") - initialCommands in console := """ |import org.apache.spark.SparkContext diff --git a/src/main/scala/crypto/Encrypt.scala b/src/main/scala/crypto/Encrypt.scala deleted file mode 100644 index 6c9b1bd002..0000000000 --- a/src/main/scala/crypto/Encrypt.scala +++ /dev/null @@ -1,7 +0,0 @@ -package crypto - -object Encrypt { - def main(args: Array[String]) : Unit = { - println("Params are: " + args.mkString(", ")) - } -} diff --git a/test.scala b/test.scala deleted file mode 100644 index 7456f1434f..0000000000 --- a/test.scala +++ /dev/null @@ -1,15 +0,0 @@ -// import edu.berkeley.cs.rise.opaque.implicits._ -// -// edu.berkeley.cs.rise.opaque.Utils.initSQLContext(spark.sqlContext) -// val data = Seq(("foo", 1), ("bar", 2), ("baz", 3), ("boo", 4)) -// val df = spark.createDataFrame(data).toDF("word", "count") -// // Encrypt with client key -// val dfEncrypted2 = df.encrypted -// // Enter enclave and filter -// // val df2 = dfEncrypted.filter($"count" > lit(3)) -// // val df3 = dfEncrypted.filter($"count" > lit(4)) -// // Decrypt with client key -// // dfEncrypted.show() -// // df2.show() -// // df3.show() -// dfEncrypted2.write.format("edu.berkeley.cs.rise.opaque.EncryptedSource").save("dfEncrypted2") From 8cfa2a107fb8e38143adac8d131ddd0dc9baaf92 Mon Sep 17 00:00:00 2001 From: Eric Feng <31462296+eric-feng-2011@users.noreply.github.com> Date: Fri, 22 Jan 2021 17:56:11 -0500 Subject: [PATCH 068/101] Merge master into multiparty (#134) * Interval (#116) * add date_add, interval sql still running into issues * Add Interval SQL support * uncomment out the other tests * resolve comments * change interval equality Co-authored-by: Eric Feng * Fix NULL handling for aggregation (#130) * Modify COUNT and SUM to correctly handle NULL values * Change average to support NULL values * Fix * Changing operator matching from logical to physical (#129) * WIP * Fix * Unapply change * Aggregation rewrite (#132) Co-authored-by: Eric Feng Co-authored-by: Wenting Zheng --- build.sbt | 1 + src/enclave/App/App.cpp | 103 +----- src/enclave/App/SGXEnclave.h | 8 +- src/enclave/Enclave/Aggregate.cpp | 108 +------ src/enclave/Enclave/Aggregate.h | 15 +- src/enclave/Enclave/Enclave.cpp | 45 +-- src/enclave/Enclave/Enclave.edl | 15 +- src/enclave/Enclave/ExpressionEvaluation.h | 142 +++++++- src/flatbuffers/Expr.fbs | 14 +- src/flatbuffers/operators.fbs | 6 +- .../edu/berkeley/cs/rise/opaque/Utils.scala | 306 +++++++++++++----- .../opaque/execution/EncryptedSortExec.scala | 9 +- .../cs/rise/opaque/execution/SGXEnclave.scala | 7 +- .../cs/rise/opaque/execution/operators.scala | 64 ++-- .../cs/rise/opaque/logical/rules.scala | 47 --- .../berkeley/cs/rise/opaque/strategies.scala | 148 ++++++--- .../cs/rise/opaque/OpaqueOperatorTests.scala | 117 ++++++- 17 files changed, 687 insertions(+), 468 deletions(-) diff --git a/build.sbt b/build.sbt index b743fc7133..9aa9ecb592 100644 --- a/build.sbt +++ b/build.sbt @@ -24,6 +24,7 @@ concurrentRestrictions in Global := Seq( fork in Test := true fork in run := true +testOptions in Test += Tests.Argument("-oF") javaOptions in Test ++= Seq("-Xmx2048m", "-XX:ReservedCodeCacheSize=384m") javaOptions in run ++= Seq( "-Xmx2048m", "-XX:ReservedCodeCacheSize=384m", "-Dspark.master=local[1]") diff --git a/src/enclave/App/App.cpp b/src/enclave/App/App.cpp index 95dcd27cec..6817863e69 100644 --- a/src/enclave/App/App.cpp +++ b/src/enclave/App/App.cpp @@ -599,8 +599,8 @@ Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousSortMergeJoin( } JNIEXPORT jobject JNICALL -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep1( - JNIEnv *env, jobject obj, jlong eid, jbyteArray agg_op, jbyteArray input_rows) { +Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregate( + JNIEnv *env, jobject obj, jlong eid, jbyteArray agg_op, jbyteArray input_rows, jboolean isPartial) { (void)obj; jboolean if_copy; @@ -611,98 +611,21 @@ Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep1 uint32_t input_rows_length = (uint32_t) env->GetArrayLength(input_rows); uint8_t *input_rows_ptr = (uint8_t *) env->GetByteArrayElements(input_rows, &if_copy); - uint8_t *first_row = nullptr; - size_t first_row_length = 0; - - uint8_t *last_group = nullptr; - size_t last_group_length = 0; - - uint8_t *last_row = nullptr; - size_t last_row_length = 0; - - if (input_rows_ptr == nullptr) { - ocall_throw("NonObliviousAggregateStep1: JNI failed to get input byte array."); - } else { - oe_check_and_time("Non-Oblivious Aggregate Step 1", - ecall_non_oblivious_aggregate_step1( - (oe_enclave_t*)eid, - agg_op_ptr, agg_op_length, - input_rows_ptr, input_rows_length, - &first_row, &first_row_length, - &last_group, &last_group_length, - &last_row, &last_row_length)); - } - - jbyteArray first_row_array = env->NewByteArray(first_row_length); - env->SetByteArrayRegion(first_row_array, 0, first_row_length, (jbyte *) first_row); - free(first_row); - - jbyteArray last_group_array = env->NewByteArray(last_group_length); - env->SetByteArrayRegion(last_group_array, 0, last_group_length, (jbyte *) last_group); - free(last_group); - - jbyteArray last_row_array = env->NewByteArray(last_row_length); - env->SetByteArrayRegion(last_row_array, 0, last_row_length, (jbyte *) last_row); - free(last_row); - - env->ReleaseByteArrayElements(agg_op, (jbyte *) agg_op_ptr, 0); - env->ReleaseByteArrayElements(input_rows, (jbyte *) input_rows_ptr, 0); - - jclass tuple3_class = env->FindClass("scala/Tuple3"); - jobject ret = env->NewObject( - tuple3_class, - env->GetMethodID(tuple3_class, "", - "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V"), - first_row_array, last_group_array, last_row_array); - - return ret; -} - -JNIEXPORT jbyteArray JNICALL -Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep2( - JNIEnv *env, jobject obj, jlong eid, jbyteArray agg_op, jbyteArray input_rows, - jbyteArray next_partition_first_row, jbyteArray prev_partition_last_group, - jbyteArray prev_partition_last_row) { - (void)obj; - - jboolean if_copy; - - uint32_t agg_op_length = (uint32_t) env->GetArrayLength(agg_op); - uint8_t *agg_op_ptr = (uint8_t *) env->GetByteArrayElements(agg_op, &if_copy); - - uint32_t input_rows_length = (uint32_t) env->GetArrayLength(input_rows); - uint8_t *input_rows_ptr = (uint8_t *) env->GetByteArrayElements(input_rows, &if_copy); - - uint32_t next_partition_first_row_length = - (uint32_t) env->GetArrayLength(next_partition_first_row); - uint8_t *next_partition_first_row_ptr = - (uint8_t *) env->GetByteArrayElements(next_partition_first_row, &if_copy); - - uint32_t prev_partition_last_group_length = - (uint32_t) env->GetArrayLength(prev_partition_last_group); - uint8_t *prev_partition_last_group_ptr = - (uint8_t *) env->GetByteArrayElements(prev_partition_last_group, &if_copy); - - uint32_t prev_partition_last_row_length = - (uint32_t) env->GetArrayLength(prev_partition_last_row); - uint8_t *prev_partition_last_row_ptr = - (uint8_t *) env->GetByteArrayElements(prev_partition_last_row, &if_copy); - uint8_t *output_rows = nullptr; size_t output_rows_length = 0; + bool is_partial = (bool) isPartial; + if (input_rows_ptr == nullptr) { - ocall_throw("NonObliviousAggregateStep2: JNI failed to get input byte array."); + ocall_throw("NonObliviousAggregateStep: JNI failed to get input byte array."); } else { - oe_check_and_time("Non-Oblivious Aggregate Step 2", - ecall_non_oblivious_aggregate_step2( + oe_check_and_time("Non-Oblivious Aggregate", + ecall_non_oblivious_aggregate( (oe_enclave_t*)eid, agg_op_ptr, agg_op_length, input_rows_ptr, input_rows_length, - next_partition_first_row_ptr, next_partition_first_row_length, - prev_partition_last_group_ptr, prev_partition_last_group_length, - prev_partition_last_row_ptr, prev_partition_last_row_length, - &output_rows, &output_rows_length)); + &output_rows, &output_rows_length, + is_partial)); } jbyteArray ret = env->NewByteArray(output_rows_length); @@ -711,13 +634,7 @@ Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep2 env->ReleaseByteArrayElements(agg_op, (jbyte *) agg_op_ptr, 0); env->ReleaseByteArrayElements(input_rows, (jbyte *) input_rows_ptr, 0); - env->ReleaseByteArrayElements( - next_partition_first_row, (jbyte *) next_partition_first_row_ptr, 0); - env->ReleaseByteArrayElements( - prev_partition_last_group, (jbyte *) prev_partition_last_group_ptr, 0); - env->ReleaseByteArrayElements( - prev_partition_last_row, (jbyte *) prev_partition_last_row_ptr, 0); - + return ret; } diff --git a/src/enclave/App/SGXEnclave.h b/src/enclave/App/SGXEnclave.h index d3fb29c0ff..c2168ab6e3 100644 --- a/src/enclave/App/SGXEnclave.h +++ b/src/enclave/App/SGXEnclave.h @@ -46,12 +46,8 @@ extern "C" { JNIEnv *, jobject, jlong, jbyteArray, jbyteArray, jbyteArray); JNIEXPORT jobject JNICALL - Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep1( - JNIEnv *, jobject, jlong, jbyteArray, jbyteArray); - - JNIEXPORT jbyteArray JNICALL - Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregateStep2( - JNIEnv *, jobject, jlong, jbyteArray, jbyteArray, jbyteArray, jbyteArray, jbyteArray); + Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_NonObliviousAggregate( + JNIEnv *, jobject, jlong, jbyteArray, jbyteArray, jboolean); JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_CountRowsPerPartition( diff --git a/src/enclave/Enclave/Aggregate.cpp b/src/enclave/Enclave/Aggregate.cpp index 1ac68c6431..e434f77e37 100644 --- a/src/enclave/Enclave/Aggregate.cpp +++ b/src/enclave/Enclave/Aggregate.cpp @@ -5,116 +5,38 @@ #include "FlatbuffersWriters.h" #include "common.h" -void non_oblivious_aggregate_step1( +void non_oblivious_aggregate( uint8_t *agg_op, size_t agg_op_length, uint8_t *input_rows, size_t input_rows_length, - uint8_t **first_row, size_t *first_row_length, - uint8_t **last_group, size_t *last_group_length, - uint8_t **last_row, size_t *last_row_length) { + uint8_t **output_rows, size_t *output_rows_length, + bool is_partial) { FlatbuffersAggOpEvaluator agg_op_eval(agg_op, agg_op_length); RowReader r(BufferRefView(input_rows, input_rows_length)); - RowWriter first_row_writer; - RowWriter last_group_writer; - RowWriter last_row_writer; + RowWriter w; FlatbuffersTemporaryRow prev, cur; + size_t count = 0; + while (r.has_next()) { prev.set(cur.get()); cur.set(r.next()); - - if (prev.get() == nullptr) { - first_row_writer.append(cur.get()); - } - - if (!r.has_next()) { - last_row_writer.append(cur.get()); - } - + if (prev.get() != nullptr && !agg_op_eval.is_same_group(prev.get(), cur.get())) { + w.append(agg_op_eval.evaluate()); agg_op_eval.reset_group(); } agg_op_eval.aggregate(cur.get()); + count += 1; } - last_group_writer.append(agg_op_eval.get_partial_agg()); - - first_row_writer.output_buffer(first_row, first_row_length); - last_group_writer.output_buffer(last_group, last_group_length); - last_row_writer.output_buffer(last_row, last_row_length); -} - -void non_oblivious_aggregate_step2( - uint8_t *agg_op, size_t agg_op_length, - uint8_t *input_rows, size_t input_rows_length, - uint8_t *next_partition_first_row, size_t next_partition_first_row_length, - uint8_t *prev_partition_last_group, size_t prev_partition_last_group_length, - uint8_t *prev_partition_last_row, size_t prev_partition_last_row_length, - uint8_t **output_rows, size_t *output_rows_length) { - - FlatbuffersAggOpEvaluator agg_op_eval(agg_op, agg_op_length); - RowReader r(BufferRefView(input_rows, input_rows_length)); - RowReader next_partition_first_row_reader( - BufferRefView( - next_partition_first_row, next_partition_first_row_length)); - RowReader prev_partition_last_group_reader( - BufferRefView( - prev_partition_last_group, prev_partition_last_group_length)); - RowReader prev_partition_last_row_reader( - BufferRefView( - prev_partition_last_row, prev_partition_last_row_length)); - RowWriter w; - - if (next_partition_first_row_reader.num_rows() > 1) { - throw std::runtime_error( - std::string("Incorrect number of starting rows from next partition passed: expected 0 or 1, got ") - + std::to_string(next_partition_first_row_reader.num_rows())); - } - if (prev_partition_last_group_reader.num_rows() > 1) { - throw std::runtime_error( - std::string("Incorrect number of ending groups from prev partition passed: expected 0 or 1, got ") - + std::to_string(prev_partition_last_group_reader.num_rows())); - } - if (prev_partition_last_row_reader.num_rows() > 1) { - throw std::runtime_error( - std::string("Incorrect number of ending rows from prev partition passed: expected 0 or 1, got ") - + std::to_string(prev_partition_last_row_reader.num_rows())); - } - - const tuix::Row *next_partition_first_row_ptr = - next_partition_first_row_reader.has_next() ? next_partition_first_row_reader.next() : nullptr; - agg_op_eval.set(prev_partition_last_group_reader.has_next() ? - prev_partition_last_group_reader.next() : nullptr); - const tuix::Row *prev_partition_last_row_ptr = - prev_partition_last_row_reader.has_next() ? prev_partition_last_row_reader.next() : nullptr; - FlatbuffersTemporaryRow prev, cur(prev_partition_last_row_ptr), next; - bool stop = false; - if (r.has_next()) { - next.set(r.next()); - } else { - stop = true; - } - while (!stop) { - // Populate prev, cur, next to enable lookbehind and lookahead - prev.set(cur.get()); - cur.set(next.get()); - if (r.has_next()) { - next.set(r.next()); - } else { - next.set(next_partition_first_row_ptr); - stop = true; - } - - if (prev.get() != nullptr && !agg_op_eval.is_same_group(prev.get(), cur.get())) { - agg_op_eval.reset_group(); - } - agg_op_eval.aggregate(cur.get()); - - // Output the current aggregate if it is the last aggregate for its run - if (next.get() == nullptr || !agg_op_eval.is_same_group(cur.get(), next.get())) { - w.append(agg_op_eval.evaluate()); - } + // Skip outputting the final row if the number of input rows is 0 AND + // 1. It's a grouping aggregation, OR + // 2. It's a global aggregation, the mode is final + if (!(count == 0 && (agg_op_eval.get_num_grouping_keys() > 0 || (agg_op_eval.get_num_grouping_keys() == 0 && !is_partial)))) { + w.append(agg_op_eval.evaluate()); } w.output_buffer(output_rows, output_rows_length); } + diff --git a/src/enclave/Enclave/Aggregate.h b/src/enclave/Enclave/Aggregate.h index a53303e23e..f50e7fb79d 100644 --- a/src/enclave/Enclave/Aggregate.h +++ b/src/enclave/Enclave/Aggregate.h @@ -4,19 +4,10 @@ #ifndef AGGREGATE_H #define AGGREGATE_H -void non_oblivious_aggregate_step1( +void non_oblivious_aggregate( uint8_t *agg_op, size_t agg_op_length, uint8_t *input_rows, size_t input_rows_length, - uint8_t **first_row, size_t *first_row_length, - uint8_t **last_group, size_t *last_group_length, - uint8_t **last_row, size_t *last_row_length); - -void non_oblivious_aggregate_step2( - uint8_t *agg_op, size_t agg_op_length, - uint8_t *input_rows, size_t input_rows_length, - uint8_t *next_partition_first_row, size_t next_partition_first_row_length, - uint8_t *prev_partition_last_group, size_t prev_partition_last_group_length, - uint8_t *prev_partition_last_row, size_t prev_partition_last_row_length, - uint8_t **output_rows, size_t *output_rows_length); + uint8_t **output_rows, size_t *output_rows_length, + bool is_partial); #endif // AGGREGATE_H diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index b21d2b2e4f..d6adb877ce 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -190,50 +190,21 @@ void ecall_non_oblivious_sort_merge_join(uint8_t *join_expr, size_t join_expr_le } } -void ecall_non_oblivious_aggregate_step1( +void ecall_non_oblivious_aggregate( uint8_t *agg_op, size_t agg_op_length, uint8_t *input_rows, size_t input_rows_length, - uint8_t **first_row, size_t *first_row_length, - uint8_t **last_group, size_t *last_group_length, - uint8_t **last_row, size_t *last_row_length) { + uint8_t **output_rows, size_t *output_rows_length, + bool is_partial) { // Guard against operating on arbitrary enclave memory assert(oe_is_outside_enclave(input_rows, input_rows_length) == 1); __builtin_ia32_lfence(); try { - non_oblivious_aggregate_step1( - agg_op, agg_op_length, - input_rows, input_rows_length, - first_row, first_row_length, - last_group, last_group_length, - last_row, last_row_length); - } catch (const std::runtime_error &e) { - ocall_throw(e.what()); - } -} - -void ecall_non_oblivious_aggregate_step2( - uint8_t *agg_op, size_t agg_op_length, - uint8_t *input_rows, size_t input_rows_length, - uint8_t *next_partition_first_row, size_t next_partition_first_row_length, - uint8_t *prev_partition_last_group, size_t prev_partition_last_group_length, - uint8_t *prev_partition_last_row, size_t prev_partition_last_row_length, - uint8_t **output_rows, size_t *output_rows_length) { - // Guard against operating on arbitrary enclave memory - assert(oe_is_outside_enclave(input_rows, input_rows_length) == 1); - assert(oe_is_outside_enclave(next_partition_first_row, next_partition_first_row_length) == 1); - assert(oe_is_outside_enclave(prev_partition_last_group, prev_partition_last_group_length) == 1); - assert(oe_is_outside_enclave(prev_partition_last_row, prev_partition_last_row_length) == 1); - __builtin_ia32_lfence(); - - try { - non_oblivious_aggregate_step2( - agg_op, agg_op_length, - input_rows, input_rows_length, - next_partition_first_row, next_partition_first_row_length, - prev_partition_last_group, prev_partition_last_group_length, - prev_partition_last_row, prev_partition_last_row_length, - output_rows, output_rows_length); + non_oblivious_aggregate(agg_op, agg_op_length, + input_rows, input_rows_length, + output_rows, output_rows_length, + is_partial); + } catch (const std::runtime_error &e) { ocall_throw(e.what()); } diff --git a/src/enclave/Enclave/Enclave.edl b/src/enclave/Enclave/Enclave.edl index 9b120edeed..5546840b31 100644 --- a/src/enclave/Enclave/Enclave.edl +++ b/src/enclave/Enclave/Enclave.edl @@ -54,20 +54,11 @@ enclave { [user_check] uint8_t *join_row, size_t join_row_length, [out] uint8_t **output_rows, [out] size_t *output_rows_length); - public void ecall_non_oblivious_aggregate_step1( + public void ecall_non_oblivious_aggregate( [in, count=agg_op_length] uint8_t *agg_op, size_t agg_op_length, [user_check] uint8_t *input_rows, size_t input_rows_length, - [out] uint8_t **first_row, [out] size_t *first_row_length, - [out] uint8_t **last_group, [out] size_t *last_group_length, - [out] uint8_t **last_row, [out] size_t *last_row_length); - - public void ecall_non_oblivious_aggregate_step2( - [in, count=agg_op_length] uint8_t *agg_op, size_t agg_op_length, - [user_check] uint8_t *input_rows, size_t input_rows_length, - [user_check] uint8_t *next_partition_first_row, size_t next_partition_first_row_length, - [user_check] uint8_t *prev_partition_last_group, size_t prev_partition_last_group_length, - [user_check] uint8_t *prev_partition_last_row, size_t prev_partition_last_row_length, - [out] uint8_t **output_rows, [out] size_t *output_rows_length); + [out] uint8_t **output_rows, [out] size_t *output_rows_length, + bool is_partial); public void ecall_count_rows_per_partition( [user_check] uint8_t *input_rows, size_t input_rows_length, diff --git a/src/enclave/Enclave/ExpressionEvaluation.h b/src/enclave/Enclave/ExpressionEvaluation.h index 299088568c..737f92ac83 100644 --- a/src/enclave/Enclave/ExpressionEvaluation.h +++ b/src/enclave/Enclave/ExpressionEvaluation.h @@ -265,6 +265,25 @@ class FlatbuffersExpressionEvaluator { case tuix::ExprUnion_Literal: { + auto * literal = static_cast(expr->expr()); + const tuix::Field *value = literal->value(); + + // If type is CalendarInterval, manually return a calendar interval field. + // Otherwise 'days' disappears in conversion. + if (value->value_type() == tuix::FieldUnion_CalendarIntervalField) { + + auto *interval = value->value_as_CalendarIntervalField(); + uint32_t months = interval->months(); + uint32_t days = interval->days(); + uint64_t ms = interval->microseconds(); + + return tuix::CreateField( + builder, + tuix::FieldUnion_CalendarIntervalField, + tuix::CreateCalendarIntervalField(builder, months, days, ms).Union(), + false); + } + return flatbuffers_copy( static_cast(expr->expr())->value(), builder); } @@ -403,6 +422,7 @@ class FlatbuffersExpressionEvaluator { auto add = static_cast(expr->expr()); auto left_offset = eval_helper(row, add->left()); auto right_offset = eval_helper(row, add->right()); + return eval_binary_arithmetic_op( builder, flatbuffers::GetTemporaryPointer(builder, left_offset), @@ -1041,6 +1061,102 @@ class FlatbuffersExpressionEvaluator { false); } + // Time expressions + case tuix::ExprUnion_DateAdd: + { + auto c = static_cast(expr->expr()); + auto left_offset = eval_helper(row, c->left()); + auto right_offset = eval_helper(row, c->right()); + + // Note: These temporary pointers will be invalidated when we next write to builder + const tuix::Field *left = flatbuffers::GetTemporaryPointer(builder, left_offset); + const tuix::Field *right = flatbuffers::GetTemporaryPointer(builder, right_offset); + + if (left->value_type() != tuix::FieldUnion_DateField + || right->value_type() != tuix::FieldUnion_IntegerField) { + throw std::runtime_error( + std::string("tuix::DateAdd requires date Date, increment Integer, not ") + + std::string("date ") + + std::string(tuix::EnumNameFieldUnion(left->value_type())) + + std::string(", increment ") + + std::string(tuix::EnumNameFieldUnion(right->value_type()))); + } + + bool result_is_null = left->is_null() || right->is_null(); + + if (!result_is_null) { + auto left_field = static_cast(left->value()); + auto right_field = static_cast(right->value()); + + uint32_t result = left_field->value() + right_field->value(); + + return tuix::CreateField( + builder, + tuix::FieldUnion_DateField, + tuix::CreateDateField(builder, result).Union(), + result_is_null); + } else { + uint32_t result = 0; + return tuix::CreateField( + builder, + tuix::FieldUnion_DateField, + tuix::CreateDateField(builder, result).Union(), + result_is_null); + } + } + + case tuix::ExprUnion_DateAddInterval: + { + auto c = static_cast(expr->expr()); + auto left_offset = eval_helper(row, c->left()); + auto right_offset = eval_helper(row, c->right()); + + // Note: These temporary pointers will be invalidated when we next write to builder + const tuix::Field *left = flatbuffers::GetTemporaryPointer(builder, left_offset); + const tuix::Field *right = flatbuffers::GetTemporaryPointer(builder, right_offset); + + if (left->value_type() != tuix::FieldUnion_DateField + || right->value_type() != tuix::FieldUnion_CalendarIntervalField) { + throw std::runtime_error( + std::string("tuix::DateAddInterval requires date Date, interval CalendarIntervalField, not ") + + std::string("date ") + + std::string(tuix::EnumNameFieldUnion(left->value_type())) + + std::string(", interval ") + + std::string(tuix::EnumNameFieldUnion(right->value_type()))); + } + + bool result_is_null = left->is_null() || right->is_null(); + uint32_t result = 0; + + if (!result_is_null) { + + auto left_field = static_cast(left->value()); + auto right_field = static_cast(right->value()); + + //This is an approximation + //TODO take into account leap seconds + uint64_t date = 86400L*left_field->value(); + struct tm tm; + secs_to_tm(date, &tm); + tm.tm_mon += right_field->months(); + tm.tm_mday += right_field->days(); + time_t time = std::mktime(&tm); + uint32_t result = (time + (right_field->microseconds() / 1000)) / 86400L; + + return tuix::CreateField( + builder, + tuix::FieldUnion_DateField, + tuix::CreateDateField(builder, result).Union(), + result_is_null); + } else { + return tuix::CreateField( + builder, + tuix::FieldUnion_DateField, + tuix::CreateDateField(builder, result).Union(), + result_is_null); + } + } + case tuix::ExprUnion_Year: { auto e = static_cast(expr->expr()); @@ -1542,7 +1658,11 @@ class AggregateExpressionEvaluator { std::unique_ptr( new FlatbuffersExpressionEvaluator(update_expr))); } - evaluate_evaluator.reset(new FlatbuffersExpressionEvaluator(expr->evaluate_expr())); + for (auto eval_expr : *expr->evaluate_exprs()) { + evaluate_evaluators.emplace_back( + std::unique_ptr( + new FlatbuffersExpressionEvaluator(eval_expr))); + } } std::vector initial_values(const tuix::Row *unused) { @@ -1561,15 +1681,19 @@ class AggregateExpressionEvaluator { return result; } - const tuix::Field *evaluate(const tuix::Row *agg) { - return evaluate_evaluator->eval(agg); + std::vector evaluate(const tuix::Row *agg) { + std::vector result; + for (auto&& e : evaluate_evaluators) { + result.push_back(e->eval(agg)); + } + return result; } private: flatbuffers::FlatBufferBuilder builder; std::vector> initial_value_evaluators; std::vector> update_evaluators; - std::unique_ptr evaluate_evaluator; + std::vector> evaluate_evaluators; }; class FlatbuffersAggOpEvaluator { @@ -1582,7 +1706,7 @@ class FlatbuffersAggOpEvaluator { std::string("Corrupt AggregateOp buffer of length ") + std::to_string(len)); } - + const tuix::AggregateOp* agg_op = flatbuffers::GetRoot(buf); for (auto e : *agg_op->grouping_expressions()) { @@ -1599,6 +1723,10 @@ class FlatbuffersAggOpEvaluator { reset_group(); } + size_t get_num_grouping_keys() { + return grouping_evaluators.size(); + } + void reset_group() { builder2.Clear(); // Write initial values to a @@ -1657,7 +1785,9 @@ class FlatbuffersAggOpEvaluator { builder.Clear(); std::vector> output_fields; for (auto&& e : aggregate_evaluators) { - output_fields.push_back(flatbuffers_copy(e->evaluate(a), builder)); + for (auto f : e->evaluate(a)) { + output_fields.push_back(flatbuffers_copy(f, builder)); + } } return flatbuffers::GetTemporaryPointer( builder, diff --git a/src/flatbuffers/Expr.fbs b/src/flatbuffers/Expr.fbs index 6e29cf2c95..d09441942c 100644 --- a/src/flatbuffers/Expr.fbs +++ b/src/flatbuffers/Expr.fbs @@ -36,7 +36,9 @@ union ExprUnion { Exp, ClosestPoint, CreateArray, - Upper + Upper, + DateAdd, + DateAddInterval } table Expr { @@ -165,6 +167,16 @@ table Year { child:Expr; } +table DateAdd { + left:Expr; + right:Expr; +} + +table DateAddInterval { + left:Expr; + right:Expr; +} + // Math expressions table Exp { child:Expr; diff --git a/src/flatbuffers/operators.fbs b/src/flatbuffers/operators.fbs index 78a675084c..1ebd06c971 100644 --- a/src/flatbuffers/operators.fbs +++ b/src/flatbuffers/operators.fbs @@ -30,10 +30,14 @@ table SortExpr { } // Aggregate +table PartialAggregateExpr { + initial_values: [Expr]; + update_exprs: [Expr]; +} table AggregateExpr { initial_values: [Expr]; update_exprs: [Expr]; - evaluate_expr: Expr; + evaluate_exprs: [Expr]; } // Supported: Average, Count, First, Last, Max, Min, Sum diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index 21965ae2a4..f7eedae572 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -44,6 +44,8 @@ import org.apache.spark.sql.catalyst.expressions.Attribute import org.apache.spark.sql.catalyst.expressions.AttributeReference import org.apache.spark.sql.catalyst.expressions.Cast import org.apache.spark.sql.catalyst.expressions.Contains +import org.apache.spark.sql.catalyst.expressions.DateAdd +import org.apache.spark.sql.catalyst.expressions.DateAddInterval import org.apache.spark.sql.catalyst.expressions.Descending import org.apache.spark.sql.catalyst.expressions.Divide import org.apache.spark.sql.catalyst.expressions.EndsWith @@ -69,18 +71,11 @@ import org.apache.spark.sql.catalyst.expressions.SortOrder import org.apache.spark.sql.catalyst.expressions.StartsWith import org.apache.spark.sql.catalyst.expressions.Substring import org.apache.spark.sql.catalyst.expressions.Subtract +import org.apache.spark.sql.catalyst.expressions.TimeAdd import org.apache.spark.sql.catalyst.expressions.UnaryMinus import org.apache.spark.sql.catalyst.expressions.Upper import org.apache.spark.sql.catalyst.expressions.Year -import org.apache.spark.sql.catalyst.expressions.aggregate.AggregateExpression -import org.apache.spark.sql.catalyst.expressions.aggregate.Average -import org.apache.spark.sql.catalyst.expressions.aggregate.Count -import org.apache.spark.sql.catalyst.expressions.aggregate.Final -import org.apache.spark.sql.catalyst.expressions.aggregate.First -import org.apache.spark.sql.catalyst.expressions.aggregate.Last -import org.apache.spark.sql.catalyst.expressions.aggregate.Max -import org.apache.spark.sql.catalyst.expressions.aggregate.Min -import org.apache.spark.sql.catalyst.expressions.aggregate.Sum +import org.apache.spark.sql.catalyst.expressions.aggregate._ import org.apache.spark.sql.catalyst.plans.Cross import org.apache.spark.sql.catalyst.plans.ExistenceJoin import org.apache.spark.sql.catalyst.plans.FullOuter @@ -1004,6 +999,7 @@ object Utils extends Logging { tuix.Contains.createContains( builder, leftOffset, rightOffset)) + // Time expressions case (Year(child), Seq(childOffset)) => tuix.Expr.createExpr( builder, @@ -1011,6 +1007,20 @@ object Utils extends Logging { tuix.Year.createYear( builder, childOffset)) + case (DateAdd(left, right), Seq(leftOffset, rightOffset)) => + tuix.Expr.createExpr( + builder, + tuix.ExprUnion.DateAdd, + tuix.DateAdd.createDateAdd( + builder, leftOffset, rightOffset)) + + case (DateAddInterval(left, right, _, _), Seq(leftOffset, rightOffset)) => + tuix.Expr.createExpr( + builder, + tuix.ExprUnion.DateAddInterval, + tuix.DateAddInterval.createDateAddInterval( + builder, leftOffset, rightOffset)) + // Math expressions case (Exp(child), Seq(childOffset)) => tuix.Expr.createExpr( @@ -1140,17 +1150,19 @@ object Utils extends Logging { } def serializeAggOp( - groupingExpressions: Seq[Expression], - aggExpressions: Seq[NamedExpression], + groupingExpressions: Seq[NamedExpression], + aggExpressions: Seq[AggregateExpression], input: Seq[Attribute]): Array[Byte] = { - // aggExpressions contains both grouping expressions and AggregateExpressions. Transform the - // grouping expressions into AggregateExpressions that collect the first seen value. - val aggExpressionsWithFirst = aggExpressions.map { - case Alias(e: AggregateExpression, _) => e - case e: NamedExpression => AggregateExpression(First(e, Literal(false)), Final, false) + + // The output of agg operator contains both the grouping columns and the aggregate values. + // To avoid the need for special handling of the grouping columns, we transform the grouping expressions + // into AggregateExpressions that collect the first seen value. + val aggGroupingExpressions = groupingExpressions.map { + case e: NamedExpression => AggregateExpression(First(e, Literal(false)), Complete, false) } + val aggregateExpressions = aggGroupingExpressions ++ aggExpressions - val aggSchema = aggExpressionsWithFirst.flatMap(_.aggregateFunction.aggBufferAttributes) + val aggSchema = aggregateExpressions.flatMap(_.aggregateFunction.aggBufferAttributes) // For aggregation, we concatenate the current aggregate row with the new input row and run // the update expressions as a projection to obtain a new aggregate row. concatSchema // describes the schema of the temporary concatenated row. @@ -1165,7 +1177,7 @@ object Utils extends Logging { groupingExpressions.map(e => flatbuffersSerializeExpression(builder, e, input)).toArray), tuix.AggregateOp.createAggregateExpressionsVector( builder, - aggExpressionsWithFirst + aggregateExpressions .map(e => serializeAggExpression(builder, e, input, aggSchema, concatSchema)) .toArray))) builder.sizedByteArray() @@ -1176,36 +1188,91 @@ object Utils extends Logging { * tuix.AggregateExpr. */ def serializeAggExpression( - builder: FlatBufferBuilder, e: AggregateExpression, input: Seq[Attribute], - aggSchema: Seq[Attribute], concatSchema: Seq[Attribute]): Int = { + builder: FlatBufferBuilder, + e: AggregateExpression, + input: Seq[Attribute], + aggSchema: Seq[Attribute], + concatSchema: Seq[Attribute]): Int = { (e.aggregateFunction: @unchecked) match { - case avg @ Average(child) => + + case avg @ Average(child) => val sum = avg.aggBufferAttributes(0) val count = avg.aggBufferAttributes(1) + val dataType = child.dataType - // TODO: support aggregating null values + val sumInitValue = Literal.default(dataType) + val countInitValue = Literal(0L) // TODO: support DecimalType to match Spark SQL behavior + + val (updateExprs: Seq[Expression], evaluateExprs: Seq[Expression]) = e.mode match { + case Partial => { + val sumUpdateExpr = Add( + sum, + If(IsNull(child), + Literal.default(dataType), + Cast(child, dataType))) + val countUpdateExpr = If(IsNull(child), count, Add(count, Literal(1L))) + (Seq(sumUpdateExpr, countUpdateExpr), Seq(sum, count)) + } + case Final => { + val sumUpdateExpr = Add(sum, avg.inputAggBufferAttributes(0)) + val countUpdateExpr = Add(count, avg.inputAggBufferAttributes(1)) + val evalExpr = If(EqualTo(count, Literal(0L)), + Literal.create(null, DoubleType), + Divide(Cast(sum, DoubleType), Cast(count, DoubleType))) + (Seq(sumUpdateExpr, countUpdateExpr), Seq(evalExpr)) + } + case Complete => { + val sumUpdateExpr = Add( + sum, + If(IsNull(child), Cast(Literal(0), dataType), Cast(child, dataType))) + val countUpdateExpr = If(IsNull(child), count, Add(count, Literal(1L))) + val evalExpr = Divide(Cast(sum, DoubleType), Cast(count, DoubleType)) + (Seq(sumUpdateExpr, countUpdateExpr), Seq(evalExpr)) + } + case _ => + } + tuix.AggregateExpr.createAggregateExpr( builder, tuix.AggregateExpr.createInitialValuesVector( builder, Array( - /* sum = */ flatbuffersSerializeExpression(builder, Literal(0.0), input), - /* count = */ flatbuffersSerializeExpression(builder, Literal(0L), input))), + /* sum = */ flatbuffersSerializeExpression(builder, sumInitValue, input), + /* count = */ flatbuffersSerializeExpression(builder, countInitValue, input))), tuix.AggregateExpr.createUpdateExprsVector( builder, - Array( - /* sum = */ flatbuffersSerializeExpression( - builder, Add(sum, Cast(child, DoubleType)), concatSchema), - /* count = */ flatbuffersSerializeExpression( - builder, Add(count, Literal(1L)), concatSchema))), - flatbuffersSerializeExpression( - builder, Divide(sum, Cast(count, DoubleType)), aggSchema)) + updateExprs.map(e => flatbuffersSerializeExpression(builder, e, concatSchema)).toArray), + tuix.AggregateExpr.createEvaluateExprsVector( + builder, + evaluateExprs.map(e => flatbuffersSerializeExpression(builder, e, aggSchema)).toArray) + ) case c @ Count(children) => val count = c.aggBufferAttributes(0) + // COUNT(*) should count NULL values + // COUNT(expr) should return the number or rows for which the supplied expressions are non-NULL + + val (updateExprs: Seq[Expression], evaluateExprs: Seq[Expression]) = e.mode match { + case Partial => { + val nullableChildren = children.filter(_.nullable) + val countUpdateExpr = nullableChildren.isEmpty match { + case true => Add(count, Literal(1L)) + case false => If(nullableChildren.map(IsNull).reduce(Or), count, Add(count, Literal(1L))) + } + (Seq(countUpdateExpr), Seq(count)) + } + case Final => { + val countUpdateExpr = Add(count, c.inputAggBufferAttributes(0)) + (Seq(countUpdateExpr), Seq(count)) + } + case Complete => { + val countUpdateExpr = Add(count, Literal(1L)) + (Seq(countUpdateExpr), Seq(count)) + } + case _ => + } - // TODO: support skipping null values tuix.AggregateExpr.createAggregateExpr( builder, tuix.AggregateExpr.createInitialValuesVector( @@ -1214,16 +1281,34 @@ object Utils extends Logging { /* count = */ flatbuffersSerializeExpression(builder, Literal(0L), input))), tuix.AggregateExpr.createUpdateExprsVector( builder, - Array( - /* count = */ flatbuffersSerializeExpression( - builder, Add(count, Literal(1L)), concatSchema))), - flatbuffersSerializeExpression( - builder, count, aggSchema)) + updateExprs.map(e => flatbuffersSerializeExpression(builder, e, concatSchema)).toArray), + tuix.AggregateExpr.createEvaluateExprsVector( + builder, + evaluateExprs.map(e => flatbuffersSerializeExpression(builder, e, aggSchema)).toArray) + ) case f @ First(child, Literal(false, BooleanType)) => val first = f.aggBufferAttributes(0) val valueSet = f.aggBufferAttributes(1) + val (updateExprs, evaluateExprs) = e.mode match { + case Partial => { + val firstUpdateExpr = If(valueSet, first, child) + val valueSetUpdateExpr = Literal(true) + (Seq(firstUpdateExpr, valueSetUpdateExpr), Seq(first, valueSet)) + } + case Final => { + val firstUpdateExpr = If(valueSet, first, f.inputAggBufferAttributes(0)) + val valueSetUpdateExpr = Or(valueSet, f.inputAggBufferAttributes(1)) + (Seq(firstUpdateExpr, valueSetUpdateExpr), Seq(first)) + } + case Complete => { + val firstUpdateExpr = If(valueSet, first, child) + val valueSetUpdateExpr = Literal(true) + (Seq(firstUpdateExpr, valueSetUpdateExpr), Seq(first)) + } + } + // TODO: support aggregating null values tuix.AggregateExpr.createAggregateExpr( builder, @@ -1235,16 +1320,32 @@ object Utils extends Logging { /* valueSet = */ flatbuffersSerializeExpression(builder, Literal(false), input))), tuix.AggregateExpr.createUpdateExprsVector( builder, - Array( - /* first = */ flatbuffersSerializeExpression( - builder, If(valueSet, first, child), concatSchema), - /* valueSet = */ flatbuffersSerializeExpression( - builder, Literal(true), concatSchema))), - flatbuffersSerializeExpression(builder, first, aggSchema)) + updateExprs.map(e => flatbuffersSerializeExpression(builder, e, concatSchema)).toArray), + tuix.AggregateExpr.createEvaluateExprsVector( + builder, + evaluateExprs.map(e => flatbuffersSerializeExpression(builder, e, aggSchema)).toArray)) case l @ Last(child, Literal(false, BooleanType)) => val last = l.aggBufferAttributes(0) - // val valueSet = l.aggBufferAttributes(1) + val valueSet = l.aggBufferAttributes(1) + + val (updateExprs, evaluateExprs) = e.mode match { + case Partial => { + val lastUpdateExpr = child + val valueSetUpdateExpr = Literal(true) + (Seq(lastUpdateExpr, valueSetUpdateExpr), Seq(last, valueSet)) + } + case Final => { + val lastUpdateExpr = If(l.inputAggBufferAttributes(1), l.inputAggBufferAttributes(0), last) + val valueSetUpdateExpr = Or(l.inputAggBufferAttributes(1), valueSet) + (Seq(lastUpdateExpr, valueSetUpdateExpr), Seq(last)) + } + case Complete => { + val lastUpdateExpr = child + val valueSetUpdateExpr = Literal(true) + (Seq(lastUpdateExpr, valueSetUpdateExpr), Seq(last)) + } + } // TODO: support aggregating null values tuix.AggregateExpr.createAggregateExpr( @@ -1257,16 +1358,30 @@ object Utils extends Logging { /* valueSet = */ flatbuffersSerializeExpression(builder, Literal(false), input))), tuix.AggregateExpr.createUpdateExprsVector( builder, - Array( - /* last = */ flatbuffersSerializeExpression( - builder, child, concatSchema), - /* valueSet = */ flatbuffersSerializeExpression( - builder, Literal(true), concatSchema))), - flatbuffersSerializeExpression(builder, last, aggSchema)) + updateExprs.map(e => flatbuffersSerializeExpression(builder, e, concatSchema)).toArray), + tuix.AggregateExpr.createEvaluateExprsVector( + builder, + evaluateExprs.map(e => flatbuffersSerializeExpression(builder, e, aggSchema)).toArray)) case m @ Max(child) => val max = m.aggBufferAttributes(0) + val (updateExprs, evaluateExprs) = e.mode match { + case Partial => { + val maxUpdateExpr = If(Or(IsNull(max), GreaterThan(child, max)), child, max) + (Seq(maxUpdateExpr), Seq(max)) + } + case Final => { + val maxUpdateExpr = If(Or(IsNull(max), + GreaterThan(m.inputAggBufferAttributes(0), max)), m.inputAggBufferAttributes(0), max) + (Seq(maxUpdateExpr), Seq(max)) + } + case Complete => { + val maxUpdateExpr = child + (Seq(maxUpdateExpr), Seq(max)) + } + } + tuix.AggregateExpr.createAggregateExpr( builder, tuix.AggregateExpr.createInitialValuesVector( @@ -1276,15 +1391,30 @@ object Utils extends Logging { builder, Literal.create(null, child.dataType), input))), tuix.AggregateExpr.createUpdateExprsVector( builder, - Array( - /* max = */ flatbuffersSerializeExpression( - builder, If(Or(IsNull(max), GreaterThan(child, max)), child, max), concatSchema))), - flatbuffersSerializeExpression( - builder, max, aggSchema)) + updateExprs.map(e => flatbuffersSerializeExpression(builder, e, concatSchema)).toArray), + tuix.AggregateExpr.createEvaluateExprsVector( + builder, + evaluateExprs.map(e => flatbuffersSerializeExpression(builder, e, aggSchema)).toArray)) case m @ Min(child) => val min = m.aggBufferAttributes(0) + val (updateExprs, evaluateExprs) = e.mode match { + case Partial => { + val minUpdateExpr = If(Or(IsNull(min), LessThan(child, min)), child, min) + (Seq(minUpdateExpr), Seq(min)) + } + case Final => { + val minUpdateExpr = If(Or(IsNull(min), + LessThan(m.inputAggBufferAttributes(0), min)), m.inputAggBufferAttributes(0), min) + (Seq(minUpdateExpr), Seq(min)) + } + case Complete => { + val minUpdateExpr = child + (Seq(minUpdateExpr), Seq(min)) + } + } + tuix.AggregateExpr.createAggregateExpr( builder, tuix.AggregateExpr.createInitialValuesVector( @@ -1294,38 +1424,69 @@ object Utils extends Logging { builder, Literal.create(null, child.dataType), input))), tuix.AggregateExpr.createUpdateExprsVector( builder, - Array( - /* min = */ flatbuffersSerializeExpression( - builder, If(Or(IsNull(min), LessThan(child, min)), child, min), concatSchema))), - flatbuffersSerializeExpression( - builder, min, aggSchema)) + updateExprs.map(e => flatbuffersSerializeExpression(builder, e, concatSchema)).toArray), + tuix.AggregateExpr.createEvaluateExprsVector( + builder, + evaluateExprs.map(e => flatbuffersSerializeExpression(builder, e, aggSchema)).toArray)) case s @ Sum(child) => val sum = s.aggBufferAttributes(0) - val sumDataType = s.dataType + // If any value is not NULL, return a non-NULL value + // If all values are NULL, return NULL + + val initValue = Literal.create(null, sumDataType) + val (updateExprs, evaluateExprs) = e.mode match { + case Partial => { + val partialSum = Add(If(IsNull(sum), Literal.default(sumDataType), sum), Cast(child, sumDataType)) + val sumUpdateExpr = If(IsNull(partialSum), sum, partialSum) + (Seq(sumUpdateExpr), Seq(sum)) + } + case Final => { + val partialSum = Add(If(IsNull(sum), Literal.default(sumDataType), sum), s.inputAggBufferAttributes(0)) + val sumUpdateExpr = If(IsNull(partialSum), sum, partialSum) + (Seq(sumUpdateExpr), Seq(sum)) + } + case Complete => { + val sumUpdateExpr = Add(If(IsNull(sum), Literal.default(sumDataType), sum), Cast(child, sumDataType)) + (Seq(sumUpdateExpr), Seq(sum)) + } + } - // TODO: support aggregating null values tuix.AggregateExpr.createAggregateExpr( builder, tuix.AggregateExpr.createInitialValuesVector( builder, Array( /* sum = */ flatbuffersSerializeExpression( - builder, Cast(Literal(0), sumDataType), input))), + builder, initValue, input))), tuix.AggregateExpr.createUpdateExprsVector( builder, - Array( - /* sum = */ flatbuffersSerializeExpression( - builder, Add(sum, Cast(child, sumDataType)), concatSchema))), - flatbuffersSerializeExpression( - builder, sum, aggSchema)) + updateExprs.map(e => flatbuffersSerializeExpression(builder, e, concatSchema)).toArray), + tuix.AggregateExpr.createEvaluateExprsVector( + builder, + evaluateExprs.map(e => flatbuffersSerializeExpression(builder, e, aggSchema)).toArray)) case vs @ ScalaUDAF(Seq(child), _: VectorSum, _, _) => val sum = vs.aggBufferAttributes(0) val sumDataType = vs.dataType + val (updateExprs, evaluateExprs) = e.mode match { + case Partial => { + val vectorSumUpdateExpr = VectorAdd(sum, child) + (Seq(vectorSumUpdateExpr), Seq(sum)) + } + case Final => { + val vectorSumUpdateExpr = VectorAdd(sum, vs.inputAggBufferAttributes(0)) + (Seq(vectorSumUpdateExpr), Seq(sum)) + } + case Complete => { + val vectorSumUpdateExpr = VectorAdd(sum, child) + (Seq(vectorSumUpdateExpr), Seq(sum)) + } + } + // TODO: support aggregating null values tuix.AggregateExpr.createAggregateExpr( builder, @@ -1336,11 +1497,10 @@ object Utils extends Logging { builder, Literal(Array[Double]()), input))), tuix.AggregateExpr.createUpdateExprsVector( builder, - Array( - /* sum = */ flatbuffersSerializeExpression( - builder, VectorAdd(sum, child), concatSchema))), - flatbuffersSerializeExpression( - builder, sum, aggSchema)) + updateExprs.map(e => flatbuffersSerializeExpression(builder, e, concatSchema)).toArray), + tuix.AggregateExpr.createEvaluateExprsVector( + builder, + evaluateExprs.map(e => flatbuffersSerializeExpression(builder, e, aggSchema)).toArray)) } } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/EncryptedSortExec.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/EncryptedSortExec.scala index e097c13698..1ef97bce91 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/EncryptedSortExec.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/EncryptedSortExec.scala @@ -23,29 +23,28 @@ import org.apache.spark.sql.catalyst.expressions.Attribute import org.apache.spark.sql.catalyst.expressions.SortOrder import org.apache.spark.sql.execution.SparkPlan -case class EncryptedSortExec(order: Seq[SortOrder], child: SparkPlan) +case class EncryptedSortExec(order: Seq[SortOrder], isGlobal: Boolean, child: SparkPlan) extends UnaryExecNode with OpaqueOperatorExec { override def output: Seq[Attribute] = child.output override def executeBlocked(): RDD[Block] = { val orderSer = Utils.serializeSortOrder(order, child.output) - EncryptedSortExec.sort(child.asInstanceOf[OpaqueOperatorExec].executeBlocked(), orderSer) + EncryptedSortExec.sort(child.asInstanceOf[OpaqueOperatorExec].executeBlocked(), orderSer, isGlobal) } } object EncryptedSortExec { import Utils.time - def sort(childRDD: RDD[Block], orderSer: Array[Byte]): RDD[Block] = { + def sort(childRDD: RDD[Block], orderSer: Array[Byte], isGlobal: Boolean): RDD[Block] = { Utils.ensureCached(childRDD) time("force child of EncryptedSort") { childRDD.count } - // RA.initRA(childRDD) time("non-oblivious sort") { val numPartitions = childRDD.partitions.length val result = - if (numPartitions <= 1) { + if (numPartitions <= 1 || !isGlobal) { childRDD.map { block => val (enclave, eid) = Utils.initEnclave() val sortedRows = enclave.ExternalSort(eid, orderSer, block.bytes) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala index c638881c3c..aef4ba8303 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala @@ -44,11 +44,8 @@ class SGXEnclave extends java.io.Serializable { @native def NonObliviousSortMergeJoin( eid: Long, joinExpr: Array[Byte], input: Array[Byte], joinRow: Array[Byte]): Array[Byte] - @native def NonObliviousAggregateStep1( - eid: Long, aggOp: Array[Byte], inputRows: Array[Byte]): (Array[Byte], Array[Byte], Array[Byte]) - @native def NonObliviousAggregateStep2( - eid: Long, aggOp: Array[Byte], inputRows: Array[Byte], nextPartitionFirstRow: Array[Byte], - prevPartitionLastGroup: Array[Byte], prevPartitionLastRow: Array[Byte]): Array[Byte] + @native def NonObliviousAggregate( + eid: Long, aggOp: Array[Byte], inputRows: Array[Byte], isPartial: Boolean): (Array[Byte]) @native def CountRowsPerPartition( eid: Long, inputRows: Array[Byte]): Array[Byte] diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index fa50c23f7e..e40acbff78 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -23,7 +23,9 @@ import edu.berkeley.cs.rise.opaque.Utils import org.apache.spark.rdd.RDD import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.AttributeSet +import org.apache.spark.sql.catalyst.expressions.aggregate._ import org.apache.spark.sql.catalyst.expressions._ +import org.apache.spark.sql.catalyst.expressions.aggregate._ import org.apache.spark.sql.catalyst.plans.JoinType import org.apache.spark.sql.catalyst.plans.physical.Partitioning import org.apache.spark.sql.execution.SparkPlan @@ -223,48 +225,44 @@ case class EncryptedFilterExec(condition: Expression, child: SparkPlan) } case class EncryptedAggregateExec( - groupingExpressions: Seq[Expression], - aggExpressions: Seq[NamedExpression], - child: SparkPlan) - extends UnaryExecNode with OpaqueOperatorExec { + groupingExpressions: Seq[NamedExpression], + aggExpressions: Seq[AggregateExpression], + mode: AggregateMode, + child: SparkPlan) + extends UnaryExecNode with OpaqueOperatorExec { override def producedAttributes: AttributeSet = AttributeSet(aggExpressions) -- AttributeSet(groupingExpressions) - override def output: Seq[Attribute] = aggExpressions.map(_.toAttribute) + override def output: Seq[Attribute] = mode match { + case Partial => groupingExpressions.map(_.toAttribute) ++ aggExpressions.map(_.copy(mode = Partial)).flatMap(_.aggregateFunction.inputAggBufferAttributes) + case Final => groupingExpressions.map(_.toAttribute) ++ aggExpressions.map(_.resultAttribute) + case Complete => groupingExpressions.map(_.toAttribute) ++ aggExpressions.map(_.resultAttribute) + } override def executeBlocked(): RDD[Block] = { - val aggExprSer = Utils.serializeAggOp(groupingExpressions, aggExpressions, child.output) - timeOperator( - child.asInstanceOf[OpaqueOperatorExec].executeBlocked(), - "EncryptedAggregateExec") { childRDD => + val (groupingExprs, aggExprs) = mode match { + case Partial => { + val partialAggExpressions = aggExpressions.map(_.copy(mode = Partial)) + (groupingExpressions, partialAggExpressions) + } + case Final => { + val finalGroupingExpressions = groupingExpressions.map(_.toAttribute) + val finalAggExpressions = aggExpressions.map(_.copy(mode = Final)) + (finalGroupingExpressions, finalAggExpressions) + } + case Complete => { + (groupingExpressions, aggExpressions.map(_.copy(mode = Complete))) + } + } - val (firstRows, lastGroups, lastRows) = childRDD.map { block => - val (enclave, eid) = Utils.initEnclave() - val (firstRow, lastGroup, lastRow) = enclave.NonObliviousAggregateStep1( - eid, aggExprSer, block.bytes) - (Block(firstRow), Block(lastGroup), Block(lastRow)) - }.collect.unzip3 - - // Send first row to previous partition and last group to next partition - val shiftedFirstRows = firstRows.drop(1) :+ Utils.emptyBlock - val shiftedLastGroups = Utils.emptyBlock +: lastGroups.dropRight(1) - val shiftedLastRows = Utils.emptyBlock +: lastRows.dropRight(1) - val shifted = (shiftedFirstRows, shiftedLastGroups, shiftedLastRows).zipped.toSeq - assert(shifted.size == childRDD.partitions.length) - val shiftedRDD = sparkContext.parallelize(shifted, childRDD.partitions.length) + val aggExprSer = Utils.serializeAggOp(groupingExprs, aggExprs, child.output) - childRDD.zipPartitions(shiftedRDD) { (blockIter, boundaryIter) => - (blockIter.toSeq, boundaryIter.toSeq) match { - case (Seq(block), Seq(Tuple3( - nextPartitionFirstRow, prevPartitionLastGroup, prevPartitionLastRow))) => - val (enclave, eid) = Utils.initEnclave() - Iterator(Block(enclave.NonObliviousAggregateStep2( - eid, aggExprSer, block.bytes, - nextPartitionFirstRow.bytes, prevPartitionLastGroup.bytes, - prevPartitionLastRow.bytes))) - } + timeOperator(child.asInstanceOf[OpaqueOperatorExec].executeBlocked(), "EncryptedPartialAggregateExec") { + childRDD => childRDD.map { block => + val (enclave, eid) = Utils.initEnclave() + Block(enclave.NonObliviousAggregate(eid, aggExprSer, block.bytes, (mode == Partial))) } } } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/logical/rules.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/logical/rules.scala index b48f3f22d8..70257d8c6d 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/logical/rules.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/logical/rules.scala @@ -57,53 +57,6 @@ object ConvertToOpaqueOperators extends Rule[LogicalPlan] { case l @ LogicalRelation(baseRelation: EncryptedScan, _, _, false) => EncryptedBlockRDD(l.output, baseRelation.buildBlockedScan()) - case p @ Project(projectList, child) if isEncrypted(child) => - EncryptedProject(projectList, child.asInstanceOf[OpaqueOperator]) - - // We don't support null values yet, so there's no point in checking whether the output of an - // encrypted operator is null - case p @ Filter(And(IsNotNull(_), IsNotNull(_)), child) if isEncrypted(child) => - child - case p @ Filter(IsNotNull(_), child) if isEncrypted(child) => - child - - case p @ Filter(condition, child) if isEncrypted(child) => - EncryptedFilter(condition, child.asInstanceOf[OpaqueOperator]) - - case p @ Sort(order, true, child) if isEncrypted(child) => - EncryptedSort(order, child.asInstanceOf[OpaqueOperator]) - - case p @ Join(left, right, joinType, condition, _) if isEncrypted(p) => - EncryptedJoin( - left.asInstanceOf[OpaqueOperator], right.asInstanceOf[OpaqueOperator], joinType, condition) - - case p @ Aggregate(groupingExprs, aggExprs, child) if isEncrypted(p) => - UndoCollapseProject.separateProjectAndAgg(p) match { - case Some((projectExprs, aggExprs)) => - EncryptedProject( - projectExprs, - EncryptedAggregate( - groupingExprs, aggExprs, - EncryptedSort( - groupingExprs.map(e => SortOrder(e, Ascending)), - child.asInstanceOf[OpaqueOperator]))) - case None => - EncryptedAggregate( - groupingExprs, aggExprs, - EncryptedSort( - groupingExprs.map(e => SortOrder(e, Ascending)), - child.asInstanceOf[OpaqueOperator])) - } - - case p @ Union(Seq(left, right)) if isEncrypted(p) => - EncryptedUnion(left.asInstanceOf[OpaqueOperator], right.asInstanceOf[OpaqueOperator]) - - case p @ LocalLimit(limitExpr, child) if isEncrypted(p) => - EncryptedLocalLimit(limitExpr, child.asInstanceOf[OpaqueOperator]) - - case p @ GlobalLimit(limitExpr, child) if isEncrypted(p) => - EncryptedGlobalLimit(limitExpr, child.asInstanceOf[OpaqueOperator]) - case InMemoryRelationMatcher(output, storageLevel, child) if isEncrypted(child) => EncryptedBlockRDD( output, diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/strategies.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/strategies.scala index b6d5ce4e72..f26551553d 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/strategies.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/strategies.scala @@ -19,69 +19,135 @@ package edu.berkeley.cs.rise.opaque import org.apache.spark.sql.Strategy import org.apache.spark.sql.catalyst.expressions.Alias +import org.apache.spark.sql.catalyst.expressions.And import org.apache.spark.sql.catalyst.expressions.Ascending import org.apache.spark.sql.catalyst.expressions.Attribute import org.apache.spark.sql.catalyst.expressions.Expression import org.apache.spark.sql.catalyst.expressions.IntegerLiteral +import org.apache.spark.sql.catalyst.expressions.IsNotNull import org.apache.spark.sql.catalyst.expressions.Literal import org.apache.spark.sql.catalyst.expressions.NamedExpression import org.apache.spark.sql.catalyst.expressions.SortOrder +import org.apache.spark.sql.catalyst.expressions.aggregate._ import org.apache.spark.sql.catalyst.planning.ExtractEquiJoinKeys -import org.apache.spark.sql.catalyst.plans.logical.Join -import org.apache.spark.sql.catalyst.plans.logical.JoinHint -import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan +import org.apache.spark.sql.catalyst.planning.PhysicalAggregation +import org.apache.spark.sql.catalyst.plans.logical._ import org.apache.spark.sql.execution.SparkPlan import edu.berkeley.cs.rise.opaque.execution._ import edu.berkeley.cs.rise.opaque.logical._ object OpaqueOperators extends Strategy { + + def isEncrypted(plan: LogicalPlan): Boolean = { + plan.find { + case _: OpaqueOperator => true + case _ => false + }.nonEmpty + } + + def isEncrypted(plan: SparkPlan): Boolean = { + plan.find { + case _: OpaqueOperatorExec => true + case _ => false + }.nonEmpty + } + def apply(plan: LogicalPlan): Seq[SparkPlan] = plan match { - case EncryptedProject(projectList, child) => + case Project(projectList, child) if isEncrypted(child) => EncryptedProjectExec(projectList, planLater(child)) :: Nil - case EncryptedFilter(condition, child) => + // We don't support null values yet, so there's no point in checking whether the output of an + // encrypted operator is null + case p @ Filter(And(IsNotNull(_), IsNotNull(_)), child) if isEncrypted(child) => + planLater(child) :: Nil + case p @ Filter(IsNotNull(_), child) if isEncrypted(child) => + planLater(child) :: Nil + + case Filter(condition, child) if isEncrypted(child) => EncryptedFilterExec(condition, planLater(child)) :: Nil - case EncryptedSort(order, child) => - EncryptedSortExec(order, planLater(child)) :: Nil - - case EncryptedJoin(left, right, joinType, condition) => - Join(left, right, joinType, condition, JoinHint.NONE) match { - case ExtractEquiJoinKeys(_, leftKeys, rightKeys, condition, _, _, _) => - val (leftProjSchema, leftKeysProj, tag) = tagForJoin(leftKeys, left.output, true) - val (rightProjSchema, rightKeysProj, _) = tagForJoin(rightKeys, right.output, false) - val leftProj = EncryptedProjectExec(leftProjSchema, planLater(left)) - val rightProj = EncryptedProjectExec(rightProjSchema, planLater(right)) - val unioned = EncryptedUnionExec(leftProj, rightProj) - val sorted = EncryptedSortExec(sortForJoin(leftKeysProj, tag, unioned.output), unioned) - val joined = EncryptedSortMergeJoinExec( - joinType, - leftKeysProj, - rightKeysProj, - leftProjSchema.map(_.toAttribute), - rightProjSchema.map(_.toAttribute), - (leftProjSchema ++ rightProjSchema).map(_.toAttribute), - sorted) - val tagsDropped = EncryptedProjectExec(dropTags(left.output, right.output), joined) - val filtered = condition match { - case Some(condition) => EncryptedFilterExec(condition, tagsDropped) - case None => tagsDropped - } - filtered :: Nil - case _ => Nil + case Sort(sortExprs, global, child) if isEncrypted(child) => + EncryptedSortExec(sortExprs, global, planLater(child)) :: Nil + + case p @ ExtractEquiJoinKeys(joinType, leftKeys, rightKeys, condition, left, right, _) if isEncrypted(p) => + val (leftProjSchema, leftKeysProj, tag) = tagForJoin(leftKeys, left.output, true) + val (rightProjSchema, rightKeysProj, _) = tagForJoin(rightKeys, right.output, false) + val leftProj = EncryptedProjectExec(leftProjSchema, planLater(left)) + val rightProj = EncryptedProjectExec(rightProjSchema, planLater(right)) + val unioned = EncryptedUnionExec(leftProj, rightProj) + val sorted = EncryptedSortExec(sortForJoin(leftKeysProj, tag, unioned.output), true, unioned) + val joined = EncryptedSortMergeJoinExec( + joinType, + leftKeysProj, + rightKeysProj, + leftProjSchema.map(_.toAttribute), + rightProjSchema.map(_.toAttribute), + (leftProjSchema ++ rightProjSchema).map(_.toAttribute), + sorted) + val tagsDropped = EncryptedProjectExec(dropTags(left.output, right.output), joined) + val filtered = condition match { + case Some(condition) => EncryptedFilterExec(condition, tagsDropped) + case None => tagsDropped + } + filtered :: Nil + + case a @ PhysicalAggregation(groupingExpressions, aggExpressions, resultExpressions, child) + if (isEncrypted(child) && aggExpressions.forall(expr => expr.isInstanceOf[AggregateExpression])) => + + val aggregateExpressions = aggExpressions.map(expr => expr.asInstanceOf[AggregateExpression]) + + if (groupingExpressions.size == 0) { + // Global aggregation + val partialAggregate = EncryptedAggregateExec(groupingExpressions, aggregateExpressions, Partial, planLater(child)) + val partialOutput = partialAggregate.output + val (projSchema, tag) = tagForGlobalAggregate(partialOutput) + + EncryptedProjectExec(resultExpressions, + EncryptedAggregateExec(groupingExpressions, aggregateExpressions, Final, + EncryptedProjectExec(partialOutput, + EncryptedSortExec(Seq(SortOrder(tag, Ascending)), true, + EncryptedProjectExec(projSchema, partialAggregate))))) :: Nil + } else { + // Grouping aggregation + EncryptedProjectExec(resultExpressions, + EncryptedAggregateExec(groupingExpressions, aggregateExpressions, Final, + EncryptedSortExec(groupingExpressions.map(_.toAttribute).map(e => SortOrder(e, Ascending)), true, + EncryptedAggregateExec(groupingExpressions, aggregateExpressions, Partial, + EncryptedSortExec(groupingExpressions.map(e => SortOrder(e, Ascending)), false, planLater(child)))))) :: Nil } - case a @ EncryptedAggregate(groupingExpressions, aggExpressions, child) => - EncryptedAggregateExec(groupingExpressions, aggExpressions, planLater(child)) :: Nil - - case EncryptedUnion(left, right) => + case p @ Union(Seq(left, right)) if isEncrypted(p) => EncryptedUnionExec(planLater(left), planLater(right)) :: Nil - case EncryptedLocalLimit(IntegerLiteral(limit), child) => + case ReturnAnswer(rootPlan) => rootPlan match { + case Limit(IntegerLiteral(limit), Sort(sortExprs, true, child)) if isEncrypted(child) => + EncryptedGlobalLimitExec(limit, + EncryptedLocalLimitExec(limit, + EncryptedSortExec(sortExprs, true, planLater(child)))) :: Nil + + case Limit(IntegerLiteral(limit), Project(projectList, child)) if isEncrypted(child) => + EncryptedGlobalLimitExec(limit, + EncryptedLocalLimitExec(limit, + EncryptedProjectExec(projectList, planLater(child)))) :: Nil + + case _ => Nil + } + + case Limit(IntegerLiteral(limit), Sort(sortExprs, true, child)) if isEncrypted(child) => + EncryptedGlobalLimitExec(limit, + EncryptedLocalLimitExec(limit, + EncryptedSortExec(sortExprs, true, planLater(child)))) :: Nil + + case Limit(IntegerLiteral(limit), Project(projectList, child)) if isEncrypted(child) => + EncryptedGlobalLimitExec(limit, + EncryptedLocalLimitExec(limit, + EncryptedProjectExec(projectList, planLater(child)))) :: Nil + + case LocalLimit(IntegerLiteral(limit), child) if isEncrypted(child) => EncryptedLocalLimitExec(limit, planLater(child)) :: Nil - case EncryptedGlobalLimit(IntegerLiteral(limit), child) => + case GlobalLimit(IntegerLiteral(limit), child) if isEncrypted(child) => EncryptedGlobalLimitExec(limit, planLater(child)) :: Nil case Encrypt(child) => @@ -111,4 +177,10 @@ object OpaqueOperators extends Strategy { private def dropTags( leftOutput: Seq[Attribute], rightOutput: Seq[Attribute]): Seq[NamedExpression] = leftOutput ++ rightOutput + + private def tagForGlobalAggregate(input: Seq[Attribute]) + : (Seq[NamedExpression], NamedExpression) = { + val tag = Alias(Literal(0), "_tag")() + (Seq(tag) ++ input, tag.toAttribute) + } } diff --git a/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala b/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala index d0a2e2ffe9..77235e6aa5 100644 --- a/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala +++ b/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueOperatorTests.scala @@ -122,6 +122,69 @@ trait OpaqueOperatorTests extends FunSuite with BeforeAndAfterAll { self => } } + /** Modified from https://stackoverflow.com/questions/33193958/change-nullable-property-of-column-in-spark-dataframe + * and https://stackoverflow.com/questions/32585670/what-is-the-best-way-to-define-custom-methods-on-a-dataframe + * Set nullable property of column. + * @param cn is the column name to change + * @param nullable is the flag to set, such that the column is either nullable or not + */ + object ExtraDFOperations { + implicit class AlternateDF(df : DataFrame) { + def setNullableStateOfColumn(cn: String, nullable: Boolean) : DataFrame = { + // get schema + val schema = df.schema + // modify [[StructField] with name `cn` + val newSchema = StructType(schema.map { + case StructField( c, t, _, m) if c.equals(cn) => StructField( c, t, nullable = nullable, m) + case y: StructField => y + }) + // apply new schema + df.sqlContext.createDataFrame( df.rdd, newSchema ) + } + } + } + + import ExtraDFOperations._ + + testAgainstSpark("Interval SQL") { securityLevel => + val data = Seq(Tuple2(1, new java.sql.Date(new java.util.Date().getTime()))) + val df = makeDF(data, securityLevel, "index", "time") + df.createTempView("Interval") + try { + spark.sql("SELECT time + INTERVAL 7 DAY FROM Interval").collect + } finally { + spark.catalog.dropTempView("Interval") + } + } + + testAgainstSpark("Interval Week SQL") { securityLevel => + val data = Seq(Tuple2(1, new java.sql.Date(new java.util.Date().getTime()))) + val df = makeDF(data, securityLevel, "index", "time") + df.createTempView("Interval") + try { + spark.sql("SELECT time + INTERVAL 7 WEEK FROM Interval").collect + } finally { + spark.catalog.dropTempView("Interval") + } + } + + testAgainstSpark("Interval Month SQL") { securityLevel => + val data = Seq(Tuple2(1, new java.sql.Date(new java.util.Date().getTime()))) + val df = makeDF(data, securityLevel, "index", "time") + df.createTempView("Interval") + try { + spark.sql("SELECT time + INTERVAL 6 MONTH FROM Interval").collect + } finally { + spark.catalog.dropTempView("Interval") + } + } + + testAgainstSpark("Date Add") { securityLevel => + val data = Seq(Tuple2(1, new java.sql.Date(new java.util.Date().getTime()))) + val df = makeDF(data, securityLevel, "index", "time") + df.select(date_add($"time", 3)).collect + } + testAgainstSpark("create DataFrame from sequence") { securityLevel => val data = for (i <- 0 until 5) yield ("foo", i) makeDF(data, securityLevel, "word", "count").collect @@ -336,17 +399,28 @@ trait OpaqueOperatorTests extends FunSuite with BeforeAndAfterAll { self => } testAgainstSpark("aggregate average") { securityLevel => - val data = for (i <- 0 until 256) yield (i, abc(i), i.toDouble) + val data = (0 until 256).map{ i => + if (i % 3 == 0 || (i + 1) % 6 == 0) + (i, abc(i), None) + else + (i, abc(i), Some(i.toDouble)) + }.toSeq val words = makeDF(data, securityLevel, "id", "category", "price") + words.setNullableStateOfColumn("price", true) - words.groupBy("category").agg(avg("price").as("avgPrice")) - .collect.sortBy { case Row(category: String, _) => category } + val df = words.groupBy("category").agg(avg("price").as("avgPrice")) + df.collect.sortBy { case Row(category: String, _) => category } } testAgainstSpark("aggregate count") { securityLevel => - val data = for (i <- 0 until 256) yield (i, abc(i), 1) + val data = (0 until 256).map{ i => + if (i % 3 == 0 || (i + 1) % 6 == 0) + (i, abc(i), None) + else + (i, abc(i), Some(i)) + }.toSeq val words = makeDF(data, securityLevel, "id", "category", "price") - + words.setNullableStateOfColumn("price", true) words.groupBy("category").agg(count("category").as("itemsInCategory")) .collect.sortBy { case Row(category: String, _) => category } } @@ -384,8 +458,15 @@ trait OpaqueOperatorTests extends FunSuite with BeforeAndAfterAll { self => } testAgainstSpark("aggregate sum") { securityLevel => - val data = for (i <- 0 until 256) yield (i, abc(i), 1) + val data = (0 until 256).map{ i => + if (i % 3 == 0 || i % 4 == 0) + (i, abc(i), None) + else + (i, abc(i), Some(i.toDouble)) + }.toSeq + val words = makeDF(data, securityLevel, "id", "word", "count") + words.setNullableStateOfColumn("count", true) words.groupBy("word").agg(sum("count").as("totalCount")) .collect.sortBy { case Row(word: String, _) => word } @@ -399,12 +480,36 @@ trait OpaqueOperatorTests extends FunSuite with BeforeAndAfterAll { self => .collect.sortBy { case Row(str: String, _, _) => str } } + testAgainstSpark("skewed aggregate sum") { securityLevel => + val data = Random.shuffle((0 until 256).map(i => { + (i, abc(123), 1) + }).toSeq) + + val words = makeDF(data, securityLevel, "id", "word", "count") + words.groupBy("word").agg(sum("count").as("totalCount")) + .collect.sortBy { case Row(word: String, _) => word } + } + + testAgainstSpark("grouping aggregate with 0 rows") { securityLevel => + val data = for (i <- 0 until 256) yield (i, abc(i), 1) + val words = makeDF(data, securityLevel, "id", "word", "count") + words.filter($"id" < lit(0)).groupBy("word").agg(sum("count")) + .collect.sortBy { case Row(word: String, _) => word } + } + testAgainstSpark("global aggregate") { securityLevel => val data = for (i <- 0 until 256) yield (i, abc(i), 1) val words = makeDF(data, securityLevel, "id", "word", "count") words.agg(sum("count").as("totalCount")).collect } + testAgainstSpark("global aggregate with 0 rows") { securityLevel => + val data = for (i <- 0 until 256) yield (i, abc(i), 1) + val words = makeDF(data, securityLevel, "id", "word", "count") + val result = words.filter($"id" < lit(0)).agg(count("*")).as("totalCount") + result.collect + } + testAgainstSpark("contains") { securityLevel => val data = for (i <- 0 until 256) yield(i.toString, abc(i)) val df = makeDF(data, securityLevel, "word", "abc") From a2b7f3aafa8a6f8eebc273ee9ef0ea0da41e374a Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Wed, 17 Feb 2021 16:47:25 +0000 Subject: [PATCH 069/101] merge request --- .../edu/berkeley/cs/rise/opaque/LA.scala | 64 +++++++++++++++++++ .../edu/berkeley/cs/rise/opaque/RA.scala | 11 +++- .../cs/rise/opaque/WordCountExample.scala | 24 +++++++ .../opaque/WordCountExampleSparkSession.scala | 24 +++++++ .../cs/rise/opaque/execution/SGXEnclave.scala | 5 ++ 5 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala create mode 100644 src/main/scala/edu/berkeley/cs/rise/opaque/WordCountExample.scala create mode 100644 src/main/scala/edu/berkeley/cs/rise/opaque/WordCountExampleSparkSession.scala diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala new file mode 100644 index 0000000000..c53498549f --- /dev/null +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package edu.berkeley.cs.rise.opaque + +import org.apache.spark.SparkContext +import org.apache.spark.internal.Logging + +import edu.berkeley.cs.rise.opaque.execution.SP +import edu.berkeley.cs.rise.opaque.execution.SGXEnclave + +// Helper to handle enclave "local attestation" and determine shared key + +object LA extends Logging { + def initLA(sc: SparkContext): Unit = { + + val rdd = sc.makeRDD(Seq.fill(sc.defaultParallelism) { () }) + val intelCert = Utils.findResource("AttestationReportSigningCACert.pem") + val sp = new SP() + + sp.Init(Utils.sharedKey, intelCert) + + println(Utils) + + val msg1s = rdd.mapPartitionsWithIndex { (i, _) => + val (enclave, eid) = Utils.initEnclave() + + // Print utils and enclave address to ascertain different enclaves + println(Utils) + println(eid) + + val msg1 = enclave.GetPublicKey(eid) + Iterator((eid, msg1)) + }.collect.toMap + + val msg2s = msg1s.map{case (eid, msg1) => (eid, sp.ProcessEnclaveReport(msg1))} + msg1s.map{case (eid, msg1) => (eid, print(eid + "\n"))} + + val attestationResults = rdd.mapPartitionsWithIndex { (_, _) => + val (enclave, eid) = Utils.initEnclave() + enclave.FinishAttestation(eid, msg2s(eid)) + Iterator((eid, true)) + }.collect.toMap + + for ((_, ret) <- attestationResults) { + if (!ret) + throw new OpaqueException("Attestation failed") + } + } +} diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index 32134ed43b..a8adaade94 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -21,6 +21,7 @@ import org.apache.spark.SparkContext import org.apache.spark.internal.Logging import edu.berkeley.cs.rise.opaque.execution.SP +import edu.berkeley.cs.rise.opaque.execution.SGXEnclave // Helper to handle remote attestation // @@ -34,13 +35,21 @@ object RA extends Logging { sp.Init(Utils.sharedKey, intelCert) + println(Utils) + val msg1s = rdd.mapPartitionsWithIndex { (i, _) => val (enclave, eid) = Utils.initEnclave() - val msg1 = enclave.GenerateReport(eid) + + // Print utils and enclave address to ascertain different enclaves + println(Utils) + println(eid) + + val msg1 = enclave.GenerateReport(eid) Iterator((eid, msg1)) }.collect.toMap val msg2s = msg1s.map{case (eid, msg1) => (eid, sp.ProcessEnclaveReport(msg1))} + msg1s.map{case (eid, msg1) => (eid, print(eid + "\n"))} val attestationResults = rdd.mapPartitionsWithIndex { (_, _) => val (enclave, eid) = Utils.initEnclave() diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/WordCountExample.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/WordCountExample.scala new file mode 100644 index 0000000000..100602cfc9 --- /dev/null +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/WordCountExample.scala @@ -0,0 +1,24 @@ +package edu.berkeley.cs.rise.opaque + +import com.typesafe.config.{Config, ConfigFactory} +import org.apache.spark.{SparkConf, SparkContext} +import org.scalactic._ + +import scala.util.Try +import spark.jobserver.api.{SparkJob => NewSparkJob, _} + +object WordCountExample extends NewSparkJob { + type JobData = Seq[String] + type JobOutput = collection.Map[String, Long] + + def runJob(sc: SparkContext, runtime: JobEnvironment, data: JobData): JobOutput = { + sc.parallelize(data).countByValue + } + + def validate(sc: SparkContext, runtime: JobEnvironment, config: Config): + JobData Or Every[ValidationProblem] = { + Try(config.getString("input.string").split(" ").toSeq) + .map(words => Good(words)) + .getOrElse(Bad(One(SingleProblem("No input.string param")))) + } +} diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/WordCountExampleSparkSession.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/WordCountExampleSparkSession.scala new file mode 100644 index 0000000000..43c684cb6e --- /dev/null +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/WordCountExampleSparkSession.scala @@ -0,0 +1,24 @@ +package edu.berkeley.cs.rise.opaque + +import com.typesafe.config.Config +import org.apache.spark.sql.SparkSession +import org.scalactic._ +import spark.jobserver.SparkSessionJob +import spark.jobserver.api.{JobEnvironment, SingleProblem, ValidationProblem} + +import scala.util.Try + +object WordCountExampleSparkSession extends SparkSessionJob { + type JobData = Seq[String] + type JobOutput = collection.Map[String, Long] + + override def runJob(sparkSession: SparkSession, runtime: JobEnvironment, data: JobData): JobOutput = + sparkSession.sparkContext.parallelize(data).countByValue + + override def validate(sparkSession: SparkSession, runtime: JobEnvironment, config: Config): + JobData Or Every[ValidationProblem] = { + Try(config.getString("input.string").split(" ").toSeq) + .map(words => Good(words)) + .getOrElse(Bad(One(SingleProblem("No input.string param")))) + } +} diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala index c638881c3c..f84591f2ba 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala @@ -62,4 +62,9 @@ class SGXEnclave extends java.io.Serializable { // Remote attestation, enclave side @native def GenerateReport(eid: Long): Array[Byte] @native def FinishAttestation(eid: Long, attResultInput: Array[Byte]): Unit + + // "Local attestation" to determine shared key, enclave side + @native def GetPublicKey(eid: Long): Array[Byte] + @native def GetListEncrypted(eid: Long, publicKeyList: Array[Byte]): Array[Byte] + @native def FinishSharedKey(eid: Long, encryptedKeyList: Array[Byte]): Unit } From c032e88ff408bc904d0f7394eb41ef318baa40fa Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Wed, 17 Feb 2021 17:55:30 +0000 Subject: [PATCH 070/101] Prelim key gen skeleton --- src/enclave/App/App.cpp | 65 +++++++++++++++++++ src/enclave/App/SGXEnclave.h | 9 +++ src/enclave/Enclave/Enclave.cpp | 29 +++++++++ src/enclave/Enclave/Enclave.edl | 14 ++++ .../edu/berkeley/cs/rise/opaque/LA.scala | 26 ++++---- .../cs/rise/opaque/WordCountExample.scala | 24 ------- .../opaque/WordCountExampleSparkSession.scala | 24 ------- 7 files changed, 131 insertions(+), 60 deletions(-) delete mode 100644 src/main/scala/edu/berkeley/cs/rise/opaque/WordCountExample.scala delete mode 100644 src/main/scala/edu/berkeley/cs/rise/opaque/WordCountExampleSparkSession.scala diff --git a/src/enclave/App/App.cpp b/src/enclave/App/App.cpp index 64013d2ab7..6a02151931 100644 --- a/src/enclave/App/App.cpp +++ b/src/enclave/App/App.cpp @@ -245,6 +245,71 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Fin } +/////////////////////////////// Shared Key Gen Begin //////////////////////////////// + +JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_GetPublicKey( + JNIEnv *env, jobject obj, jlong eid) { + (void)obj; + (void)eid; + + uint8_t* report_msg = NULL; + size_t report_msg_size = 0; + + oe_check_and_time("Get enclave public key", + ecall_get_public_key((oe_enclave_t*)eid, + &report_msg, + &report_msg_size)); + + // Allocate memory + jbyteArray report_msg_bytes = env->NewByteArray(report_msg_size); + env->SetByteArrayRegion(report_msg_bytes, 0, report_msg_size, reinterpret_cast(report_msg)); + + return report_msg_bytes; +} + +JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_GetListEncrypted( + JNIEnv *env, jobject obj, jlong eid, jbyteArray shared_key_msg_input) { + (void)obj; + + jboolean if_copy = false; + jbyte *shared_key_msg_bytes = env->GetByteArrayElements(shared_key_msg_input, &if_copy); + uint32_t shared_key_msg_size = static_cast(env->GetArrayLength(shared_key_msg_input)); + + uint8_t* report_msg = NULL; + size_t report_msg_size = 0; + + oe_check_and_time("Get List Encrypted", + ecall_get_list_encrypted((oe_enclave_t*)eid, + reinterpret_cast(shared_key_msg_bytes), + shared_key_msg_size, + &report_msg, + &report_msg_size)); + + env->ReleaseByteArrayElements(shared_key_msg_input, shared_key_msg_bytes, 0); + + jbyteArray ret = NULL; + return ret +} + +JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_FinishSharedKey( + JNIEnv *env, jobject obj, jlong eid, jbyteArray shared_key_msg_input) { + (void)obj; + + jboolean if_copy = false; + jbyte *shared_key_msg_bytes = env->GetByteArrayElements(shared_key_msg_input, &if_copy); + uint32_t shared_key_msg_size = static_cast(env->GetArrayLength(shared_key_msg_input)); + + oe_check_and_time("Finish attestation", + ecall_finish_shared_key((oe_enclave_t*)eid, + reinterpret_cast(shared_key_msg_bytes), + shared_key_msg_size)); + + env->ReleaseByteArrayElements(shared_key_msg_input, shared_key_msg_bytes, 0); + +} + +/////////////////////////////// Shared Key Gen End //////////////////////////////// + JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_StopEnclave( JNIEnv *env, jobject obj, jlong eid) { (void)env; diff --git a/src/enclave/App/SGXEnclave.h b/src/enclave/App/SGXEnclave.h index 2b74c42763..7a92359e46 100644 --- a/src/enclave/App/SGXEnclave.h +++ b/src/enclave/App/SGXEnclave.h @@ -68,6 +68,15 @@ extern "C" { JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_FinishAttestation( JNIEnv *, jobject, jlong, jbyteArray); + JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_GetPublicKey( + JNIEnv *, jobject, jlong); + + JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_GetListEncrypted( + JNIEnv *, jobject, jlong, jbyteArray); + + JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_FinishSharedKey( + JNIEnv *, jobject, jlong, jbyteArray); + #ifdef __cplusplus } #endif diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 81e19d79ed..878aac31ff 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -388,3 +388,32 @@ void ecall_generate_report(uint8_t **report_msg_data, oe_free_report(report); } + +//////////////////////////////////// Generate Shared Key Begin ////////////////////////////////////// + +void ecall_get_public_key(uint8_t **report_msg_data, + size_t* report_msg_data_size) { + + std::cout << "ecall_get_public_key" << std::endl; +} + +void ecall_get_list_encrypted(uint8_t *shared_key_msg_input, + uint32_t shared_key_msg_size, + uint8_t **report_msg_data, + size_t* report_msg_data_size) { + try { + std::cout << "ecall_get_list_encrypted" << std::endl; + } catch (const std::runtime_error &e) { + ocall_throw(e.what()); + } +} + +void ecall_finish_shared_key(uint8_t *shared_key_msg_input, + uint32_t shared_key_msg_size) { + try { + std::cout << "ecall_finish_shared_key" << std::endl; + + } catch (const std::runtime_error &e) { + ocall_throw(e.what()); + } +} diff --git a/src/enclave/Enclave/Enclave.edl b/src/enclave/Enclave/Enclave.edl index 44eccc7a76..9c5c0cba89 100644 --- a/src/enclave/Enclave/Enclave.edl +++ b/src/enclave/Enclave/Enclave.edl @@ -84,6 +84,20 @@ enclave { public void ecall_finish_attestation( [in,size=msg4_size] uint8_t *msg4, uint32_t msg4_size); + + public void ecall_get_public_key( + [out] uint8_t** msg1, + [out] size_t* msg1_size); + + public void ecall_get_list_encrypted( + [in,size=msg4_size] uint8_t *msg4, + [in] uint32_t msg4_size, + [out] uint8_t** msg1, + [out] size_t* msg1_size); + + public void ecall_finish_shared_key( + [in,size=msg4_size] uint8_t *msg4, + uint32_t msg4_size); }; untrusted { diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala index c53498549f..0f21d934b1 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala @@ -47,18 +47,20 @@ object LA extends Logging { Iterator((eid, msg1)) }.collect.toMap - val msg2s = msg1s.map{case (eid, msg1) => (eid, sp.ProcessEnclaveReport(msg1))} - msg1s.map{case (eid, msg1) => (eid, print(eid + "\n"))} + println("Finish LA") - val attestationResults = rdd.mapPartitionsWithIndex { (_, _) => - val (enclave, eid) = Utils.initEnclave() - enclave.FinishAttestation(eid, msg2s(eid)) - Iterator((eid, true)) - }.collect.toMap - - for ((_, ret) <- attestationResults) { - if (!ret) - throw new OpaqueException("Attestation failed") - } +// val msg2s = msg1s.map{case (eid, msg1) => (eid, sp.ProcessEnclaveReport(msg1))} +// msg1s.map{case (eid, msg1) => (eid, print(eid + "\n"))} +// +// val attestationResults = rdd.mapPartitionsWithIndex { (_, _) => +// val (enclave, eid) = Utils.initEnclave() +// enclave.FinishAttestation(eid, msg2s(eid)) +// Iterator((eid, true)) +// }.collect.toMap +// +// for ((_, ret) <- attestationResults) { +// if (!ret) +// throw new OpaqueException("Attestation failed") +// } } } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/WordCountExample.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/WordCountExample.scala deleted file mode 100644 index 100602cfc9..0000000000 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/WordCountExample.scala +++ /dev/null @@ -1,24 +0,0 @@ -package edu.berkeley.cs.rise.opaque - -import com.typesafe.config.{Config, ConfigFactory} -import org.apache.spark.{SparkConf, SparkContext} -import org.scalactic._ - -import scala.util.Try -import spark.jobserver.api.{SparkJob => NewSparkJob, _} - -object WordCountExample extends NewSparkJob { - type JobData = Seq[String] - type JobOutput = collection.Map[String, Long] - - def runJob(sc: SparkContext, runtime: JobEnvironment, data: JobData): JobOutput = { - sc.parallelize(data).countByValue - } - - def validate(sc: SparkContext, runtime: JobEnvironment, config: Config): - JobData Or Every[ValidationProblem] = { - Try(config.getString("input.string").split(" ").toSeq) - .map(words => Good(words)) - .getOrElse(Bad(One(SingleProblem("No input.string param")))) - } -} diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/WordCountExampleSparkSession.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/WordCountExampleSparkSession.scala deleted file mode 100644 index 43c684cb6e..0000000000 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/WordCountExampleSparkSession.scala +++ /dev/null @@ -1,24 +0,0 @@ -package edu.berkeley.cs.rise.opaque - -import com.typesafe.config.Config -import org.apache.spark.sql.SparkSession -import org.scalactic._ -import spark.jobserver.SparkSessionJob -import spark.jobserver.api.{JobEnvironment, SingleProblem, ValidationProblem} - -import scala.util.Try - -object WordCountExampleSparkSession extends SparkSessionJob { - type JobData = Seq[String] - type JobOutput = collection.Map[String, Long] - - override def runJob(sparkSession: SparkSession, runtime: JobEnvironment, data: JobData): JobOutput = - sparkSession.sparkContext.parallelize(data).countByValue - - override def validate(sparkSession: SparkSession, runtime: JobEnvironment, config: Config): - JobData Or Every[ValidationProblem] = { - Try(config.getString("input.string").split(" ").toSeq) - .map(words => Good(words)) - .getOrElse(Bad(One(SingleProblem("No input.string param")))) - } -} From 5bba78eaf47e6aeb2556400dafcf897ac575252f Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Thu, 18 Feb 2021 04:42:06 +0000 Subject: [PATCH 071/101] Add enclave shared key gen --- src/enclave/App/App.cpp | 4 +- src/enclave/Enclave/Crypto.cpp | 13 +-- src/enclave/Enclave/Crypto.h | 2 + src/enclave/Enclave/Enclave.cpp | 93 ++++++++++++++++--- src/enclave/Enclave/Enclave.edl | 8 +- .../edu/berkeley/cs/rise/opaque/LA.scala | 5 +- 6 files changed, 97 insertions(+), 28 deletions(-) diff --git a/src/enclave/App/App.cpp b/src/enclave/App/App.cpp index 6a02151931..0c757c5a25 100644 --- a/src/enclave/App/App.cpp +++ b/src/enclave/App/App.cpp @@ -282,13 +282,13 @@ JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEncla ecall_get_list_encrypted((oe_enclave_t*)eid, reinterpret_cast(shared_key_msg_bytes), shared_key_msg_size, - &report_msg, + report_msg, &report_msg_size)); env->ReleaseByteArrayElements(shared_key_msg_input, shared_key_msg_bytes, 0); jbyteArray ret = NULL; - return ret + return ret; } JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_FinishSharedKey( diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index dfcf64f3c1..83ff6bdfb9 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -67,12 +67,13 @@ void add_client_key(uint8_t *client_key_bytes, uint32_t client_key_size, char* u } -// void set_shared_key(uint8_t *shared_key_bytes, uint32_t shared_key_size) { -// if (shared_key_size <= 0) { -// throw std::runtime_error("Attempting to set a shared key with invalid key size."); -// } -// memcpy_s(shared_key, sizeof(shared_key), shared_key_bytes, shared_key_size); -// } +void set_shared_key(uint8_t *shared_key_bytes, uint32_t shared_key_size) { + if (shared_key_size <= 0) { + throw std::runtime_error("Attempting to set a shared key with invalid key size."); + } + memcpy_s(shared_key, sizeof(shared_key), shared_key_bytes, shared_key_size); + initKeySchedule(); +} void xor_shared_key(uint8_t *key_share_bytes, uint32_t key_share_size) { if (key_share_size <= 0 || key_share_size != SGX_AESGCM_KEY_SIZE) { diff --git a/src/enclave/Enclave/Crypto.h b/src/enclave/Enclave/Crypto.h index cf99d2b096..5bc5c12387 100644 --- a/src/enclave/Enclave/Crypto.h +++ b/src/enclave/Enclave/Crypto.h @@ -22,6 +22,8 @@ extern const sgx_ec256_public_t g_sp_pub_key; void add_client_key(uint8_t *client_key_bytes, uint32_t client_key_size, char* username); void xor_shared_key(uint8_t *key_share_bytes, uint32_t key_share_size); + +void set_shared_key(uint8_t *key_share_bytes, uint32_t key_share_size); /** * Encrypt the given plaintext using AES-GCM with a 128-bit key and write the result to * `ciphertext`. The encrypted data will be formatted as follows, where || denotes concatenation: diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 878aac31ff..466163a177 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -4,6 +4,8 @@ #include #include +#include "Random.h" + #include "Aggregate.h" #include "Crypto.h" #include "Filter.h" @@ -394,26 +396,93 @@ void ecall_generate_report(uint8_t **report_msg_data, void ecall_get_public_key(uint8_t **report_msg_data, size_t* report_msg_data_size) { - std::cout << "ecall_get_public_key" << std::endl; + std::cout << "enter ecall_get_public_key" << std::endl; + + uint8_t public_key[OE_PUBLIC_KEY_SIZE] = {}; + size_t public_key_size = sizeof(public_key); + + g_crypto.retrieve_public_key(public_key); + + *report_msg_data_size = public_key_size; + *report_msg_data = (uint8_t*)oe_host_malloc(*report_msg_data_size); + + memcpy_s(*report_msg_data, *report_msg_data_size, public_key, public_key_size); + + std::cout << "exit ecall_get_public_key" << std::endl; } -void ecall_get_list_encrypted(uint8_t *shared_key_msg_input, - uint32_t shared_key_msg_size, - uint8_t **report_msg_data, - size_t* report_msg_data_size) { +void ecall_get_list_encrypted(uint8_t * pk_list, + uint32_t pk_list_size, + uint8_t * sk_list, + size_t* sk_list_size) { + std::cout << "enter ecall_get_list_encrypted" << std::endl; + + // TODO: Guard against encrypting or overwriting enclave memory? + + // Size of shared key is 16 from ServiceProvider - LC_AESGCM_KEY_SIZE + // For now SGX_AESGCM_KEY_SIZE is also 16, so will just use that for now + try { - std::cout << "ecall_get_list_encrypted" << std::endl; + // Generate a random value used for key + unsigned char secret_key[SGX_AESGCM_KEY_SIZE] = {0}; + mbedtls_read_rand(secret_key, SGX_AESGCM_KEY_SIZE); + + uint8_t public_key[OE_PUBLIC_KEY_SIZE] = {}; + uint8_t *pk_pointer = pk_list; + + unsigned char encrypted_sharedkey[OE_SHARED_KEY_CIPHERTEXT_SIZE]; + size_t encrypted_sharedkey_size = sizeof(encrypted_sharedkey); + + *sk_list_size = encrypted_sharedkey_size * (pk_list_size / OE_PUBLIC_KEY_SIZE); + sk_list = (uint8_t*)oe_host_malloc(*sk_list_size); + uint8_t *sk_pointer = sk_list; + + while (pk_pointer < pk_list + pk_list_size) { + memcpy_s(public_key, OE_PUBLIC_KEY_SIZE, pk_pointer, OE_PUBLIC_KEY_SIZE); + g_crypto.encrypt(public_key, + secret_key, + SGX_AESGCM_KEY_SIZE, + encrypted_sharedkey, + &encrypted_sharedkey_size); + memcpy_s(sk_pointer, OE_SHARED_KEY_CIPHERTEXT_SIZE, encrypted_sharedkey, OE_SHARED_KEY_CIPHERTEXT_SIZE); + + pk_pointer += OE_PUBLIC_KEY_SIZE; + sk_pointer += OE_SHARED_KEY_CIPHERTEXT_SIZE; + } } catch (const std::runtime_error &e) { ocall_throw(e.what()); } + + std::cout << "exit ecall_get_list_encrypted" << std::endl; } -void ecall_finish_shared_key(uint8_t *shared_key_msg_input, - uint32_t shared_key_msg_size) { - try { - std::cout << "ecall_finish_shared_key" << std::endl; +void ecall_finish_shared_key(uint8_t *sk_list, + uint32_t sk_list_size) { - } catch (const std::runtime_error &e) { - ocall_throw(e.what()); + std::cout << "enter ecall_finish_shared_key" << std::endl; + + uint8_t *sk_pointer = sk_list; + + uint8_t secret_key[SGX_AESGCM_KEY_SIZE] = {0}; + size_t sk_size = sizeof(secret_key); + + while (sk_pointer < sk_list + sk_list_size) { + uint8_t encrypted_sharedkey[OE_SHARED_KEY_CIPHERTEXT_SIZE]; + size_t encrypted_sharedkey_size = sizeof(encrypted_sharedkey); + + memcpy_s(encrypted_sharedkey, encrypted_sharedkey_size, sk_pointer, OE_SHARED_KEY_CIPHERTEXT_SIZE); + + try { + bool ret = g_crypto.decrypt(encrypted_sharedkey, encrypted_sharedkey_size, secret_key, &sk_size); + if (ret) {break;} // Decryption was successful to obtain secret key + } catch (const std::runtime_error &e) { + ocall_throw(e.what()); + } + + sk_pointer += OE_SHARED_KEY_CIPHERTEXT_SIZE; } + + set_shared_key(secret_key, sk_size); + + std::cout << "exit ecall_finish_shared_key" << std::endl; } diff --git a/src/enclave/Enclave/Enclave.edl b/src/enclave/Enclave/Enclave.edl index 9c5c0cba89..804debff52 100644 --- a/src/enclave/Enclave/Enclave.edl +++ b/src/enclave/Enclave/Enclave.edl @@ -90,10 +90,10 @@ enclave { [out] size_t* msg1_size); public void ecall_get_list_encrypted( - [in,size=msg4_size] uint8_t *msg4, - [in] uint32_t msg4_size, - [out] uint8_t** msg1, - [out] size_t* msg1_size); + [in,size=pk_list_size] uint8_t *pk_list, + uint32_t pk_list_size, + [out] uint8_t* sk_list, + [out] size_t* sk_list_size); public void ecall_finish_shared_key( [in,size=msg4_size] uint8_t *msg4, diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala index 0f21d934b1..d5476e9d55 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala @@ -29,11 +29,8 @@ object LA extends Logging { def initLA(sc: SparkContext): Unit = { val rdd = sc.makeRDD(Seq.fill(sc.defaultParallelism) { () }) - val intelCert = Utils.findResource("AttestationReportSigningCACert.pem") - val sp = new SP() - - sp.Init(Utils.sharedKey, intelCert) + // Test print Utils. println(Utils) val msg1s = rdd.mapPartitionsWithIndex { (i, _) => From 29c2cae8c1762d2c38d5e123334b70ede66bdf0f Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Thu, 18 Feb 2021 05:38:23 +0000 Subject: [PATCH 072/101] Update opaqueenv and finish shared key generation --- opaqueenv | 2 +- .../edu/berkeley/cs/rise/opaque/LA.scala | 48 ++++++++++++------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/opaqueenv b/opaqueenv index 29cbd5f87c..3e988b1afc 100644 --- a/opaqueenv +++ b/opaqueenv @@ -1,4 +1,4 @@ -export OPAQUE_HOME=/home/mc2/opaque +export OPAQUE_HOME=$(pwd) export SPARKSGX_DATA_DIR=${OPAQUE_HOME}/data/ export PRIVATE_KEY_PATH=${OPAQUE_HOME}/private_key.pem export MODE=HARDWARE diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala index d5476e9d55..97c4d34d05 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala @@ -23,6 +23,9 @@ import org.apache.spark.internal.Logging import edu.berkeley.cs.rise.opaque.execution.SP import edu.berkeley.cs.rise.opaque.execution.SGXEnclave +import Array.concat +import scala.util.Random + // Helper to handle enclave "local attestation" and determine shared key object LA extends Logging { @@ -32,7 +35,7 @@ object LA extends Logging { // Test print Utils. println(Utils) - + // Obtain public keys val msg1s = rdd.mapPartitionsWithIndex { (i, _) => val (enclave, eid) = Utils.initEnclave() @@ -44,20 +47,33 @@ object LA extends Logging { Iterator((eid, msg1)) }.collect.toMap - println("Finish LA") - -// val msg2s = msg1s.map{case (eid, msg1) => (eid, sp.ProcessEnclaveReport(msg1))} -// msg1s.map{case (eid, msg1) => (eid, print(eid + "\n"))} -// -// val attestationResults = rdd.mapPartitionsWithIndex { (_, _) => -// val (enclave, eid) = Utils.initEnclave() -// enclave.FinishAttestation(eid, msg2s(eid)) -// Iterator((eid, true)) -// }.collect.toMap -// -// for ((_, ret) <- attestationResults) { -// if (!ret) -// throw new OpaqueException("Attestation failed") -// } + // Combine all public keys into one large array + var pkArray = Array[Byte]() + for ((k,v) <- msg1s) concat(pkArray, v) + + val msg2s = msg1s.map{case (eid, msg1) => (eid, pkArray)} + + // Send list of public keys to enclaves + val encryptedResults = rdd.mapPartitionsWithIndex { (_, _) => + val (enclave, eid) = Utils.initEnclave() + val msg2 = enclave.GetListEncrypted(eid, msg2s(eid)) + Iterator((eid, msg2)) + }.collect.toMap + + // Pick a random encrypted list from the map and send it to all the enclaves + val random = new Random + val skArray = encryptedResults.values.toList(random.nextInt(encryptedResults.size)) + val msg3s = msg1s.map{case (eid, _) => (eid, skArray)} + + val setSharedKeyResults = rdd.mapPartitionsWithIndex { (_, _) => + val (enclave, eid) = Utils.initEnclave() + val msg2 = enclave.FinishSharedKey(eid, msg3s(eid)) + Iterator((eid, true)) + }.collect.toMap + + for ((_, ret) <- setSharedKeyResults) { + if (!ret) + throw new OpaqueException("Failed to set shared key") + } } } From 117c2a1fa5bbee9ef1dce8000b8d84d0cad0d572 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Mon, 22 Feb 2021 18:46:42 +0000 Subject: [PATCH 073/101] LA initial compile success --- src/enclave/Enclave/Enclave.cpp | 7 +++++++ src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala | 1 + 2 files changed, 8 insertions(+) diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 466163a177..3f2d8dade3 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -484,5 +484,12 @@ void ecall_finish_shared_key(uint8_t *sk_list, set_shared_key(secret_key, sk_size); + // Print out shared_key + for (int i = 0; i < SGX_AESGCM_KEY_SIZE; i++) { + std::cout << secret_key[i]; + } + + std::cout << std::endl; + std::cout << "exit ecall_finish_shared_key" << std::endl; } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index a1d85b1009..1a6f1db487 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -303,6 +303,7 @@ object Utils extends Logging { (Seq(OpaqueOperators) ++ sqlContext.experimental.extraStrategies) RA.initRA(sqlContext.sparkContext) + LA.initLA(sqlContext.sparkContext) } def concatByteArrays(arrays: Array[Array[Byte]]): Array[Byte] = { From 633be46252e412c443b46e4d8568d5f8f0844706 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Mon, 22 Feb 2021 23:18:51 +0000 Subject: [PATCH 074/101] Modify RA --- .../scala/edu/berkeley/cs/rise/opaque/RA.scala | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index e13ae7f5ca..aba46c048d 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -41,25 +41,18 @@ object RA extends Logging { val intelCert = Utils.findResource("AttestationReportSigningCACert.pem") // FIXME: hardcoded path - val userCert = scala.io.Source.fromFile("/home/chester/opaque/user1.crt").mkString + val userCert = scala.io.Source.fromFile("/home/opaque/opaque/user1.crt").mkString - val keySharePath = sys.env("OPAQUE_KEY_SHARE") - val clientKeyPath = sys.env("OPAQUE_CLIENT_KEY") + val testKey: Array[Byte] = "Opaque deve key2".getBytes("UTF-8") - val keyShare: Array[Byte] = Files.readAllBytes(Paths.get(keySharePath)) - val clientKey: Array[Byte] = Files.readAllBytes(Paths.get(clientKeyPath)) - - // val keyShare: Array[Byte] = "Opaque key share".getBytes("UTF-8") - // val clientKey: Array[Byte] = "Opaque devel key".getBytes("UTF-8") - // val testKey: Array[Byte] = "Opaque deve key2".getBytes("UTF-8") - // - Utils.addClientKey(clientKey) + Utils.addClientKey(testKey) val sp = new SP() - sp.Init(Utils.clientKey, intelCert, userCert, keyShare) + sp.Init(Utils.clientKey, intelCert, userCert, testKey) println(Utils) + println(rdd.getNumPartitions) // Runs on executors val msg1s = rdd.mapPartitions { (_) => From 9fc820520b479154854ecf87d8faca4bfea3cad2 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Tue, 23 Feb 2021 03:53:51 +0000 Subject: [PATCH 075/101] Compile pass 2. Still wrong key --- src/enclave/App/App.cpp | 20 +++++++++-- .../edu/berkeley/cs/rise/opaque/LA.scala | 36 ++++++++++--------- .../edu/berkeley/cs/rise/opaque/RA.scala | 11 +++--- 3 files changed, 43 insertions(+), 24 deletions(-) diff --git a/src/enclave/App/App.cpp b/src/enclave/App/App.cpp index 0c757c5a25..0adbc98c32 100644 --- a/src/enclave/App/App.cpp +++ b/src/enclave/App/App.cpp @@ -42,6 +42,7 @@ #include #include // struct timeval #include // gettimeofday +#include // DEBUG #include "common.h" #include "Enclave_u.h" @@ -285,27 +286,40 @@ JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEncla report_msg, &report_msg_size)); - env->ReleaseByteArrayElements(shared_key_msg_input, shared_key_msg_bytes, 0); + // Allocate memory + jbyteArray report_msg_bytes = env->NewByteArray(report_msg_size); + env->SetByteArrayRegion(report_msg_bytes, 0, report_msg_size, reinterpret_cast(report_msg)); - jbyteArray ret = NULL; - return ret; + return report_msg_bytes; } JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_FinishSharedKey( JNIEnv *env, jobject obj, jlong eid, jbyteArray shared_key_msg_input) { (void)obj; + std::cout << "enter App.cpp" << std::endl; + std::cout << eid << std::endl; + jboolean if_copy = false; + + std::cout << "App.cpp - before getArrayElements" << std::endl; jbyte *shared_key_msg_bytes = env->GetByteArrayElements(shared_key_msg_input, &if_copy); + std::cout << "App.cpp - after getArrayElements" << std::endl; + + std::cout << "App.cpp - before getArraySize" << std::endl; uint32_t shared_key_msg_size = static_cast(env->GetArrayLength(shared_key_msg_input)); + std::cout << "App.cpp - after getArraySize" << std::endl; + std::cout << "App.cpp - before ecall" << std::endl; oe_check_and_time("Finish attestation", ecall_finish_shared_key((oe_enclave_t*)eid, reinterpret_cast(shared_key_msg_bytes), shared_key_msg_size)); + std::cout << "App.cpp - after ecall" << std::endl; env->ReleaseByteArrayElements(shared_key_msg_input, shared_key_msg_bytes, 0); + std::cout << "exit App.cpp" << std::endl; } /////////////////////////////// Shared Key Gen End //////////////////////////////// diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala index 97c4d34d05..7480c810ec 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala @@ -24,24 +24,24 @@ import edu.berkeley.cs.rise.opaque.execution.SP import edu.berkeley.cs.rise.opaque.execution.SGXEnclave import Array.concat -import scala.util.Random // Helper to handle enclave "local attestation" and determine shared key object LA extends Logging { def initLA(sc: SparkContext): Unit = { - val rdd = sc.makeRDD(Seq.fill(sc.defaultParallelism) { () }) + // Hard-coded to be 2 for now + val rdd = sc.makeRDD(Seq.fill(2) { () }) // Test print Utils. - println(Utils) + println("LA: " + Utils) // Obtain public keys val msg1s = rdd.mapPartitionsWithIndex { (i, _) => val (enclave, eid) = Utils.initEnclave() // Print utils and enclave address to ascertain different enclaves - println(Utils) - println(eid) + println("LA: " + Utils) + println("LA: " + eid) val msg1 = enclave.GetPublicKey(eid) Iterator((eid, msg1)) @@ -51,23 +51,27 @@ object LA extends Logging { var pkArray = Array[Byte]() for ((k,v) <- msg1s) concat(pkArray, v) - val msg2s = msg1s.map{case (eid, msg1) => (eid, pkArray)} - +// val msg2s = msg1s.map{case (eid, msg1) => (eid, pkArray)} + // Send list of public keys to enclaves - val encryptedResults = rdd.mapPartitionsWithIndex { (_, _) => + val encryptedResults = rdd.context.parallelize(Array(pkArray), 1).map { publicKeys => val (enclave, eid) = Utils.initEnclave() - val msg2 = enclave.GetListEncrypted(eid, msg2s(eid)) - Iterator((eid, msg2)) - }.collect.toMap + println("LA: " + eid) + enclave.GetListEncrypted(eid, publicKeys) + }.first() + + // Send encrypted secret key to all enclaves + val msg3s = msg1s.map{case (eid, _) => (eid, encryptedResults)} + msg1s.map{case (eid, _) => println("msg1s keys: " + eid)} + msg3s.map{case (eid, _) => println("msg3s keys: " + eid)} - // Pick a random encrypted list from the map and send it to all the enclaves - val random = new Random - val skArray = encryptedResults.values.toList(random.nextInt(encryptedResults.size)) - val msg3s = msg1s.map{case (eid, _) => (eid, skArray)} +// val result: Nothing = encryptedResults val setSharedKeyResults = rdd.mapPartitionsWithIndex { (_, _) => val (enclave, eid) = Utils.initEnclave() - val msg2 = enclave.FinishSharedKey(eid, msg3s(eid)) + println("LA - set shared key: " + eid) + enclave.FinishSharedKey(eid, msg3s(eid)) + println("LA - after set shared key: " + eid) Iterator((eid, true)) }.collect.toMap diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index aba46c048d..fd30033378 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -33,7 +33,9 @@ object RA extends Logging { // All executors need to be initialized before attestation can occur var numExecutors = 1 if (!sc.isLocal) { - numExecutors = sc.getConf.getInt("spark.executor.instances", -1) + // For now, I am hard-coding this value to 2, because it does not seem like Spark is picking the value up + numExecutors = sc.getConf.getInt("spark.executor.instances", 2) + println("RA: " + numExecutors) while (!sc.isLocal && sc.getExecutorMemoryStatus.size < numExecutors) {} } @@ -51,16 +53,15 @@ object RA extends Logging { sp.Init(Utils.clientKey, intelCert, userCert, testKey) - println(Utils) - println(rdd.getNumPartitions) + println("RA: " + Utils) // Runs on executors val msg1s = rdd.mapPartitions { (_) => val (enclave, eid) = Utils.initEnclave() // Print utils and enclave address to ascertain different enclaves - println(Utils) - println(eid) + println("RA: " + Utils) + println("RA: " + eid) val msg1 = enclave.GenerateReport(eid) Iterator((eid, msg1)) From f507115d582f6975a8d1b1ee837e68f5d97011e4 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Tue, 23 Feb 2021 17:37:30 +0000 Subject: [PATCH 076/101] second step sk_list compile --- src/enclave/App/App.cpp | 28 ++++++++++----- src/enclave/Enclave/Enclave.cpp | 34 ++++++++++++++++--- src/enclave/Enclave/Enclave.edl | 6 ++-- .../edu/berkeley/cs/rise/opaque/LA.scala | 16 ++++++--- 4 files changed, 62 insertions(+), 22 deletions(-) diff --git a/src/enclave/App/App.cpp b/src/enclave/App/App.cpp index 0adbc98c32..524a72571c 100644 --- a/src/enclave/App/App.cpp +++ b/src/enclave/App/App.cpp @@ -276,19 +276,29 @@ JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEncla jbyte *shared_key_msg_bytes = env->GetByteArrayElements(shared_key_msg_input, &if_copy); uint32_t shared_key_msg_size = static_cast(env->GetArrayLength(shared_key_msg_input)); - uint8_t* report_msg = NULL; - size_t report_msg_size = 0; + size_t report_msg_size = OE_SHARED_KEY_CIPHERTEXT_SIZE * (shared_key_msg_size / OE_PUBLIC_KEY_SIZE); + uint8_t* report_msg = new uint8_t[report_msg_size]; oe_check_and_time("Get List Encrypted", ecall_get_list_encrypted((oe_enclave_t*)eid, reinterpret_cast(shared_key_msg_bytes), shared_key_msg_size, report_msg, - &report_msg_size)); + report_msg_size)); // Allocate memory +// std::cout << "App.cpp - GetListEncrypted - Before allocate memory" << std::endl; jbyteArray report_msg_bytes = env->NewByteArray(report_msg_size); +// std::cout << "App.cpp - report_msg_size: " + report_msg_size << std::endl; +// std::cout << "App.cpp - GetListEncrypted - After allocate memory" << std::endl; + +// std::cout << "App.cpp - GetListEncrypted - Before set memory" << std::endl; env->SetByteArrayRegion(report_msg_bytes, 0, report_msg_size, reinterpret_cast(report_msg)); +// std::cout << "App.cpp - GetListEncrypted - After set memory" << std::endl; + + env->ReleaseByteArrayElements(shared_key_msg_input, (jbyte *) shared_key_msg_bytes, 0); + + delete[] report_msg; return report_msg_bytes; } @@ -297,18 +307,18 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Fin JNIEnv *env, jobject obj, jlong eid, jbyteArray shared_key_msg_input) { (void)obj; - std::cout << "enter App.cpp" << std::endl; +// std::cout << "enter App.cpp" << std::endl; std::cout << eid << std::endl; jboolean if_copy = false; - std::cout << "App.cpp - before getArrayElements" << std::endl; +// std::cout << "App.cpp - before getArrayElements" << std::endl; jbyte *shared_key_msg_bytes = env->GetByteArrayElements(shared_key_msg_input, &if_copy); - std::cout << "App.cpp - after getArrayElements" << std::endl; +// std::cout << "App.cpp - after getArrayElements" << std::endl; - std::cout << "App.cpp - before getArraySize" << std::endl; +// std::cout << "App.cpp - before getArraySize" << std::endl; uint32_t shared_key_msg_size = static_cast(env->GetArrayLength(shared_key_msg_input)); - std::cout << "App.cpp - after getArraySize" << std::endl; +// std::cout << "App.cpp - after getArraySize" << std::endl; std::cout << "App.cpp - before ecall" << std::endl; oe_check_and_time("Finish attestation", @@ -319,7 +329,7 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Fin env->ReleaseByteArrayElements(shared_key_msg_input, shared_key_msg_bytes, 0); - std::cout << "exit App.cpp" << std::endl; +// std::cout << "exit App.cpp" << std::endl; } /////////////////////////////// Shared Key Gen End //////////////////////////////// diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 3f2d8dade3..4c3c404269 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -403,6 +403,12 @@ void ecall_get_public_key(uint8_t **report_msg_data, g_crypto.retrieve_public_key(public_key); + // Print out public key for debugging purposes + for (size_t i = 0; i < public_key_size; i++) { + std::cout << public_key[i]; + } + std::cout << std::endl; + *report_msg_data_size = public_key_size; *report_msg_data = (uint8_t*)oe_host_malloc(*report_msg_data_size); @@ -414,10 +420,13 @@ void ecall_get_public_key(uint8_t **report_msg_data, void ecall_get_list_encrypted(uint8_t * pk_list, uint32_t pk_list_size, uint8_t * sk_list, - size_t* sk_list_size) { + uint32_t sk_list_size) { std::cout << "enter ecall_get_list_encrypted" << std::endl; - // TODO: Guard against encrypting or overwriting enclave memory? + // Guard against encrypting or overwriting enclave memory + assert(oe_is_outside_enclave(pk_list, pk_list_size) == 1); + assert(oe_is_outside_enclave(sk_list, *sk_list_size) == 1); + __builtin_ia32_lfence(); // Size of shared key is 16 from ServiceProvider - LC_AESGCM_KEY_SIZE // For now SGX_AESGCM_KEY_SIZE is also 16, so will just use that for now @@ -433,12 +442,17 @@ void ecall_get_list_encrypted(uint8_t * pk_list, unsigned char encrypted_sharedkey[OE_SHARED_KEY_CIPHERTEXT_SIZE]; size_t encrypted_sharedkey_size = sizeof(encrypted_sharedkey); - *sk_list_size = encrypted_sharedkey_size * (pk_list_size / OE_PUBLIC_KEY_SIZE); - sk_list = (uint8_t*)oe_host_malloc(*sk_list_size); uint8_t *sk_pointer = sk_list; while (pk_pointer < pk_list + pk_list_size) { memcpy_s(public_key, OE_PUBLIC_KEY_SIZE, pk_pointer, OE_PUBLIC_KEY_SIZE); + + // Print out public key for debugging purposes + for (size_t i = 0; i < OE_PUBLIC_KEY_SIZE; i++) { + std::cout << public_key[i]; + } + std::cout << std::endl; + g_crypto.encrypt(public_key, secret_key, SGX_AESGCM_KEY_SIZE, @@ -446,6 +460,12 @@ void ecall_get_list_encrypted(uint8_t * pk_list, &encrypted_sharedkey_size); memcpy_s(sk_pointer, OE_SHARED_KEY_CIPHERTEXT_SIZE, encrypted_sharedkey, OE_SHARED_KEY_CIPHERTEXT_SIZE); + // Print out cipher for debugging purposes + for (size_t i = 0; i < OE_SHARED_KEY_CIPHERTEXT_SIZE; i++) { + std::cout << (int) encrypted_sharedkey[i] + " "; + } + std::cout << std::endl; + pk_pointer += OE_PUBLIC_KEY_SIZE; sk_pointer += OE_SHARED_KEY_CIPHERTEXT_SIZE; } @@ -453,6 +473,12 @@ void ecall_get_list_encrypted(uint8_t * pk_list, ocall_throw(e.what()); } + // Print out sk_list for debugging purposes + for (size_t i = 0; i < sk_list_size; i++) { + std::cout << sk_list[i] + " "; + } + std::cout << std::endl; + std::cout << "exit ecall_get_list_encrypted" << std::endl; } diff --git a/src/enclave/Enclave/Enclave.edl b/src/enclave/Enclave/Enclave.edl index 804debff52..08918cc2c3 100644 --- a/src/enclave/Enclave/Enclave.edl +++ b/src/enclave/Enclave/Enclave.edl @@ -90,10 +90,8 @@ enclave { [out] size_t* msg1_size); public void ecall_get_list_encrypted( - [in,size=pk_list_size] uint8_t *pk_list, - uint32_t pk_list_size, - [out] uint8_t* sk_list, - [out] size_t* sk_list_size); + [user_check] uint8_t *pk_list, uint32_t length, + [user_check] uint8_t *sk_list, uint32_t cipher_length); public void ecall_finish_shared_key( [in,size=msg4_size] uint8_t *msg4, diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala index 7480c810ec..c4bf405353 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala @@ -49,7 +49,11 @@ object LA extends Logging { // Combine all public keys into one large array var pkArray = Array[Byte]() - for ((k,v) <- msg1s) concat(pkArray, v) + for ((k,v) <- msg1s) { + pkArray = concat(pkArray, v) + for (byte <- v) print(byte.toChar) + println() + } // val msg2s = msg1s.map{case (eid, msg1) => (eid, pkArray)} @@ -60,12 +64,14 @@ object LA extends Logging { enclave.GetListEncrypted(eid, publicKeys) }.first() + println("Before encrypted results print") + for (byte <- encryptedResults) print(byte.toChar) + println("After encrypted results print") + // Send encrypted secret key to all enclaves val msg3s = msg1s.map{case (eid, _) => (eid, encryptedResults)} - msg1s.map{case (eid, _) => println("msg1s keys: " + eid)} - msg3s.map{case (eid, _) => println("msg3s keys: " + eid)} - -// val result: Nothing = encryptedResults +// msg1s.map{case (eid, _) => println("msg1s keys: " + eid)} +// msg3s.map{case (eid, _) => println("msg3s keys: " + eid)} val setSharedKeyResults = rdd.mapPartitionsWithIndex { (_, _) => val (enclave, eid) = Utils.initEnclave() From 48a0d9af11e971be7e20c6b833caed1cd965775c Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Thu, 25 Feb 2021 17:09:01 +0000 Subject: [PATCH 077/101] Shared key gen, public key verification in progress --- src/enclave/App/App.cpp | 6 +- src/enclave/Enclave/CMakeLists.txt | 16 ++++ src/enclave/Enclave/Crypto.cpp | 9 ++ src/enclave/Enclave/Enclave.cpp | 91 ++++++++++++++----- .../ServiceProvider/ServiceProvider.cpp | 11 +++ src/enclave/ServiceProvider/ServiceProvider.h | 7 ++ .../edu/berkeley/cs/rise/opaque/LA.scala | 22 ++--- .../edu/berkeley/cs/rise/opaque/RA.scala | 10 +- .../edu/berkeley/cs/rise/opaque/Utils.scala | 33 ++++++- 9 files changed, 163 insertions(+), 42 deletions(-) diff --git a/src/enclave/App/App.cpp b/src/enclave/App/App.cpp index 524a72571c..3bd04613cb 100644 --- a/src/enclave/App/App.cpp +++ b/src/enclave/App/App.cpp @@ -308,7 +308,7 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Fin (void)obj; // std::cout << "enter App.cpp" << std::endl; - std::cout << eid << std::endl; +// std::cout << eid << std::endl; jboolean if_copy = false; @@ -320,12 +320,12 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Fin uint32_t shared_key_msg_size = static_cast(env->GetArrayLength(shared_key_msg_input)); // std::cout << "App.cpp - after getArraySize" << std::endl; - std::cout << "App.cpp - before ecall" << std::endl; +// std::cout << "App.cpp - before ecall" << std::endl; oe_check_and_time("Finish attestation", ecall_finish_shared_key((oe_enclave_t*)eid, reinterpret_cast(shared_key_msg_bytes), shared_key_msg_size)); - std::cout << "App.cpp - after ecall" << std::endl; +// std::cout << "App.cpp - after ecall" << std::endl; env->ReleaseByteArrayElements(shared_key_msg_input, shared_key_msg_bytes, 0); diff --git a/src/enclave/Enclave/CMakeLists.txt b/src/enclave/Enclave/CMakeLists.txt index 6a72e76dfd..8741528311 100644 --- a/src/enclave/Enclave/CMakeLists.txt +++ b/src/enclave/Enclave/CMakeLists.txt @@ -34,6 +34,21 @@ set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} -nostdinc++") set(ENCLAVE_LINK_FLAGS "-Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined -Wl,-pie -Wl,--export-dynamic -Wl,--defsym,__ImageBase=0") add_library(enclave_trusted SHARED ${SOURCES}) + +# start new + +#link_directories("$ENV{OE_SDK_PATH}/lib/openenclave/enclave") +#include_directories("$ENV{OE_SDK_PATH}/include") +#include_directories("$ENV{OE_SDK_PATH}/include/openenclave/3rdparty") +# +#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wno-attributes") +#set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}") +# +#find_library(CRYPTO_LIB crypto) +#find_library(SSL_LIB ssl) + +# end new + set_property(TARGET enclave_trusted PROPERTY POSITION_INDEPENDENT_CODE OFF) set_target_properties(enclave_trusted PROPERTIES LINK_FLAGS ${ENCLAVE_LINK_FLAGS}) @@ -48,6 +63,7 @@ target_include_directories(enclave_trusted PRIVATE ${CMAKE_CURRENT_BINARY_DIR} $ link_directories(${OE_LIBDIR} ${OE_LIBDIR}/openenclave/enclave) target_link_libraries(enclave_trusted +# "${CRYPTO_LIB}" "${SSL_LIB}" mbedcrypto mbedtls openenclave::oehost openenclave::oehostverify openenclave::oeenclave openenclave::oecrypto${OE_CRYPTO_LIB} openenclave::oelibc diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index 83ff6bdfb9..54c760ebbc 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -119,6 +119,8 @@ void xor_shared_key(uint8_t *key_share_bytes, uint32_t key_share_size) { void encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphertext) { + std::cout << "Enter Crypto - encrypt" << std::endl; + if (!ks) { throw std::runtime_error( "Cannot encrypt without a shared key. Ensure all enclaves have completed attestation."); @@ -133,9 +135,14 @@ void encrypt(uint8_t *plaintext, uint32_t plaintext_length, AesGcm cipher(ks.get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); + + std::cout << "Exit Crypto - encrypt" << std::endl; } void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *plaintext) { + + std::cout << "Enter Crypto - decrypt" << std::endl; + if (!ks) { throw std::runtime_error( "Cannot encrypt without a shared key. Ensure all enclaves have completed attestation."); @@ -166,6 +173,8 @@ void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *pla throw std::runtime_error("Couldn't decrypt -- proper key unknown\n"); } } + + std::cout << "Exit Crypto - decrypt" << std::endl; } uint32_t enc_size(uint32_t plaintext_size) { diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 4c3c404269..1fddc5467e 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -15,6 +15,10 @@ #include "Sort.h" #include "util.h" +// Include ServiceProvider for public key verification and usage +//#include "../ServiceProvider/ServiceProvider.h" +//#include + #include "../Common/common.h" #include "../Common/mCrypto.h" #include @@ -45,6 +49,8 @@ void ecall_encrypt(uint8_t *plaintext, uint32_t plaintext_length, assert(oe_is_outside_enclave(ciphertext, cipher_length) == 1); __builtin_ia32_lfence(); + std::cout << "enter ecall_encrypt" << std::endl; + try { // IV (12 bytes) + ciphertext + mac (16 bytes) assert(cipher_length >= plaintext_length + SGX_AESGCM_IV_SIZE + SGX_AESGCM_MAC_SIZE); @@ -54,6 +60,8 @@ void ecall_encrypt(uint8_t *plaintext, uint32_t plaintext_length, } catch (const std::runtime_error &e) { ocall_throw(e.what()); } + + std::cout << "exit ecall_encrypt" << std::endl; } void ecall_project(uint8_t *condition, size_t condition_length, @@ -398,16 +406,55 @@ void ecall_get_public_key(uint8_t **report_msg_data, std::cout << "enter ecall_get_public_key" << std::endl; + // Testing generate report public key + uint8_t public_key[OE_PUBLIC_KEY_SIZE] = {}; - size_t public_key_size = sizeof(public_key); + size_t public_key_size = sizeof(public_key); - g_crypto.retrieve_public_key(public_key); + ecall_generate_report(report_msg_data, report_msg_data_size); - // Print out public key for debugging purposes - for (size_t i = 0; i < public_key_size; i++) { - std::cout << public_key[i]; + oe_report_msg_t *report_msg = (oe_report_msg_t *) report_msg_data; + memcpy_s(public_key, public_key_size, report_msg->public_key, OE_PUBLIC_KEY_SIZE); + + // Test encryption and decryption works with report key + unsigned char zeroes[SGX_AESGCM_KEY_SIZE] = {0}; + unsigned char plaintext[SGX_AESGCM_KEY_SIZE]; + size_t plaintext_size = sizeof(plaintext); + + std::cout << "Before print before encryption" << std::endl; + for (size_t i = 0; i < SGX_AESGCM_KEY_SIZE; i++) { + std::cout << zeroes[i]; } std::cout << std::endl; + std::cout << "After print before encryption" << std::endl; + + unsigned char encrypted_sharedkey[OE_SHARED_KEY_CIPHERTEXT_SIZE]; + size_t encrypted_sharedkey_size = sizeof(encrypted_sharedkey); + + g_crypto.encrypt(public_key, + zeroes, + SGX_AESGCM_KEY_SIZE, + encrypted_sharedkey, + &encrypted_sharedkey_size); + + try { + bool ret = g_crypto.decrypt(encrypted_sharedkey, encrypted_sharedkey_size, plaintext, &plaintext_size); + if (ret) { + std::cout << "Decryption test with report key encryption worked successfully" << std::endl; + } else { + std::cout << "Decryption test with report key encryption failed" << std::endl; + } + } catch (const std::runtime_error &e) { + ocall_throw(e.what()); + } + + g_crypto.retrieve_public_key(public_key); + + // Print out public key for debugging purposes +// for (size_t i = 0; i < public_key_size; i++) { +// std::cout << public_key[i]; +// } +// std::cout << std::endl; *report_msg_data_size = public_key_size; *report_msg_data = (uint8_t*)oe_host_malloc(*report_msg_data_size); @@ -425,14 +472,16 @@ void ecall_get_list_encrypted(uint8_t * pk_list, // Guard against encrypting or overwriting enclave memory assert(oe_is_outside_enclave(pk_list, pk_list_size) == 1); - assert(oe_is_outside_enclave(sk_list, *sk_list_size) == 1); + assert(oe_is_outside_enclave(sk_list, sk_list_size) == 1); __builtin_ia32_lfence(); - // Size of shared key is 16 from ServiceProvider - LC_AESGCM_KEY_SIZE - // For now SGX_AESGCM_KEY_SIZE is also 16, so will just use that for now + (void) sk_list_size; try { // Generate a random value used for key + // Size of shared key is 16 from ServiceProvider - LC_AESGCM_KEY_SIZE + // For now SGX_AESGCM_KEY_SIZE is also 16, so will just use that for now + unsigned char secret_key[SGX_AESGCM_KEY_SIZE] = {0}; mbedtls_read_rand(secret_key, SGX_AESGCM_KEY_SIZE); @@ -448,10 +497,10 @@ void ecall_get_list_encrypted(uint8_t * pk_list, memcpy_s(public_key, OE_PUBLIC_KEY_SIZE, pk_pointer, OE_PUBLIC_KEY_SIZE); // Print out public key for debugging purposes - for (size_t i = 0; i < OE_PUBLIC_KEY_SIZE; i++) { - std::cout << public_key[i]; - } - std::cout << std::endl; +// for (size_t i = 0; i < OE_PUBLIC_KEY_SIZE; i++) { +// std::cout << public_key[i]; +// } +// std::cout << std::endl; g_crypto.encrypt(public_key, secret_key, @@ -461,10 +510,10 @@ void ecall_get_list_encrypted(uint8_t * pk_list, memcpy_s(sk_pointer, OE_SHARED_KEY_CIPHERTEXT_SIZE, encrypted_sharedkey, OE_SHARED_KEY_CIPHERTEXT_SIZE); // Print out cipher for debugging purposes - for (size_t i = 0; i < OE_SHARED_KEY_CIPHERTEXT_SIZE; i++) { - std::cout << (int) encrypted_sharedkey[i] + " "; - } - std::cout << std::endl; +// for (size_t i = 0; i < OE_SHARED_KEY_CIPHERTEXT_SIZE; i++) { +// std::cout << (int) encrypted_sharedkey[i] + " "; +// } +// std::cout << std::endl; pk_pointer += OE_PUBLIC_KEY_SIZE; sk_pointer += OE_SHARED_KEY_CIPHERTEXT_SIZE; @@ -474,11 +523,11 @@ void ecall_get_list_encrypted(uint8_t * pk_list, } // Print out sk_list for debugging purposes - for (size_t i = 0; i < sk_list_size; i++) { - std::cout << sk_list[i] + " "; - } - std::cout << std::endl; - +// for (size_t i = 0; i < sk_list_size; i++) { +// std::cout << sk_list[i] + " "; +// } +// std::cout << std::endl; +// std::cout << "exit ecall_get_list_encrypted" << std::endl; } diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index 2416c033d6..f239f816ee 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -385,3 +385,14 @@ std::unique_ptr ServiceProvider::process_enclave_report(oe_ return shared_key_msg; } + +// Enclave functions for shared key generation +EVP_PKEY* ServiceProvider::buffer_to_public_key_wrapper(char* public_key) { + + return buffer_to_public_key(public_key, -1); +} + +int ServiceProvider::public_encrypt_wrapper(EVP_PKEY* key, unsigned char * data, int data_len, unsigned char* encrypted, size_t* encrypted_len) { + + return public_encrypt(key, data, data_len, encrypted, encrypted_len); +} diff --git a/src/enclave/ServiceProvider/ServiceProvider.h b/src/enclave/ServiceProvider/ServiceProvider.h index 62e6a7369e..234baaa4d2 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.h +++ b/src/enclave/ServiceProvider/ServiceProvider.h @@ -41,6 +41,13 @@ class ServiceProvider { */ std::unique_ptr process_enclave_report(oe_report_msg_t *report_msg, uint32_t *shared_key_msg_size); + /** + * Functions to help enclaves generate shared key (public key verification specifically) + */ + EVP_PKEY* buffer_to_public_key_wrapper(char* public_key); + + int public_encrypt_wrapper(EVP_PKEY* key, unsigned char * data, int data_len, unsigned char* encrypted, size_t* encrypted_len); + private: void connect_to_ias_helper(const std::string &ias_report_signing_ca_file); diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala index c4bf405353..41f8a6996f 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala @@ -34,14 +34,14 @@ object LA extends Logging { val rdd = sc.makeRDD(Seq.fill(2) { () }) // Test print Utils. - println("LA: " + Utils) +// println("LA: " + Utils) // Obtain public keys val msg1s = rdd.mapPartitionsWithIndex { (i, _) => val (enclave, eid) = Utils.initEnclave() // Print utils and enclave address to ascertain different enclaves - println("LA: " + Utils) - println("LA: " + eid) +// println("LA: " + Utils) +// println("LA: " + eid) val msg1 = enclave.GetPublicKey(eid) Iterator((eid, msg1)) @@ -51,8 +51,8 @@ object LA extends Logging { var pkArray = Array[Byte]() for ((k,v) <- msg1s) { pkArray = concat(pkArray, v) - for (byte <- v) print(byte.toChar) - println() +// for (byte <- v) print(byte.toChar) +// println() } // val msg2s = msg1s.map{case (eid, msg1) => (eid, pkArray)} @@ -60,13 +60,13 @@ object LA extends Logging { // Send list of public keys to enclaves val encryptedResults = rdd.context.parallelize(Array(pkArray), 1).map { publicKeys => val (enclave, eid) = Utils.initEnclave() - println("LA: " + eid) +// println("LA: " + eid) enclave.GetListEncrypted(eid, publicKeys) }.first() - println("Before encrypted results print") - for (byte <- encryptedResults) print(byte.toChar) - println("After encrypted results print") +// println("Before encrypted results print") +// for (byte <- encryptedResults) print(byte.toChar) +// println("After encrypted results print") // Send encrypted secret key to all enclaves val msg3s = msg1s.map{case (eid, _) => (eid, encryptedResults)} @@ -75,9 +75,9 @@ object LA extends Logging { val setSharedKeyResults = rdd.mapPartitionsWithIndex { (_, _) => val (enclave, eid) = Utils.initEnclave() - println("LA - set shared key: " + eid) +// println("LA - set shared key: " + eid) enclave.FinishSharedKey(eid, msg3s(eid)) - println("LA - after set shared key: " + eid) +// println("LA - after set shared key: " + eid) Iterator((eid, true)) }.collect.toMap diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index fd30033378..2e14d7b70a 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -35,7 +35,7 @@ object RA extends Logging { if (!sc.isLocal) { // For now, I am hard-coding this value to 2, because it does not seem like Spark is picking the value up numExecutors = sc.getConf.getInt("spark.executor.instances", 2) - println("RA: " + numExecutors) +// println("RA: " + numExecutors) while (!sc.isLocal && sc.getExecutorMemoryStatus.size < numExecutors) {} } @@ -53,15 +53,15 @@ object RA extends Logging { sp.Init(Utils.clientKey, intelCert, userCert, testKey) - println("RA: " + Utils) +// println("RA: " + Utils) // Runs on executors val msg1s = rdd.mapPartitions { (_) => val (enclave, eid) = Utils.initEnclave() // Print utils and enclave address to ascertain different enclaves - println("RA: " + Utils) - println("RA: " + eid) +// println("RA: " + Utils) +// println("RA: " + eid) val msg1 = enclave.GenerateReport(eid) Iterator((eid, msg1)) @@ -69,7 +69,7 @@ object RA extends Logging { // Runs on driver val msg2s = msg1s.map{case (eid, msg1) => (eid, sp.ProcessEnclaveReport(msg1))} - msg1s.map{case (eid, msg1) => (eid, print(eid + "\n"))} +// msg1s.map{case (eid, msg1) => (eid, print(eid + "\n"))} // Runs on executors val attestationResults = rdd.mapPartitions { (_) => diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index 1a6f1db487..511c69ef30 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -268,6 +268,7 @@ object Utils extends Logging { } def encrypt(data: Array[Byte]): Array[Byte] = { + println("Enter Utils - encrypt") val random = SecureRandom.getInstance("SHA1PRNG") val cipherKey = new SecretKeySpec(clientKey, "AES") val iv = new Array[Byte](GCM_IV_LENGTH) @@ -275,17 +276,42 @@ object Utils extends Logging { val spec = new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv) val cipher = Cipher.getInstance("AES/GCM/NoPadding", "SunJCE") cipher.init(Cipher.ENCRYPT_MODE, cipherKey, spec) - val cipherText = cipher.doFinal(data) + val cipherText = cipher.doFinal(data) + + // Print data for debugging purposes + for (byte <- data) print(byte.toChar) + println() + + // Print cipher for debugging purposes + for (byte <- iv) print(byte.toChar) + println() + for (byte <- cipherText) print(byte.toChar) + println() + + println("Exit Utils - encrypt") iv ++ cipherText } def decrypt(data: Array[Byte]): Array[Byte] = { + println("Enter Utils - decrypt") + + // Print cipher for debugging purposes + for (byte <- data) print(byte.toChar) + println() + val cipherKey = new SecretKeySpec(clientKey, "AES") val iv = data.take(GCM_IV_LENGTH) val cipherText = data.drop(GCM_IV_LENGTH) val cipher = Cipher.getInstance("AES/GCM/NoPadding", "SunJCE") cipher.init(Cipher.DECRYPT_MODE, cipherKey, new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv)) - cipher.doFinal(cipherText) + val plaintext = cipher.doFinal(cipherText) + + // Print plaintext for debugging purposes + for (byte <- plaintext) print(byte.toChar) + println() + println("Exit Utils - decrypt") + + plaintext } var eid = 0L @@ -730,6 +756,9 @@ object Utils extends Logging { rows: Seq[InternalRow], types: Seq[DataType], useEnclave: Boolean): Block = { + + println("Utils.scala - encryptInternalRowsFlatbuffers - useEnclave: " + useEnclave) + // For the encrypted blocks val builder2 = new FlatBufferBuilder val encryptedBlockOffsets = ArrayBuilder.make[Int] From 55a0d306e70e2a8977a72a647c9cf571eb90ea0b Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Tue, 9 Mar 2021 23:42:43 +0000 Subject: [PATCH 078/101] oe evidence pk verify --- src/enclave/Enclave/Attestation.cpp | 342 ++++++++++++++++++ src/enclave/Enclave/Attestation.h | 42 +++ src/enclave/Enclave/CMakeLists.txt | 1 + src/enclave/Enclave/Enclave.cpp | 121 ++++--- .../ServiceProvider/ServiceProvider.cpp | 1 + .../edu/berkeley/cs/rise/opaque/LA.scala | 32 +- 6 files changed, 460 insertions(+), 79 deletions(-) create mode 100644 src/enclave/Enclave/Attestation.cpp create mode 100644 src/enclave/Enclave/Attestation.h diff --git a/src/enclave/Enclave/Attestation.cpp b/src/enclave/Enclave/Attestation.cpp new file mode 100644 index 0000000000..2ef2487947 --- /dev/null +++ b/src/enclave/Enclave/Attestation.cpp @@ -0,0 +1,342 @@ +// Copyright (c) Open Enclave SDK contributors. +// Licensed under the MIT License. + +#include +#include + +#include "Attestation.h" + +#include +#include +#include +#include + +Attestation::Attestation(Crypto* crypto) +{ + m_crypto = crypto; +} + +/** + * Get format settings for the given enclave. + */ +bool Attestation::get_format_settings( + const oe_uuid_t* format_id, + uint8_t** format_settings, + size_t* format_settings_size) +{ + bool ret = false; + + // Intialize verifier to get enclave's format settings. + if (oe_verifier_initialize() != OE_OK) + { + throw std::runtime_error("oe_verifier_initialize failed"); + goto exit; + } + + // Use the plugin. + if (oe_verifier_get_format_settings( + format_id, format_settings, format_settings_size) != OE_OK) + { + throw std::runtime_error("oe_verifier_get_format_settings failed"); + goto exit; + } + ret = true; + +exit: + return ret; +} + +/** + * Generate evidence for the given data. + */ +bool Attestation::generate_attestation_evidence( + const oe_uuid_t* format_id, + uint8_t* format_settings, + size_t format_settings_size, + const uint8_t* data, + const size_t data_size, + uint8_t** evidence, + size_t* evidence_size) +{ + bool ret = false; + uint8_t hash[32]; + oe_result_t result = OE_OK; + uint8_t* custom_claims_buffer = nullptr; + size_t custom_claims_buffer_size = 0; + char custom_claim1_name[] = "Event"; + char custom_claim1_value[] = "Attestation sample"; + char custom_claim2_name[] = "Public key hash"; + + // The custom_claims[1].value will be filled with hash of public key later + oe_claim_t custom_claims[2] = { + {.name = custom_claim1_name, + .value = (uint8_t*)custom_claim1_value, + .value_size = sizeof(custom_claim1_value)}, + {.name = custom_claim2_name, .value = nullptr, .value_size = 0}}; + + if (m_crypto->sha256(data, data_size, hash) != 0) + { + throw std::runtime_error("data hashing failed"); + goto exit; + } + + // Initialize attester and use the plugin. + result = oe_attester_initialize(); + if (result != OE_OK) + { + throw std::runtime_error("oe_attester_initialize failed."); + goto exit; + } + + // serialize the custom claims, store hash of data in custom_claims[1].value + custom_claims[1].value = hash; + custom_claims[1].value_size = sizeof(hash); + +// ocall_throw("oe_serialize_custom_claims"); + if (oe_serialize_custom_claims( + custom_claims, + 2, + &custom_claims_buffer, + &custom_claims_buffer_size) != OE_OK) + { + throw std::runtime_error("oe_serialize_custom_claims failed."); + goto exit; + } +// ocall_throw( +// "serialized custom claims buffer size: %lu", custom_claims_buffer_size); + + // Generate evidence based on the format selected by the attester. + result = oe_get_evidence( + format_id, + 0, + custom_claims_buffer, + custom_claims_buffer_size, + format_settings, + format_settings_size, + evidence, + evidence_size, + nullptr, + 0); + if (result != OE_OK) + { +// throw std::runtime_error("oe_get_evidence failed.(%s)", oe_result_str(result)); + goto exit; + } + + ret = true; +// ocall_throw("generate_attestation_evidence succeeded."); +exit: + return ret; +} + +/** + * Helper function used to make the claim-finding process more convenient. Given + * the claim name, claim list, and its size, returns the claim with that claim + * name in the list. + */ +static const oe_claim_t* _find_claim( + const oe_claim_t* claims, + size_t claims_size, + const char* name) +{ + for (size_t i = 0; i < claims_size; i++) + { + if (strcmp(claims[i].name, name) == 0) + return &(claims[i]); + } + return nullptr; +} + +/** + * Attest the given evidence and accompanying data. It consists of the + * following three steps: + * + * 1) The evidence is first attested using the oe_verify_evidence API. + * This ensures the authenticity of the enclave that generated the evidence. + * 2) Next, to establish trust in the enclave that generated the + * evidence, the signer_id, product_id, and security version values are + * checked to see if they are predefined trusted values. + * 3) Once the enclave's trust has been established, + * the validity of accompanying data is ensured by comparing its SHA256 digest + * against the OE_CLAIM_CUSTOM_CLAIMS_BUFFER claim. + */ +bool Attestation::attest_attestation_evidence( + const oe_uuid_t* format_id, + const uint8_t* evidence, + size_t evidence_size, + const uint8_t* data, + size_t data_size) +{ + bool ret = false; + uint8_t hash[32]; + oe_result_t result = OE_OK; + oe_claim_t* claims = nullptr; + size_t claims_length = 0; + const oe_claim_t* claim; + oe_claim_t* custom_claims = nullptr; + size_t custom_claims_length = 0; + + // While attesting, the evidence being attested must not be tampered + // with. Ensure that it has been copied over to the enclave. + if (!oe_is_within_enclave(evidence, evidence_size)) + { + throw std::runtime_error("Cannot attest evidence in host memory. Unsafe."); + goto exit; + } + + // 1) Validate the evidence's trustworthiness + // Verify the evidence to ensure its authenticity. + result = oe_verify_evidence( + format_id, + evidence, + evidence_size, + nullptr, + 0, + nullptr, + 0, + &claims, + &claims_length); + if (result != OE_OK) + { +// throw std::runtime_error( +// "oe_verify_evidence failed (%s).\n", oe_result_str(result)); + goto exit; + } + +// ocall_throw("oe_verify_evidence succeeded"); + + // 2) validate the enclave identity's signer_id is the hash of the public + // signing key that was used to sign an enclave. Check that the enclave was + // signed by an trusted entity. + +// // TODO: Read signer public key from file. Make sure that enclave can read file +// uint8_t* m_enclave_signer_id = nullptr; +// +// // Validate the signer id. +// if ((claim = _find_claim(claims, claims_length, OE_CLAIM_SIGNER_ID)) == +// nullptr) +// { +// ocall_throw("Could not find claim."); +// goto exit; +// }; +// +// if (claim->value_size != OE_SIGNER_ID_SIZE) +// { +// ocall_throw("signer_id size(%lu) checking failed", claim->value_size); +// goto exit; +// } +// +// if (memcmp(claim->value, m_enclave_signer_id, OE_SIGNER_ID_SIZE) != 0) +// { +// ocall_throw("signer_id checking failed"); +// +// for (int j = 0; j < OE_SIGNER_ID_SIZE; j++) +// { +// ocall_throw( +// "m_enclave_signer_id[%d]=0x%0x", +// j, +// (uint8_t)m_enclave_signer_id[j]); +// } +// +// ocall_throw("\n"); +// +// for (int j = 0; j < OE_SIGNER_ID_SIZE; j++) +// { +// ocall_throw("signer_id[%d]=0x%0x", j, (uint8_t)claim->value[j]); +// } +// goto exit; +// } + + // Check the enclave's product id. + if ((claim = _find_claim(claims, claims_length, OE_CLAIM_PRODUCT_ID)) == + nullptr) + { + throw std::runtime_error("could not find claim"); + goto exit; + }; + + if (claim->value_size != OE_PRODUCT_ID_SIZE) + { +// throw std::runtime_error( +// "product_id size(%lu) checking failed", claim->value_size); + goto exit; + } + + if (*(claim->value) != 1) + { +// throw std::runtime_error("product_id(%u) checking failed", *(claim->value)); + goto exit; + } + + // Check the enclave's security version. + if ((claim = _find_claim( + claims, claims_length, OE_CLAIM_SECURITY_VERSION)) == nullptr) + { + throw std::runtime_error("could not find claim"); + goto exit; + }; + + if (claim->value_size != sizeof(uint32_t)) + { +// throw std::runtime_error( +// "security_version size(%lu) checking failed", claim->value_size); + goto exit; + } + + if (*(claim->value) < 1) + { +// throw std::runtime_error("security_version(%u) checking failed", *(claim->value)); + goto exit; + } + + // 3) Validate the custom claims buffer + // Deserialize the custom claims buffer to custom claims list, then fetch + // the hash value of the data held in custom_claims[1]. + if ((claim = _find_claim( + claims, claims_length, OE_CLAIM_CUSTOM_CLAIMS_BUFFER)) == nullptr) + { + throw std::runtime_error("Could not find claim."); + goto exit; + } + + if (m_crypto->sha256(data, data_size, hash) != 0) + { + goto exit; + } + + // deserialize the custom claims buffer +// ocall_throw("oe_deserialize_custom_claims"); + if (oe_deserialize_custom_claims( + claim->value, + claim->value_size, + &custom_claims, + &custom_claims_length) != OE_OK) + { + throw std::runtime_error("oe_deserialize_custom_claims failed."); + goto exit; + } + +// ocall_throw( +// "custom claim 1(%s): %s", +// custom_claims[0].name, +// custom_claims[0].value); + +// ocall_throw("custom claim 2(%s) hash check:", custom_claims[1].name); + + if (custom_claims[1].value_size != sizeof(hash) || + memcmp(custom_claims[1].value, hash, sizeof(hash)) != 0) + { + throw std::runtime_error("hash mismatch"); + goto exit; + } +// ocall_throw("hash match"); + + ret = true; +// ocall_throw("attestation succeeded"); +exit: + // Shut down attester/verifier and free claims. + oe_attester_shutdown(); + oe_verifier_shutdown(); + oe_free_claims(claims, claims_length); + return ret; +} diff --git a/src/enclave/Enclave/Attestation.h b/src/enclave/Enclave/Attestation.h new file mode 100644 index 0000000000..b9fad2f309 --- /dev/null +++ b/src/enclave/Enclave/Attestation.h @@ -0,0 +1,42 @@ +#include +#include "../Common/mCrypto.h" + +class Attestation +{ + private: + Crypto* m_crypto; + + public: + Attestation(Crypto* crypto); + + // Get format settings. + bool get_format_settings( + const oe_uuid_t* format_id, + uint8_t** format_settings_buffer, + size_t* format_settings_buffer_size); + + // Generate evidence for the given data. + bool generate_attestation_evidence( + const oe_uuid_t* format_id, + uint8_t* format_settings, + size_t format_settings_size, + const uint8_t* data, + size_t data_size, + uint8_t** evidence, + size_t* evidence_size); + + /** + * Attest the given evidence and accompanying data. The evidence + * is first attested using the oe_verify_evidence API. This ensures the + * authenticity of the enclave that generated the evidence. Next the enclave + * signer_id and unique_id values are tested to establish trust of the + * enclave that generated the evidence. + */ + bool attest_attestation_evidence( + const oe_uuid_t* format_id, + const uint8_t* evidence, + size_t evidence_size, + const uint8_t* data, + size_t data_size); +}; + diff --git a/src/enclave/Enclave/CMakeLists.txt b/src/enclave/Enclave/CMakeLists.txt index 8741528311..76ed034a3f 100644 --- a/src/enclave/Enclave/CMakeLists.txt +++ b/src/enclave/Enclave/CMakeLists.txt @@ -4,6 +4,7 @@ project(OpaqueEnclaveTrusted) set(SOURCES Aggregate.cpp + Attestation.cpp Crypto.cpp Enclave.cpp Filter.cpp diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 1fddc5467e..b6c8248af8 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -7,6 +7,7 @@ #include "Random.h" #include "Aggregate.h" +#include "Attestation.h" #include "Crypto.h" #include "Filter.h" #include "Join.h" @@ -15,10 +16,6 @@ #include "Sort.h" #include "util.h" -// Include ServiceProvider for public key verification and usage -//#include "../ServiceProvider/ServiceProvider.h" -//#include - #include "../Common/common.h" #include "../Common/mCrypto.h" #include @@ -36,6 +33,7 @@ #include #include +#include // This file contains definitions of the ecalls declared in Enclave.edl. Errors originating within // these ecalls are signaled by throwing a std::runtime_error, which is caught at the top level of @@ -401,65 +399,51 @@ void ecall_generate_report(uint8_t **report_msg_data, //////////////////////////////////// Generate Shared Key Begin ////////////////////////////////////// +static Attestation attestation(&g_crypto); + void ecall_get_public_key(uint8_t **report_msg_data, size_t* report_msg_data_size) { std::cout << "enter ecall_get_public_key" << std::endl; - // Testing generate report public key - - uint8_t public_key[OE_PUBLIC_KEY_SIZE] = {}; - size_t public_key_size = sizeof(public_key); - - ecall_generate_report(report_msg_data, report_msg_data_size); + oe_uuid_t sgx_local_uuid = {OE_FORMAT_UUID_SGX_LOCAL_ATTESTATION}; + oe_uuid_t* format_id = &sgx_local_uuid; - oe_report_msg_t *report_msg = (oe_report_msg_t *) report_msg_data; - memcpy_s(public_key, public_key_size, report_msg->public_key, OE_PUBLIC_KEY_SIZE); + uint8_t* format_settings = NULL; + size_t format_settings_size = 0; - // Test encryption and decryption works with report key - unsigned char zeroes[SGX_AESGCM_KEY_SIZE] = {0}; - unsigned char plaintext[SGX_AESGCM_KEY_SIZE]; - size_t plaintext_size = sizeof(plaintext); - - std::cout << "Before print before encryption" << std::endl; - for (size_t i = 0; i < SGX_AESGCM_KEY_SIZE; i++) { - std::cout << zeroes[i]; + if (!attestation.get_format_settings( + format_id, + &format_settings, + &format_settings_size)) { + ocall_throw("Unable to get enclave format settings"); } - std::cout << std::endl; - std::cout << "After print before encryption" << std::endl; - unsigned char encrypted_sharedkey[OE_SHARED_KEY_CIPHERTEXT_SIZE]; - size_t encrypted_sharedkey_size = sizeof(encrypted_sharedkey); - - g_crypto.encrypt(public_key, - zeroes, - SGX_AESGCM_KEY_SIZE, - encrypted_sharedkey, - &encrypted_sharedkey_size); - - try { - bool ret = g_crypto.decrypt(encrypted_sharedkey, encrypted_sharedkey_size, plaintext, &plaintext_size); - if (ret) { - std::cout << "Decryption test with report key encryption worked successfully" << std::endl; - } else { - std::cout << "Decryption test with report key encryption failed" << std::endl; - } - } catch (const std::runtime_error &e) { - ocall_throw(e.what()); + uint8_t pem_public_key[512]; + size_t public_key_size = sizeof(pem_public_key); + uint8_t* evidence = nullptr; + size_t evidence_size = 0; + + g_crypto.retrieve_public_key(pem_public_key); + + if (attestation.generate_attestation_evidence( + format_id, + format_settings, + format_settings_size, + pem_public_key, + public_key_size, + &evidence, + &evidence_size) == false) { + ocall_throw("Unable to retrieve enclave evidence"); } - g_crypto.retrieve_public_key(public_key); - - // Print out public key for debugging purposes -// for (size_t i = 0; i < public_key_size; i++) { -// std::cout << public_key[i]; -// } -// std::cout << std::endl; - - *report_msg_data_size = public_key_size; + // The report msg includes the public key, the size of the evidence, and the evidence itself + *report_msg_data_size = public_key_size + sizeof(evidence_size) + evidence_size; *report_msg_data = (uint8_t*)oe_host_malloc(*report_msg_data_size); - memcpy_s(*report_msg_data, *report_msg_data_size, public_key, public_key_size); + memcpy_s(*report_msg_data, public_key_size, pem_public_key, public_key_size); + memcpy_s(*report_msg_data + public_key_size, sizeof(size_t), &evidence_size, sizeof(evidence_size)); + memcpy_s(*report_msg_data + public_key_size + sizeof(size_t), evidence_size, evidence, evidence_size); std::cout << "exit ecall_get_public_key" << std::endl; } @@ -488,19 +472,44 @@ void ecall_get_list_encrypted(uint8_t * pk_list, uint8_t public_key[OE_PUBLIC_KEY_SIZE] = {}; uint8_t *pk_pointer = pk_list; + size_t evidence_size[1] = {}; + unsigned char encrypted_sharedkey[OE_SHARED_KEY_CIPHERTEXT_SIZE]; size_t encrypted_sharedkey_size = sizeof(encrypted_sharedkey); uint8_t *sk_pointer = sk_list; + oe_uuid_t sgx_local_uuid = {OE_FORMAT_UUID_SGX_LOCAL_ATTESTATION}; + oe_uuid_t* format_id = &sgx_local_uuid; + + uint8_t* format_settings = NULL; + size_t format_settings_size = 0; + + if (!attestation.get_format_settings( + format_id, + &format_settings, + &format_settings_size)) { + ocall_throw("Unable to get enclave format settings"); + } + while (pk_pointer < pk_list + pk_list_size) { + + // Read public key, size of evidence, and evidence memcpy_s(public_key, OE_PUBLIC_KEY_SIZE, pk_pointer, OE_PUBLIC_KEY_SIZE); + memcpy_s(evidence_size, sizeof(evidence_size), pk_pointer + OE_PUBLIC_KEY_SIZE, sizeof(size_t)); + uint8_t evidence[evidence_size[0]] = {}; + memcpy_s(evidence, evidence_size[0], pk_pointer + OE_PUBLIC_KEY_SIZE + sizeof(size_t), evidence_size[0]); + + // Verify the provided public key is valid + if (!attestation.attest_attestation_evidence(format_id, evidence, evidence_size[0], public_key, sizeof(public_key))) { + ocall_throw("Unable to verify attestation evidence"); + } // Print out public key for debugging purposes -// for (size_t i = 0; i < OE_PUBLIC_KEY_SIZE; i++) { -// std::cout << public_key[i]; -// } -// std::cout << std::endl; + for (size_t i = 0; i < OE_PUBLIC_KEY_SIZE; i++) { + std::cout << public_key[i]; + } + std::cout << std::endl; g_crypto.encrypt(public_key, secret_key, @@ -515,7 +524,7 @@ void ecall_get_list_encrypted(uint8_t * pk_list, // } // std::cout << std::endl; - pk_pointer += OE_PUBLIC_KEY_SIZE; + pk_pointer += OE_PUBLIC_KEY_SIZE + sizeof(size_t) + evidence_size[0]; sk_pointer += OE_SHARED_KEY_CIPHERTEXT_SIZE; } } catch (const std::runtime_error &e) { @@ -568,3 +577,5 @@ void ecall_finish_shared_key(uint8_t *sk_list, std::cout << "exit ecall_finish_shared_key" << std::endl; } + +//////////////////////////////////// Generate Shared Key End ////////////////////////////////////// diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index f239f816ee..14464a1382 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -262,6 +262,7 @@ std::unique_ptr ServiceProvider::process_enclave_report(oe_ std::unique_ptr shared_key_msg(new oe_shared_key_msg_t); EVP_PKEY* pkey = buffer_to_public_key((char*)report_msg->public_key, -1); + if (pkey == nullptr) { throw std::runtime_error("buffer_to_public_key failed."); } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala index 41f8a6996f..eca4dd82c0 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala @@ -20,9 +20,6 @@ package edu.berkeley.cs.rise.opaque import org.apache.spark.SparkContext import org.apache.spark.internal.Logging -import edu.berkeley.cs.rise.opaque.execution.SP -import edu.berkeley.cs.rise.opaque.execution.SGXEnclave - import Array.concat // Helper to handle enclave "local attestation" and determine shared key @@ -30,19 +27,18 @@ import Array.concat object LA extends Logging { def initLA(sc: SparkContext): Unit = { - // Hard-coded to be 2 for now - val rdd = sc.makeRDD(Seq.fill(2) { () }) + var numExecutors = 1 + if (!sc.isLocal) { + // For now, I am hard-coding this value to 2, because it does not seem like Spark is picking the value up + numExecutors = sc.getConf.getInt("spark.executor.instances", 2) + while (!sc.isLocal && sc.getExecutorMemoryStatus.size < numExecutors) {} + } + + val rdd = sc.makeRDD(Seq.fill(numExecutors) { () }) - // Test print Utils. -// println("LA: " + Utils) // Obtain public keys val msg1s = rdd.mapPartitionsWithIndex { (i, _) => val (enclave, eid) = Utils.initEnclave() - - // Print utils and enclave address to ascertain different enclaves -// println("LA: " + Utils) -// println("LA: " + eid) - val msg1 = enclave.GetPublicKey(eid) Iterator((eid, msg1)) }.collect.toMap @@ -51,33 +47,21 @@ object LA extends Logging { var pkArray = Array[Byte]() for ((k,v) <- msg1s) { pkArray = concat(pkArray, v) -// for (byte <- v) print(byte.toChar) -// println() } - -// val msg2s = msg1s.map{case (eid, msg1) => (eid, pkArray)} // Send list of public keys to enclaves val encryptedResults = rdd.context.parallelize(Array(pkArray), 1).map { publicKeys => val (enclave, eid) = Utils.initEnclave() -// println("LA: " + eid) enclave.GetListEncrypted(eid, publicKeys) }.first() -// println("Before encrypted results print") -// for (byte <- encryptedResults) print(byte.toChar) -// println("After encrypted results print") // Send encrypted secret key to all enclaves val msg3s = msg1s.map{case (eid, _) => (eid, encryptedResults)} -// msg1s.map{case (eid, _) => println("msg1s keys: " + eid)} -// msg3s.map{case (eid, _) => println("msg3s keys: " + eid)} val setSharedKeyResults = rdd.mapPartitionsWithIndex { (_, _) => val (enclave, eid) = Utils.initEnclave() -// println("LA - set shared key: " + eid) enclave.FinishSharedKey(eid, msg3s(eid)) -// println("LA - after set shared key: " + eid) Iterator((eid, true)) }.collect.toMap From 020536154c120741888608d2a3678ac841b71ae1 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Wed, 10 Mar 2021 04:02:21 +0000 Subject: [PATCH 079/101] enclave verification --- src/enclave/Enclave/Enclave.cpp | 65 ++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 6 deletions(-) diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index b6c8248af8..57b51665af 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -437,14 +437,50 @@ void ecall_get_public_key(uint8_t **report_msg_data, ocall_throw("Unable to retrieve enclave evidence"); } + std::cout << "Before fresh attestation verification" << std::endl; + if (!attestation.attest_attestation_evidence(format_id, evidence, evidence_size, pem_public_key, public_key_size)) { + ocall_throw("Unable to verify FRESH attestation!"); + } + std::cout << "After fresh attestation verification" << std::endl; + // The report msg includes the public key, the size of the evidence, and the evidence itself *report_msg_data_size = public_key_size + sizeof(evidence_size) + evidence_size; *report_msg_data = (uint8_t*)oe_host_malloc(*report_msg_data_size); memcpy_s(*report_msg_data, public_key_size, pem_public_key, public_key_size); memcpy_s(*report_msg_data + public_key_size, sizeof(size_t), &evidence_size, sizeof(evidence_size)); + + std::cout << "Enclave - get_public_key - obtain test size before" << std::endl; + size_t test[1] = {}; + memcpy_s(test, sizeof(size_t), *report_msg_data + public_key_size, sizeof(evidence_size)); + std::cout << "Enclave - get_public_key - obtain test size after" << std::endl; + + std::cout << "Enclave - get_public_key - sizeof evidence_size " << evidence_size << std::endl; + std::cout << "Enclave - get_public_key - sizeof evidence_size from report_msg: " << test[0] << std::endl; + memcpy_s(*report_msg_data + public_key_size + sizeof(size_t), evidence_size, evidence, evidence_size); + // Print out evidence for debugging purposes + std::cout << "Enclave - get_public_key - evidence" << std::endl; + for (size_t i = 0; i < evidence_size; i++) { + std::cout << evidence[i]; + } + std::cout << std::endl; + + // Print out public key for debugging purposes + for (size_t i = 0; i < public_key_size; i++) { + std::cout << pem_public_key[i]; + } + std::cout << std::endl; + + std::cout << "Enclave - get_public_key - evidence from report_msg" << std::endl; + uint8_t evidence_test[evidence_size] = {}; + memcpy_s(evidence_test, evidence_size, *report_msg_data + public_key_size + sizeof(size_t), evidence_size); + for (size_t i = 0; i < evidence_size; i++) { + std::cout << evidence_test[i]; + } + std::cout << std::endl; + std::cout << "exit ecall_get_public_key" << std::endl; } @@ -485,23 +521,40 @@ void ecall_get_list_encrypted(uint8_t * pk_list, uint8_t* format_settings = NULL; size_t format_settings_size = 0; - if (!attestation.get_format_settings( - format_id, - &format_settings, - &format_settings_size)) { - ocall_throw("Unable to get enclave format settings"); - } +// if (!attestation.get_format_settings( +// format_id, +// &format_settings, +// &format_settings_size)) { +// ocall_throw("Unable to get enclave format settings"); +// } while (pk_pointer < pk_list + pk_list_size) { + if (!attestation.get_format_settings( + format_id, + &format_settings, + &format_settings_size)) { + ocall_throw("Unable to get enclave format settings"); + } + // Read public key, size of evidence, and evidence memcpy_s(public_key, OE_PUBLIC_KEY_SIZE, pk_pointer, OE_PUBLIC_KEY_SIZE); memcpy_s(evidence_size, sizeof(evidence_size), pk_pointer + OE_PUBLIC_KEY_SIZE, sizeof(size_t)); uint8_t evidence[evidence_size[0]] = {}; memcpy_s(evidence, evidence_size[0], pk_pointer + OE_PUBLIC_KEY_SIZE + sizeof(size_t), evidence_size[0]); + std::cout << "Enclave - get_list_encrypted - evidence_size test " << evidence_size[0] << std::endl; + + // Print out evidence for debugging purposes + for (size_t i = 0; i < evidence_size[0]; i++) { + std::cout << evidence[i]; + } + std::cout << std::endl; + + // Verify the provided public key is valid if (!attestation.attest_attestation_evidence(format_id, evidence, evidence_size[0], public_key, sizeof(public_key))) { + std::cout << "get_list_encrypted - unable to verify attestation evidence" << std::endl; ocall_throw("Unable to verify attestation evidence"); } From 87f665ac494b604629cde430e3b00ae0daf27938 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Fri, 12 Mar 2021 21:50:43 +0000 Subject: [PATCH 080/101] Trying to inject public key through cmake --- src/enclave/Enclave/Attestation.cpp | 108 +++++++++++++++------------- src/enclave/Enclave/CMakeLists.txt | 31 ++++---- 2 files changed, 73 insertions(+), 66 deletions(-) diff --git a/src/enclave/Enclave/Attestation.cpp b/src/enclave/Enclave/Attestation.cpp index 2ef2487947..7fd55fbab5 100644 --- a/src/enclave/Enclave/Attestation.cpp +++ b/src/enclave/Enclave/Attestation.cpp @@ -3,13 +3,16 @@ #include #include +#include +#include #include "Attestation.h" +//#include #include #include #include -#include +#include Attestation::Attestation(Crypto* crypto) { @@ -92,7 +95,6 @@ bool Attestation::generate_attestation_evidence( custom_claims[1].value = hash; custom_claims[1].value_size = sizeof(hash); -// ocall_throw("oe_serialize_custom_claims"); if (oe_serialize_custom_claims( custom_claims, 2, @@ -102,8 +104,6 @@ bool Attestation::generate_attestation_evidence( throw std::runtime_error("oe_serialize_custom_claims failed."); goto exit; } -// ocall_throw( -// "serialized custom claims buffer size: %lu", custom_claims_buffer_size); // Generate evidence based on the format selected by the attester. result = oe_get_evidence( @@ -119,12 +119,11 @@ bool Attestation::generate_attestation_evidence( 0); if (result != OE_OK) { -// throw std::runtime_error("oe_get_evidence failed.(%s)", oe_result_str(result)); + throw std::runtime_error("oe_get_evidence failed.(%s)"); goto exit; } ret = true; -// ocall_throw("generate_attestation_evidence succeeded."); exit: return ret; } @@ -176,6 +175,46 @@ bool Attestation::attest_attestation_evidence( oe_claim_t* custom_claims = nullptr; size_t custom_claims_length = 0; + // Read in the public key as a string + +// uint8_t m_enclave_signer_id[OE_SIGNER_ID_SIZE]; +// size_t signer_size = sizeof(m_enclave_signer_id); +// + + std::cout << "Attestation.cpp - before read environment variable" << std::endl; + std::string public_key_file = std::string(std::getenv("OPAQUE_HOME")); + public_key_file.append("/public_key.pub"); + std::cout << "Attestation.cpp - after read environment variable" << std::endl; + + std::cout << "Attestation.cpp - before create file stream" << std::endl; + std::ifstream t(public_key_file.c_str()); + std::string public_key; + std::cout << "Attestation.cpp - after create file stream" << std::endl; + + std::cout << "Attestation.cpp - before read from file" << std::endl; + t.seekg(0, std::ios::end); + size_t public_key_size = t.tellg(); + public_key.reserve(public_key_size + 1); + t.seekg(0, std::ios::beg); + std::cout << "Attestation.cpp - after read from file" << std::endl; + + std::cout << "Attestation.cpp - not sure what this is" << std::endl; + public_key.assign((std::istreambuf_iterator(t)), std::istreambuf_iterator()); + public_key.replace(public_key_size, 1, "\0"); + std::cout << "Attestation.cpp - not sure what this is" << std::endl; + + std::cout << "Attestation.cpp - public key: " + public_key << std::endl; + +// if (oe_sgx_get_signer_id_from_public_key( +// public_key.c_str(), +// public_key.size(), +// m_enclave_signer_id, +// &signer_size) != OE_OK) +// { +// throw std::runtime_error("oe_sgx_get_signer_id_from_public_key failed\n"); +// return false; +// } + // While attesting, the evidence being attested must not be tampered // with. Ensure that it has been copied over to the enclave. if (!oe_is_within_enclave(evidence, evidence_size)) @@ -198,56 +237,35 @@ bool Attestation::attest_attestation_evidence( &claims_length); if (result != OE_OK) { -// throw std::runtime_error( -// "oe_verify_evidence failed (%s).\n", oe_result_str(result)); + throw std::runtime_error("oe_verify_evidence failed (%s).\n"); goto exit; } -// ocall_throw("oe_verify_evidence succeeded"); - // 2) validate the enclave identity's signer_id is the hash of the public // signing key that was used to sign an enclave. Check that the enclave was // signed by an trusted entity. -// // TODO: Read signer public key from file. Make sure that enclave can read file -// uint8_t* m_enclave_signer_id = nullptr; -// -// // Validate the signer id. + // Validate the signer id. // if ((claim = _find_claim(claims, claims_length, OE_CLAIM_SIGNER_ID)) == // nullptr) // { -// ocall_throw("Could not find claim."); +// throw std::runtime_error("Could not find claim."); // goto exit; // }; // // if (claim->value_size != OE_SIGNER_ID_SIZE) // { -// ocall_throw("signer_id size(%lu) checking failed", claim->value_size); +// throw std::runtime_error("signer_id size checking failed"); // goto exit; // } // // if (memcmp(claim->value, m_enclave_signer_id, OE_SIGNER_ID_SIZE) != 0) // { -// ocall_throw("signer_id checking failed"); -// -// for (int j = 0; j < OE_SIGNER_ID_SIZE; j++) -// { -// ocall_throw( -// "m_enclave_signer_id[%d]=0x%0x", -// j, -// (uint8_t)m_enclave_signer_id[j]); -// } -// -// ocall_throw("\n"); -// -// for (int j = 0; j < OE_SIGNER_ID_SIZE; j++) -// { -// ocall_throw("signer_id[%d]=0x%0x", j, (uint8_t)claim->value[j]); -// } +// throw std::runtime_error("signer_id checking failed"); // goto exit; // } - - // Check the enclave's product id. +// +// // Check the enclave's product id. if ((claim = _find_claim(claims, claims_length, OE_CLAIM_PRODUCT_ID)) == nullptr) { @@ -257,14 +275,14 @@ bool Attestation::attest_attestation_evidence( if (claim->value_size != OE_PRODUCT_ID_SIZE) { -// throw std::runtime_error( -// "product_id size(%lu) checking failed", claim->value_size); + throw std::runtime_error( + "product_id size checking failed"); goto exit; } if (*(claim->value) != 1) { -// throw std::runtime_error("product_id(%u) checking failed", *(claim->value)); + throw std::runtime_error("product_id checking failed"); goto exit; } @@ -278,14 +296,14 @@ bool Attestation::attest_attestation_evidence( if (claim->value_size != sizeof(uint32_t)) { -// throw std::runtime_error( -// "security_version size(%lu) checking failed", claim->value_size); + throw std::runtime_error( + "security_version size checking failed"); goto exit; } if (*(claim->value) < 1) { -// throw std::runtime_error("security_version(%u) checking failed", *(claim->value)); + throw std::runtime_error("security_version checking failed"); goto exit; } @@ -305,7 +323,6 @@ bool Attestation::attest_attestation_evidence( } // deserialize the custom claims buffer -// ocall_throw("oe_deserialize_custom_claims"); if (oe_deserialize_custom_claims( claim->value, claim->value_size, @@ -316,23 +333,14 @@ bool Attestation::attest_attestation_evidence( goto exit; } -// ocall_throw( -// "custom claim 1(%s): %s", -// custom_claims[0].name, -// custom_claims[0].value); - -// ocall_throw("custom claim 2(%s) hash check:", custom_claims[1].name); - if (custom_claims[1].value_size != sizeof(hash) || memcmp(custom_claims[1].value, hash, sizeof(hash)) != 0) { throw std::runtime_error("hash mismatch"); goto exit; } -// ocall_throw("hash match"); ret = true; -// ocall_throw("attestation succeeded"); exit: // Shut down attester/verifier and free claims. oe_attester_shutdown(); diff --git a/src/enclave/Enclave/CMakeLists.txt b/src/enclave/Enclave/CMakeLists.txt index 76ed034a3f..87aa93e5a3 100644 --- a/src/enclave/Enclave/CMakeLists.txt +++ b/src/enclave/Enclave/CMakeLists.txt @@ -30,26 +30,26 @@ add_custom_command( DEPENDS ${CMAKE_SOURCE_DIR}/Enclave/Enclave.edl OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Enclave_t.h ${CMAKE_CURRENT_BINARY_DIR}/Enclave_t.c ${CMAKE_CURRENT_BINARY_DIR}/Enclave_args.h) +# new key-gen attestation begin + +# Generate header with signer public key +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/enclave_pubkey.h +# COMMAND ${CMAKE_SOURCE_DIR}/gen_pubkey_header.sh enclave_pubkey.h $ENV{PUBLIC_KEY_PATH} + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/gen_pubkey_header.sh enclave_pubkey.h $ENV{PUBLIC_KEY_PATH} +) + +# new key-gen attestation end + +add_executable(Enclave Attestation.cpp + ${CMAKE_CURRENT_BINARY_DIR}/enclave_pubkey.h) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -nostdinc -fvisibility=hidden -fpie -fstack-protector") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} -nostdinc++") set(ENCLAVE_LINK_FLAGS "-Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined -Wl,-pie -Wl,--export-dynamic -Wl,--defsym,__ImageBase=0") add_library(enclave_trusted SHARED ${SOURCES}) -# start new - -#link_directories("$ENV{OE_SDK_PATH}/lib/openenclave/enclave") -#include_directories("$ENV{OE_SDK_PATH}/include") -#include_directories("$ENV{OE_SDK_PATH}/include/openenclave/3rdparty") -# -#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wno-attributes") -#set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}") -# -#find_library(CRYPTO_LIB crypto) -#find_library(SSL_LIB ssl) - -# end new - set_property(TARGET enclave_trusted PROPERTY POSITION_INDEPENDENT_CODE OFF) set_target_properties(enclave_trusted PROPERTIES LINK_FLAGS ${ENCLAVE_LINK_FLAGS}) @@ -64,7 +64,6 @@ target_include_directories(enclave_trusted PRIVATE ${CMAKE_CURRENT_BINARY_DIR} $ link_directories(${OE_LIBDIR} ${OE_LIBDIR}/openenclave/enclave) target_link_libraries(enclave_trusted -# "${CRYPTO_LIB}" "${SSL_LIB}" mbedcrypto mbedtls openenclave::oehost openenclave::oehostverify openenclave::oeenclave openenclave::oecrypto${OE_CRYPTO_LIB} openenclave::oelibc @@ -72,7 +71,7 @@ target_link_libraries(enclave_trusted openenclave::oecore) add_custom_command( - COMMAND openenclave::oesign sign -e $ -c ${CMAKE_CURRENT_SOURCE_DIR}/Enclave.conf -k $ENV{PRIVATE_KEY_PATH} + COMMAND openenclave::oesign sign -e $ -c ${CMAKE_CURRENT_SOURCE_DIR}/Enclave.conf -k $ENV{PRIVATE_KEY_PATH} DEPENDS enclave_trusted ${CMAKE_CURRENT_SOURCE_DIR}/Enclave.conf OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/enclave_trusted.signed) From 7d1ddd730a706a55dcab755c4b3e8f1b78f32fd1 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Thu, 18 Mar 2021 01:46:47 +0000 Subject: [PATCH 081/101] Finish attestation with oe verification --- src/enclave/Enclave/Attestation.cpp | 71 ++++++++++++++--------------- src/enclave/Enclave/CMakeLists.txt | 12 ++--- 2 files changed, 41 insertions(+), 42 deletions(-) diff --git a/src/enclave/Enclave/Attestation.cpp b/src/enclave/Enclave/Attestation.cpp index 7fd55fbab5..b9028b9d66 100644 --- a/src/enclave/Enclave/Attestation.cpp +++ b/src/enclave/Enclave/Attestation.cpp @@ -7,7 +7,7 @@ #include #include "Attestation.h" -//#include +#include "enclave_pubkey.h" #include #include @@ -177,43 +177,42 @@ bool Attestation::attest_attestation_evidence( // Read in the public key as a string -// uint8_t m_enclave_signer_id[OE_SIGNER_ID_SIZE]; -// size_t signer_size = sizeof(m_enclave_signer_id); + uint8_t m_enclave_signer_id[OE_SIGNER_ID_SIZE]; + size_t signer_size = sizeof(m_enclave_signer_id); + +// std::cout << "Attestation.cpp - before read environment variable" << std::endl; +// std::string public_key_file = std::string(std::getenv("OPAQUE_HOME")); +// public_key_file.append("/public_key.pub"); +// std::cout << "Attestation.cpp - after read environment variable" << std::endl; +// +// std::cout << "Attestation.cpp - before create file stream" << std::endl; +// std::ifstream t(public_key_file.c_str()); +// std::string public_key; +// std::cout << "Attestation.cpp - after create file stream" << std::endl; +// +// std::cout << "Attestation.cpp - before read from file" << std::endl; +// t.seekg(0, std::ios::end); +// size_t public_key_size = t.tellg(); +// public_key.reserve(public_key_size + 1); +// t.seekg(0, std::ios::beg); +// std::cout << "Attestation.cpp - after read from file" << std::endl; +// +// std::cout << "Attestation.cpp - not sure what this is" << std::endl; +// public_key.assign((std::istreambuf_iterator(t)), std::istreambuf_iterator()); +// public_key.replace(public_key_size, 1, "\0"); +// std::cout << "Attestation.cpp - not sure what this is" << std::endl; // +// std::cout << "Attestation.cpp - public key: " + public_key << std::endl; - std::cout << "Attestation.cpp - before read environment variable" << std::endl; - std::string public_key_file = std::string(std::getenv("OPAQUE_HOME")); - public_key_file.append("/public_key.pub"); - std::cout << "Attestation.cpp - after read environment variable" << std::endl; - - std::cout << "Attestation.cpp - before create file stream" << std::endl; - std::ifstream t(public_key_file.c_str()); - std::string public_key; - std::cout << "Attestation.cpp - after create file stream" << std::endl; - - std::cout << "Attestation.cpp - before read from file" << std::endl; - t.seekg(0, std::ios::end); - size_t public_key_size = t.tellg(); - public_key.reserve(public_key_size + 1); - t.seekg(0, std::ios::beg); - std::cout << "Attestation.cpp - after read from file" << std::endl; - - std::cout << "Attestation.cpp - not sure what this is" << std::endl; - public_key.assign((std::istreambuf_iterator(t)), std::istreambuf_iterator()); - public_key.replace(public_key_size, 1, "\0"); - std::cout << "Attestation.cpp - not sure what this is" << std::endl; - - std::cout << "Attestation.cpp - public key: " + public_key << std::endl; - -// if (oe_sgx_get_signer_id_from_public_key( -// public_key.c_str(), -// public_key.size(), -// m_enclave_signer_id, -// &signer_size) != OE_OK) -// { -// throw std::runtime_error("oe_sgx_get_signer_id_from_public_key failed\n"); -// return false; -// } + if (oe_sgx_get_signer_id_from_public_key( + OTHER_ENCLAVE_PUBLIC_KEY, + sizeof(OTHER_ENCLAVE_PUBLIC_KEY), + m_enclave_signer_id, + &signer_size) != OE_OK) + { + throw std::runtime_error("oe_sgx_get_signer_id_from_public_key failed\n"); + return false; + } // While attesting, the evidence being attested must not be tampered // with. Ensure that it has been copied over to the enclave. diff --git a/src/enclave/Enclave/CMakeLists.txt b/src/enclave/Enclave/CMakeLists.txt index 87aa93e5a3..2e65211843 100644 --- a/src/enclave/Enclave/CMakeLists.txt +++ b/src/enclave/Enclave/CMakeLists.txt @@ -20,7 +20,8 @@ set(SOURCES Random.cpp util.cpp ../Common/mCrypto.cpp - ${CMAKE_CURRENT_BINARY_DIR}/Enclave_t.c) + ${CMAKE_CURRENT_BINARY_DIR}/Enclave_t.c + ${CMAKE_CURRENT_BINARY_DIR}/enclave_pubkey.h) add_custom_command( COMMAND oeedger8r --trusted ${CMAKE_SOURCE_DIR}/Enclave/Enclave.edl @@ -35,14 +36,13 @@ add_custom_command( # Generate header with signer public key add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/enclave_pubkey.h -# COMMAND ${CMAKE_SOURCE_DIR}/gen_pubkey_header.sh enclave_pubkey.h $ENV{PUBLIC_KEY_PATH} - COMMAND ${CMAKE_CURRENT_BINARY_DIR}/gen_pubkey_header.sh enclave_pubkey.h $ENV{PUBLIC_KEY_PATH} + COMMAND $ENV{OPAQUE_HOME}/gen_pubkey_header.sh enclave_pubkey.h $ENV{OPAQUE_HOME}/public_key.pub ) -# new key-gen attestation end +#add_executable(enclave_trusted Attestation.cpp +# ${CMAKE_CURRENT_BINARY_DIR}/enclave_pubkey.h) -add_executable(Enclave Attestation.cpp - ${CMAKE_CURRENT_BINARY_DIR}/enclave_pubkey.h) +# new key-gen attestation end set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -nostdinc -fvisibility=hidden -fpie -fstack-protector") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} -nostdinc++") From 013c1da7c86034cf1107a74f884a2e73a26efba7 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Tue, 23 Mar 2021 14:51:31 +0000 Subject: [PATCH 082/101] merge conflict attempt 2 --- src/enclave/Enclave/Enclave.cpp | 52 +------------------ .../ServiceProvider/ServiceProviderJNI.cpp | 8 --- .../edu/berkeley/cs/rise/opaque/RA.scala | 14 ++--- .../edu/berkeley/cs/rise/opaque/Utils.scala | 4 +- .../cs/rise/opaque/execution/SP.scala | 4 +- 5 files changed, 7 insertions(+), 75 deletions(-) diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 862a53e0e9..f09c6015e1 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -261,57 +261,7 @@ void ecall_finish_attestation(uint8_t *shared_key_msg_input, uint32_t shared_key ocall_throw("shared key decryption failed"); } - uint8_t key_share_plaintext[SGX_AESGCM_KEY_SIZE]; - size_t key_share_plaintext_size = sizeof(key_share_plaintext); - ret = g_crypto.decrypt(shared_key_msg->key_share_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, key_share_plaintext, &key_share_plaintext_size); - - if (!ret) { - ocall_throw("key share decryption failed"); - } - - // Add verifySignatureFromCertificate from XGBoost - // Get name from certificate - unsigned char nameptr[50]; - size_t name_len; - int res; - mbedtls_x509_crt user_cert; - mbedtls_x509_crt_init(&user_cert); - if ((res = mbedtls_x509_crt_parse(&user_cert, (const unsigned char*) shared_key_msg->user_cert, shared_key_msg->user_cert_len)) != 0) { - // char tmp[50]; - // mbedtls_strerror(res, tmp, 50); - // std::cout << tmp << std::endl; - ocall_throw("Verification failed - could not read user certificate\n. mbedtls_x509_crt_parse returned"); - } - - mbedtls_x509_name subject_name = user_cert.subject; - mbedtls_asn1_buf name = subject_name.val; - strcpy((char*) nameptr, (const char*) name.p); - name_len = name.len; - std::string user_nam(nameptr, nameptr + name_len); - - // TODO: Verify client's identity - // if (std::find(CLIENT_NAMES.begin(), CLIENT_NAMES.end(), user_nam) == CLIENT_NAMES.end()) { - // LOG(FATAL) << "No such authorized client"; - // } - // client_keys[user_nam] = user_symm_key; - - // TODO: Store the client's public key - // std::vector user_public_key(cert, cert + cert_len); - // client_public_keys.insert({user_nam, user_public_key}); - - // Set shared key for this client - add_client_key(shared_key_plaintext, shared_key_plaintext_size, (char*) user_nam.c_str()); - xor_shared_key(key_share_plaintext, key_share_plaintext_size); - - // This block for testing loading from files encrypted with different keys - // FIXME: remove this block - // uint8_t test_key_plaintext[SGX_AESGCM_KEY_SIZE]; - // size_t test_key_plaintext_size = sizeof(test_key_plaintext); - // ret = g_crypto.decrypt(msg2->test_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, test_key_plaintext, &test_key_plaintext_size); - // add_client_key(test_key_plaintext, test_key_plaintext_size, (char*) "user2"); - - // FIXME: we'll need to free nameptr eventually - // free(nameptr); + set_shared_key(shared_key_plaintext, shared_key_plaintext_size); } catch (const std::runtime_error &e) { ocall_throw(e.what()); } diff --git a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp index 67b2a81c2c..02e4edb792 100644 --- a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp +++ b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp @@ -26,9 +26,7 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init(JNIEnv jboolean if_copy = false; jbyte *shared_key_bytes = env->GetByteArrayElements(shared_key, &if_copy); - jbyte *key_share_bytes = env->GetByteArrayElements(key_share, &if_copy); const char *intel_cert_str = env->GetStringUTFChars(intel_cert, nullptr); - const char* user_cert_str = env->GetStringUTFChars(user_cert, nullptr); try { service_provider.set_shared_key(reinterpret_cast(shared_key_bytes)); @@ -37,18 +35,12 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init(JNIEnv // jbyte *test_key_bytes = env->GetByteArrayElements(test_key, &if_copy); // service_provider.set_test_key(reinterpret_cast(test_key_bytes)); - // set user certificate - service_provider.set_user_cert(user_cert_str); - - // set key share - service_provider.set_key_share(reinterpret_cast(key_share_bytes)); } catch (const std::runtime_error &e) { jni_throw(env, e.what()); } env->ReleaseByteArrayElements(shared_key, shared_key_bytes, 0); env->ReleaseStringUTFChars(intel_cert, intel_cert_str); - env->ReleaseStringUTFChars(user_cert, user_cert_str); } JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_ProcessEnclaveReport( diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index 6395d86e2b..0aa2ed7972 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -19,10 +19,8 @@ package edu.berkeley.cs.rise.opaque import org.apache.spark.{SparkContext, SparkEnv} import org.apache.spark.internal.Logging -import java.nio.file.{Files, Paths} import edu.berkeley.cs.rise.opaque.execution.SP -import edu.berkeley.cs.rise.opaque.execution.SGXEnclave // Performs remote attestation for all executors // that have not been attested yet @@ -40,18 +38,12 @@ object RA extends Logging { val rdd = sc.parallelize(Seq.fill(numExecutors) { () }, numExecutors) val intelCert = Utils.findResource("AttestationReportSigningCACert.pem") - - // FIXME: hardcoded path - val userCert = scala.io.Source.fromFile("/home/opaque/opaque/user1.crt").mkString - - val testKey: Array[Byte] = "Opaque deve key2".getBytes("UTF-8") - - Utils.addClientKey(testKey) +// val testKey = "Opaque devel key".getBytes("UTF-8") + val testKey = Array.fill[Byte](32)(0) val sp = new SP() - sp.Init(Utils.clientKey, intelCert, userCert, testKey) - + sp.Init(testKey, intelCert) val numAttested = Utils.numAttested // Runs on executors diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index 4c493c4049..4d1e470e9e 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -259,7 +259,7 @@ object Utils extends Logging { def encrypt(data: Array[Byte]): Array[Byte] = { println("Enter Utils - encrypt") val random = SecureRandom.getInstance("SHA1PRNG") - val cipherKey = new SecretKeySpec(clientKey, "AES") + val cipherKey = new SecretKeySpec(sharedKey, "AES") val iv = new Array[Byte](GCM_IV_LENGTH) random.nextBytes(iv) val spec = new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv) @@ -276,7 +276,7 @@ object Utils extends Logging { for (byte <- data) print(byte.toChar) println() - val cipherKey = new SecretKeySpec(clientKey, "AES") + val cipherKey = new SecretKeySpec(sharedKey, "AES") val iv = data.take(GCM_IV_LENGTH) val cipherText = data.drop(GCM_IV_LENGTH) val cipher = Cipher.getInstance("AES/GCM/NoPadding", "SunJCE") diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala index 376e949e91..b22fac2ecd 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala @@ -22,9 +22,7 @@ import ch.jodersky.jni.nativeLoader @nativeLoader("ra_jni") class SP extends java.io.Serializable { // Remote attestation, master side - // FIXME: remove last testKey argument in Init() - @native def Init(sharedKey: Array[Byte], intelCert: String, userCert: String, keyShare: Array[Byte]): Unit - // @native def Init(sharedKey: Array[Byte], intelCert: String, userCert: String, keyShare: Array[Byte], testKey: Array[Byte]): Unit + @native def Init(sharedKey: Array[Byte], intelCert: String): Unit @native def SPProcMsg0(msg0Input: Array[Byte]): Unit @native def ProcessEnclaveReport(msg1Input: Array[Byte]): Array[Byte] @native def SPProcMsg3(msg3Input: Array[Byte]): Array[Byte] From b38cbe74200e3f3edc119ee49ccaad09a2e2eec3 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Tue, 23 Mar 2021 15:25:23 +0000 Subject: [PATCH 083/101] Merge conflict 3 - compile and run pass --- gen_pubkey_header.sh | 27 +++++++++++++++++++ src/enclave/Enclave/CMakeLists.txt | 3 --- src/enclave/Enclave/Crypto.cpp | 7 ----- src/enclave/Enclave/Enclave.cpp | 7 ++--- .../edu/berkeley/cs/rise/opaque/Utils.scala | 13 --------- 5 files changed, 29 insertions(+), 28 deletions(-) create mode 100755 gen_pubkey_header.sh diff --git a/gen_pubkey_header.sh b/gen_pubkey_header.sh new file mode 100755 index 0000000000..d3d059ec3f --- /dev/null +++ b/gen_pubkey_header.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +# Copyright (c) Open Enclave SDK contributors. +# Licensed under the MIT License. + +destfile="$1" +pubkey_file="$2" + +cat > "$destfile" << EOF +// Copyright (c) Open Enclave SDK contributors. +// Licensed under the MIT License. + +EOF + +printf 'static const char OTHER_ENCLAVE_PUBLIC_KEY[] =' >> "$destfile" +while IFS="" read -r p || [ -n "$p" ] +do + # Sometimes openssl can insert carriage returns into the PEM files. Let's remove those! + CR=$(printf "\r") + p=$(echo "$p" | tr -d "$CR") + printf '\n \"%s\\n\"' "$p" >> "$destfile" +done < "$pubkey_file" +printf ';\n' >> "$destfile" + +cat >> "$destfile" << EOF + +EOF diff --git a/src/enclave/Enclave/CMakeLists.txt b/src/enclave/Enclave/CMakeLists.txt index 55a8a1a576..a06d9e4ca8 100644 --- a/src/enclave/Enclave/CMakeLists.txt +++ b/src/enclave/Enclave/CMakeLists.txt @@ -40,9 +40,6 @@ add_custom_command( COMMAND $ENV{OPAQUE_HOME}/gen_pubkey_header.sh enclave_pubkey.h $ENV{OPAQUE_HOME}/public_key.pub ) -#add_executable(enclave_trusted Attestation.cpp -# ${CMAKE_CURRENT_BINARY_DIR}/enclave_pubkey.h) - # new key-gen attestation end set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -nostdinc -fvisibility=hidden -fpie -fstack-protector") diff --git a/src/enclave/Enclave/Crypto.cpp b/src/enclave/Enclave/Crypto.cpp index b76cb5cf2b..ed2519e1ad 100644 --- a/src/enclave/Enclave/Crypto.cpp +++ b/src/enclave/Enclave/Crypto.cpp @@ -77,8 +77,6 @@ void set_shared_key(uint8_t *shared_key_bytes, uint32_t shared_key_size) { void encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphertext) { - std::cout << "Enter Crypto - encrypt" << std::endl; - if (!ks) { throw std::runtime_error("Cannot encrypt without a shared key. Ensure all " "enclaves have completed attestation."); @@ -94,13 +92,10 @@ void encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphertext) cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); - std::cout << "Exit Crypto - encrypt" << std::endl; } void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *plaintext) { - std::cout << "Enter Crypto - decrypt" << std::endl; - if (!ks) { throw std::runtime_error("Cannot encrypt without a shared key. Ensure all " "enclaves have completed attestation."); @@ -131,8 +126,6 @@ void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *pla throw std::runtime_error("Couldn't decrypt -- proper key unknown\n"); } } - - std::cout << "Exit Crypto - decrypt" << std::endl; } uint32_t enc_size(uint32_t plaintext_size) { diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index f09c6015e1..01c144fe3d 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -41,8 +41,6 @@ void ecall_encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphe assert(oe_is_outside_enclave(ciphertext, cipher_length) == 1); __builtin_ia32_lfence(); - std::cout << "enter ecall_encrypt" << std::endl; - try { // IV (12 bytes) + ciphertext + mac (16 bytes) assert(cipher_length >= plaintext_length + SGX_AESGCM_IV_SIZE + SGX_AESGCM_MAC_SIZE); @@ -52,8 +50,6 @@ void ecall_encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphe } catch (const std::runtime_error &e) { ocall_throw(e.what()); } - - std::cout << "exit ecall_encrypt" << std::endl; } void ecall_project(uint8_t *condition, size_t condition_length, uint8_t *input_rows, @@ -252,10 +248,11 @@ static Crypto g_crypto; void ecall_finish_attestation(uint8_t *shared_key_msg_input, uint32_t shared_key_msg_size) { try { + (void) shared_key_msg_size; oe_shared_key_msg_t *shared_key_msg = (oe_shared_key_msg_t *)shared_key_msg_input; uint8_t shared_key_plaintext[SGX_AESGCM_KEY_SIZE]; size_t shared_key_plaintext_size = sizeof(shared_key_plaintext); - bool ret = g_crypto.decrypt(shared_key_msg->shared_key_ciphertext, shared_key_msg_size, + bool ret = g_crypto.decrypt(shared_key_msg->shared_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, shared_key_plaintext, &shared_key_plaintext_size); if (!ret) { ocall_throw("shared key decryption failed"); diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index 4d1e470e9e..447938a3a0 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -257,7 +257,6 @@ object Utils extends Logging { assert(sharedKey.size == GCM_KEY_LENGTH) def encrypt(data: Array[Byte]): Array[Byte] = { - println("Enter Utils - encrypt") val random = SecureRandom.getInstance("SHA1PRNG") val cipherKey = new SecretKeySpec(sharedKey, "AES") val iv = new Array[Byte](GCM_IV_LENGTH) @@ -270,24 +269,12 @@ object Utils extends Logging { } def decrypt(data: Array[Byte]): Array[Byte] = { - println("Enter Utils - decrypt") - - // Print cipher for debugging purposes - for (byte <- data) print(byte.toChar) - println() - val cipherKey = new SecretKeySpec(sharedKey, "AES") val iv = data.take(GCM_IV_LENGTH) val cipherText = data.drop(GCM_IV_LENGTH) val cipher = Cipher.getInstance("AES/GCM/NoPadding", "SunJCE") cipher.init(Cipher.DECRYPT_MODE, cipherKey, new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv)) val plaintext = cipher.doFinal(cipherText) - - // Print plaintext for debugging purposes - for (byte <- plaintext) print(byte.toChar) - println() - println("Exit Utils - decrypt") - plaintext } From b39a7fb60f18e6b0bc0e1362ab2ea6d9743c5319 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Tue, 23 Mar 2021 18:20:26 +0000 Subject: [PATCH 084/101] Merge attempt 3 --- src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index 0aa2ed7972..f7575def9e 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -38,8 +38,7 @@ object RA extends Logging { val rdd = sc.parallelize(Seq.fill(numExecutors) { () }, numExecutors) val intelCert = Utils.findResource("AttestationReportSigningCACert.pem") -// val testKey = "Opaque devel key".getBytes("UTF-8") - val testKey = Array.fill[Byte](32)(0) + val testKey = Array.fill[Byte](32)(1) val sp = new SP() From 96de8ce6fb1a70b1f08040cbfffaaee4e261514b Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Tue, 23 Mar 2021 21:47:40 +0000 Subject: [PATCH 085/101] merge 5 --- src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala | 1 - src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala | 2 +- src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala | 3 ++- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala index eca4dd82c0..e8c5704c9b 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala @@ -55,7 +55,6 @@ object LA extends Logging { enclave.GetListEncrypted(eid, publicKeys) }.first() - // Send encrypted secret key to all enclaves val msg3s = msg1s.map{case (eid, _) => (eid, encryptedResults)} diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index f7575def9e..b08791d0bf 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -38,7 +38,7 @@ object RA extends Logging { val rdd = sc.parallelize(Seq.fill(numExecutors) { () }, numExecutors) val intelCert = Utils.findResource("AttestationReportSigningCACert.pem") - val testKey = Array.fill[Byte](32)(1) + val testKey = Array.fill[Byte](32)(0) val sp = new SP() diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index 447938a3a0..06498959d6 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -306,7 +306,8 @@ object Utils extends Logging { RA.attestEnclaves(sc) RA.startThread(sc) - // TODO: Determine location for LA call + // Perform Local-Attestation so that enclaves determine shared key + LA.initLA(sc) } def initEnclave(): (SGXEnclave, Long) = { From 77601b8376a7c88b0607bb2867ed1ce03b7e3dfd Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Tue, 23 Mar 2021 23:27:50 +0000 Subject: [PATCH 086/101] need to change branches --- src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala | 3 +++ .../edu/berkeley/cs/rise/opaque/execution/operators.scala | 1 + 2 files changed, 4 insertions(+) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index 06498959d6..0a09e54465 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -266,6 +266,9 @@ object Utils extends Logging { cipher.init(Cipher.ENCRYPT_MODE, cipherKey, spec) val cipherText = cipher.doFinal(data) iv ++ cipherText + + + } def decrypt(data: Array[Byte]): Array[Byte] = { diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala index 7d5b7315f2..0e9d7e4d23 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/operators.scala @@ -186,6 +186,7 @@ trait OpaqueOperatorExec extends SparkPlan { collectEncrypted().flatMap { block => Utils.decryptBlockFlatbuffers(block) } +// collectEncrypted() } override def executeTake(n: Int): Array[InternalRow] = { From 62177c3ee5d845d9921707baccad6b1a1ab446f8 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Wed, 24 Mar 2021 14:23:59 +0000 Subject: [PATCH 087/101] remove driver and sp keys --- src/enclave/App/App.cpp | 33 ++++++ src/enclave/Enclave/Enclave.cpp | 106 +++++++++++------- src/enclave/Enclave/Enclave.edl | 4 + src/enclave/ServiceProvider/SP.h | 2 +- .../ServiceProvider/ServiceProviderJNI.cpp | 16 --- .../edu/berkeley/cs/rise/opaque/RA.scala | 3 +- .../edu/berkeley/cs/rise/opaque/Utils.scala | 30 +---- .../cs/rise/opaque/execution/SP.scala | 2 +- 8 files changed, 108 insertions(+), 88 deletions(-) diff --git a/src/enclave/App/App.cpp b/src/enclave/App/App.cpp index aee22c1377..d0cdbd6868 100644 --- a/src/enclave/App/App.cpp +++ b/src/enclave/App/App.cpp @@ -433,6 +433,39 @@ JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEncla return ciphertext; } +// Added Decryption function +JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Decrypt( + JNIEnv *env, jobject obj, jlong eid, jbyteArray ciphertext) { + (void)obj; + + uint32_t clength = (uint32_t)env->GetArrayLength(ciphertext); + jboolean if_copy = false; + uint8_t *ciphertext_ptr = (uint8_t *)env->GetByteArrayElements(ciphertext, &if_copy); + + uint8_t *plaintext_copy = nullptr; + jsize plength = 0; + + if (ciphertext_ptr == nullptr) { + ocall_throw("Encrypt: JNI failed to get input byte array."); + } else { + plength = clength - SGX_AESGCM_IV_SIZE - SGX_AESGCM_MAC_SIZE; + plaintext_copy = new uint8_t[clength]; + + oe_check("Decrypt", ecall_decrypt((oe_enclave_t *)eid, ciphertext_ptr, clength, + plaintext_copy, (uint32_t)plength)); + } + + jbyteArray plaintext = env->NewByteArray(plength); + env->SetByteArrayRegion(plaintext, 0, plength, (jbyte *)plaintext_copy); + + env->ReleaseByteArrayElements(ciphertext, (jbyte *)ciphertext_ptr, 0); + + delete[] plaintext_copy; + + return plaintext; +} + + JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Sample( JNIEnv *env, jobject obj, jlong eid, jbyteArray input_rows) { (void)obj; diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index 01c144fe3d..e671c033ee 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -52,6 +52,26 @@ void ecall_encrypt(uint8_t *plaintext, uint32_t plaintext_length, uint8_t *ciphe } } +void ecall_decrypt(uint8_t *ciphertext, uint32_t cipher_length, uint8_t *plaintext, + uint32_t plaintext_length) { + + // Guard against decrypting or overwriting enclave memory + assert(oe_is_outside_enclave(plaintext, plaintext_length) == 1); + assert(oe_is_outside_enclave(ciphertext, cipher_length) == 1); + __builtin_ia32_lfence(); + + try { + // IV (12 bytes) + ciphertext + mac (16 bytes) + assert(cipher_length >= plaintext_length + SGX_AESGCM_IV_SIZE + SGX_AESGCM_MAC_SIZE); + (void)cipher_length; + (void)plaintext_length; + decrypt(ciphertext, cipher_length, plaintext); + } catch (const std::runtime_error &e) { + ocall_throw(e.what()); + } + +} + void ecall_project(uint8_t *condition, size_t condition_length, uint8_t *input_rows, size_t input_rows_length, uint8_t **output_rows, size_t *output_rows_length) { // Guard against operating on arbitrary enclave memory @@ -331,7 +351,7 @@ static Attestation attestation(&g_crypto); void ecall_get_public_key(uint8_t **report_msg_data, size_t* report_msg_data_size) { - std::cout << "enter ecall_get_public_key" << std::endl; +// std::cout << "enter ecall_get_public_key" << std::endl; oe_uuid_t sgx_local_uuid = {OE_FORMAT_UUID_SGX_LOCAL_ATTESTATION}; oe_uuid_t* format_id = &sgx_local_uuid; @@ -364,11 +384,11 @@ void ecall_get_public_key(uint8_t **report_msg_data, ocall_throw("Unable to retrieve enclave evidence"); } - std::cout << "Before fresh attestation verification" << std::endl; +// std::cout << "Before fresh attestation verification" << std::endl; if (!attestation.attest_attestation_evidence(format_id, evidence, evidence_size, pem_public_key, public_key_size)) { ocall_throw("Unable to verify FRESH attestation!"); } - std::cout << "After fresh attestation verification" << std::endl; +// std::cout << "After fresh attestation verification" << std::endl; // The report msg includes the public key, the size of the evidence, and the evidence itself *report_msg_data_size = public_key_size + sizeof(evidence_size) + evidence_size; @@ -377,45 +397,45 @@ void ecall_get_public_key(uint8_t **report_msg_data, memcpy_s(*report_msg_data, public_key_size, pem_public_key, public_key_size); memcpy_s(*report_msg_data + public_key_size, sizeof(size_t), &evidence_size, sizeof(evidence_size)); - std::cout << "Enclave - get_public_key - obtain test size before" << std::endl; - size_t test[1] = {}; - memcpy_s(test, sizeof(size_t), *report_msg_data + public_key_size, sizeof(evidence_size)); - std::cout << "Enclave - get_public_key - obtain test size after" << std::endl; +// std::cout << "Enclave - get_public_key - obtain test size before" << std::endl; +// size_t test[1] = {}; +// memcpy_s(test, sizeof(size_t), *report_msg_data + public_key_size, sizeof(evidence_size)); +// std::cout << "Enclave - get_public_key - obtain test size after" << std::endl; - std::cout << "Enclave - get_public_key - sizeof evidence_size " << evidence_size << std::endl; - std::cout << "Enclave - get_public_key - sizeof evidence_size from report_msg: " << test[0] << std::endl; +// std::cout << "Enclave - get_public_key - sizeof evidence_size " << evidence_size << std::endl; +// std::cout << "Enclave - get_public_key - sizeof evidence_size from report_msg: " << test[0] << std::endl; memcpy_s(*report_msg_data + public_key_size + sizeof(size_t), evidence_size, evidence, evidence_size); // Print out evidence for debugging purposes - std::cout << "Enclave - get_public_key - evidence" << std::endl; - for (size_t i = 0; i < evidence_size; i++) { - std::cout << evidence[i]; - } - std::cout << std::endl; +// std::cout << "Enclave - get_public_key - evidence" << std::endl; +// for (size_t i = 0; i < evidence_size; i++) { +// std::cout << evidence[i]; +// } +// std::cout << std::endl; // Print out public key for debugging purposes - for (size_t i = 0; i < public_key_size; i++) { - std::cout << pem_public_key[i]; - } - std::cout << std::endl; +// for (size_t i = 0; i < public_key_size; i++) { +// std::cout << pem_public_key[i]; +// } +// std::cout << std::endl; - std::cout << "Enclave - get_public_key - evidence from report_msg" << std::endl; - uint8_t evidence_test[evidence_size] = {}; - memcpy_s(evidence_test, evidence_size, *report_msg_data + public_key_size + sizeof(size_t), evidence_size); - for (size_t i = 0; i < evidence_size; i++) { - std::cout << evidence_test[i]; - } - std::cout << std::endl; +// std::cout << "Enclave - get_public_key - evidence from report_msg" << std::endl; +// uint8_t evidence_test[evidence_size] = {}; +// memcpy_s(evidence_test, evidence_size, *report_msg_data + public_key_size + sizeof(size_t), evidence_size); +// for (size_t i = 0; i < evidence_size; i++) { +// std::cout << evidence_test[i]; +// } +// std::cout << std::endl; - std::cout << "exit ecall_get_public_key" << std::endl; +// std::cout << "exit ecall_get_public_key" << std::endl; } void ecall_get_list_encrypted(uint8_t * pk_list, uint32_t pk_list_size, uint8_t * sk_list, uint32_t sk_list_size) { - std::cout << "enter ecall_get_list_encrypted" << std::endl; +// std::cout << "enter ecall_get_list_encrypted" << std::endl; // Guard against encrypting or overwriting enclave memory assert(oe_is_outside_enclave(pk_list, pk_list_size) == 1); @@ -470,13 +490,13 @@ void ecall_get_list_encrypted(uint8_t * pk_list, uint8_t evidence[evidence_size[0]] = {}; memcpy_s(evidence, evidence_size[0], pk_pointer + OE_PUBLIC_KEY_SIZE + sizeof(size_t), evidence_size[0]); - std::cout << "Enclave - get_list_encrypted - evidence_size test " << evidence_size[0] << std::endl; +// std::cout << "Enclave - get_list_encrypted - evidence_size test " << evidence_size[0] << std::endl; // Print out evidence for debugging purposes - for (size_t i = 0; i < evidence_size[0]; i++) { - std::cout << evidence[i]; - } - std::cout << std::endl; +// for (size_t i = 0; i < evidence_size[0]; i++) { +// std::cout << evidence[i]; +// } +// std::cout << std::endl; // Verify the provided public key is valid @@ -486,10 +506,10 @@ void ecall_get_list_encrypted(uint8_t * pk_list, } // Print out public key for debugging purposes - for (size_t i = 0; i < OE_PUBLIC_KEY_SIZE; i++) { - std::cout << public_key[i]; - } - std::cout << std::endl; +// for (size_t i = 0; i < OE_PUBLIC_KEY_SIZE; i++) { +// std::cout << public_key[i]; +// } +// std::cout << std::endl; g_crypto.encrypt(public_key, secret_key, @@ -517,13 +537,13 @@ void ecall_get_list_encrypted(uint8_t * pk_list, // } // std::cout << std::endl; // - std::cout << "exit ecall_get_list_encrypted" << std::endl; +// std::cout << "exit ecall_get_list_encrypted" << std::endl; } void ecall_finish_shared_key(uint8_t *sk_list, uint32_t sk_list_size) { - std::cout << "enter ecall_finish_shared_key" << std::endl; +// std::cout << "enter ecall_finish_shared_key" << std::endl; uint8_t *sk_pointer = sk_list; @@ -549,13 +569,13 @@ void ecall_finish_shared_key(uint8_t *sk_list, set_shared_key(secret_key, sk_size); // Print out shared_key - for (int i = 0; i < SGX_AESGCM_KEY_SIZE; i++) { - std::cout << secret_key[i]; - } +// for (int i = 0; i < SGX_AESGCM_KEY_SIZE; i++) { +// std::cout << secret_key[i]; +// } - std::cout << std::endl; +// std::cout << std::endl; - std::cout << "exit ecall_finish_shared_key" << std::endl; +// std::cout << "exit ecall_finish_shared_key" << std::endl; } //////////////////////////////////// Generate Shared Key End ////////////////////////////////////// diff --git a/src/enclave/Enclave/Enclave.edl b/src/enclave/Enclave/Enclave.edl index aabdbc6a42..14ea2245a0 100644 --- a/src/enclave/Enclave/Enclave.edl +++ b/src/enclave/Enclave/Enclave.edl @@ -23,6 +23,10 @@ enclave { [user_check] uint8_t *plaintext, uint32_t length, [user_check] uint8_t *ciphertext, uint32_t cipher_length); + public void ecall_decrypt( + [user_check] uint8_t *ciphertext, uint32_t cipher_length, + [user_check] uint8_t *plaintext, uint32_t plaintext_length); + public void ecall_sample( [user_check] uint8_t *input_rows, size_t input_rows_length, [out] uint8_t **output_rows, [out] size_t *output_rows_length); diff --git a/src/enclave/ServiceProvider/SP.h b/src/enclave/ServiceProvider/SP.h index 0c5623e408..f7b7c0522c 100644 --- a/src/enclave/ServiceProvider/SP.h +++ b/src/enclave/ServiceProvider/SP.h @@ -6,7 +6,7 @@ extern "C" { #endif JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init(JNIEnv *, jobject, - jbyteArray, jstring); + jstring); JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_SPProcMsg0(JNIEnv *, jobject, jbyteArray); diff --git a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp index 02e4edb792..393050d425 100644 --- a/src/enclave/ServiceProvider/ServiceProviderJNI.cpp +++ b/src/enclave/ServiceProvider/ServiceProviderJNI.cpp @@ -18,28 +18,12 @@ void jni_throw(JNIEnv *env, const char *message) { JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SP_Init(JNIEnv *env, jobject obj, - jbyteArray shared_key, jstring intel_cert) { (void)env; (void)obj; - jboolean if_copy = false; - - jbyte *shared_key_bytes = env->GetByteArrayElements(shared_key, &if_copy); const char *intel_cert_str = env->GetStringUTFChars(intel_cert, nullptr); - try { - service_provider.set_shared_key(reinterpret_cast(shared_key_bytes)); - - // // THIS BLOCK FOR TESTING PURPOSES - // jbyte *test_key_bytes = env->GetByteArrayElements(test_key, &if_copy); - // service_provider.set_test_key(reinterpret_cast(test_key_bytes)); - - } catch (const std::runtime_error &e) { - jni_throw(env, e.what()); - } - - env->ReleaseByteArrayElements(shared_key, shared_key_bytes, 0); env->ReleaseStringUTFChars(intel_cert, intel_cert_str); } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index b08791d0bf..e7ec0ecf28 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -38,11 +38,10 @@ object RA extends Logging { val rdd = sc.parallelize(Seq.fill(numExecutors) { () }, numExecutors) val intelCert = Utils.findResource("AttestationReportSigningCACert.pem") - val testKey = Array.fill[Byte](32)(0) val sp = new SP() - sp.Init(testKey, intelCert) + sp.Init(intelCert) val numAttested = Utils.numAttested // Runs on executors diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index 0a09e54465..a90d6f0091 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -249,36 +249,16 @@ object Utils extends Logging { final val GCM_KEY_LENGTH = 32 final val GCM_TAG_LENGTH = 16 - /** - * Symmetric key used to encrypt row data. This key is securely sent to the enclaves if - * attestation succeeds. For development, we use a hardcoded key. You should change it. - */ - val sharedKey: Array[Byte] = Array.fill[Byte](GCM_KEY_LENGTH)(0) - assert(sharedKey.size == GCM_KEY_LENGTH) + // We do not trust the driver. Encryption and decryption done in enclave only def encrypt(data: Array[Byte]): Array[Byte] = { - val random = SecureRandom.getInstance("SHA1PRNG") - val cipherKey = new SecretKeySpec(sharedKey, "AES") - val iv = new Array[Byte](GCM_IV_LENGTH) - random.nextBytes(iv) - val spec = new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv) - val cipher = Cipher.getInstance("AES/GCM/NoPadding", "SunJCE") - cipher.init(Cipher.ENCRYPT_MODE, cipherKey, spec) - val cipherText = cipher.doFinal(data) - iv ++ cipherText - - - + val (enclave, eid) = initEnclave() + enclave.Encrypt(eid, data) } def decrypt(data: Array[Byte]): Array[Byte] = { - val cipherKey = new SecretKeySpec(sharedKey, "AES") - val iv = data.take(GCM_IV_LENGTH) - val cipherText = data.drop(GCM_IV_LENGTH) - val cipher = Cipher.getInstance("AES/GCM/NoPadding", "SunJCE") - cipher.init(Cipher.DECRYPT_MODE, cipherKey, new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv)) - val plaintext = cipher.doFinal(cipherText) - plaintext + val (enclave, eid) = initEnclave() + enclave.Decrypt(eid, data) } var eid = 0L diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala index b22fac2ecd..91caa4a7ca 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SP.scala @@ -22,7 +22,7 @@ import ch.jodersky.jni.nativeLoader @nativeLoader("ra_jni") class SP extends java.io.Serializable { // Remote attestation, master side - @native def Init(sharedKey: Array[Byte], intelCert: String): Unit + @native def Init(intelCert: String): Unit @native def SPProcMsg0(msg0Input: Array[Byte]): Unit @native def ProcessEnclaveReport(msg1Input: Array[Byte]): Array[Byte] @native def SPProcMsg3(msg3Input: Array[Byte]): Array[Byte] From 1534f5f85430b90d651304ba4caeda4c06c33b13 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Wed, 24 Mar 2021 14:37:47 +0000 Subject: [PATCH 088/101] Update LA syntax and LA enclave check --- .../edu/berkeley/cs/rise/opaque/LA.scala | 50 +++++++++++-------- .../edu/berkeley/cs/rise/opaque/RA.scala | 1 + .../edu/berkeley/cs/rise/opaque/Utils.scala | 1 - 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala index e8c5704c9b..a1d72cc6cc 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala @@ -27,42 +27,50 @@ import Array.concat object LA extends Logging { def initLA(sc: SparkContext): Unit = { - var numExecutors = 1 + var numExecutors: Int = 1 + var loop: Boolean = true + if (!sc.isLocal) { - // For now, I am hard-coding this value to 2, because it does not seem like Spark is picking the value up - numExecutors = sc.getConf.getInt("spark.executor.instances", 2) - while (!sc.isLocal && sc.getExecutorMemoryStatus.size < numExecutors) {} + numExecutors = sc.getConf.getInt("spark.executor.instances", -1) } val rdd = sc.makeRDD(Seq.fill(numExecutors) { () }) - // Obtain public keys - val msg1s = rdd.mapPartitionsWithIndex { (i, _) => - val (enclave, eid) = Utils.initEnclave() - val msg1 = enclave.GetPublicKey(eid) - Iterator((eid, msg1)) - }.collect.toMap + // Obtain reports (evidence) with public keys + val msg1s = rdd + .mapPartitions{ (_) => + val (enclave, eid) = Utils.initEnclave() + val msg1 = enclave.GetPublicKey(eid) + Iterator((eid, msg1)) + } + .collect + .toMap + + logInfo("Driver obtained enclave public keys and reports") - // Combine all public keys into one large array + // Combine all reports into one large array var pkArray = Array[Byte]() for ((k,v) <- msg1s) { pkArray = concat(pkArray, v) } // Send list of public keys to enclaves - val encryptedResults = rdd.context.parallelize(Array(pkArray), 1).map { publicKeys => - val (enclave, eid) = Utils.initEnclave() - enclave.GetListEncrypted(eid, publicKeys) - }.first() + val encryptedResults = rdd.context.parallelize(Array(pkArray), 1) + .map { publicKeys => + val (enclave, eid) = Utils.initEnclave() + enclave.GetListEncrypted(eid, publicKeys) + }.first() // Send encrypted secret key to all enclaves val msg3s = msg1s.map{case (eid, _) => (eid, encryptedResults)} - - val setSharedKeyResults = rdd.mapPartitionsWithIndex { (_, _) => - val (enclave, eid) = Utils.initEnclave() - enclave.FinishSharedKey(eid, msg3s(eid)) - Iterator((eid, true)) - }.collect.toMap + val setSharedKeyResults = rdd + .mapPartitions { (_) => + val (enclave, eid) = Utils.initEnclave() + enclave.FinishSharedKey(eid, msg3s(eid)) + Iterator((eid, true)) + } + .collect + .toMap for ((_, ret) <- setSharedKeyResults) { if (!ret) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index e7ec0ecf28..678f448a7a 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -104,6 +104,7 @@ object RA extends Logging { s"RA.run: ${Utils.numEnclaves.value} unattested, ${Utils.numAttested.value} attested" ) initRA(sc) + LA.initLA(sc) } Thread.sleep(100) } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index a90d6f0091..a647b3556d 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -289,7 +289,6 @@ object Utils extends Logging { RA.attestEnclaves(sc) RA.startThread(sc) - // Perform Local-Attestation so that enclaves determine shared key LA.initLA(sc) } From 7504ac108b47f4004464d1e493f17722f2c20b4e Mon Sep 17 00:00:00 2001 From: Eric Feng <31462296+eric-feng-2011@users.noreply.github.com> Date: Wed, 24 Mar 2021 10:44:13 -0400 Subject: [PATCH 089/101] Delete client_key.txt --- keys/client_key.txt | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 keys/client_key.txt diff --git a/keys/client_key.txt b/keys/client_key.txt deleted file mode 100644 index f3da4bf313..0000000000 --- a/keys/client_key.txt +++ /dev/null @@ -1,2 +0,0 @@ -ÁЬý \¡x-Qú -e b \ No newline at end of file From d495f37b0d1df6b6abf3d69a2d7f2b9310d8f34d Mon Sep 17 00:00:00 2001 From: Eric Feng <31462296+eric-feng-2011@users.noreply.github.com> Date: Wed, 24 Mar 2021 10:52:42 -0400 Subject: [PATCH 090/101] Delete Enclave_private.pem --- src/enclave/Enclave/Enclave_private.pem | 39 ------------------------- 1 file changed, 39 deletions(-) delete mode 100644 src/enclave/Enclave/Enclave_private.pem diff --git a/src/enclave/Enclave/Enclave_private.pem b/src/enclave/Enclave/Enclave_private.pem deleted file mode 100644 index 529d07be35..0000000000 --- a/src/enclave/Enclave/Enclave_private.pem +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIG4gIBAAKCAYEAroOogvsj/fZDZY8XFdkl6dJmky0lRvnWMmpeH41Bla6U1qLZ -AmZuyIF+mQC/cgojIsrBMzBxb1kKqzATF4+XwPwgKz7fmiddmHyYz2WDJfAjIveJ -ZjdMjM4+EytGlkkJ52T8V8ds0/L2qKexJ+NBLxkeQLfV8n1mIk7zX7jguwbCG1Pr -nEMdJ3Sew20vnje+RsngAzdPChoJpVsWi/K7cettX/tbnre1DL02GXc5qJoQYk7b -3zkmhz31TgFrd9VVtmUGyFXAysuSAb3EN+5VnHGr0xKkeg8utErea2FNtNIgua8H -ONfm9Eiyaav1SVKzPHlyqLtcdxH3I8Wg7yqMsaprZ1n5A1v/levxnL8+It02KseD -5HqV4rf/cImSlCt3lpRg8U5E1pyFQ2IVEC/XTDMiI3c+AR+w2jSRB3Bwn9zJtFlW -KHG3m1xGI4ck+Lci1JvWWLXQagQSPtZTsubxTQNx1gsgZhgv1JHVZMdbVlAbbRMC -1nSuJNl7KPAS/VfzAgEDAoIBgHRXxaynbVP5gkO0ug6Qw/E27wzIw4SmjsxG6Wpe -K7kfDeRskKxESdsA/xCrKkwGwhcx1iIgS5+Qscd1Yg+1D9X9asd/P7waPmWoZd+Z -AhlKwhdPsO7PiF3e1AzHhGQwsUTt/Y/aSI1MpHBvy2/s1h9mFCslOUxTmWw0oj/Q -ldIEgWeNR72CE2+jFIJIyml6ftnb6qzPiga8Bm48ubKh0kvySOqnkmnPzgh+JBD6 -JnBmtZbfPT97bwTT+N6rnPqOOApvfHPf15kWI8yDbprG1l4OCUaIUH1AszxLd826 -5IPM+8gINLRDP1MA6azECPjTyHXhtnSIBZCyWSVkc05vYmNXYUNiXWMajcxW9M02 -wKzFELO8NCEAkaTPxwo4SCyIjUxiK1LbQ9h8PSy4c1+gGP4LAMR8xqP4QKg6zdu9 -osUGG/xRe/uufgTBFkcjqBHtK5L5VI0jeNIUAgW/6iNbYXjBMJ0GfauLs+g1VsOm -WfdgXzsb9DYdMa0OXXHypmV4GwKBwQDUwQj8RKJ6c8cT4vcWCoJvJF00+RFL+P3i -Gx2DLERxRrDa8AVGfqaCjsR+3vLgG8V/py+z+dxZYSqeB80Qeo6PDITcRKoeAYh9 -xlT3LJOS+k1cJcEmlbbO2IjLkTmzSwa80fWexKu8/Xv6vv15gpqYl1ngYoqJM3pd -vzmTIOi7MKSZ0WmEQavrZj8zK4endE3v0eAEeQ55j1GImbypSf7Idh7wOXtjZ7WD -Dg6yWDrri+AP/L3gClMj8wsAxMV4ZR8CgcEA0fzDHkFa6raVOxWnObmRoDhAtE0a -cjUj976NM5yyfdf2MrKy4/RhdTiPZ6b08/lBC/+xRfV3xKVGzacm6QjqjZrUpgHC -0LKiZaMtccCJjLtPwQd0jGQEnKfMFaPsnhOc5y8qVkCzVOSthY5qhz0XNotHHFmJ -gffVgB0iqrMTvSL7IA2yqqpOqNRlhaYhNl8TiFP3gIeMtVa9rZy31JPgT2uJ+kfo -gV7sdTPEjPWZd7OshGxWpT6QfVDj/T9T7L6tAoHBAI3WBf2DFvxNL2KXT2QHAZ9t -k3imC4f7U+wSE6zILaDZyzygA4RUbwG0gv8/TJVn2P/Eynf76DuWHGlaiLWnCbSz -Az2DHBQBBaku409zDQym3j1ugMRjzzSQWzJg0SIyBH3hTmnYcn3+Uqcp/lEBvGW6 -O+rsXFt3pukqJmIV8HzLGGaLm62BHUeZf3dyWm+i3p/hQAL7Xvu04QW70xuGqdr5 -afV7p5eaeQIJXyGQJ0eylV/90+qxjMKiB1XYg6WYvwKBwQCL/ddpgOdHJGN8uRom -e7Zq0Csi3hGheMKlKbN3vcxT5U7MdyHtTZZOJbTvxKNNUNYH/8uD+PqDGNneb29G -BfGzvI3EASyLIcGZF3OhKwZd0jUrWk2y7Vhob91jwp2+t73vdMbkKyI4mHOuXvGv -fg95si9oO7EBT+Oqvhccd2J+F1IVXncccYnF4u5ZGWt5lLewN/pVr7MjjykeaHqN -t+rfnQam2psA6fL4zS2zTmZPzR2tnY8Y1GBTi0Ko1OKd1HMCgcAb5cB/7/AQlhP9 -yQa04PLH9ygQkKKptZp7dy5WcWRx0K/hAHRoi2aw1wZqfm7VBNu2SLcs90kCCCxp -6C5sfJi6b8NpNbIPC+sc9wsFr7pGo9SFzQ78UlcWYK2Gu2FxlMjonhka5hvo4zvg -WxlpXKEkaFt3gLd92m/dMqBrHfafH7VwOJY2zT3WIpjwuk0ZzmRg5p0pG/svVQEH -NZmwRwlopysbR69B/n1nefJ84UO50fLh5s5Zr3gBRwbWNZyzhXk= ------END RSA PRIVATE KEY----- From 9a3409a0b6af3e2a182cab36ce062b209b145d27 Mon Sep 17 00:00:00 2001 From: Eric Feng <31462296+eric-feng-2011@users.noreply.github.com> Date: Wed, 24 Mar 2021 10:57:41 -0400 Subject: [PATCH 091/101] Delete user1.crt --- user1.crt | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 user1.crt diff --git a/user1.crt b/user1.crt deleted file mode 100644 index 6009e11d37..0000000000 --- a/user1.crt +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDpDCCAgwCFCMudYdiTOSbx9E7VwOioDqrXEufMA0GCSqGSIb3DQEBCwUAMA8x -DTALBgNVBAMMBHJvb3QwHhcNMjAwNjMwMDUwMjI1WhcNMjAwNzMwMDUwMjI1WjAQ -MQ4wDAYDVQQDDAV1c2VyMTCCAaAwDQYJKoZIhvcNAQEBBQADggGNADCCAYgCggGB -AJ8RAxE/94DYpDmXtwVf9KFL+B8xwLXnAU4OkKxbjlhL4THib3A98JphIl+8n1qe -xyErrkcZM8dQeKj369Pm8oHIn3agVjJpRFlw9RbrvFZ57LgsEi6A7kME3lMpB/29 -Xr2qEGLtYkxQ6tA992wExuMTJrwMslkC6VHbD/7h7/vZzLVgcSIL1wKPoLUOS7EC -IN0AdSfH+VwJcFRDHuLjDSIdSaIm1xMdzijXySw7cYS+YvL2hF94/4gPHhvB4Fcl -x+jwUHu/HD02j3/drU+d0Fi9U9nobDg1up9j7uDWGhGOBV8c23j1xEhuOAO90KYR -FF7sd8oyl8SQhATFiX30ahdXteexB2hHKxyj7oBuLF2295y7iekQHc7Zno/Afm3J -vrtIHvWsnaF97GiNq3oCNMJJbdbYoUd4iCVSKQHw/kwVULBgceUzBGKxumIbMqc8 -7uZfYN0JC1qEIwv9v3UBLFLuFYkoRHOA7p+C5oe2hOiAwPZcqdV4bM3vK80ftr7V -dwIBAzANBgkqhkiG9w0BAQsFAAOCAYEAPuvkwylbNn8Y41yBqLU0/d2vXaF9oaDO -QMyFVhNeJcUfElWlgMcT8fmJWgBZR6239CyfwwGf+XFtHY2B3fzb20vuJSeuNij7 -iNC6k2jEcEDS2qD5rlz9CZPKSicqNIdm96i15g3z44DezslEfLUqvdKz0f95Q1k6 -SlXQLrmLqunA4JMmX2az9kgH2WgU+IKfu5q5kDoRZaJ51Cri2qeen+kK24GaF6++ -ECfr0EX30zTDe66T4jxREK1IsdCSxKQpo9I8NwL32UlPvi7VRDEvVkXMqAvY5I1a -MNSawVJanVujOT2Da7ZT6QLkBik06PN1BIFnxT3hUSAzYzhZA435x4XUkfS9ieOF -svYv1h27gc4jlC+COyVb3CHLZ5lshdFuVFrHVd5Z4h3/9AMx8uQO/iQ/CC4SsbuH -sNmms0kB64TXw3QpSsuFuzVmcpfjcfW4h96zPzgXH7u2FuwrKciyXjKj+clDLFkq -OznGjsNaB4JMsmHNR5K3LD0I4YI3p7mt ------END CERTIFICATE----- From d025c0cae64e28bd2a33a2608b5cfce3fdbbd377 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Wed, 24 Mar 2021 14:58:44 +0000 Subject: [PATCH 092/101] clean code 1 --- src/enclave/App/App.cpp | 17 ---- src/enclave/Common/common.h | 5 -- src/enclave/Enclave/Attestation.cpp | 64 +++++--------- src/enclave/Enclave/Crypto.cpp.save | 83 ------------------- src/enclave/Enclave/Crypto.h | 5 +- src/enclave/Enclave/Enclave.cpp | 80 ------------------ src/enclave/Enclave/Enclave_private.pem | 39 --------- .../ServiceProvider/ServiceProvider.cpp | 19 ----- 8 files changed, 22 insertions(+), 290 deletions(-) delete mode 100644 src/enclave/Enclave/Crypto.cpp.save delete mode 100644 src/enclave/Enclave/Enclave_private.pem diff --git a/src/enclave/App/App.cpp b/src/enclave/App/App.cpp index d0cdbd6868..bb61411b71 100644 --- a/src/enclave/App/App.cpp +++ b/src/enclave/App/App.cpp @@ -280,14 +280,8 @@ JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEncla report_msg_size)); // Allocate memory -// std::cout << "App.cpp - GetListEncrypted - Before allocate memory" << std::endl; jbyteArray report_msg_bytes = env->NewByteArray(report_msg_size); -// std::cout << "App.cpp - report_msg_size: " + report_msg_size << std::endl; -// std::cout << "App.cpp - GetListEncrypted - After allocate memory" << std::endl; - -// std::cout << "App.cpp - GetListEncrypted - Before set memory" << std::endl; env->SetByteArrayRegion(report_msg_bytes, 0, report_msg_size, reinterpret_cast(report_msg)); -// std::cout << "App.cpp - GetListEncrypted - After set memory" << std::endl; env->ReleaseByteArrayElements(shared_key_msg_input, (jbyte *) shared_key_msg_bytes, 0); @@ -300,29 +294,18 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Fin JNIEnv *env, jobject obj, jlong eid, jbyteArray shared_key_msg_input) { (void)obj; -// std::cout << "enter App.cpp" << std::endl; -// std::cout << eid << std::endl; - jboolean if_copy = false; -// std::cout << "App.cpp - before getArrayElements" << std::endl; jbyte *shared_key_msg_bytes = env->GetByteArrayElements(shared_key_msg_input, &if_copy); -// std::cout << "App.cpp - after getArrayElements" << std::endl; - -// std::cout << "App.cpp - before getArraySize" << std::endl; uint32_t shared_key_msg_size = static_cast(env->GetArrayLength(shared_key_msg_input)); -// std::cout << "App.cpp - after getArraySize" << std::endl; -// std::cout << "App.cpp - before ecall" << std::endl; oe_check_and_time("Finish attestation", ecall_finish_shared_key((oe_enclave_t*)eid, reinterpret_cast(shared_key_msg_bytes), shared_key_msg_size)); -// std::cout << "App.cpp - after ecall" << std::endl; env->ReleaseByteArrayElements(shared_key_msg_input, shared_key_msg_bytes, 0); -// std::cout << "exit App.cpp" << std::endl; } /////////////////////////////// Shared Key Gen End //////////////////////////////// diff --git a/src/enclave/Common/common.h b/src/enclave/Common/common.h index b4fafa3f16..e69a0be099 100644 --- a/src/enclave/Common/common.h +++ b/src/enclave/Common/common.h @@ -84,11 +84,6 @@ typedef struct oe_report_msg_t { typedef struct oe_shared_key_msg_t { uint8_t shared_key_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; - uint8_t key_share_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; - // // FIXME: remove test key ciphertext - // uint8_t test_key_ciphertext[OE_SHARED_KEY_CIPHERTEXT_SIZE]; - size_t user_cert_len; - char user_cert[2000]; } oe_shared_key_msg_t; #endif // COMMON_H diff --git a/src/enclave/Enclave/Attestation.cpp b/src/enclave/Enclave/Attestation.cpp index b9028b9d66..a729c9cbf2 100644 --- a/src/enclave/Enclave/Attestation.cpp +++ b/src/enclave/Enclave/Attestation.cpp @@ -180,30 +180,6 @@ bool Attestation::attest_attestation_evidence( uint8_t m_enclave_signer_id[OE_SIGNER_ID_SIZE]; size_t signer_size = sizeof(m_enclave_signer_id); -// std::cout << "Attestation.cpp - before read environment variable" << std::endl; -// std::string public_key_file = std::string(std::getenv("OPAQUE_HOME")); -// public_key_file.append("/public_key.pub"); -// std::cout << "Attestation.cpp - after read environment variable" << std::endl; -// -// std::cout << "Attestation.cpp - before create file stream" << std::endl; -// std::ifstream t(public_key_file.c_str()); -// std::string public_key; -// std::cout << "Attestation.cpp - after create file stream" << std::endl; -// -// std::cout << "Attestation.cpp - before read from file" << std::endl; -// t.seekg(0, std::ios::end); -// size_t public_key_size = t.tellg(); -// public_key.reserve(public_key_size + 1); -// t.seekg(0, std::ios::beg); -// std::cout << "Attestation.cpp - after read from file" << std::endl; -// -// std::cout << "Attestation.cpp - not sure what this is" << std::endl; -// public_key.assign((std::istreambuf_iterator(t)), std::istreambuf_iterator()); -// public_key.replace(public_key_size, 1, "\0"); -// std::cout << "Attestation.cpp - not sure what this is" << std::endl; -// -// std::cout << "Attestation.cpp - public key: " + public_key << std::endl; - if (oe_sgx_get_signer_id_from_public_key( OTHER_ENCLAVE_PUBLIC_KEY, sizeof(OTHER_ENCLAVE_PUBLIC_KEY), @@ -245,26 +221,26 @@ bool Attestation::attest_attestation_evidence( // signed by an trusted entity. // Validate the signer id. -// if ((claim = _find_claim(claims, claims_length, OE_CLAIM_SIGNER_ID)) == -// nullptr) -// { -// throw std::runtime_error("Could not find claim."); -// goto exit; -// }; -// -// if (claim->value_size != OE_SIGNER_ID_SIZE) -// { -// throw std::runtime_error("signer_id size checking failed"); -// goto exit; -// } -// -// if (memcmp(claim->value, m_enclave_signer_id, OE_SIGNER_ID_SIZE) != 0) -// { -// throw std::runtime_error("signer_id checking failed"); -// goto exit; -// } -// -// // Check the enclave's product id. + if ((claim = _find_claim(claims, claims_length, OE_CLAIM_SIGNER_ID)) == + nullptr) + { + throw std::runtime_error("Could not find claim."); + goto exit; + }; + + if (claim->value_size != OE_SIGNER_ID_SIZE) + { + throw std::runtime_error("signer_id size checking failed"); + goto exit; + } + + if (memcmp(claim->value, m_enclave_signer_id, OE_SIGNER_ID_SIZE) != 0) + { + throw std::runtime_error("signer_id checking failed"); + goto exit; + } + + // Check the enclave's product id. if ((claim = _find_claim(claims, claims_length, OE_CLAIM_PRODUCT_ID)) == nullptr) { diff --git a/src/enclave/Enclave/Crypto.cpp.save b/src/enclave/Enclave/Crypto.cpp.save deleted file mode 100644 index 3c7a137706..0000000000 --- a/src/enclave/Enclave/Crypto.cpp.save +++ /dev/null @@ -1,83 +0,0 @@ -#include - -#include "common.h" -#include "Crypto.h" -#include "Random.h" -#include "util.h" - - -/** - * Symmetric key used to encrypt row data. This key is shared among the driver and all enclaves. - * - * The key is initially set on the driver, as the Scala byte array - * edu.berkeley.cs.rise.opaque.Utils.sharedKey. It is securely sent to the enclaves if attestation - * succeeds. - */ -unsigned char shared_key[SGX_AESGCM_KEY_SIZE] = {0}; - -std::unique_ptr ks; - -void initKeySchedule() { - ks.reset(new KeySchedule(reinterpret_cast(shared_key), SGX_AESGCM_KEY_SIZE)); -} - -void set_shared_key(uint8_t *shared_key_bytes, uint32_t shared_key_size) { - if (shared_key_size <= 0) { - throw std::runtime_error("Attempting to set a shared key with invalid key size."); - } - memcpy_s(shared_key, sizeof(shared_key), shared_key_bytes, shared_key_size); - - initKeySchedule(); -} - -void encrypt(uint8_t *plaintext, uint32_t plaintext_length, - uint8_t *ciphertext) { - -// if (!ks) { -// throw std::runtime_error( -// "Cannot encrypt without a shared key. Ensure all enclaves have completed attestation."); -// } -// -// uint8_t *iv_ptr = ciphertext; -// uint8_t *ciphertext_ptr = ciphertext + SGX_AESGCM_IV_SIZE; -// sgx_aes_gcm_128bit_tag_t *mac_ptr = -// (sgx_aes_gcm_128bit_tag_t *) (ciphertext + SGX_AESGCM_IV_SIZE + plaintext_length); -// mbedtls_read_rand(reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); -// -// AesGcm cipher(ks.get(), reinterpret_cast(iv_ptr), SGX_AESGCM_IV_SIZE); -// cipher.encrypt(plaintext, plaintext_length, ciphertext_ptr, plaintext_length); -// memcpy(mac_ptr, cipher.tag().t, SGX_AESGCM_MAC_SIZE); - - // Use sealing to encrypt data between enclaves - -} - -void decrypt(const uint8_t *ciphertext, uint32_t ciphertext_length, uint8_t *plaintext) { -// if (!ks) { -// throw std::runtime_error( -// "Cannot encrypt without a shared key. Ensure all enclaves have completed attestation."); -// } -// uint32_t plaintext_length = dec_size(ciphertext_length); -// -// uint8_t *iv_ptr = (uint8_t *) ciphertext; -// uint8_t *ciphertext_ptr = (uint8_t *) (ciphertext + SGX_AESGCM_IV_SIZE); -// sgx_aes_gcm_128bit_tag_t *mac_ptr = -// (sgx_aes_gcm_128bit_tag_t *) (ciphertext + SGX_AESGCM_IV_SIZE + plaintext_length); -// -// AesGcm decipher(ks.get(), iv_ptr, SGX_AESGCM_IV_SIZE); -// decipher.decrypt(ciphertext_ptr, plaintext_length, plaintext, plaintext_length); -// if (memcmp(mac_ptr, decipher.tag().t, SGX_AESGCM_MAC_SIZE) != 0) { -// printf("Decrypt: invalid mac\n"); -// } - - // Use unsealing to decrypt data between enclaves - -} - -uint32_t enc_size(uint32_t plaintext_size) { - return plaintext_size + SGX_AESGCM_IV_SIZE + SGX_AESGCM_MAC_SIZE; -} - -uint32_t dec_size(uint32_t ciphertext_size) { - return ciphertext_size - (SGX_AESGCM_IV_SIZE + SGX_AESGCM_MAC_SIZE); -} diff --git a/src/enclave/Enclave/Crypto.h b/src/enclave/Enclave/Crypto.h index 63760c1fae..5d3567a3a8 100644 --- a/src/enclave/Enclave/Crypto.h +++ b/src/enclave/Enclave/Crypto.h @@ -19,11 +19,10 @@ extern const sgx_ec256_public_t g_sp_pub_key; * Set the symmetric key used to encrypt row data using message 4 of the remote * attestation process. */ -void add_client_key(uint8_t *client_key_bytes, uint32_t client_key_size, char* username); +void set_shared_key(uint8_t *msg4, uint32_t msg4_size); -void xor_shared_key(uint8_t *key_share_bytes, uint32_t key_share_size); +void add_client_key(uint8_t *client_key_bytes, uint32_t client_key_size, char* username); -void set_shared_key(uint8_t *key_share_bytes, uint32_t key_share_size); /** * Encrypt the given plaintext using AES-GCM with a 128-bit key and write the * result to `ciphertext`. The encrypted data will be formatted as follows, diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index e671c033ee..fb253d068f 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -351,8 +351,6 @@ static Attestation attestation(&g_crypto); void ecall_get_public_key(uint8_t **report_msg_data, size_t* report_msg_data_size) { -// std::cout << "enter ecall_get_public_key" << std::endl; - oe_uuid_t sgx_local_uuid = {OE_FORMAT_UUID_SGX_LOCAL_ATTESTATION}; oe_uuid_t* format_id = &sgx_local_uuid; @@ -384,11 +382,9 @@ void ecall_get_public_key(uint8_t **report_msg_data, ocall_throw("Unable to retrieve enclave evidence"); } -// std::cout << "Before fresh attestation verification" << std::endl; if (!attestation.attest_attestation_evidence(format_id, evidence, evidence_size, pem_public_key, public_key_size)) { ocall_throw("Unable to verify FRESH attestation!"); } -// std::cout << "After fresh attestation verification" << std::endl; // The report msg includes the public key, the size of the evidence, and the evidence itself *report_msg_data_size = public_key_size + sizeof(evidence_size) + evidence_size; @@ -397,45 +393,14 @@ void ecall_get_public_key(uint8_t **report_msg_data, memcpy_s(*report_msg_data, public_key_size, pem_public_key, public_key_size); memcpy_s(*report_msg_data + public_key_size, sizeof(size_t), &evidence_size, sizeof(evidence_size)); -// std::cout << "Enclave - get_public_key - obtain test size before" << std::endl; -// size_t test[1] = {}; -// memcpy_s(test, sizeof(size_t), *report_msg_data + public_key_size, sizeof(evidence_size)); -// std::cout << "Enclave - get_public_key - obtain test size after" << std::endl; - -// std::cout << "Enclave - get_public_key - sizeof evidence_size " << evidence_size << std::endl; -// std::cout << "Enclave - get_public_key - sizeof evidence_size from report_msg: " << test[0] << std::endl; - memcpy_s(*report_msg_data + public_key_size + sizeof(size_t), evidence_size, evidence, evidence_size); - // Print out evidence for debugging purposes -// std::cout << "Enclave - get_public_key - evidence" << std::endl; -// for (size_t i = 0; i < evidence_size; i++) { -// std::cout << evidence[i]; -// } -// std::cout << std::endl; - - // Print out public key for debugging purposes -// for (size_t i = 0; i < public_key_size; i++) { -// std::cout << pem_public_key[i]; -// } -// std::cout << std::endl; - -// std::cout << "Enclave - get_public_key - evidence from report_msg" << std::endl; -// uint8_t evidence_test[evidence_size] = {}; -// memcpy_s(evidence_test, evidence_size, *report_msg_data + public_key_size + sizeof(size_t), evidence_size); -// for (size_t i = 0; i < evidence_size; i++) { -// std::cout << evidence_test[i]; -// } -// std::cout << std::endl; - -// std::cout << "exit ecall_get_public_key" << std::endl; } void ecall_get_list_encrypted(uint8_t * pk_list, uint32_t pk_list_size, uint8_t * sk_list, uint32_t sk_list_size) { -// std::cout << "enter ecall_get_list_encrypted" << std::endl; // Guard against encrypting or overwriting enclave memory assert(oe_is_outside_enclave(pk_list, pk_list_size) == 1); @@ -468,13 +433,6 @@ void ecall_get_list_encrypted(uint8_t * pk_list, uint8_t* format_settings = NULL; size_t format_settings_size = 0; -// if (!attestation.get_format_settings( -// format_id, -// &format_settings, -// &format_settings_size)) { -// ocall_throw("Unable to get enclave format settings"); -// } - while (pk_pointer < pk_list + pk_list_size) { if (!attestation.get_format_settings( @@ -490,27 +448,12 @@ void ecall_get_list_encrypted(uint8_t * pk_list, uint8_t evidence[evidence_size[0]] = {}; memcpy_s(evidence, evidence_size[0], pk_pointer + OE_PUBLIC_KEY_SIZE + sizeof(size_t), evidence_size[0]); -// std::cout << "Enclave - get_list_encrypted - evidence_size test " << evidence_size[0] << std::endl; - - // Print out evidence for debugging purposes -// for (size_t i = 0; i < evidence_size[0]; i++) { -// std::cout << evidence[i]; -// } -// std::cout << std::endl; - - // Verify the provided public key is valid if (!attestation.attest_attestation_evidence(format_id, evidence, evidence_size[0], public_key, sizeof(public_key))) { std::cout << "get_list_encrypted - unable to verify attestation evidence" << std::endl; ocall_throw("Unable to verify attestation evidence"); } - // Print out public key for debugging purposes -// for (size_t i = 0; i < OE_PUBLIC_KEY_SIZE; i++) { -// std::cout << public_key[i]; -// } -// std::cout << std::endl; - g_crypto.encrypt(public_key, secret_key, SGX_AESGCM_KEY_SIZE, @@ -518,12 +461,6 @@ void ecall_get_list_encrypted(uint8_t * pk_list, &encrypted_sharedkey_size); memcpy_s(sk_pointer, OE_SHARED_KEY_CIPHERTEXT_SIZE, encrypted_sharedkey, OE_SHARED_KEY_CIPHERTEXT_SIZE); - // Print out cipher for debugging purposes -// for (size_t i = 0; i < OE_SHARED_KEY_CIPHERTEXT_SIZE; i++) { -// std::cout << (int) encrypted_sharedkey[i] + " "; -// } -// std::cout << std::endl; - pk_pointer += OE_PUBLIC_KEY_SIZE + sizeof(size_t) + evidence_size[0]; sk_pointer += OE_SHARED_KEY_CIPHERTEXT_SIZE; } @@ -531,20 +468,11 @@ void ecall_get_list_encrypted(uint8_t * pk_list, ocall_throw(e.what()); } - // Print out sk_list for debugging purposes -// for (size_t i = 0; i < sk_list_size; i++) { -// std::cout << sk_list[i] + " "; -// } -// std::cout << std::endl; -// -// std::cout << "exit ecall_get_list_encrypted" << std::endl; } void ecall_finish_shared_key(uint8_t *sk_list, uint32_t sk_list_size) { -// std::cout << "enter ecall_finish_shared_key" << std::endl; - uint8_t *sk_pointer = sk_list; uint8_t secret_key[SGX_AESGCM_KEY_SIZE] = {0}; @@ -568,14 +496,6 @@ void ecall_finish_shared_key(uint8_t *sk_list, set_shared_key(secret_key, sk_size); - // Print out shared_key -// for (int i = 0; i < SGX_AESGCM_KEY_SIZE; i++) { -// std::cout << secret_key[i]; -// } - -// std::cout << std::endl; - -// std::cout << "exit ecall_finish_shared_key" << std::endl; } //////////////////////////////////// Generate Shared Key End ////////////////////////////////////// diff --git a/src/enclave/Enclave/Enclave_private.pem b/src/enclave/Enclave/Enclave_private.pem deleted file mode 100644 index 529d07be35..0000000000 --- a/src/enclave/Enclave/Enclave_private.pem +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIG4gIBAAKCAYEAroOogvsj/fZDZY8XFdkl6dJmky0lRvnWMmpeH41Bla6U1qLZ -AmZuyIF+mQC/cgojIsrBMzBxb1kKqzATF4+XwPwgKz7fmiddmHyYz2WDJfAjIveJ -ZjdMjM4+EytGlkkJ52T8V8ds0/L2qKexJ+NBLxkeQLfV8n1mIk7zX7jguwbCG1Pr -nEMdJ3Sew20vnje+RsngAzdPChoJpVsWi/K7cettX/tbnre1DL02GXc5qJoQYk7b -3zkmhz31TgFrd9VVtmUGyFXAysuSAb3EN+5VnHGr0xKkeg8utErea2FNtNIgua8H -ONfm9Eiyaav1SVKzPHlyqLtcdxH3I8Wg7yqMsaprZ1n5A1v/levxnL8+It02KseD -5HqV4rf/cImSlCt3lpRg8U5E1pyFQ2IVEC/XTDMiI3c+AR+w2jSRB3Bwn9zJtFlW -KHG3m1xGI4ck+Lci1JvWWLXQagQSPtZTsubxTQNx1gsgZhgv1JHVZMdbVlAbbRMC -1nSuJNl7KPAS/VfzAgEDAoIBgHRXxaynbVP5gkO0ug6Qw/E27wzIw4SmjsxG6Wpe -K7kfDeRskKxESdsA/xCrKkwGwhcx1iIgS5+Qscd1Yg+1D9X9asd/P7waPmWoZd+Z -AhlKwhdPsO7PiF3e1AzHhGQwsUTt/Y/aSI1MpHBvy2/s1h9mFCslOUxTmWw0oj/Q -ldIEgWeNR72CE2+jFIJIyml6ftnb6qzPiga8Bm48ubKh0kvySOqnkmnPzgh+JBD6 -JnBmtZbfPT97bwTT+N6rnPqOOApvfHPf15kWI8yDbprG1l4OCUaIUH1AszxLd826 -5IPM+8gINLRDP1MA6azECPjTyHXhtnSIBZCyWSVkc05vYmNXYUNiXWMajcxW9M02 -wKzFELO8NCEAkaTPxwo4SCyIjUxiK1LbQ9h8PSy4c1+gGP4LAMR8xqP4QKg6zdu9 -osUGG/xRe/uufgTBFkcjqBHtK5L5VI0jeNIUAgW/6iNbYXjBMJ0GfauLs+g1VsOm -WfdgXzsb9DYdMa0OXXHypmV4GwKBwQDUwQj8RKJ6c8cT4vcWCoJvJF00+RFL+P3i -Gx2DLERxRrDa8AVGfqaCjsR+3vLgG8V/py+z+dxZYSqeB80Qeo6PDITcRKoeAYh9 -xlT3LJOS+k1cJcEmlbbO2IjLkTmzSwa80fWexKu8/Xv6vv15gpqYl1ngYoqJM3pd -vzmTIOi7MKSZ0WmEQavrZj8zK4endE3v0eAEeQ55j1GImbypSf7Idh7wOXtjZ7WD -Dg6yWDrri+AP/L3gClMj8wsAxMV4ZR8CgcEA0fzDHkFa6raVOxWnObmRoDhAtE0a -cjUj976NM5yyfdf2MrKy4/RhdTiPZ6b08/lBC/+xRfV3xKVGzacm6QjqjZrUpgHC -0LKiZaMtccCJjLtPwQd0jGQEnKfMFaPsnhOc5y8qVkCzVOSthY5qhz0XNotHHFmJ -gffVgB0iqrMTvSL7IA2yqqpOqNRlhaYhNl8TiFP3gIeMtVa9rZy31JPgT2uJ+kfo -gV7sdTPEjPWZd7OshGxWpT6QfVDj/T9T7L6tAoHBAI3WBf2DFvxNL2KXT2QHAZ9t -k3imC4f7U+wSE6zILaDZyzygA4RUbwG0gv8/TJVn2P/Eynf76DuWHGlaiLWnCbSz -Az2DHBQBBaku409zDQym3j1ugMRjzzSQWzJg0SIyBH3hTmnYcn3+Uqcp/lEBvGW6 -O+rsXFt3pukqJmIV8HzLGGaLm62BHUeZf3dyWm+i3p/hQAL7Xvu04QW70xuGqdr5 -afV7p5eaeQIJXyGQJ0eylV/90+qxjMKiB1XYg6WYvwKBwQCL/ddpgOdHJGN8uRom -e7Zq0Csi3hGheMKlKbN3vcxT5U7MdyHtTZZOJbTvxKNNUNYH/8uD+PqDGNneb29G -BfGzvI3EASyLIcGZF3OhKwZd0jUrWk2y7Vhob91jwp2+t73vdMbkKyI4mHOuXvGv -fg95si9oO7EBT+Oqvhccd2J+F1IVXncccYnF4u5ZGWt5lLewN/pVr7MjjykeaHqN -t+rfnQam2psA6fL4zS2zTmZPzR2tnY8Y1GBTi0Ko1OKd1HMCgcAb5cB/7/AQlhP9 -yQa04PLH9ygQkKKptZp7dy5WcWRx0K/hAHRoi2aw1wZqfm7VBNu2SLcs90kCCCxp -6C5sfJi6b8NpNbIPC+sc9wsFr7pGo9SFzQ78UlcWYK2Gu2FxlMjonhka5hvo4zvg -WxlpXKEkaFt3gLd92m/dMqBrHfafH7VwOJY2zT3WIpjwuk0ZzmRg5p0pG/svVQEH -NZmwRwlopysbR69B/n1nefJ84UO50fLh5s5Zr3gBRwbWNZyzhXk= ------END RSA PRIVATE KEY----- diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index a28b2603e5..60fb3d290f 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -115,25 +115,6 @@ void ServiceProvider::load_private_key(const std::string &filename) { EVP_PKEY_free(pkey); } -void ServiceProvider::set_shared_key(const uint8_t *shared_key) { - memcpy(this->shared_key, shared_key, LC_AESGCM_KEY_SIZE); -} - -// This function for testing purposes -// void ServiceProvider::set_test_key(const uint8_t *shared_key) { -// memcpy(this->test_key, shared_key, LC_AESGCM_KEY_SIZE); -// } - -void ServiceProvider::set_user_cert(const std::string user_cert) { - memcpy(this->user_cert, user_cert.c_str(), user_cert.length() + 1); - // this->user_cert = user_cert.c_str(); - // std::cout << this->user_cert; -} - -void ServiceProvider::set_key_share(const uint8_t *key_share) { - memcpy(this->key_share, key_share, LC_AESGCM_KEY_SIZE); -} - void ServiceProvider::export_public_key_code(const std::string &filename) { std::ofstream file(filename.c_str()); From 1c2f4afc7bfeae5d7b48eeb77a8ae0d2590e63bc Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Wed, 24 Mar 2021 15:06:57 +0000 Subject: [PATCH 093/101] clean serviceprovider (keeping some key stuff for future) --- .../ServiceProvider/ServiceProvider.cpp | 37 ------------------- src/enclave/ServiceProvider/ServiceProvider.h | 24 ------------ 2 files changed, 61 deletions(-) diff --git a/src/enclave/ServiceProvider/ServiceProvider.cpp b/src/enclave/ServiceProvider/ServiceProvider.cpp index 60fb3d290f..2b0c18d9cc 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.cpp +++ b/src/enclave/ServiceProvider/ServiceProvider.cpp @@ -235,9 +235,6 @@ ServiceProvider::process_enclave_report(oe_report_msg_t *report_msg, unsigned char encrypted_sharedkey[OE_SHARED_KEY_CIPHERTEXT_SIZE]; size_t encrypted_sharedkey_size = sizeof(encrypted_sharedkey); - unsigned char encrypted_key_share[OE_SHARED_KEY_CIPHERTEXT_SIZE]; - size_t encrypted_key_share_size = sizeof(encrypted_key_share); - std::unique_ptr shared_key_msg(new oe_shared_key_msg_t); EVP_PKEY *pkey = buffer_to_public_key((char *)report_msg->public_key, -1); @@ -320,29 +317,6 @@ ServiceProvider::process_enclave_report(oe_report_msg_t *report_msg, throw std::runtime_error(std::string("public_encrypt failed")); } - // Encrypt key share - ret = public_encrypt(pkey, this->key_share, LC_AESGCM_KEY_SIZE, encrypted_key_share, &encrypted_key_share_size); - if (ret == 0) { - throw std::runtime_error(std::string("public_encrypt: buffer too small")); - } - else if (ret < 0) { - throw std::runtime_error(std::string("public_encrypt failed")); - } - - // Encrypt test key for testing purposes - // FIXME: remove this block - it was for testing purposes - // unsigned char encrypted_test_key[OE_SHARED_KEY_CIPHERTEXT_SIZE]; - // size_t encrypted_test_key_size = sizeof(encrypted_test_key); - // ret = public_encrypt(pkey, this->test_key, LC_AESGCM_KEY_SIZE, encrypted_test_key, &encrypted_test_key_size); - // if (ret == 0) { - // throw std::runtime_error(std::string("public_encrypt: buffer too small")); - // } - // else if (ret < 0) { - // throw std::runtime_error(std::string("public_encrypt failed")); - // } - // memcpy_s(msg2->test_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, encrypted_test_key, encrypted_test_key_size); - // FIXME: remove up to here - // Prepare shared_key_msg memcpy_s(shared_key_msg->shared_key_ciphertext, OE_SHARED_KEY_CIPHERTEXT_SIZE, encrypted_sharedkey, encrypted_sharedkey_size); @@ -353,14 +327,3 @@ ServiceProvider::process_enclave_report(oe_report_msg_t *report_msg, return shared_key_msg; } - -// Enclave functions for shared key generation -EVP_PKEY* ServiceProvider::buffer_to_public_key_wrapper(char* public_key) { - - return buffer_to_public_key(public_key, -1); -} - -int ServiceProvider::public_encrypt_wrapper(EVP_PKEY* key, unsigned char * data, int data_len, unsigned char* encrypted, size_t* encrypted_len) { - - return public_encrypt(key, data, data_len, encrypted, encrypted_len); -} diff --git a/src/enclave/ServiceProvider/ServiceProvider.h b/src/enclave/ServiceProvider/ServiceProvider.h index 54dee61b25..539ecdb4dd 100644 --- a/src/enclave/ServiceProvider/ServiceProvider.h +++ b/src/enclave/ServiceProvider/ServiceProvider.h @@ -22,14 +22,6 @@ class ServiceProvider { */ void set_shared_key(const uint8_t *shared_key); - // FOR TESTING PURPOSES - // FIXME: remove this function - // void set_test_key(const uint8_t *shared_key); - - void set_user_cert(std::string user_cert); - - void set_key_share(const uint8_t *key_share); - /** * After calling load_private_key, write the corresponding public key as a C++ * header file. This file should be compiled into the enclave. @@ -43,13 +35,6 @@ class ServiceProvider { std::unique_ptr process_enclave_report(oe_report_msg_t *report_msg, uint32_t *shared_key_msg_size); - /** - * Functions to help enclaves generate shared key (public key verification specifically) - */ - EVP_PKEY* buffer_to_public_key_wrapper(char* public_key); - - int public_encrypt_wrapper(EVP_PKEY* key, unsigned char * data, int data_len, unsigned char* encrypted, size_t* encrypted_len); - private: void connect_to_ias_helper(const std::string &ias_report_signing_ca_file); @@ -58,15 +43,6 @@ class ServiceProvider { uint8_t shared_key[LC_AESGCM_KEY_SIZE]; - // FOR TESTING PURPOSES - // FIXME: remove this test key - // uint8_t test_key[LC_AESGCM_KEY_SIZE]; - - // FIXME: make this not a set length - char user_cert[2000]; - - // Key share; xor'ed among all parties to produce one shared key for spark cluster - uint8_t key_share[LC_AESGCM_KEY_SIZE]; std::string spid; std::unique_ptr ias; From 7a60a0e0538cb8067ca007e7268a8f2d933d50b3 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Thu, 25 Mar 2021 02:41:06 +0000 Subject: [PATCH 094/101] sanity test 0 key debugging --- src/enclave/App/App.cpp | 15 +++++- src/enclave/App/SGXEnclave.h | 2 +- src/enclave/Enclave/Crypto.h | 3 ++ src/enclave/Enclave/Enclave.cpp | 33 ++++++++++-- src/enclave/Enclave/Enclave.edl | 4 +- .../edu/berkeley/cs/rise/opaque/LA.scala | 6 ++- .../edu/berkeley/cs/rise/opaque/RA.scala | 6 +++ .../edu/berkeley/cs/rise/opaque/Utils.scala | 51 +++++++++++++++++-- .../cs/rise/opaque/execution/SGXEnclave.scala | 2 +- 9 files changed, 104 insertions(+), 18 deletions(-) diff --git a/src/enclave/App/App.cpp b/src/enclave/App/App.cpp index bb61411b71..1e1be353af 100644 --- a/src/enclave/App/App.cpp +++ b/src/enclave/App/App.cpp @@ -290,7 +290,7 @@ JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEncla return report_msg_bytes; } -JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_FinishSharedKey( +JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_FinishSharedKey( JNIEnv *env, jobject obj, jlong eid, jbyteArray shared_key_msg_input) { (void)obj; @@ -299,13 +299,24 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Fin jbyte *shared_key_msg_bytes = env->GetByteArrayElements(shared_key_msg_input, &if_copy); uint32_t shared_key_msg_size = static_cast(env->GetArrayLength(shared_key_msg_input)); + size_t report_msg_size = SGX_AESGCM_KEY_SIZE; + uint8_t* report_msg = new uint8_t[report_msg_size]; + oe_check_and_time("Finish attestation", ecall_finish_shared_key((oe_enclave_t*)eid, reinterpret_cast(shared_key_msg_bytes), - shared_key_msg_size)); + shared_key_msg_size, + report_msg, + report_msg_size)); + + // Allocate memory + jbyteArray report_msg_bytes = env->NewByteArray(report_msg_size); + env->SetByteArrayRegion(report_msg_bytes, 0, report_msg_size, reinterpret_cast(report_msg)); env->ReleaseByteArrayElements(shared_key_msg_input, shared_key_msg_bytes, 0); + delete[] report_msg; + return report_msg_bytes; } /////////////////////////////// Shared Key Gen End //////////////////////////////// diff --git a/src/enclave/App/SGXEnclave.h b/src/enclave/App/SGXEnclave.h index f2c7f8d60d..80f34c7902 100644 --- a/src/enclave/App/SGXEnclave.h +++ b/src/enclave/App/SGXEnclave.h @@ -86,7 +86,7 @@ JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_Fin JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_GetListEncrypted( JNIEnv *, jobject, jlong, jbyteArray); - JNIEXPORT void JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_FinishSharedKey( + JNIEXPORT jbyteArray JNICALL Java_edu_berkeley_cs_rise_opaque_execution_SGXEnclave_FinishSharedKey( JNIEnv *, jobject, jlong, jbyteArray); #ifdef __cplusplus diff --git a/src/enclave/Enclave/Crypto.h b/src/enclave/Enclave/Crypto.h index 5d3567a3a8..4e0402361e 100644 --- a/src/enclave/Enclave/Crypto.h +++ b/src/enclave/Enclave/Crypto.h @@ -23,6 +23,9 @@ void set_shared_key(uint8_t *msg4, uint32_t msg4_size); void add_client_key(uint8_t *client_key_bytes, uint32_t client_key_size, char* username); +// TODO: Debugging purposes. Remove this function later +void initKeySchedule(); + /** * Encrypt the given plaintext using AES-GCM with a 128-bit key and write the * result to `ciphertext`. The encrypted data will be formatted as follows, diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index fb253d068f..f567ce08e1 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -278,7 +278,7 @@ void ecall_finish_attestation(uint8_t *shared_key_msg_input, uint32_t shared_key ocall_throw("shared key decryption failed"); } - set_shared_key(shared_key_plaintext, shared_key_plaintext_size); +// set_shared_key(shared_key_plaintext, shared_key_plaintext_size); } catch (const std::runtime_error &e) { ocall_throw(e.what()); } @@ -471,12 +471,18 @@ void ecall_get_list_encrypted(uint8_t * pk_list, } void ecall_finish_shared_key(uint8_t *sk_list, - uint32_t sk_list_size) { + uint32_t sk_list_size, + uint8_t *sk, + uint32_t sk_size) { + + (void) sk; + (void) sk_size; uint8_t *sk_pointer = sk_list; uint8_t secret_key[SGX_AESGCM_KEY_SIZE] = {0}; - size_t sk_size = sizeof(secret_key); + size_t sk_length = sizeof(secret_key); + assert(sk_length == sk_size); while (sk_pointer < sk_list + sk_list_size) { uint8_t encrypted_sharedkey[OE_SHARED_KEY_CIPHERTEXT_SIZE]; @@ -485,7 +491,7 @@ void ecall_finish_shared_key(uint8_t *sk_list, memcpy_s(encrypted_sharedkey, encrypted_sharedkey_size, sk_pointer, OE_SHARED_KEY_CIPHERTEXT_SIZE); try { - bool ret = g_crypto.decrypt(encrypted_sharedkey, encrypted_sharedkey_size, secret_key, &sk_size); + bool ret = g_crypto.decrypt(encrypted_sharedkey, encrypted_sharedkey_size, secret_key, &sk_length); if (ret) {break;} // Decryption was successful to obtain secret key } catch (const std::runtime_error &e) { ocall_throw(e.what()); @@ -494,8 +500,25 @@ void ecall_finish_shared_key(uint8_t *sk_list, sk_pointer += OE_SHARED_KEY_CIPHERTEXT_SIZE; } - set_shared_key(secret_key, sk_size); +// set_shared_key(secret_key, sk_size); + initKeySchedule(); + + // Print out shared_key in two's complement + for (int i = 0; i < SGX_AESGCM_KEY_SIZE; i++) { + uint8_t byte = secret_key[i]; + + // In 2c form + if ((byte >> (7)) & 1) { + uint8_t two_comp = ((byte ^ (1 << 7)) ^ 127) + 1; + std::cout << "-" << +two_comp << " "; + } else { + std::cout << +byte << " "; + } + } + + std::cout << std::endl; + memcpy(sk, secret_key, SGX_AESGCM_KEY_SIZE); } //////////////////////////////////// Generate Shared Key End ////////////////////////////////////// diff --git a/src/enclave/Enclave/Enclave.edl b/src/enclave/Enclave/Enclave.edl index 14ea2245a0..ee12ab1b29 100644 --- a/src/enclave/Enclave/Enclave.edl +++ b/src/enclave/Enclave/Enclave.edl @@ -104,8 +104,8 @@ enclave { [user_check] uint8_t *sk_list, uint32_t cipher_length); public void ecall_finish_shared_key( - [in,size=msg4_size] uint8_t *msg4, - uint32_t msg4_size); + [in,size=msg4_size] uint8_t *msg4, uint32_t msg4_size, + [user_check] uint8_t *secret_key, uint32_t secret_length); }; untrusted { diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala index a1d72cc6cc..15c087d138 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala @@ -66,8 +66,8 @@ object LA extends Logging { val setSharedKeyResults = rdd .mapPartitions { (_) => val (enclave, eid) = Utils.initEnclave() - enclave.FinishSharedKey(eid, msg3s(eid)) - Iterator((eid, true)) + val key = enclave.FinishSharedKey(eid, msg3s(eid)) + Iterator((key, true)) } .collect .toMap @@ -76,5 +76,7 @@ object LA extends Logging { if (!ret) throw new OpaqueException("Failed to set shared key") } + +// Utils.setSharedKey(setSharedKeyResults.head._1) } } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index 678f448a7a..0c33f9593a 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -103,8 +103,14 @@ object RA extends Logging { logInfo( s"RA.run: ${Utils.numEnclaves.value} unattested, ${Utils.numAttested.value} attested" ) + + println("Before RA") initRA(sc) + println("After RA") + + println("Before LA") LA.initLA(sc) + println("After LA") } Thread.sleep(100) } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index a647b3556d..402f09a7b9 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -251,14 +251,52 @@ object Utils extends Logging { // We do not trust the driver. Encryption and decryption done in enclave only +// def encrypt(data: Array[Byte]): Array[Byte] = { +// val (enclave, eid) = initEnclave() +// enclave.Encrypt(eid, data) +// } + +// def decrypt(data: Array[Byte]): Array[Byte] = { +// val (enclave, eid) = initEnclave() +// enclave.Decrypt(eid, data) + + /** + * Symmetric key used to encrypt row data. This key is securely sent to the enclaves if + * attestation succeeds. For development, we use a hardcoded key. You should change it. + */ + var sharedKey: Array[Byte] = Array.fill[Byte](GCM_KEY_LENGTH)(0) + + def setSharedKey(key: Array[Byte]): Unit = { + sharedKey = key + assert(sharedKey.size == GCM_KEY_LENGTH) + +// println(sharedKey.mkString(" ")) +// println((sharedKey.map(_.toChar)).mkString) + } + def encrypt(data: Array[Byte]): Array[Byte] = { - val (enclave, eid) = initEnclave() - enclave.Encrypt(eid, data) +// println(sharedKey.mkString(" ")) + + val random = SecureRandom.getInstance("SHA1PRNG") + val cipherKey = new SecretKeySpec(sharedKey, "AES") + val iv = new Array[Byte](GCM_IV_LENGTH) + random.nextBytes(iv) + val spec = new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv) + val cipher = Cipher.getInstance("AES/GCM/NoPadding", "SunJCE") + cipher.init(Cipher.ENCRYPT_MODE, cipherKey, spec) + val cipherText = cipher.doFinal(data) + iv ++ cipherText } def decrypt(data: Array[Byte]): Array[Byte] = { - val (enclave, eid) = initEnclave() - enclave.Decrypt(eid, data) +// println(sharedKey.mkString(" ")) + + val cipherKey = new SecretKeySpec(sharedKey, "AES") + val iv = data.take(GCM_IV_LENGTH) + val cipherText = data.drop(GCM_IV_LENGTH) + val cipher = Cipher.getInstance("AES/GCM/NoPadding", "SunJCE") + cipher.init(Cipher.DECRYPT_MODE, cipherKey, new GCMParameterSpec(GCM_TAG_LENGTH * 8, iv)) + cipher.doFinal(cipherText) } var eid = 0L @@ -270,6 +308,9 @@ object Utils extends Logging { var loop: Boolean = true def initSQLContext(sqlContext: SQLContext): Unit = { + +// println("Enter initSQLContext") + sqlContext.experimental.extraOptimizations = (Seq(EncryptLocalRelation, ConvertToOpaqueOperators) ++ sqlContext.experimental.extraOptimizations) @@ -289,7 +330,7 @@ object Utils extends Logging { RA.attestEnclaves(sc) RA.startThread(sc) - LA.initLA(sc) +// println("Exit initSQLContext") } def initEnclave(): (SGXEnclave, Long) = { diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala index f13527493a..0d41c725f6 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/execution/SGXEnclave.scala @@ -88,5 +88,5 @@ class SGXEnclave extends java.io.Serializable { // "Local attestation" to determine shared key, enclave side @native def GetPublicKey(eid: Long): Array[Byte] @native def GetListEncrypted(eid: Long, publicKeyList: Array[Byte]): Array[Byte] - @native def FinishSharedKey(eid: Long, encryptedKeyList: Array[Byte]): Unit + @native def FinishSharedKey(eid: Long, encryptedKeyList: Array[Byte]): Array[Byte] } From de05e175b7ac4e7f4be499187215187781ccaec6 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Sat, 27 Mar 2021 20:17:20 +0000 Subject: [PATCH 095/101] build/sbt test --- src/enclave/Enclave/Enclave.cpp | 18 +----------------- .../scala/edu/berkeley/cs/rise/opaque/LA.scala | 6 +++++- .../edu/berkeley/cs/rise/opaque/Utils.scala | 13 +++---------- .../cs/rise/opaque/OpaqueSpecificSuite.scala | 18 +++++++++++------- .../cs/rise/opaque/SharedSparkSessions.scala | 11 +++++++++-- 5 files changed, 29 insertions(+), 37 deletions(-) diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index f567ce08e1..e519863730 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -500,23 +500,7 @@ void ecall_finish_shared_key(uint8_t *sk_list, sk_pointer += OE_SHARED_KEY_CIPHERTEXT_SIZE; } -// set_shared_key(secret_key, sk_size); - initKeySchedule(); - - // Print out shared_key in two's complement - for (int i = 0; i < SGX_AESGCM_KEY_SIZE; i++) { - uint8_t byte = secret_key[i]; - - // In 2c form - if ((byte >> (7)) & 1) { - uint8_t two_comp = ((byte ^ (1 << 7)) ^ 127) + 1; - std::cout << "-" << +two_comp << " "; - } else { - std::cout << +byte << " "; - } - } - - std::cout << std::endl; + set_shared_key(secret_key, sk_size); memcpy(sk, secret_key, SGX_AESGCM_KEY_SIZE); } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala index 15c087d138..e7c4cc647d 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala @@ -67,6 +67,9 @@ object LA extends Logging { .mapPartitions { (_) => val (enclave, eid) = Utils.initEnclave() val key = enclave.FinishSharedKey(eid, msg3s(eid)) + + // Giving Utils enclave shared key for now. Will remove later. + Utils.setSharedKey(key) Iterator((key, true)) } .collect @@ -77,6 +80,7 @@ object LA extends Logging { throw new OpaqueException("Failed to set shared key") } -// Utils.setSharedKey(setSharedKeyResults.head._1) + // Giving Utils enclave shared key for now. Will remove later. + Utils.setSharedKey(setSharedKeyResults.head._1) } } diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index 402f09a7b9..9046226707 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -249,7 +249,8 @@ object Utils extends Logging { final val GCM_KEY_LENGTH = 32 final val GCM_TAG_LENGTH = 16 - // We do not trust the driver. Encryption and decryption done in enclave only + // We do not trust the driver. Encryption and decryption done in enclave only. + // Leaving here, because will eventually encrypt in enclaves // def encrypt(data: Array[Byte]): Array[Byte] = { // val (enclave, eid) = initEnclave() @@ -269,14 +270,9 @@ object Utils extends Logging { def setSharedKey(key: Array[Byte]): Unit = { sharedKey = key assert(sharedKey.size == GCM_KEY_LENGTH) - -// println(sharedKey.mkString(" ")) -// println((sharedKey.map(_.toChar)).mkString) } def encrypt(data: Array[Byte]): Array[Byte] = { -// println(sharedKey.mkString(" ")) - val random = SecureRandom.getInstance("SHA1PRNG") val cipherKey = new SecretKeySpec(sharedKey, "AES") val iv = new Array[Byte](GCM_IV_LENGTH) @@ -289,7 +285,6 @@ object Utils extends Logging { } def decrypt(data: Array[Byte]): Array[Byte] = { -// println(sharedKey.mkString(" ")) val cipherKey = new SecretKeySpec(sharedKey, "AES") val iv = data.take(GCM_IV_LENGTH) @@ -309,8 +304,6 @@ object Utils extends Logging { def initSQLContext(sqlContext: SQLContext): Unit = { -// println("Enter initSQLContext") - sqlContext.experimental.extraOptimizations = (Seq(EncryptLocalRelation, ConvertToOpaqueOperators) ++ sqlContext.experimental.extraOptimizations) @@ -330,13 +323,13 @@ object Utils extends Logging { RA.attestEnclaves(sc) RA.startThread(sc) -// println("Exit initSQLContext") } def initEnclave(): (SGXEnclave, Long) = { // This following exception relies on the Spark fault tolerance and its retry mechanism // in case of a task failure. Therefore, Spark MUST be configured to retry in case of a task failure. this.synchronized { + println("Init Enclave: " + sharedKey.mkString(" ")) if (!attested) { Thread.sleep(200) throw new OpaqueException("Attestation not yet complete") diff --git a/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueSpecificSuite.scala b/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueSpecificSuite.scala index bb75e76ddb..e4ee69569e 100644 --- a/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueSpecificSuite.scala +++ b/src/test/scala/edu/berkeley/cs/rise/opaque/OpaqueSpecificSuite.scala @@ -37,13 +37,6 @@ class OpaqueSpecificSuite extends OpaqueSuiteBase with SinglePartitionSparkSessi case 2 => "C" } - test("java encryption/decryption") { - val data = Array[Byte](0, 1, 2) - val (enclave, eid) = Utils.initEnclave() - assert(data === Utils.decrypt(Utils.encrypt(data))) - assert(data === Utils.decrypt(enclave.Encrypt(eid, data))) - } - test("cache") { def numCached(ds: Dataset[_]): Int = ds.queryExecution.executedPlan.collect { @@ -166,6 +159,8 @@ class OpaqueSpecificSuite extends OpaqueSuiteBase with SinglePartitionSparkSessi assert(e.getCause.isInstanceOf[OpaqueException]) } + // Honestly, a little confused about this one. Works in manual shell but not build/sbt + // Needed to add enclave share key to Utils on workers. test("encrypted literal") { checkAnswer() { sl => val input = 10 @@ -176,4 +171,13 @@ class OpaqueSpecificSuite extends OpaqueSuiteBase with SinglePartitionSparkSessi words.filter($"id" < decrypt(lit(enc_str), IntegerType)).sort($"id") } } + + test("java encryption/decryption") { + val data = Array[Byte](0, 1, 2) + assert(data === Utils.decrypt(Utils.encrypt(data))) + + // Invalid test: enclave secret key should only be on trusted enclaves. +// val (enclave, eid) = Utils.initEnclave() +// assert(data === Utils.decrypt(enclave.Encrypt(eid, data))) + } } diff --git a/src/test/scala/edu/berkeley/cs/rise/opaque/SharedSparkSessions.scala b/src/test/scala/edu/berkeley/cs/rise/opaque/SharedSparkSessions.scala index 33b661f87a..d1933651bc 100644 --- a/src/test/scala/edu/berkeley/cs/rise/opaque/SharedSparkSessions.scala +++ b/src/test/scala/edu/berkeley/cs/rise/opaque/SharedSparkSessions.scala @@ -20,12 +20,19 @@ package edu.berkeley.cs.rise.opaque import org.apache.spark.sql.SparkSession trait SinglePartitionSparkSession { - def numPartitions = 1 + val executorInstances = 1 + + def numPartitions = executorInstances val spark = SparkSession .builder() - .master("local[*]") + .master(s"local-cluster[$executorInstances, 1, 3072]") .appName("SinglePartitionSuiteSession") + .config("spark.executor.instances", executorInstances) .config("spark.sql.shuffle.partitions", numPartitions) + .config( + "spark.jars", + "target/scala-2.12/opaque_2.12-0.1.jar,target/scala-2.12/opaque_2.12-0.1-tests.jar" + ) .getOrCreate() } From 55a2614b4cb052b8422b00954f7ad3e11b111799 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Sat, 27 Mar 2021 21:29:58 +0000 Subject: [PATCH 096/101] remove RA print statements --- src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala index 0c33f9593a..2536ac4ce3 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/RA.scala @@ -104,13 +104,8 @@ object RA extends Logging { s"RA.run: ${Utils.numEnclaves.value} unattested, ${Utils.numAttested.value} attested" ) - println("Before RA") initRA(sc) - println("After RA") - - println("Before LA") LA.initLA(sc) - println("After LA") } Thread.sleep(100) } From cfd2bb16e4777185ddefc25463dec55bc5bfda2e Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Tue, 30 Mar 2021 03:15:22 +0000 Subject: [PATCH 097/101] Remove initEnclave and port to Utils for LA calls --- .../edu/berkeley/cs/rise/opaque/LA.scala | 15 +++----- .../edu/berkeley/cs/rise/opaque/Utils.scala | 38 +++++++++++++++++++ 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala index e7c4cc647d..fb67f414bf 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/LA.scala @@ -34,13 +34,12 @@ object LA extends Logging { numExecutors = sc.getConf.getInt("spark.executor.instances", -1) } - val rdd = sc.makeRDD(Seq.fill(numExecutors) { () }) + val rdd = sc.parallelize(Seq.fill(numExecutors) { () }, numExecutors) // Obtain reports (evidence) with public keys val msg1s = rdd .mapPartitions{ (_) => - val (enclave, eid) = Utils.initEnclave() - val msg1 = enclave.GetPublicKey(eid) + val (eid, msg1) = Utils.getEvidence() Iterator((eid, msg1)) } .collect @@ -50,24 +49,22 @@ object LA extends Logging { // Combine all reports into one large array var pkArray = Array[Byte]() - for ((k,v) <- msg1s) { + for ((k, Some(v)) <- msg1s) { pkArray = concat(pkArray, v) } // Send list of public keys to enclaves val encryptedResults = rdd.context.parallelize(Array(pkArray), 1) .map { publicKeys => - val (enclave, eid) = Utils.initEnclave() - enclave.GetListEncrypted(eid, publicKeys) + Utils.getListEncrypted(publicKeys) }.first() // Send encrypted secret key to all enclaves val msg3s = msg1s.map{case (eid, _) => (eid, encryptedResults)} val setSharedKeyResults = rdd .mapPartitions { (_) => - val (enclave, eid) = Utils.initEnclave() - val key = enclave.FinishSharedKey(eid, msg3s(eid)) - + val key = Utils.finishSharedKey(msg3s) + // Giving Utils enclave shared key for now. Will remove later. Utils.setSharedKey(key) Iterator((key, true)) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index 9046226707..620c3583e4 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -382,6 +382,44 @@ object Utils extends Logging { } } + def getEvidence(): (Long, Option[Array[Byte]]) = { + this.synchronized { + // Only generate evidence if the enclave has already been started AND attested + if (eid != 0L && attested) { + val enclave = new SGXEnclave() + val msg1 = enclave.GetPublicKey(eid) + (eid, Option(msg1)) + } else { + (eid, None) + } + } + } + + def getListEncrypted(evidences: Array[Byte]): Array[Byte] = { + this.synchronized { + // Only generate evidence if the enclave has already been started AND attested + if (eid != 0L && attested) { + val enclave = new SGXEnclave() + enclave.GetListEncrypted(eid, evidences) + } else { + // Return empty array + Array[Byte]() + } + } + } + + def finishSharedKey(msg3s: Map[Long, Array[Byte]]): Array[Byte] = { + this.synchronized { + val enclave = new SGXEnclave() + if (msg3s.contains(eid) && attested) { + val msg3 = msg3s(eid) + enclave.FinishSharedKey(eid, msg3s(eid)) + } else { + Array[Byte]() + } + } + } + def cleanup(spark: SparkSession) { RA.stopThread() spark.stop() From 98c4dd3dcb9c0ded9cbf0c30c75a6d14149deb18 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Tue, 30 Mar 2021 17:31:48 +0000 Subject: [PATCH 098/101] Resolve issue of Utils shared key size in in case of simulation mode --- src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index 620c3583e4..3d21873fd7 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -397,7 +397,6 @@ object Utils extends Logging { def getListEncrypted(evidences: Array[Byte]): Array[Byte] = { this.synchronized { - // Only generate evidence if the enclave has already been started AND attested if (eid != 0L && attested) { val enclave = new SGXEnclave() enclave.GetListEncrypted(eid, evidences) @@ -415,7 +414,8 @@ object Utils extends Logging { val msg3 = msg3s(eid) enclave.FinishSharedKey(eid, msg3s(eid)) } else { - Array[Byte]() + // Return array of 0s + Array.fill[Byte](GCM_KEY_LENGTH)(0) } } } From b7b87f54817c0faa4153213726751eca8484ded0 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Tue, 30 Mar 2021 19:16:15 +0000 Subject: [PATCH 099/101] Resolve single partition test memory --- src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala | 1 - .../edu/berkeley/cs/rise/opaque/SharedSparkSessions.scala | 8 +++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index 3d21873fd7..3e26f8d781 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -329,7 +329,6 @@ object Utils extends Logging { // This following exception relies on the Spark fault tolerance and its retry mechanism // in case of a task failure. Therefore, Spark MUST be configured to retry in case of a task failure. this.synchronized { - println("Init Enclave: " + sharedKey.mkString(" ")) if (!attested) { Thread.sleep(200) throw new OpaqueException("Attestation not yet complete") diff --git a/src/test/scala/edu/berkeley/cs/rise/opaque/SharedSparkSessions.scala b/src/test/scala/edu/berkeley/cs/rise/opaque/SharedSparkSessions.scala index d1933651bc..16b0e51e90 100644 --- a/src/test/scala/edu/berkeley/cs/rise/opaque/SharedSparkSessions.scala +++ b/src/test/scala/edu/berkeley/cs/rise/opaque/SharedSparkSessions.scala @@ -20,15 +20,17 @@ package edu.berkeley.cs.rise.opaque import org.apache.spark.sql.SparkSession trait SinglePartitionSparkSession { - val executorInstances = 1 + val executorInstances = 3 - def numPartitions = executorInstances + def numPartitions = 1 val spark = SparkSession .builder() - .master(s"local-cluster[$executorInstances, 1, 3072]") + .master(s"local-cluster[$executorInstances, 1, 8192]") .appName("SinglePartitionSuiteSession") .config("spark.executor.instances", executorInstances) .config("spark.sql.shuffle.partitions", numPartitions) + .config("spark.driver.memory", "4g") + .config("spark.executor.memory", "2g") .config( "spark.jars", "target/scala-2.12/opaque_2.12-0.1.jar,target/scala-2.12/opaque_2.12-0.1-tests.jar" From 9f0ebcf897f55c0eebb3b2891f96639a265f50a6 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Tue, 30 Mar 2021 20:27:36 +0000 Subject: [PATCH 100/101] Resolve simulation flag issue --- src/enclave/Enclave/Enclave.cpp | 15 +++++++++++++-- .../cs/rise/opaque/SharedSparkSessions.scala | 8 +++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/enclave/Enclave/Enclave.cpp b/src/enclave/Enclave/Enclave.cpp index e519863730..6190499058 100644 --- a/src/enclave/Enclave/Enclave.cpp +++ b/src/enclave/Enclave/Enclave.cpp @@ -351,6 +351,7 @@ static Attestation attestation(&g_crypto); void ecall_get_public_key(uint8_t **report_msg_data, size_t* report_msg_data_size) { +#ifndef SIMULATE oe_uuid_t sgx_local_uuid = {OE_FORMAT_UUID_SGX_LOCAL_ATTESTATION}; oe_uuid_t* format_id = &sgx_local_uuid; @@ -363,6 +364,7 @@ void ecall_get_public_key(uint8_t **report_msg_data, &format_settings_size)) { ocall_throw("Unable to get enclave format settings"); } +#endif uint8_t pem_public_key[512]; size_t public_key_size = sizeof(pem_public_key); @@ -371,6 +373,7 @@ void ecall_get_public_key(uint8_t **report_msg_data, g_crypto.retrieve_public_key(pem_public_key); +#ifndef SIMULATE if (attestation.generate_attestation_evidence( format_id, format_settings, @@ -385,6 +388,7 @@ void ecall_get_public_key(uint8_t **report_msg_data, if (!attestation.attest_attestation_evidence(format_id, evidence, evidence_size, pem_public_key, public_key_size)) { ocall_throw("Unable to verify FRESH attestation!"); } +#endif // The report msg includes the public key, the size of the evidence, and the evidence itself *report_msg_data_size = public_key_size + sizeof(evidence_size) + evidence_size; @@ -420,30 +424,36 @@ void ecall_get_list_encrypted(uint8_t * pk_list, uint8_t public_key[OE_PUBLIC_KEY_SIZE] = {}; uint8_t *pk_pointer = pk_list; - size_t evidence_size[1] = {}; - unsigned char encrypted_sharedkey[OE_SHARED_KEY_CIPHERTEXT_SIZE]; size_t encrypted_sharedkey_size = sizeof(encrypted_sharedkey); uint8_t *sk_pointer = sk_list; + size_t evidence_size[1] = {}; + +#ifndef SIMULATE oe_uuid_t sgx_local_uuid = {OE_FORMAT_UUID_SGX_LOCAL_ATTESTATION}; oe_uuid_t* format_id = &sgx_local_uuid; uint8_t* format_settings = NULL; size_t format_settings_size = 0; +#endif while (pk_pointer < pk_list + pk_list_size) { +#ifndef SIMULATE if (!attestation.get_format_settings( format_id, &format_settings, &format_settings_size)) { ocall_throw("Unable to get enclave format settings"); } +#endif // Read public key, size of evidence, and evidence memcpy_s(public_key, OE_PUBLIC_KEY_SIZE, pk_pointer, OE_PUBLIC_KEY_SIZE); + +#ifndef SIMULATE memcpy_s(evidence_size, sizeof(evidence_size), pk_pointer + OE_PUBLIC_KEY_SIZE, sizeof(size_t)); uint8_t evidence[evidence_size[0]] = {}; memcpy_s(evidence, evidence_size[0], pk_pointer + OE_PUBLIC_KEY_SIZE + sizeof(size_t), evidence_size[0]); @@ -453,6 +463,7 @@ void ecall_get_list_encrypted(uint8_t * pk_list, std::cout << "get_list_encrypted - unable to verify attestation evidence" << std::endl; ocall_throw("Unable to verify attestation evidence"); } +#endif g_crypto.encrypt(public_key, secret_key, diff --git a/src/test/scala/edu/berkeley/cs/rise/opaque/SharedSparkSessions.scala b/src/test/scala/edu/berkeley/cs/rise/opaque/SharedSparkSessions.scala index 16b0e51e90..06bd5e90d8 100644 --- a/src/test/scala/edu/berkeley/cs/rise/opaque/SharedSparkSessions.scala +++ b/src/test/scala/edu/berkeley/cs/rise/opaque/SharedSparkSessions.scala @@ -20,17 +20,15 @@ package edu.berkeley.cs.rise.opaque import org.apache.spark.sql.SparkSession trait SinglePartitionSparkSession { - val executorInstances = 3 - + val executorInstances = 1 def numPartitions = 1 + val spark = SparkSession .builder() - .master(s"local-cluster[$executorInstances, 1, 8192]") + .master(s"local-cluster[$executorInstances, 1, 4096]") .appName("SinglePartitionSuiteSession") .config("spark.executor.instances", executorInstances) .config("spark.sql.shuffle.partitions", numPartitions) - .config("spark.driver.memory", "4g") - .config("spark.executor.memory", "2g") .config( "spark.jars", "target/scala-2.12/opaque_2.12-0.1.jar,target/scala-2.12/opaque_2.12-0.1-tests.jar" From 884a0517ac03f40712ae8f0d976045186b146c63 Mon Sep 17 00:00:00 2001 From: Eric Feng Date: Thu, 15 Apr 2021 20:51:44 +0000 Subject: [PATCH 101/101] resolve key issue --- src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala index 3486159ab0..c4e8d0cc43 100644 --- a/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala +++ b/src/main/scala/edu/berkeley/cs/rise/opaque/Utils.scala @@ -270,7 +270,7 @@ object Utils extends Logging { def setSharedKey(key: Array[Byte]): Unit = { sharedKey = Option(key) - assert(sharedKey.size == GCM_KEY_LENGTH) + assert(key.size == GCM_KEY_LENGTH) } def encrypt(data: Array[Byte]): Array[Byte] = sharedKey match {