Received: by mail.netbsd.org (Postfix, from userid 605) id E843F84DA8; Mon, 9 Sep 2019 09:08:09 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by mail.netbsd.org (Postfix) with ESMTP id 6E84F84D3A for ; Mon, 9 Sep 2019 09:08:09 +0000 (UTC) X-Virus-Scanned: amavisd-new at netbsd.org Received: from mail.netbsd.org ([IPv6:::1]) by localhost (mail.netbsd.org [IPv6:::1]) (amavisd-new, port 10025) with ESMTP id sLPnuJA1neIs for ; Mon, 9 Sep 2019 09:08:08 +0000 (UTC) Received: from cvs.NetBSD.org (ivanova.NetBSD.org [IPv6:2001:470:a085:999:28c:faff:fe03:5984]) by mail.netbsd.org (Postfix) with ESMTP id 4171584D22 for ; Mon, 9 Sep 2019 09:08:08 +0000 (UTC) Received: by cvs.NetBSD.org (Postfix, from userid 500) id 3BB48FBF4; Mon, 9 Sep 2019 09:08:08 +0000 (UTC) Content-Transfer-Encoding: 7bit Content-Type: multipart/mixed; boundary="_----------=_1568020088178950" MIME-Version: 1.0 Date: Mon, 9 Sep 2019 09:08:08 +0000 From: "Nia Alarie" Subject: CVS commit: pkgsrc/www/pound To: pkgsrc-changes@NetBSD.org Reply-To: nia@netbsd.org X-Mailer: log_accum Message-Id: <20190909090808.3BB48FBF4@cvs.NetBSD.org> Sender: pkgsrc-changes-owner@NetBSD.org List-Id: pkgsrc-changes.NetBSD.org Precedence: bulk List-Unsubscribe: This is a multi-part message in MIME format. --_----------=_1568020088178950 Content-Disposition: inline Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII" Module Name: pkgsrc Committed By: nia Date: Mon Sep 9 09:08:08 UTC 2019 Modified Files: pkgsrc/www/pound: Makefile distinfo Added Files: pkgsrc/www/pound/patches: patch-config.c patch-http.c patch-pound.h patch-svc.c Removed Files: pkgsrc/www/pound/patches: patch-aa Log Message: pound: Fix build with OpenSSL 1.1. While here, silence some pkglint warnings and convert a patch into a do-install target. Bump PKGREVISION. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 pkgsrc/www/pound/Makefile cvs rdiff -u -r1.7 -r1.8 pkgsrc/www/pound/distinfo cvs rdiff -u -r1.3 -r0 pkgsrc/www/pound/patches/patch-aa cvs rdiff -u -r0 -r1.1 pkgsrc/www/pound/patches/patch-config.c \ pkgsrc/www/pound/patches/patch-http.c \ pkgsrc/www/pound/patches/patch-pound.h \ pkgsrc/www/pound/patches/patch-svc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. --_----------=_1568020088178950 Content-Disposition: inline Content-Length: 14862 Content-Transfer-Encoding: binary Content-Type: text/x-diff; charset=us-ascii Modified files: Index: pkgsrc/www/pound/Makefile diff -u pkgsrc/www/pound/Makefile:1.13 pkgsrc/www/pound/Makefile:1.14 --- pkgsrc/www/pound/Makefile:1.13 Sun Aug 26 22:35:45 2018 +++ pkgsrc/www/pound/Makefile Mon Sep 9 09:08:07 2019 @@ -1,7 +1,8 @@ -# $NetBSD: Makefile,v 1.13 2018/08/26 22:35:45 schmonz Exp $ +# $NetBSD: Makefile,v 1.14 2019/09/09 09:08:07 nia Exp $ DISTNAME= Pound-2.8 PKGNAME= ${DISTNAME:S/Pound/pound/} +PKGREVISION= 1 CATEGORIES= www MASTER_SITES= http://www.apsis.ch/pound/ EXTRACT_SUFX= .tgz @@ -12,7 +13,7 @@ COMMENT= Reverse proxy, load balancer an LICENSE= gnu-gpl-v3 GNU_CONFIGURE= yes -CONFIGURE_ARGS+= --sysconfdir=${PKG_SYSCONFDIR:Q} +CONFIGURE_ARGS+= --sysconfdir=${PKG_SYSCONFDIR} USE_FEATURES.openssl= threads RCD_SCRIPTS= pound @@ -21,7 +22,19 @@ SUBST_CLASSES= config SUBST_MESSAGE.config= Fixing path to default config file. SUBST_STAGE.config= post-build SUBST_FILES.config= pound.8 -SUBST_SED.config= -e "s,/usr/local/etc/,"${PKG_SYSCONFDIR:Q}"/,g" +SUBST_SED.config= -e "s,/usr/local/etc/,"${PKG_SYSCONFDIR}"/,g" + +INSTALLATION_DIRS+= sbin ${PKGMANDIR}/man8 + +do-install: + ${INSTALL_PROGRAM} ${WRKSRC}/pound \ + ${DESTDIR}${PREFIX}/sbin/pound + ${INSTALL_PROGRAM} ${WRKSRC}/poundctl \ + ${DESTDIR}${PREFIX}/sbin/poundctl + ${INSTALL_MAN} ${WRKSRC}/pound.8 \ + ${DESTDIR}${PREFIX}/${PKGMANDIR}/man8/pound.8 + ${INSTALL_MAN} ${WRKSRC}/poundctl.8 \ + ${DESTDIR}${PREFIX}/${PKGMANDIR}/man8/poundctl.8 .include "../../devel/pcre/buildlink3.mk" .include "../../security/openssl/buildlink3.mk" Index: pkgsrc/www/pound/distinfo diff -u pkgsrc/www/pound/distinfo:1.7 pkgsrc/www/pound/distinfo:1.8 --- pkgsrc/www/pound/distinfo:1.7 Sun Aug 26 22:35:45 2018 +++ pkgsrc/www/pound/distinfo Mon Sep 9 09:08:07 2019 @@ -1,7 +1,10 @@ -$NetBSD: distinfo,v 1.7 2018/08/26 22:35:45 schmonz Exp $ +$NetBSD: distinfo,v 1.8 2019/09/09 09:08:07 nia Exp $ SHA1 (Pound-2.8.tgz) = a3371b596d86cedea1678fd329ee6dc8a307c907 RMD160 (Pound-2.8.tgz) = 71b2c4c633ef5dd0b566e30b2f511d618483b74f SHA512 (Pound-2.8.tgz) = cf0b865b17d3628e273626e07733f1320e4768702c0f64c8ef0f78d46667f770b223bdc7dca88016a95e5ebd23ae646f95a9b2f4a54a5a80001a10047f07eacc Size (Pound-2.8.tgz) = 186124 bytes -SHA1 (patch-aa) = 613b1a9dd8666b393d6cb78f99bfbdf9f16acf32 +SHA1 (patch-config.c) = 68a617a0e2cc940055763cb710e89e390ebd3953 +SHA1 (patch-http.c) = 95143b688d0320306638b0770c4667ea21bac478 +SHA1 (patch-pound.h) = 6a47d93321016ebc3609eb2b561b3d4ba16b71df +SHA1 (patch-svc.c) = 52532b316ab96b9b93f5b2c02367e2355675eb86 Added files: Index: pkgsrc/www/pound/patches/patch-config.c diff -u /dev/null pkgsrc/www/pound/patches/patch-config.c:1.1 --- /dev/null Mon Sep 9 09:08:08 2019 +++ pkgsrc/www/pound/patches/patch-config.c Mon Sep 9 09:08:08 2019 @@ -0,0 +1,45 @@ +$NetBSD: patch-config.c,v 1.1 2019/09/09 09:08:08 nia Exp $ + +[PATCH] Support for Openssl 1.1 +https://github.com/graygnuorg/pound/commit/a2c9dde4d055ea8942afb150b7fc3a807d4e5d60.patch + +--- config.c.orig 2018-05-11 10:16:05.000000000 +0000 ++++ config.c +@@ -174,6 +174,16 @@ conf_fgets(char *buf, const int max) + } + } + ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++# define general_name_string(n) \ ++ strndup(ASN1_STRING_get0_data(n->d.dNSName), \ ++ ASN1_STRING_length(n->d.dNSName) + 1) ++#else ++# define general_name_string(n) \ ++ strndup(ASN1_STRING_data(n->d.dNSName), \ ++ ASN1_STRING_length(n->d.dNSName) + 1) ++#endif ++ + unsigned char ** + get_subjectaltnames(X509 *x509, unsigned int *count) + { +@@ -194,8 +204,7 @@ get_subjectaltnames(X509 *x509, unsigned + name = sk_GENERAL_NAME_pop(san_stack); + switch(name->type) { + case GEN_DNS: +- temp[local_count] = strndup(ASN1_STRING_data(name->d.dNSName), ASN1_STRING_length(name->d.dNSName) +- + 1); ++ temp[local_count] = general_name_string(name); + if(temp[local_count] == NULL) + conf_err("out of memory"); + local_count++; +@@ -565,7 +574,9 @@ parse_service(const char *svc_name) + pthread_mutex_init(&res->mut, NULL); + if(svc_name) + strncpy(res->name, svc_name, KEY_SIZE); +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ if((res->sessions = lh_TABNODE_new(t_hash, t_cmp)) == NULL) ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((res->sessions = LHM_lh_new(TABNODE, t)) == NULL) + #else + if((res->sessions = lh_new(LHASH_HASH_FN(t_hash), LHASH_COMP_FN(t_cmp))) == NULL) Index: pkgsrc/www/pound/patches/patch-http.c diff -u /dev/null pkgsrc/www/pound/patches/patch-http.c:1.1 --- /dev/null Mon Sep 9 09:08:08 2019 +++ pkgsrc/www/pound/patches/patch-http.c Mon Sep 9 09:08:08 2019 @@ -0,0 +1,31 @@ +$NetBSD: patch-http.c,v 1.1 2019/09/09 09:08:08 nia Exp $ + +[PATCH] Support for Openssl 1.1 +https://github.com/graygnuorg/pound/commit/a2c9dde4d055ea8942afb150b7fc3a807d4e5d60.patch + +--- http.c.orig 2018-05-11 10:16:05.000000000 +0000 ++++ http.c +@@ -527,12 +527,22 @@ log_bytes(char *res, const LONG cnt) + + /* Cleanup code. This should really be in the pthread_cleanup_push, except for bugs in some implementations */ + ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++# define clear_error() ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L ++# define clear_error() \ ++ if(ssl != NULL) { ERR_clear_error(); ERR_remove_thread_state(NULL); } ++#else ++# define clear_error() \ ++ if(ssl != NULL) { ERR_clear_error(); ERR_remove_state(0); } ++#endif ++ + #define clean_all() { \ + if(ssl != NULL) { BIO_ssl_shutdown(cl); } \ + if(be != NULL) { BIO_flush(be); BIO_reset(be); BIO_free_all(be); be = NULL; } \ + if(cl != NULL) { BIO_flush(cl); BIO_reset(cl); BIO_free_all(cl); cl = NULL; } \ + if(x509 != NULL) { X509_free(x509); x509 = NULL; } \ +- if(ssl != NULL) { ERR_clear_error(); ERR_remove_state(0); } \ ++ clear_error(); \ + } + + /* Index: pkgsrc/www/pound/patches/patch-pound.h diff -u /dev/null pkgsrc/www/pound/patches/patch-pound.h:1.1 --- /dev/null Mon Sep 9 09:08:08 2019 +++ pkgsrc/www/pound/patches/patch-pound.h Mon Sep 9 09:08:08 2019 @@ -0,0 +1,18 @@ +$NetBSD: patch-pound.h,v 1.1 2019/09/09 09:08:08 nia Exp $ + +[PATCH] Support for Openssl 1.1 +https://github.com/graygnuorg/pound/commit/a2c9dde4d055ea8942afb150b7fc3a807d4e5d60.patch + +--- pound.h.orig 2018-05-11 10:16:05.000000000 +0000 ++++ pound.h +@@ -344,7 +344,9 @@ typedef struct _tn { + /* maximal session key size */ + #define KEY_SIZE 127 + +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ DEFINE_LHASH_OF(TABNODE); ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + DECLARE_LHASH_OF(TABNODE); + #endif + Index: pkgsrc/www/pound/patches/patch-svc.c diff -u /dev/null pkgsrc/www/pound/patches/patch-svc.c:1.1 --- /dev/null Mon Sep 9 09:08:08 2019 +++ pkgsrc/www/pound/patches/patch-svc.c Mon Sep 9 09:08:08 2019 @@ -0,0 +1,228 @@ +$NetBSD: patch-svc.c,v 1.1 2019/09/09 09:08:08 nia Exp $ + +[PATCH] Support for Openssl 1.1 +https://github.com/graygnuorg/pound/commit/a2c9dde4d055ea8942afb150b7fc3a807d4e5d60.patch + +--- svc.c.orig 2018-05-11 10:16:05.000000000 +0000 ++++ svc.c +@@ -27,10 +27,17 @@ + + #include "pound.h" + ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++# define TABNODE_GET_DOWN_LOAD(t) lh_TABNODE_get_down_load(t) ++# define TABNODE_SET_DOWN_LOAD(t,n) lh_TABNODE_set_down_load(t,n) ++#else + #ifndef LHASH_OF + #define LHASH_OF(x) LHASH + #define CHECKED_LHASH_OF(type, h) h + #endif ++# define TABNODE_GET_DOWN_LOAD(t) (CHECKED_LHASH_OF(TABNODE, t)->down_load) ++# define TABNODE_SET_DOWN_LOAD(t,n) (CHECKED_LHASH_OF(TABNODE, t)->down_load = n) ++#endif + + /* + * Add a new key/content pair to a hash table +@@ -58,7 +65,9 @@ t_add(LHASH_OF(TABNODE) *const tab, cons + } + memcpy(t->content, content, cont_len); + t->last_acc = time(NULL); +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ if((old = lh_TABNODE_insert(tab, t)) != NULL) { ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((old = LHM_lh_insert(TABNODE, tab, t)) != NULL) { + #else + if((old = (TABNODE *)lh_insert(tab, t)) != NULL) { +@@ -82,7 +91,9 @@ t_find(LHASH_OF(TABNODE) *const tab, cha + TABNODE t, *res; + + t.key = key; +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ if((res = lh_TABNODE_retrieve(tab, &t)) != NULL) { ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((res = (TABNODE *)LHM_lh_retrieve(TABNODE, tab, &t)) != NULL) { + #else + if((res = (TABNODE *)lh_retrieve(tab, &t)) != NULL) { +@@ -102,7 +113,9 @@ t_remove(LHASH_OF(TABNODE) *const tab, c + TABNODE t, *res; + + t.key = key; +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ if((res = lh_TABNODE_delete(tab, &t)) != NULL) { ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((res = LHM_lh_delete(TABNODE, tab, &t)) != NULL) { + #else + if((res = (TABNODE *)lh_delete(tab, &t)) != NULL) { +@@ -127,7 +140,9 @@ t_old_doall_arg(TABNODE *t, ALL_ARG *a) + TABNODE *res; + + if(t->last_acc < a->lim) +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ if((res = lh_TABNODE_delete(a->tab, t)) != NULL) { ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((res = LHM_lh_delete(TABNODE, a->tab, t)) != NULL) { + #else + if((res = lh_delete(a->tab, t)) != NULL) { +@@ -145,6 +160,10 @@ IMPLEMENT_LHASH_DOALL_ARG_FN(t_old, TABN + IMPLEMENT_LHASH_DOALL_ARG_FN(t_old, TABNODE *, ALL_ARG *) + #endif + ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++IMPLEMENT_LHASH_DOALL_ARG(TABNODE,ALL_ARG); ++#endif ++ + /* + * Expire all old nodes + */ +@@ -156,14 +175,16 @@ t_expire(LHASH_OF(TABNODE) *const tab, c + + a.tab = tab; + a.lim = lim; +- down_load = CHECKED_LHASH_OF(TABNODE, tab)->down_load; +- CHECKED_LHASH_OF(TABNODE, tab)->down_load = 0; +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++ down_load = TABNODE_GET_DOWN_LOAD(tab); ++ TABNODE_SET_DOWN_LOAD(tab, 0); ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ lh_TABNODE_doall_ALL_ARG(tab, t_old_doall_arg, &a); ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + LHM_lh_doall_arg(TABNODE, tab, LHASH_DOALL_ARG_FN(t_old), ALL_ARG, &a); + #else + lh_doall_arg(tab, LHASH_DOALL_ARG_FN(t_old), &a); + #endif +- CHECKED_LHASH_OF(TABNODE, tab)->down_load = down_load; ++ TABNODE_SET_DOWN_LOAD(tab, down_load); + return; + } + +@@ -173,7 +194,9 @@ t_cont_doall_arg(TABNODE *t, ALL_ARG *ar + TABNODE *res; + + if(memcmp(t->content, arg->content, arg->cont_len) == 0) +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ if((res = lh_TABNODE_delete(arg->tab, t)) != NULL) { ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + if((res = LHM_lh_delete(TABNODE, arg->tab, t)) != NULL) { + #else + if((res = lh_delete(arg->tab, t)) != NULL) { +@@ -203,15 +226,16 @@ t_clean(LHASH_OF(TABNODE) *const tab, vo + a.tab = tab; + a.content = content; + a.cont_len = cont_len; +- down_load = CHECKED_LHASH_OF(TABNODE, tab)->down_load; +- CHECKED_LHASH_OF(TABNODE, tab)->down_load = 0; +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++ down_load = TABNODE_GET_DOWN_LOAD(tab); ++ TABNODE_SET_DOWN_LOAD(tab, 0); ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ lh_TABNODE_doall_ALL_ARG(tab, t_cont_doall_arg, &a); ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + LHM_lh_doall_arg(TABNODE, tab, LHASH_DOALL_ARG_FN(t_cont), ALL_ARG, &a); + #else + lh_doall_arg(tab, LHASH_DOALL_ARG_FN(t_cont), &a); + #endif +- CHECKED_LHASH_OF(TABNODE, tab)->down_load = down_load; +- return; ++ TABNODE_SET_DOWN_LOAD(tab, down_load); + } + + /* +@@ -1259,6 +1283,31 @@ RSA_tmp_callback(/* not used */SSL *ssl, + return res; + } + ++static int ++generate_key(RSA **ret_rsa, unsigned long bits) ++{ ++#if OPENSSL_VERSION_NUMBER > 0x00908000L ++ int rc = 0; ++ RSA *rsa; ++ ++ rsa = RSA_new(); ++ if (rsa) { ++ BIGNUM *bne = BN_new(); ++ if (BN_set_word(bne, RSA_F4)) ++ rc = RSA_generate_key_ex(rsa, bits, bne, NULL); ++ BN_free(bne); ++ if (rc) ++ *ret_rsa = rsa; ++ else ++ RSA_free(rsa); ++ } ++ return rc; ++#else ++ *ret_rsa = RSA_generate_key(bits, RSA_F4, NULL, NULL); ++ return *ret_rsa != NULL; ++#endif ++} ++ + /* + * Periodically regenerate ephemeral RSA keys + * runs every T_RSA_KEYS seconds +@@ -1271,8 +1320,9 @@ do_RSAgen(void) + RSA *t_RSA1024_keys[N_RSA_KEYS]; + + for(n = 0; n < N_RSA_KEYS; n++) { +- t_RSA512_keys[n] = RSA_generate_key(512, RSA_F4, NULL, NULL); +- t_RSA1024_keys[n] = RSA_generate_key(1024, RSA_F4, NULL, NULL); ++ /* FIXME: Error handling */ ++ generate_key(&t_RSA512_keys[n], 512); ++ generate_key(&t_RSA1024_keys[n], 1024); + } + if(ret_val = pthread_mutex_lock(&RSA_mut)) + logmsg(LOG_WARNING, "thr_RSAgen() lock: %s", strerror(ret_val)); +@@ -1326,11 +1376,11 @@ init_timer(void) + * Pre-generate ephemeral RSA keys + */ + for(n = 0; n < N_RSA_KEYS; n++) { +- if((RSA512_keys[n] = RSA_generate_key(512, RSA_F4, NULL, NULL)) == NULL) { ++ if(!generate_key(&RSA512_keys[n], 512)) { + logmsg(LOG_WARNING,"RSA_generate(%d, 512) failed", n); + return; + } +- if((RSA1024_keys[n] = RSA_generate_key(1024, RSA_F4, NULL, NULL)) == NULL) { ++ if(!generate_key(&RSA1024_keys[n], 1024)) { + logmsg(LOG_WARNING,"RSA_generate(%d, 1024) failed", n); + return; + } +@@ -1417,6 +1467,10 @@ IMPLEMENT_LHASH_DOALL_ARG_FN(t_dump, TAB + IMPLEMENT_LHASH_DOALL_ARG_FN(t_dump, TABNODE *, DUMP_ARG *) + #endif + ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++IMPLEMENT_LHASH_DOALL_ARG(TABNODE,DUMP_ARG); ++#endif ++ + /* + * write sessions to the control socket + */ +@@ -1427,7 +1481,9 @@ dump_sess(const int control_sock, LHASH_ + + a.control_sock = control_sock; + a.backends = backends; +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ lh_TABNODE_doall_DUMP_ARG(sess, t_dump_doall_arg, &a); ++#elif OPENSSL_VERSION_NUMBER >= 0x10000000L + LHM_lh_doall_arg(TABNODE, sess, LHASH_DOALL_ARG_FN(t_dump), DUMP_ARG, &a); + #else + lh_doall_arg(sess, LHASH_DOALL_ARG_FN(t_dump), &a); +@@ -1661,6 +1717,13 @@ thr_control(void *arg) + } + } + ++#ifndef SSL3_ST_SR_CLNT_HELLO_A ++# define SSL3_ST_SR_CLNT_HELLO_A (0x110|SSL_ST_ACCEPT) ++#endif ++#ifndef SSL23_ST_SR_CLNT_HELLO_A ++# define SSL23_ST_SR_CLNT_HELLO_A (0x210|SSL_ST_ACCEPT) ++#endif ++ + void + SSLINFO_callback(const SSL *ssl, int where, int rc) + { --_----------=_1568020088178950--