From 7db1c96dc319c9d66e28e406acd36abdd005d54f Mon Sep 17 00:00:00 2001 From: LinaMedlej Date: Sun, 10 Dec 2017 21:08:45 +0200 Subject: [PATCH 1/3] Delete .project --- eleos_core/.project | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 eleos_core/.project diff --git a/eleos_core/.project b/eleos_core/.project deleted file mode 100644 index 999c3f6..0000000 --- a/eleos_core/.project +++ /dev/null @@ -1,28 +0,0 @@ - - - sgx_services - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - com.intel.sgx.sgxnature - - From 07733438e74a60114c0420d984ca1407d3d3ce87 Mon Sep 17 00:00:00 2001 From: LinaMedlej Date: Sun, 10 Dec 2017 21:08:59 +0200 Subject: [PATCH 2/3] Delete Makefile --- eleos_core/Makefile | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 eleos_core/Makefile diff --git a/eleos_core/Makefile b/eleos_core/Makefile deleted file mode 100644 index b1329e0..0000000 --- a/eleos_core/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -ALL_UNTRUSTED_MK=$(shell find . -name '*sgx_u.mk') -ALL_TRUSTED_MK=$(shell find . -name '*sgx_t.mk') -ALL_STATIC_MK=$(shell find . -name '*sgx_t_static.mk') - -.PHONY: all clean run - -all clean: - $(foreach U_MK, $(ALL_UNTRUSTED_MK), $(MAKE) -C $(shell dirname $(U_MK)) -f $(shell basename $(U_MK)) $@;) - $(foreach T_MK, $(ALL_TRUSTED_MK), $(MAKE) -C $(shell dirname $(T_MK)) -f $(shell basename $(T_MK)) $@;) - $(foreach U_MK, $(ALL_STATIC_MK), $(MAKE) -C $(shell dirname $(U_MK)) -f $(shell basename $(U_MK)) $@;) - -run: - $(foreach U_MK, $(ALL_UNTRUSTED_MK), $(MAKE) -C $(shell dirname $(U_MK)) -f $(shell basename $(U_MK)) $@;) - From 7e5ff86c6e1d31e49f42e3d7ac2bcf96dfbdd1a0 Mon Sep 17 00:00:00 2001 From: LinaMedlej Date: Sun, 10 Dec 2017 21:10:42 +0200 Subject: [PATCH 3/3] Add files via upload eleos_core SMP --- eleos_core/Makefile | 14 + .../trustedlib_lib_services/common/Queue.cpp | 1 + .../trustedlib_lib_services/common/Queue.o | Bin 0 -> 3760 bytes .../common/SyncUtils.o | Bin 0 -> 1712 bytes .../lib_services.trusted.a | Bin 0 -> 70188 bytes .../lib_services.untrusted.a | Bin 0 -> 20176 bytes .../static_trusted/Aptr.cpp | 337 +++++++++++++++++- .../static_trusted/Aptr.h | 5 +- .../static_trusted/Aptr.o | Bin 0 -> 42112 bytes .../static_trusted/PageCache.h | 16 +- .../static_trusted/lib_services.cpp | 5 + .../static_trusted/lib_services.edl | 5 +- .../static_trusted/lib_services.o | Bin 0 -> 2120 bytes .../static_trusted/lib_services_t.h | 31 ++ .../static_trusted/mem.cpp | 5 + .../static_trusted/mem.o | Bin 0 -> 13656 bytes .../static_trusted/rpc_ocall.o | Bin 0 -> 1984 bytes .../static_trusted/trusted_utils.o | Bin 0 -> 1904 bytes .../untrusted/init_services.cpp | 32 +- .../untrusted/init_services.h | 3 +- .../untrusted/init_services.o | Bin 0 -> 5984 bytes .../untrusted/lib_services_u.c | 88 +++++ .../untrusted/lib_services_u.h | 31 ++ .../untrusted/lib_services_u.o | Bin 0 -> 3160 bytes .../untrusted/rpc_worker.h | 2 +- .../untrusted/rpc_worker.o | Bin 0 -> 4232 bytes 26 files changed, 558 insertions(+), 17 deletions(-) create mode 100644 eleos_core/Makefile create mode 100644 eleos_core/trustedlib_lib_services/common/Queue.o create mode 100644 eleos_core/trustedlib_lib_services/common/SyncUtils.o create mode 100644 eleos_core/trustedlib_lib_services/lib_services.trusted.a create mode 100644 eleos_core/trustedlib_lib_services/lib_services.untrusted.a create mode 100644 eleos_core/trustedlib_lib_services/static_trusted/Aptr.o create mode 100644 eleos_core/trustedlib_lib_services/static_trusted/lib_services.o create mode 100644 eleos_core/trustedlib_lib_services/static_trusted/lib_services_t.h create mode 100644 eleos_core/trustedlib_lib_services/static_trusted/mem.o create mode 100644 eleos_core/trustedlib_lib_services/static_trusted/rpc_ocall.o create mode 100644 eleos_core/trustedlib_lib_services/static_trusted/trusted_utils.o create mode 100644 eleos_core/trustedlib_lib_services/untrusted/init_services.o create mode 100644 eleos_core/trustedlib_lib_services/untrusted/lib_services_u.c create mode 100644 eleos_core/trustedlib_lib_services/untrusted/lib_services_u.h create mode 100644 eleos_core/trustedlib_lib_services/untrusted/lib_services_u.o create mode 100644 eleos_core/trustedlib_lib_services/untrusted/rpc_worker.o diff --git a/eleos_core/Makefile b/eleos_core/Makefile new file mode 100644 index 0000000..b1329e0 --- /dev/null +++ b/eleos_core/Makefile @@ -0,0 +1,14 @@ +ALL_UNTRUSTED_MK=$(shell find . -name '*sgx_u.mk') +ALL_TRUSTED_MK=$(shell find . -name '*sgx_t.mk') +ALL_STATIC_MK=$(shell find . -name '*sgx_t_static.mk') + +.PHONY: all clean run + +all clean: + $(foreach U_MK, $(ALL_UNTRUSTED_MK), $(MAKE) -C $(shell dirname $(U_MK)) -f $(shell basename $(U_MK)) $@;) + $(foreach T_MK, $(ALL_TRUSTED_MK), $(MAKE) -C $(shell dirname $(T_MK)) -f $(shell basename $(T_MK)) $@;) + $(foreach U_MK, $(ALL_STATIC_MK), $(MAKE) -C $(shell dirname $(U_MK)) -f $(shell basename $(U_MK)) $@;) + +run: + $(foreach U_MK, $(ALL_UNTRUSTED_MK), $(MAKE) -C $(shell dirname $(U_MK)) -f $(shell basename $(U_MK)) $@;) + diff --git a/eleos_core/trustedlib_lib_services/common/Queue.cpp b/eleos_core/trustedlib_lib_services/common/Queue.cpp index 44c8207..a1feed5 100644 --- a/eleos_core/trustedlib_lib_services/common/Queue.cpp +++ b/eleos_core/trustedlib_lib_services/common/Queue.cpp @@ -23,6 +23,7 @@ Queue::~Queue() int Queue::enqueue(request* elem) { + spin_lock(&_lock); if(rear-front == queue_size) diff --git a/eleos_core/trustedlib_lib_services/common/Queue.o b/eleos_core/trustedlib_lib_services/common/Queue.o new file mode 100644 index 0000000000000000000000000000000000000000..650bcf2eb11503226301a3415b535c660f08f358 GIT binary patch literal 3760 zcmbtX&u<%55PtRsYC`0gKv1BRxCfvCy7Gqnpde5j$MqttG}KN&q{wj`hemO1;~!PR zp{*1ISRqmlfcOU}hjQS8lmkLZb4VpFg%d(TJvI>>f-0mSkivY=Z<5W+nnM|BcjkTb z&CJ`k^WNH5qVcm{k4Lb0#H-?9#HbL(2M+83X%2{X(I&ZYA*NaB7U{3w?ryYp4v1;9 zwetfBB<$MXTd?ff?eT3GhyC_aJHXADOk&q|H)B2k_GT;~_41Vtd-J26P7DZMyb-W# zZ*JL(cXqpWmp={!g|ODvw~f2@by+!_j4yu$bQG2C+Mn^-9a(=V(NeqhT*UW^XcD4g z)_x?%`d^*v+m9|cH80-qJhf*C(RI`Q!mi~u0<}boj2gGr-U(mW;3N`TnO-?~zQgsH zx0LX`oM@?Z|3{T2S;Z$a+O@55lxgi0oWWZA?f2d{s@ZB5k9`jki$q=uo*JF3<}1}; zui0aUPWM&i$hvIxnV}xDr>l+!yF*rAs4sK|RUT2LJnx?up80_1c*`;03cYN+j3<=O zt8@qHkh0sL!~VdcH}3b534R$M5mHO9|GM~(5Fq}k3Bc1fmU!4L)`Cz3So$24RAd1Q89#L z6FJ<5+&KjMN$bLMz`4LS`=pjWjLNS|~$xj!ev>@{9K^i+5>-EoGU0xs?@+@88Fpl>O z0UzfV<39i-0ghf~{1<>EI)1wjOZ;)NneSCwOwVsQaA*FZ2KbYX{0}?wD_DMi!Qmd^ z6A0<}oCep4p8%kQsV2(wgx&vbN|DdQwc z77^g&zH@c*jxaNYxw&kf>g5ZStQi{~JzcJ(GqY3$Q^{UTO_$PhSz*3gDpZU71piBa zOVQ5vz{v)b!S5G6g7=QTgRpKCZ`W!2{egJ&2gk8)6wmM1S-;&SK1djPN&liw5C)0E z>5zcKhIyPW%w>Qsr`%Erxlb^E@OVDl$4?W668e|yYppI(r06hyvmoca##&@#YlhG|fm)rWUslp*e#QNha#__!V zRl-n8uYXh350cL*9M4#h47d6_s=lp=sE=Py9MAQa2}3EKCz(>VRQ+BClveQmI(|+# zV@~P`Z9UnibFZs-ogP%cDhDdf^Jn-P8E()2q9V>KBAy@blH>XLadzmvi;!;=@jDD0 mqR$^=eeR(DtiUa$@xKATQuX@y1?*OT?LKml__c!CQ2YxA7pvd^ literal 0 HcmV?d00001 diff --git a/eleos_core/trustedlib_lib_services/common/SyncUtils.o b/eleos_core/trustedlib_lib_services/common/SyncUtils.o new file mode 100644 index 0000000000000000000000000000000000000000..b5ae21b5ddc016aa36635c7234625f33b19fcddb GIT binary patch literal 1712 zcmbtT&ubG=5T5N;(`q5H3Kc3Oo>a7t-I4~YAd6MogNUe+DutND4GBp$A^R2@4|=Hw z@sdBKf_U&$2>9a(|CC3zS)K2}Y4( z0XFTC@5QbMQ!okc``09|rL!9``|RCL`o)Z#ex7=|CBM`LUkBtx-?u*w)7dKkZ&M^2 z{?aGqZ_dc0=~tr>4t%e*|^=ak}UiH6X@E*r&2Cw=D5%$}%TtSq*J*+EF`s)(J!?G-c zsDvR1A_ShG(ezt=5Y%ey7aRiXuhev$NBmlB>4{K#Fv$Q0-BX>cQBxT#nVajKXJha%pXFezgp!VXZ{GH rIeS`KVY13P1!n&go4u2Em4)XS4nVg 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
    <#$tN#s+K7eF5hTO#(S-bJoTpK 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 #include "rpc_ocall.h" - +volatile int g_temp_t =0; unsigned char DUMMY = 0; volatile unsigned long long* g_perf_counters; @@ -28,6 +28,12 @@ bool g_is_initialized; unsigned long g_evict_counter = 0, g_decrypt_counter = 0; unsigned long g_dirty=0; +/**************prefetcher*******************/ +int prefetch_pages_to_swapIn = 1; //prefetcher global counter indicates how much pages to swap in +#define MAX_PAGES 5 +#define MIN_PAGES 1 +/**************prefetcher*******************/ + // input: pgae index // output: trusted memory PageCache g_aptr_crypto_page_cache_l1; @@ -115,6 +121,10 @@ int initialize_aptr(void* ptr_pool, // untrusted memory ptr } g_is_initialized = true; +/**************prefetcher*******************/ + prefetch_pages_to_swapIn = 1; //prefetche + ocall_create_background_thread(); +/**************prefetcher*******************/ return 0; } @@ -135,7 +145,7 @@ int try_evict_page(item_t* pce) sgx_aes_gcm_128bit_tag_t& mac = evicted_pagemetadata->mac_ptr[0]; sgx_read_rand(evicted_pagemetadata->nonce, NONCE_BYTE_SIZE); unsigned char* ram_page_ptr = g_base_pool_ptr + page_index * PAGE_SIZE; - +//spin_lock(&g_temp_t); sgx_status_t ret = sgx_rijndael128GCM_encrypt(&g_eviction_key, *prm_addr, PAGE_SIZE, @@ -157,6 +167,138 @@ int try_evict_page(item_t* pce) return 0; } +/*******************************************************************************************/ +/****************************************prefetch*******************************************/ +/*******************************************************************************************/ +volatile int lock_variables=0; + + +volatile int g_flag_to_prefetch_signaled=0; +volatile int page_index_global; +volatile int sub_page_index_global; +volatile int pages_toSwapIn_global; + + + +//int flag0=0; +int flag1=0; +void prefetch(int page_index, int sub_page_index) { + + + //debug("im thread which swap page index %d \n ",page_index); + if (g_aptr_crypto_page_cache_l1.m_page_cache_size //TODO in background thread + >= CACHE_CAPACITY - MAX_NUM_OF_THREADS_OPTIMIZATION) { + //if(flag0==0){ + //BEGIN_PF_MEASURE(g_perf_counters); // cccc + //flag0=1; + //} + /* + if (cache_size >= CACHE_CAPACITY - LOAD_FACTOR) + { + //start async worker for quick eviction optimization + rpc_ocall(-1, NULL); + } + */ + //debug("swapping out prefetcher_bits \n"); + //spin_lock(&lock_variables); + item_t* page_to_evict = + g_aptr_crypto_page_cache_l1.get_page_index_to_evict(); + /*if(page_to_evict==NULL){ + debug("is NULLL!!!"); + }*/ + char prefetcher_bits=page_to_evict->prefetcher_bits; + //try_evict_page(page_to_evict); + //spin_unlock(&lock_variables); + switch (prefetcher_bits) { + + case '0': + break; + case '1': + spin_lock(&lock_variables); + prefetch_pages_to_swapIn--; + if(prefetch_pages_to_swapIn<=0){ + prefetch_pages_to_swapIn=MIN_PAGES; + } + spin_unlock(&lock_variables); + break; + case '2': + break; + default: + ASSERT(false); + //printf("error counter prefetcher_bits "); + } + try_evict_page(page_to_evict); + } + + spin_lock(&g_free_epc_pages_lock); + auto free_epc_page_it = g_free_epc_pages.begin(); + ASSERT(free_epc_page_it != g_free_epc_pages.end()); + unsigned char** prm_ptr = g_free_epc_pages.back(); + g_free_epc_pages.pop_back(); + spin_unlock(&g_free_epc_pages_lock); + + auto crypto_item = g_aptr_crypto_page_cache_llc.get(page_index); +#ifdef APTR_RANDOM_ACCESS + if (crypto_item != NULL && crypto_item->is_initialized[sub_page_index]) +#else + if (crypto_item != NULL) // not in crypto cache +#endif + { + unsigned char* ram_page_ptr = g_base_pool_ptr + page_index * PAGE_SIZE + + sub_page_index * SUB_PAGE_SIZE; + unsigned char* epc_ptr = (uint8_t*) *prm_ptr + + sub_page_index * SUB_PAGE_SIZE; + unsigned char* nonce = crypto_item->nonce + + sub_page_index * NONCE_BYTE_SIZE; + sgx_aes_gcm_128bit_tag_t& mac = crypto_item->mac_ptr[sub_page_index]; +//spin_lock(&g_temp_t); + sgx_status_t ret = sgx_rijndael128GCM_decrypt(&g_eviction_key, + ram_page_ptr, + SUB_PAGE_SIZE, epc_ptr, nonce, + NONCE_BYTE_SIZE, + NULL, 0, &mac); +//spin_unlock(&g_temp_t); + ASSERT(ret == SGX_SUCCESS); + + } + + // Try add to cache, if other aptr already added while we worked on it - just return it as a minor, and return our page to the free pages pool. +#ifdef APTR_RANDOM_ACCESS + if (!g_aptr_crypto_page_cache_l1.try_add(page_index, prm_ptr, sub_page_index)) +#else + if (!g_aptr_crypto_page_cache_l1.try_add(page_index, prm_ptr)) +#endif + { + item_t* found = g_aptr_crypto_page_cache_l1.get(page_index); + ASSERT(found != NULL); // if NULL - abort! + +#ifdef APTR_RANDOM_ACCESS + if (!found->is_valid[sub_page_index]) + { + memcpy(*found->epc + sub_page_index * SUB_PAGE_SIZE, (uint8_t*)*prm_ptr + sub_page_index * SUB_PAGE_SIZE, SUB_PAGE_SIZE); + found->is_valid[sub_page_index] = true; + } +#endif + spin_lock(&g_free_epc_pages_lock); + g_free_epc_pages.push_back(prm_ptr); + spin_unlock(&g_free_epc_pages_lock); + prm_ptr = found->epc; + /* if(flag1==0){ + END_PF_MEASURE(g_perf_counters); // cccc + flag1=1; + debug("timeee is %d\n",*g_perf_counters); + }*/ + } else { //if it is not already added change the bit , else you can take the previos one + + item_t* new_pg = g_aptr_crypto_page_cache_l1.get(page_index); + new_pg->prefetcher_bits = '1'; //prefecher pages + + } +} + +/*******************************************************************************************/ +/****************************************prefetch*******************************************/ +/*******************************************************************************************/ void page_fault(aptr_t* aptr, int base_page_index) { @@ -205,23 +347,166 @@ void page_fault(aptr_t* aptr, int base_page_index) #else bool is_minor = it != NULL; #endif + //debug("%d\n",prefetch_pages_to_swapIn); + if (is_minor) // minor #PF { + switch (it->prefetcher_bits) { + case '0': // prefetcher didnt bring page + spin_lock(&lock_variables); + prefetch_pages_to_swapIn--; + it->prefetcher_bits = '2'; + if(prefetch_pages_to_swapIn<=0){ + prefetch_pages_to_swapIn=MIN_PAGES; + } + spin_unlock(&lock_variables); + + break; + case '1': // prefetcher brought page + spin_lock(&lock_variables); + prefetch_pages_to_swapIn++; + it->prefetcher_bits = '2'; + if(prefetch_pages_to_swapIn>MAX_PAGES){ + prefetch_pages_to_swapIn=MAX_PAGES; + } + spin_unlock(&lock_variables); + + break; + case '2': // idle state + break; + default: + ASSERT(false); + //printf("error counter prefetcher_bits "); + } + //debug("minor the prefetch_pages_to_swapIn %d\n",prefetch_pages_to_swapIn); aptr->prm_ptr = it->epc; return; } + // debug("not minor\n"); + + if (g_aptr_crypto_page_cache_l1.m_page_cache_size //TODO in background thread + >= CACHE_CAPACITY - MAX_NUM_OF_THREADS_OPTIMIZATION) { + /* + if (cache_size >= CACHE_CAPACITY - LOAD_FACTOR) + { + //start async worker for quick eviction optimization + rpc_ocall(-1, NULL); + } + */ + //spin_lock(&lock_variables); + item_t* page_to_evict = + g_aptr_crypto_page_cache_l1.get_page_index_to_evict(); + /*if(page_to_evict==NULL){ + debug("is NULLL!!!"); + }*/ + char prefetcher_bits=page_to_evict->prefetcher_bits; + //try_evict_page(page_to_evict); + //spin_unlock(&lock_variables); + switch (prefetcher_bits) { + + case '0': + break; + case '1': + spin_lock(&lock_variables); + prefetch_pages_to_swapIn--; + if(prefetch_pages_to_swapIn<=0){ + prefetch_pages_to_swapIn=MIN_PAGES; + } + spin_unlock(&lock_variables); + break; + case '2': + break; + default: + ASSERT(false); + //printf("error counter prefetcher_bits "); + } + try_evict_page(page_to_evict); + } + + spin_lock(&g_free_epc_pages_lock); + auto free_epc_page_it = g_free_epc_pages.begin(); + ASSERT(free_epc_page_it != g_free_epc_pages.end()); + unsigned char** prm_ptr = g_free_epc_pages.back(); + g_free_epc_pages.pop_back(); + spin_unlock(&g_free_epc_pages_lock); + + auto crypto_item = g_aptr_crypto_page_cache_llc.get(page_index); +#ifdef APTR_RANDOM_ACCESS + if (crypto_item != NULL && crypto_item->is_initialized[sub_page_index]) +#else + if (crypto_item != NULL) // not in crypto cache +#endif + { + unsigned char* ram_page_ptr = g_base_pool_ptr + page_index * PAGE_SIZE + + sub_page_index * SUB_PAGE_SIZE; + unsigned char* epc_ptr = (uint8_t*) *prm_ptr + + sub_page_index * SUB_PAGE_SIZE; + unsigned char* nonce = crypto_item->nonce + + sub_page_index * NONCE_BYTE_SIZE; + sgx_aes_gcm_128bit_tag_t& mac = crypto_item->mac_ptr[sub_page_index]; +//spin_lock(&g_temp_t); + sgx_status_t ret = sgx_rijndael128GCM_decrypt(&g_eviction_key, + ram_page_ptr, + SUB_PAGE_SIZE, epc_ptr, nonce, + NONCE_BYTE_SIZE, + NULL, 0, &mac); +//spin_unlock(&g_temp_t); + ASSERT(ret == SGX_SUCCESS); + } + // Try add to cache, if other aptr already added while we worked on it - just return it as a minor, and return our page to the free pages pool. +#ifdef APTR_RANDOM_ACCESS + if (!g_aptr_crypto_page_cache_l1.try_add(page_index, prm_ptr, sub_page_index)) +#else + if (!g_aptr_crypto_page_cache_l1.try_add(page_index, prm_ptr)) +#endif + { + item_t* found = g_aptr_crypto_page_cache_l1.get(page_index); + ASSERT(found != NULL); // if NULL - abort! - if (g_aptr_crypto_page_cache_l1.m_page_cache_size >= CACHE_CAPACITY - MAX_NUM_OF_THREADS_OPTIMIZATION) +#ifdef APTR_RANDOM_ACCESS + if (!found->is_valid[sub_page_index]) + { + memcpy(*found->epc + sub_page_index * SUB_PAGE_SIZE, (uint8_t*)*prm_ptr + sub_page_index * SUB_PAGE_SIZE, SUB_PAGE_SIZE); + found->is_valid[sub_page_index] = true; + } +#endif + spin_lock(&g_free_epc_pages_lock); + g_free_epc_pages.push_back(prm_ptr); + spin_unlock(&g_free_epc_pages_lock); + prm_ptr = found->epc; + } else { //if it is not already added change the bit , else you can take the previos one + + item_t* new_pg = g_aptr_crypto_page_cache_l1.get(page_index); + new_pg->prefetcher_bits = '0'; //real page fault + //debug("b3bee jded the prefetch_pages_to_swapIn %d\n",prefetch_pages_to_swapIn); + } + aptr->prm_ptr = prm_ptr; + /***************************************Background thread******************************************/ + //debug("before the spin lock"); + //debug("im main thread which swap page index %d prfetching %d \n ",page_index,prefetch_pages_to_swapIn); + + spin_lock(&lock_variables); + page_index_global=page_index; + g_flag_to_prefetch_signaled=1; + sub_page_index_global=sub_page_index; + spin_unlock(&lock_variables); + + //while(g_flag_to_prefetch_signaled); + //debug("im main thread which swap page index %d prfetching %d \n ",page_index,prefetch_pages_to_swapIn); + + /***************************************Background thread******************************************/ + + + /*if (g_aptr_crypto_page_cache_l1.m_page_cache_size >= CACHE_CAPACITY - MAX_NUM_OF_THREADS_OPTIMIZATION) { /* if (cache_size >= CACHE_CAPACITY - LOAD_FACTOR) { - //start async worker for quick eviction optimization - rpc_ocall(-1, NULL); + //start async 1, NULL); } */ - item_t* page_to_evict = g_aptr_crypto_page_cache_l1.get_page_index_to_evict(); + /* item_t* page_to_evict = g_aptr_crypto_page_cache_l1.get_page_index_to_evict(); try_evict_page(page_to_evict); } @@ -281,7 +566,7 @@ void page_fault(aptr_t* aptr, int base_page_index) } // finally, link - aptr->prm_ptr = prm_ptr; + aptr->prm_ptr = prm_ptr;*/ } #ifdef APTR_RANDOM_ACCESS @@ -305,7 +590,7 @@ int aptr_fsync(aptr_t* aptr, int base_page_index) unsigned char* nonce = evicted_pagemetadata->nonce + sub_page_index * NONCE_BYTE_SIZE; sgx_read_rand(nonce, NONCE_BYTE_SIZE); unsigned char* epc_ptr = *aptr->prm_ptr + sub_page_index * SUB_PAGE_SIZE; - +//spin_lock(&g_temp_t); sgx_status_t ret = sgx_rijndael128GCM_encrypt(&g_eviction_key, epc_ptr, SUB_PAGE_SIZE, @@ -315,7 +600,7 @@ int aptr_fsync(aptr_t* aptr, int base_page_index) NULL, 0, &mac); - +//spin_unlock(&g_temp_t); ASSERT (ret == SGX_SUCCESS); // keep track of free'd addresses @@ -501,3 +786,37 @@ void * memcpy_aptr(char *dst0, const char *src0, size_t length) while (--length != 0); return dst0; } + +void background_thread_aux(){ + int page_index; + int sub_page_index; + int pages_toSwapIn; + int prefetch_signal; + + while (true) { + + spin_lock(&lock_variables); + prefetch_signal=g_flag_to_prefetch_signaled; + g_flag_to_prefetch_signaled=0; + spin_unlock(&lock_variables); + + if (prefetch_signal){ + + spin_lock(&lock_variables); + page_index=page_index_global; + sub_page_index=sub_page_index_global; + pages_toSwapIn=prefetch_pages_to_swapIn; + spin_unlock(&lock_variables); + + + for (int i = 1; i <= pages_toSwapIn; i++){ //prefetcher + prefetch(page_index+i, sub_page_index); + } + } + else asm("pause"); // in case hyper threading is enabled + } + +} + + + diff --git a/eleos_core/trustedlib_lib_services/static_trusted/Aptr.h b/eleos_core/trustedlib_lib_services/static_trusted/Aptr.h index 3b7480d..cb86b45 100644 --- a/eleos_core/trustedlib_lib_services/static_trusted/Aptr.h +++ b/eleos_core/trustedlib_lib_services/static_trusted/Aptr.h @@ -102,12 +102,11 @@ class Aptr { m_aptr.offset = ((((__int64_t)ram_ptr - (__int64_t)g_base_pool_ptr)) & PAGE_BITS_MASK) + PAGE_SIZE; m_aptr.page = -1; m_aptr.prm_ptr = (unsigned char**)&DUMMY; // DUMMY VALUE - m_aptr.hint_write = false; + m_aptr.hint_write = true; #ifdef APTR_RANDOM_ACCESS m_aptr.sub_page_index = 0; #endif m_base_page_index = ((((__int64_t)ram_ptr - (__int64_t)g_base_pool_ptr)) >> PAGE_SIZE_LOG); - ASSERT(m_base_page_index >= 0); } @@ -285,4 +284,6 @@ long long get_aptr_range(); void *memmove_aptr_reg(void *dst0, void *src0, size_t length); void *memmove_reg_aptr(void *dst0, void *src0, size_t length); +void background_thread_aux(); + #endif /* TRUSTEDLIB_LIB_SERVICES_STATIC_TRUSTED_APTR_H_ */ diff --git a/eleos_core/trustedlib_lib_services/static_trusted/Aptr.o b/eleos_core/trustedlib_lib_services/static_trusted/Aptr.o new file mode 100644 index 0000000000000000000000000000000000000000..dbe457afb85636402a2c995012a30a5f1db8f887 GIT binary patch literal 42112 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 iuY?yHC>46_^GrJNq09dkVX5S|vcidequeue(); bucket& bkt = m_buckets[page_index % m_hashmap_size]; @@ -236,7 +244,10 @@ class PageCache if (p == NULL) // no items yet in this bucket { item_t* it = new item_t(); - it->page_index = page_index; + /**************prefetcher*******************/ + it->prefetcher_bits='0'; //prefetcher + /**************prefetcher*******************/ + it->page_index = page_index; it->epc = epc_page; #ifdef APTR_RANDOM_ACCESS for (int i=0;iprefetcher_bits='0'; //prefetcher + /**************prefetcher*******************/ it->page_index = page_index; it->epc = epc_page; it->next = NULL; diff --git a/eleos_core/trustedlib_lib_services/static_trusted/lib_services.cpp b/eleos_core/trustedlib_lib_services/static_trusted/lib_services.cpp index deaf11c..99a271e 100644 --- a/eleos_core/trustedlib_lib_services/static_trusted/lib_services.cpp +++ b/eleos_core/trustedlib_lib_services/static_trusted/lib_services.cpp @@ -21,3 +21,8 @@ void ecall_erase_aptr_pcache(int num_entries) { remove_entries_pcache(num_entries); } + + +void ecall_background_thread(){ + background_thread_aux(); +} diff --git a/eleos_core/trustedlib_lib_services/static_trusted/lib_services.edl b/eleos_core/trustedlib_lib_services/static_trusted/lib_services.edl index b6bdea1..5730911 100644 --- a/eleos_core/trustedlib_lib_services/static_trusted/lib_services.edl +++ b/eleos_core/trustedlib_lib_services/static_trusted/lib_services.edl @@ -5,6 +5,8 @@ enclave { untrusted { void ocall_debug([in, string] const char *str); void ocall_create_swap_thread(); + void ocall_create_background_thread(); + }; trusted { @@ -16,6 +18,7 @@ enclave { [user_check]unsigned long long * untrusted_counters); - public void ecall_erase_aptr_pcache(int num_entries); + public void ecall_erase_aptr_pcache(int num_entries); + public void ecall_background_thread(); }; }; diff --git a/eleos_core/trustedlib_lib_services/static_trusted/lib_services.o b/eleos_core/trustedlib_lib_services/static_trusted/lib_services.o new file mode 100644 index 0000000000000000000000000000000000000000..3e7bf0fc3f9b09561980d971287cc9a41161cfbb GIT binary patch literal 2120 zcmbW2%}*0S6u_sHkE*yL@j!x!^`bS(rX@hoMAKcqmRO{b4?hr=Z5ix_wv^p10S<}* zOg8a@qX!TE5gxpQoJ0~Y9*s9N9`vM9BfhttvCFni3@@2|@BQYzH@k0UviEypy;VLR z;o>7#NYUezkU&k*jyh(P93_W|vbJZ9DQoYnQR#*>+HZfCMx@~ZdwXPPz}{5sZN>hj z*zc8DHs|_j*ed0B*mkbKgRS96N4O(=(Wy?z z38sBZ*NJbT!Pi`07g&b|#DJeY@>d!;jk z_{;7Xa(}sSpw$(4`M2q%;g$y|=mq?S&ri1n;)=~`M}qD1YB4a!nX z9qjEL>KRstB{|lk5|di0kxQy`d76iq+mZHSimK%-BR-#r$5Zi4e36xaP&Qq0UEkma!o6%WHLQBrvHD>eKDb-3DRGV^AN~o&k7v>2$&%PT^!Vwt1 z@t%RmE?)2Ab1p8pIQAC>>)?LzIzg~es@QNGc<}wzBz`>da&5uBCx$pnq^`k654B9O`zugVN=I_sSzl*s;f4Uu)&GR^#00SAG zzkR|2*Z09<|2e(|M!EgFi4a67DCe$WpS}Bc9GJKFnDT< +#include +#include +#include "sgx_edger8r.h" /* for sgx_ocall etc. */ + + +#include /* for size_t */ + +#define SGX_CAST(type, item) ((type)(item)) + +#ifdef __cplusplus +extern "C" { +#endif + + +int ecall_lib_initialize(void* pool_ptr, size_t pool_size, void* queue, unsigned char** ptr_to_pin, unsigned long int* size_to_pin, unsigned long long* untrusted_counters); +void ecall_erase_aptr_pcache(int num_entries); +void ecall_background_thread(); + +sgx_status_t SGX_CDECL ocall_debug(const char* str); +sgx_status_t SGX_CDECL ocall_create_swap_thread(); +sgx_status_t SGX_CDECL ocall_create_background_thread(); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/eleos_core/trustedlib_lib_services/static_trusted/mem.cpp b/eleos_core/trustedlib_lib_services/static_trusted/mem.cpp index 909ee20..47c8153 100644 --- a/eleos_core/trustedlib_lib_services/static_trusted/mem.cpp +++ b/eleos_core/trustedlib_lib_services/static_trusted/mem.cpp @@ -376,11 +376,16 @@ void memsys5FreeUnsafe(void *pOld){ ** Allocate nBytes of memory. */ void *memsys5Malloc(int nBytes){ + void *p = 0; if( nBytes>0 ){ + memsys5Enter(); + p = memsys5MallocUnsafe(nBytes); + memsys5Leave(); + } return (void*)p; } diff --git a/eleos_core/trustedlib_lib_services/static_trusted/mem.o b/eleos_core/trustedlib_lib_services/static_trusted/mem.o new file mode 100644 index 0000000000000000000000000000000000000000..c84daee32c8e28e9e686d5c6c4bae5f7b4adc9ba GIT binary patch literal 13656 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 B*~tI^ literal 0 HcmV?d00001 diff --git a/eleos_core/trustedlib_lib_services/static_trusted/rpc_ocall.o b/eleos_core/trustedlib_lib_services/static_trusted/rpc_ocall.o new file mode 100644 index 0000000000000000000000000000000000000000..51023a0f0eeca9fa6775487cb30444d7594ac5e7 GIT binary patch literal 1984 zcmbVM%}*0i5TABYs=`v#LlZPMF;Prpvo&oI6HQxasZs%@5EOM&>LR3{cDE5UQ4^v` zqb3~v3ygn)H%T~n^=|w)a`oVi1ZQ^NbT{jAagz6bGryVHd2i;mFS3PPFc1Ki09*sd zViw?KkE5q7H3j`}6!M*`WW~03RtC;Y0Hlla>CWEV=LnMd&YxX!<~uu|LSe*L-%K_C z#!AR{eoS=E<~x$av?Jd=3yYMW7RI)h?x*kVpnr0F{7Q6qez{#Y+tGv)SJaVY z+p=QMV@XAgEAb09AHAf;l4?>NquM8FLkT>+4T1G=V5qM*w1xHXIB?4H0N%ouVFXp^ z3xpXt{5F`DBd?_iIl9>soRTAHIh>J0BFG2mDn0Of-^T@#Z)X8{$uAsPSJPb)5*%__ zjw(T~W4JU4{0}U_VONx`4j>#4Ixm2Ga{~FnpmQGn;%O02{UovahIk$qbHuaI@csCy z1NcV=@J|llq17yFjdH14Rm#mK7`mwu^SG_Ib;k$VWML+gE@(5k++4P(71NnQR)d;e zGd7IGP0VhTLAyJhxJ7xRdfm#;&W^Tp)C?1SV@7kWu3=ndc43V(b1hxRgQ4(5gQ!yv z_x5dxqE14c?8n7?oJbUJ{0*D7;$_r1e$K_y%$Q$t@ziJLqk^aJ(_(SgCB8cw#n`Bs zrDaeIvt{EdYc0K6QcQi_1m$7LEP=9Y7+?`fyIx(Z=+zBS%8go0uVYBPVd~1{^!$in zmdX`StZaQ%TWOVQqFH>H|G+5b&};R+

    rwD>iiZ?)?Nagh;bU37cV23~);j#}KIw zzkB+BBRPkQc%C5~lU7&%-1f##;0d1wE|~lNd`< zSP}-E-;tu);(m#@$kIOE(`uuOAGb00_6Iuw#)gJ2N!>TnR>`!a0l8mRdJ~o%#UIBL zveGa2_i!$qSK+^jaE=L@hUUXo3a9oU~eZr@xy;^JYk zWtQLJ;u30RLGjoD`y*Euil&}MZ&tX^IjUk5blEiKO^~y?se_!ZR>20cRVw6Xjlu%R znYm)oC}B!z&NSq)Yd3oB9e`|C8#!&Jq8E*S?G7s>EM!~ro^%o!Gv|DHbnuM3aDmMv z=_ClB6IYgsn9Z2=ac)|t;AaK*-f(sQiiu3_y!aeq_ML~Vk7KRh{{OdsQq;5GE4MlI z18#`gd4I=`yO=w5(MfPapWM5GvHRz?=b}F8hNzwSJNOm~zw=uY19i@cogb@p>K%R@ unRoVxU{k;x3tZ;i7K^>_&eAtU;-v8Gf3Xc8Z-2)8`gaOAiR*6j_Wui7jm`4_ literal 0 HcmV?d00001 diff --git a/eleos_core/trustedlib_lib_services/untrusted/init_services.cpp b/eleos_core/trustedlib_lib_services/untrusted/init_services.cpp index f1b7304..36a092c 100644 --- a/eleos_core/trustedlib_lib_services/untrusted/init_services.cpp +++ b/eleos_core/trustedlib_lib_services/untrusted/init_services.cpp @@ -6,7 +6,8 @@ */ #include -#include +#include +#include #include "../common/request.h" #include "../common/Queue.h" #include "lib_services_u.h" @@ -30,6 +31,7 @@ void* pool_ptr; void** arr; int swap_eid; +pthread_t tid =4000; unsigned long long* g_perf_counters; @@ -71,6 +73,32 @@ void ocall_create_swap_thread() } +void* background_thread_me(void* arg) +{ + ecall_background_thread(swap_eid); + return NULL; +} + +void ocall_create_background_thread(){ + int res = pthread_create(&tid, NULL, background_thread_me, NULL); + + //pthread_detach(tid); + + //tid++; + if (res) + { printf("failed to make thread\n"); + exit (-1); + } +} + +void ocall_pthread_destroy(){ + printf("Gonna kill prefetch thread...\n"); + int res = pthread_kill( tid, SIGKILL); + if (res<0) + { printf("failed to kill thread\n"); + exit (-1); + } +} void* get_pool_ptr_debug() { return pool_ptr; @@ -119,6 +147,6 @@ int cleanup_lib(sgx_enclave_id_t eid) free(arr); free(pool_ptr); - + ocall_pthread_destroy(); return 0; } diff --git a/eleos_core/trustedlib_lib_services/untrusted/init_services.h b/eleos_core/trustedlib_lib_services/untrusted/init_services.h index 7eda385..f733b8e 100644 --- a/eleos_core/trustedlib_lib_services/untrusted/init_services.h +++ b/eleos_core/trustedlib_lib_services/untrusted/init_services.h @@ -18,7 +18,8 @@ void ocall_create_swap_thread(); void* get_pool_ptr_debug(); void* swap_thread(void* arg); void ocall_debug(const char *str); - +void ocall_create_background_thread(); +void ocall_pthread_destroy(); #ifdef __cplusplus } #endif diff --git a/eleos_core/trustedlib_lib_services/untrusted/init_services.o b/eleos_core/trustedlib_lib_services/untrusted/init_services.o new file mode 100644 index 0000000000000000000000000000000000000000..fc02dfe7ca7da7ca23c01a05e0044dd9ee988bfe GIT binary patch literal 5984 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 CcUTJm literal 0 HcmV?d00001 diff --git a/eleos_core/trustedlib_lib_services/untrusted/lib_services_u.c b/eleos_core/trustedlib_lib_services/untrusted/lib_services_u.c new file mode 100644 index 0000000..7899903 --- /dev/null +++ b/eleos_core/trustedlib_lib_services/untrusted/lib_services_u.c @@ -0,0 +1,88 @@ +#include "lib_services_u.h" +#include + +typedef struct ms_ecall_lib_initialize_t { + int ms_retval; + void* ms_pool_ptr; + size_t ms_pool_size; + void* ms_queue; + unsigned char** ms_ptr_to_pin; + unsigned long int* ms_size_to_pin; + unsigned long long* ms_untrusted_counters; +} ms_ecall_lib_initialize_t; + +typedef struct ms_ecall_erase_aptr_pcache_t { + int ms_num_entries; +} ms_ecall_erase_aptr_pcache_t; + + +typedef struct ms_ocall_debug_t { + char* ms_str; +} ms_ocall_debug_t; + + + +static sgx_status_t SGX_CDECL lib_services_ocall_debug(void* pms) +{ + ms_ocall_debug_t* ms = SGX_CAST(ms_ocall_debug_t*, pms); + ocall_debug((const char*)ms->ms_str); + + return SGX_SUCCESS; +} + +static sgx_status_t SGX_CDECL lib_services_ocall_create_swap_thread(void* pms) +{ + if (pms != NULL) return SGX_ERROR_INVALID_PARAMETER; + ocall_create_swap_thread(); + return SGX_SUCCESS; +} + +static sgx_status_t SGX_CDECL lib_services_ocall_create_background_thread(void* pms) +{ + if (pms != NULL) return SGX_ERROR_INVALID_PARAMETER; + ocall_create_background_thread(); + return SGX_SUCCESS; +} + +static const struct { + size_t nr_ocall; + void * table[3]; +} ocall_table_lib_services = { + 3, + { + (void*)lib_services_ocall_debug, + (void*)lib_services_ocall_create_swap_thread, + (void*)lib_services_ocall_create_background_thread, + } +}; +sgx_status_t ecall_lib_initialize(sgx_enclave_id_t eid, int* retval, void* pool_ptr, size_t pool_size, void* queue, unsigned char** ptr_to_pin, unsigned long int* size_to_pin, unsigned long long* untrusted_counters) +{ + sgx_status_t status; + ms_ecall_lib_initialize_t ms; + ms.ms_pool_ptr = pool_ptr; + ms.ms_pool_size = pool_size; + ms.ms_queue = queue; + ms.ms_ptr_to_pin = ptr_to_pin; + ms.ms_size_to_pin = size_to_pin; + ms.ms_untrusted_counters = untrusted_counters; + status = sgx_ecall(eid, 0, &ocall_table_lib_services, &ms); + if (status == SGX_SUCCESS && retval) *retval = ms.ms_retval; + return status; +} + +sgx_status_t ecall_erase_aptr_pcache(sgx_enclave_id_t eid, int num_entries) +{ + sgx_status_t status; + ms_ecall_erase_aptr_pcache_t ms; + ms.ms_num_entries = num_entries; + status = sgx_ecall(eid, 1, &ocall_table_lib_services, &ms); + return status; +} + +sgx_status_t ecall_background_thread(sgx_enclave_id_t eid) +{ + sgx_status_t status; + status = sgx_ecall(eid, 2, &ocall_table_lib_services, NULL); + return status; +} + diff --git a/eleos_core/trustedlib_lib_services/untrusted/lib_services_u.h b/eleos_core/trustedlib_lib_services/untrusted/lib_services_u.h new file mode 100644 index 0000000..61c5ec7 --- /dev/null +++ b/eleos_core/trustedlib_lib_services/untrusted/lib_services_u.h @@ -0,0 +1,31 @@ +#ifndef LIB_SERVICES_U_H__ +#define LIB_SERVICES_U_H__ + +#include +#include +#include +#include +#include "sgx_edger8r.h" /* for sgx_satus_t etc. */ + + +#include /* for size_t */ + +#define SGX_CAST(type, item) ((type)(item)) + +#ifdef __cplusplus +extern "C" { +#endif + +void SGX_UBRIDGE(SGX_NOCONVENTION, ocall_debug, (const char* str)); +void SGX_UBRIDGE(SGX_NOCONVENTION, ocall_create_swap_thread, ()); +void SGX_UBRIDGE(SGX_NOCONVENTION, ocall_create_background_thread, ()); + +sgx_status_t ecall_lib_initialize(sgx_enclave_id_t eid, int* retval, void* pool_ptr, size_t pool_size, void* queue, unsigned char** ptr_to_pin, unsigned long int* size_to_pin, unsigned long long* untrusted_counters); +sgx_status_t ecall_erase_aptr_pcache(sgx_enclave_id_t eid, int num_entries); +sgx_status_t ecall_background_thread(sgx_enclave_id_t eid); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/eleos_core/trustedlib_lib_services/untrusted/lib_services_u.o b/eleos_core/trustedlib_lib_services/untrusted/lib_services_u.o new file mode 100644 index 0000000000000000000000000000000000000000..813a9cc52d26c4fccd7a612afbcf44cbaf76acfe GIT binary patch literal 3160 zcmbuBO=ufO6o5xk?5K((DLW^*gphs*&t~LFD6J%Np^?pic{cC@SCpX?X7|;f~F z+yEGI-P(!$-h6y3vgx_MdqUa<^JVEF*f(e*D;rioUirc7YNYShPsxpIJ9+tyvvjI; z95$W#DEZ;FiPh}x7ImLqbL_wNG{Tmv$NS~_PxtV&VdW!i<1T^!$)Td$Fb1kQj}N@mFmw zydI4WMTeqqVUW`-l4tP>@hpTrXL^qM*I+Bi&$6*T)KkImWYAA}yaP`$ehT$yFnkI8 zqhRJ4{~EQ_6Ce}eZf})HAzyW&I~n$QtMlHK0B{KwPaY!?aJ$XsNT^4H!pDIi4$<|$ zWn*+5W_MC}D@Vw)y>{ciw%-s!eDG-}K8Vy#e5C6TJ_*F@h)>TD*agP%Tu?a2GeZ9i zLJ+>UTVQ)gH)Z$`S{CNH&m9=}3(juK_K`r#b{an7cXp}$B|O82C?UNa_`4nW^$z?S z;3r{c%b-zcZGhf{)^6SJJMbTYW1J{nGzhI1(7!>W@fqjmN%Ue?sc1&EnA0kXCFTx- za!%ECC1+@=sVP}CH#=jLtx{ew3xM*^@vYoY=bz)1*Rs|Ov7?)6R@W3~9z+>WT^>oM zl*?mdSEVUsDmjvp6r#~&(6Lx5nnhJFE^4GQv!Kucq9_#;GE{PfS!G%+>dap=)QYC4 z^QNK9=hR$5WBl-L@Vs8a2MAVn2-;tJwu~bLL5}yqc>y5^@)OWF-$n?6Z!fGe&YvL! zL4Ujh&INWa$njmn`J0Tp7y>%FQ{bIMAkH>jJk7 zO;<%zTQG^3S51|O*-C{_AX+88IIHP5iAbGr7%kB#i#k>@5p(6aIjsa!OJ!3N$1kPN z(`sZBw1P5isB@Z~!~b{+Fc-Jte$yp@p?tyjX?I)q#k%AS7+7No4wxQh0sU6r`lvki3cmEc6VTe7 zU*f3kDBFtQ`C*Rk^ZNi8F2(B|Ok1#kK?ZHrdh+w*T7?mAx17KjWb>U2ZMScgF}M3L z1KX|uJb#Yy_p9ChKV$n}V~)6geDCr3yngT<>AriM5@C+Z*l~zEf9$(+r|vB102>Sf X#O7Wf{|U5Pe}MgE>2WRS>XN?!ub!>j literal 0 HcmV?d00001 diff --git a/eleos_core/trustedlib_lib_services/untrusted/rpc_worker.h b/eleos_core/trustedlib_lib_services/untrusted/rpc_worker.h index 4e9e65b..1295561 100644 --- a/eleos_core/trustedlib_lib_services/untrusted/rpc_worker.h +++ b/eleos_core/trustedlib_lib_services/untrusted/rpc_worker.h @@ -10,7 +10,7 @@ #include #include - +#include "../common/Queue.h" extern pthread_cond_t g_aptr_cond_var; extern pthread_mutex_t g_aptr_mutex; extern bool g_swap_thread_work; diff --git a/eleos_core/trustedlib_lib_services/untrusted/rpc_worker.o b/eleos_core/trustedlib_lib_services/untrusted/rpc_worker.o new file mode 100644 index 0000000000000000000000000000000000000000..878ae6e298e4ffbed7eec95e531aa992498824f7 GIT binary patch literal 4232 zcmbW4?{8C87{^c7!RjEF4p3(XauL*ta?{EfXwNcVl*+)H=3vm6BiTz0QHR~YA}IB42dBDQ=jj-=d>r6&KEw(>3PoQ zJkN8U^Rw;AzQO*6K!8aJuqRlpB`IU(+M3?Q)h^b;G;SNJbuqKN3N3SPFLQ&}mgddU z-lgPx(pb0U6t@~VXqIl6b5}y9-86T-;@)qTZ|4r>lOeObzA}6vWS)I7{D&9hn^1J| z@aWRIEfjYrN2Nc#E-_5`anNsBz@xJFmIz68{D1iP<;`#{2Tv~++f3)m zbh*Eqb0P@}(aYGi`ODv{^N9_Q#7Z|0e%-2L(pSO>v)p)ZI|VjNz1t~!k=L?WTJltx zIG;}6so$271zC?$`Jt$r<>Bq2gt==Y4^r%*;lqbVW6#qXyuuB=<%<4omM)p4A9+lg z0j*shyL=%zZ&C<^ouTP7Xw~Vmo`?btBQf^*(FG6he zmdOi)Wxzf}7nhJmRVtN$rc;OqSDg>A&jUPIwG+xfPtT)z`^eE^#x3f*jSeHSv$M!s z(U+s0Mx?{&c);WO!;xrbq%-me+&1EaByjuy3(SNAZEKrC^K>x7#5VDsnoWe-D3ED< z#I*34hM3km7aY*^v1YBcM+?WaQ16=KQf2LAmVhk@ZL7~GUG*7QQyVXEd}xqo)ATMp z+GI{0)YuL}@)eavDBW844diep*sJMtjZbQkhT&#SCqmhEYaw$DYb7(j9aQgv&k-#= zsD+@dD7c%A?5|2agCJ|Dhgs0e=$5`9yLG!@6lAM!vGsV<3cP;KK}L&LM}kawOqBj0 zYgSq{HCX3G!Z}#4%vYWlojCgZg8mko?}F%%8Fx|}adg4?`62x&D)r)w5=R`JYDl|R zu@|VWXMch??4@A;AoEnfkDx&k@hYBQy*Qsye?9&kapb=s{P|fX{U<7je@<|ICP}|U zrCyvH#1ZGJu*W%utfhpvHptatOls}K>%}ov;ExeUKJ#AKYMlNR>_=AM$rbqI3Vg!~ z{3YU;?=Hb3Fy4Lg@(1;@3rc08T7-1yP7!>ob9{oS!aYkze zJmIx0m{5OVI-avc2eObZb~cl+rsDak7YBvZSSFsXG9Fh9hv6fbix+HYia9eW*QzDA zZ}-zhr|9fSAl;(VH^mBWJWm$Y`Lo_bM&3ypmNhmrW96KDAxopB+*xZXLg6#hlk_RV z^h7BDTzRl+MmEjRrA4zSwmo6l;}cdgo=THnB26h-Bbn(GP3(YEC{8-ePG<{_ngDG_ z5PL$hgNjDwX2lb{xez}$JUEr6@HJxKNZ}c=c2;Z zJjs;{y0-}(l`eFAW2)bp@?1$S?Z$of3!?p=!rO$73hy;U#<}V>*_WaQSHESiC>(wA zU1COIc9NbRs@=R-k4r7@q~iuXB`z}(aW~G4qlE(Fz@RrLHQ}UZnK5SDmNR2JIaj=3 zbf?J;4#t07aKp|{PC6Nioyoe6F|coBC%?qZ^LNIrWIj%p))>oYi#d_~|F7OBSKLd# zbO|88cW}nB&N$Z)S?i=@kJUA$CL6*B$*<^C1b0pq8M8};q%VkpyRa!F7$2(42X_T> z9~BHC-zzZ4F5&03YM;Jz*hAEXn0|jb?)jQ4*K}VyO6_{{m;OF;ZmY5`;qOmZ`r~a> z#h?En>g4nH1$b7p<$B2&{`LXtz+QGq15y9d>?v}cvHtLt{*vSU#rP2_svHsH?^Yq{ zGJjdWrZCm?ZQ-vn=+aN}cLejBpOe7nAoG|0Z<11P{@2C)&kIA$AHSZZznnkrj{oey tWkLJ|m;PW7Upl-kQ}ryo&vPQ^jHq#M>WzOJ@p|Kj#b1WAz5#tr_AjAMjIsa# literal 0 HcmV?d00001