<86>Dec 26 06:50:25 userdel[2067906]: delete user 'rooter' <86>Dec 26 06:50:25 userdel[2067906]: removed group 'rooter' owned by 'rooter' <86>Dec 26 06:50:25 groupadd[2067917]: group added to /etc/group: name=rooter, GID=990 <86>Dec 26 06:50:25 groupadd[2067917]: group added to /etc/gshadow: name=rooter <86>Dec 26 06:50:25 groupadd[2067917]: new group: name=rooter, GID=990 <86>Dec 26 06:50:25 useradd[2067926]: new user: name=rooter, UID=990, GID=990, home=/root, shell=/bin/bash <86>Dec 26 06:50:25 userdel[2067935]: delete user 'builder' <86>Dec 26 06:50:25 userdel[2067935]: removed group 'builder' owned by 'builder' <86>Dec 26 06:50:25 userdel[2067935]: removed shadow group 'builder' owned by 'builder' <86>Dec 26 06:50:25 groupadd[2067950]: group added to /etc/group: name=builder, GID=991 <86>Dec 26 06:50:25 groupadd[2067950]: group added to /etc/gshadow: name=builder <86>Dec 26 06:50:25 groupadd[2067950]: new group: name=builder, GID=991 <86>Dec 26 06:50:25 useradd[2067958]: new user: name=builder, UID=991, GID=991, home=/usr/src, shell=/bin/bash <13>Dec 26 06:50:26 rpmi: libtinfo-devel-6.1.20180407-alt2 sisyphus+222164.200.1.1 1550686221 installed <13>Dec 26 06:50:26 rpmi: libncurses-devel-6.1.20180407-alt2 sisyphus+222164.200.1.1 1550686221 installed Building target platforms: x86_64 Building for target x86_64 Wrote: /usr/src/in/nosrpm/splitvt-1.6.6_6-alt1.qa1.nosrc.rpm (w1.gzdio) Installing splitvt-1.6.6_6-alt1.qa1.src.rpm Building target platforms: x86_64 Building for target x86_64 Executing(%prep): /bin/sh -e /usr/src/tmp/rpm-tmp.699 + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + rm -rf splitvt-1.6.6_6 + echo 'Source #0 (splitvt-1.6.6_6.tar.bz2):' Source #0 (splitvt-1.6.6_6.tar.bz2): + /bin/bzip2 -dc /usr/src/RPM/SOURCES/splitvt-1.6.6_6.tar.bz2 + /bin/tar -xf - + cd splitvt-1.6.6_6 + /bin/chmod -c -Rf u+rwX,go-w . + exit 0 Executing(%build): /bin/sh -e /usr/src/tmp/rpm-tmp.699 + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + cd splitvt-1.6.6_6 + ./configure Making configuration... config.c:32:1: warning: return type defaults to 'int' [-Wimplicit-int] main(argc, argv) ^~~~ config.c: In function 'main': config.c:116:7: warning: implicit declaration of function 'grep'; did you mean 'free'? [-Wimplicit-function-declaration] if ( grep(INCLUDE, "utmp.h", "ut_host") ) { ^~~~ free config.c:176:8: warning: implicit declaration of function 'access' [-Wimplicit-function-declaration] if ( (access("/var/run/utmp", (R_OK|W_OK)) == 0) && getuid() ) ^~~~~~ config.c:176:54: warning: implicit declaration of function 'getuid'; did you mean 'getenv'? [-Wimplicit-function-declaration] if ( (access("/var/run/utmp", (R_OK|W_OK)) == 0) && getuid() ) ^~~~~~ getenv Aha! You are running Linux! Congratulations on the choice of a GNU generation. Your utmp file uses the host field. I will use termio tty structures. I will use your sockets definition header. I will use wait4() instead of waitpid(). If installed set-uid root, this program will put entries for its windows in /var/run/utmp, and will also change ownership of the ttys it acquires to the user running this program. Done. Type 'make' to build + make make: Entering directory '/usr/src/RPM/BUILD/splitvt-1.6.6_6' gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o splitvt.o splitvt.c splitvt.c: In function 'main': splitvt.c:451:8: warning: ignoring return value of 'write', declared with attribute warn_unused_result [-Wunused-result] write(thisfd, selection, strlen(selection)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ splitvt.c: In function 'normal_input': splitvt.c:547:3: warning: ignoring return value of 'read', declared with attribute warn_unused_result [-Wunused-result] read(ttyfd, &c, 1); ^~~~~~~~~~~~~~~~~~ splitvt.c:592:7: warning: ignoring return value of 'write', declared with attribute warn_unused_result [-Wunused-result] write(thisfd, selection, strlen(selection)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ splitvt.c:626:3: warning: ignoring return value of 'write', declared with attribute warn_unused_result [-Wunused-result] write(thisfd, &c, 1); ^~~~~~~~~~~~~~~~~~~~ gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o misc.o misc.c misc.c: In function 'pty_open': misc.c:81:3: warning: ignoring return value of 'dup', declared with attribute warn_unused_result [-Wunused-result] dup(slave_fd); dup(slave_fd); dup(slave_fd); ^~~~~~~~~~~~~ misc.c:81:18: warning: ignoring return value of 'dup', declared with attribute warn_unused_result [-Wunused-result] dup(slave_fd); dup(slave_fd); dup(slave_fd); ^~~~~~~~~~~~~ misc.c:81:33: warning: ignoring return value of 'dup', declared with attribute warn_unused_result [-Wunused-result] dup(slave_fd); dup(slave_fd); dup(slave_fd); ^~~~~~~~~~~~~ misc.c: In function 'safe_popen': misc.c:900:15: warning: ignoring return value of 'dup', declared with attribute warn_unused_result [-Wunused-result] close(1); dup(pipe_fds[1]); close(0); ^~~~~~~~~~~~~~~~ misc.c:902:15: warning: ignoring return value of 'dup', declared with attribute warn_unused_result [-Wunused-result] close(0); dup(pipe_fds[0]); close(1); ^~~~~~~~~~~~~~~~ gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o utmp.o utmp.c utmp.c: In function 'addutmp': utmp.c:204:14: warning: passing argument 1 of 'time' from incompatible pointer type [-Wincompatible-pointer-types] (void) time(&ut.ut_time); ^ In file included from utmp.c:11: /usr/include/time.h:75:29: note: expected 'time_t *' {aka 'long int *'} but argument is of type 'int32_t *' {aka 'int *'} extern time_t time (time_t *__timer) __THROW; ~~~~~~~~^~~~~~~ utmp.c: In function 'delutmp': utmp.c:240:15: warning: passing argument 1 of 'time' from incompatible pointer type [-Wincompatible-pointer-types] (void) time(&ut.ut_time); ^ In file included from utmp.c:11: /usr/include/time.h:75:29: note: expected 'time_t *' {aka 'long int *'} but argument is of type 'int32_t *' {aka 'int *'} extern time_t time (time_t *__timer) __THROW; ~~~~~~~~^~~~~~~ utmp.c:249:10: warning: ignoring return value of 'chown', declared with attribute warn_unused_result [-Wunused-result] (void) chown(tty, 0, sb.st_gid); ^~~~~~~~~~~~~~~~~~~~~~~~ gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o vt100.o vt100.c vt100.c: In function 'set_attr': vt100.c:144:38: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] (void) check_attr(0, win->textattr, (int)&on); ^ vt100.c: In function 'E_': vt100.c:364:5: warning: ignoring return value of 'write', declared with attribute warn_unused_result [-Wunused-result] write(*source, "\033[?6c", 5); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vt100.c: In function 'E_brac': vt100.c:646:6: warning: ignoring return value of 'write', declared with attribute warn_unused_result [-Wunused-result] write(*source, "\033[0n", 4); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ vt100.c:652:6: warning: ignoring return value of 'write', declared with attribute warn_unused_result [-Wunused-result] write(*source, reply, strlen(reply)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vt100.c:658:5: warning: ignoring return value of 'write', declared with attribute warn_unused_result [-Wunused-result] write(*source, "\033[?6c", 5); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o videomem.o videomem.c gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o terminal.o terminal.c terminal.c: In function 'vt_insertchar': terminal.c:427:6: warning: type of 'numcols' defaults to 'int' [-Wimplicit-int] void vt_insertchar(numcols) ^~~~~~~~~~~~~ At top level: terminal.c:24:19: warning: 'capabilities' defined but not used [-Wunused-variable] static capability capabilities[] = { ^~~~~~~~~~~~ gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o vttest.o vttest.c vttest.c: In function 'vttest': vttest.c:85:4: warning: ignoring return value of 'write', declared with attribute warn_unused_result [-Wunused-result] write(fd,"\033[c", 3); /* Vt100 test: ESC [ c */ ^~~~~~~~~~~~~~~~~~~~~ gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o vtmouse.o vtmouse.c gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o parserc.o parserc.c gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o lock.o lock.c gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o cut-paste.o cut-paste.c cut-paste.c: In function 'put_sel_char': cut-paste.c:48:37: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] (*oldattr)=check_attr(c, *oldattr, (int)on); ^ cut-paste.c: In function 'vt_getsel': cut-paste.c:110:4: warning: 'mark1.y' may be used uninitialized in this function [-Wmaybe-uninitialized] ++endsel.y; ^~~~~~~~~~ cut-paste.c:261:25: note: 'mark1.y' was declared here position here, cursor, mark1, mark2; ^~~~~ cut-paste.c:115:12: warning: 'mark1.x' may be used uninitialized in this function [-Wmaybe-uninitialized] } else if ( mark1->x > mark2->x ) { ^ cut-paste.c:261:25: note: 'mark1.x' was declared here position here, cursor, mark1, mark2; ^~~~~ cut-paste.c:119:2: warning: 'endsel.y' may be used uninitialized in this function [-Wmaybe-uninitialized] getsel_video(win,buf,len, startsel.x, endsel.x, startsel.y, endsel.y); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cut-paste.c:93:21: note: 'endsel.y' was declared here position startsel, endsel; ^~~~~~ cut-paste.c:119:2: warning: 'endsel.x' may be used uninitialized in this function [-Wmaybe-uninitialized] getsel_video(win,buf,len, startsel.x, endsel.x, startsel.y, endsel.y); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cut-paste.c:93:21: note: 'endsel.x' was declared here position startsel, endsel; ^~~~~~ cut-paste.c:119:2: warning: 'startsel.y' may be used uninitialized in this function [-Wmaybe-uninitialized] getsel_video(win,buf,len, startsel.x, endsel.x, startsel.y, endsel.y); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cut-paste.c:93:11: note: 'startsel.y' was declared here position startsel, endsel; ^~~~~~~~ cut-paste.c:119:2: warning: 'startsel.x' may be used uninitialized in this function [-Wmaybe-uninitialized] getsel_video(win,buf,len, startsel.x, endsel.x, startsel.y, endsel.y); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cut-paste.c:93:11: note: 'startsel.x' was declared here position startsel, endsel; ^~~~~~~~ gcc -o splitvt splitvt.o misc.o utmp.o vt100.o videomem.o terminal.o vttest.o vtmouse.o parserc.o lock.o cut-paste.o make: Leaving directory '/usr/src/RPM/BUILD/splitvt-1.6.6_6' + exit 0 Executing(%install): /bin/sh -e /usr/src/tmp/rpm-tmp.89096 + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + /bin/chmod -Rf u+rwX -- /usr/src/tmp/splitvt-buildroot + : + /bin/rm -rf -- /usr/src/tmp/splitvt-buildroot + PATH=/usr/libexec/rpm-build:/usr/src/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/games + cd splitvt-1.6.6_6 + mkdir -p /usr/src/tmp/splitvt-buildroot/usr/share/man/man1 + mkdir -p /usr/src/tmp/splitvt-buildroot/usr/bin + make 'INSTALL=/usr/libexec/rpm-build/install -p' install DESTDIR=/usr/src/tmp/splitvt-buildroot make: Entering directory '/usr/src/RPM/BUILD/splitvt-1.6.6_6' cp splitvt.man /usr/src/tmp/splitvt-buildroot/usr/share/man/man1/splitvt.1 mv splitvt /usr/src/tmp/splitvt-buildroot/usr/bin/splitvt mv examples/xsplitvt /usr/src/tmp/splitvt-buildroot/usr/bin/xsplitvt make: Leaving directory '/usr/src/RPM/BUILD/splitvt-1.6.6_6' + /usr/lib/rpm/brp-alt Cleaning files in /usr/src/tmp/splitvt-buildroot (auto) Verifying and fixing files in /usr/src/tmp/splitvt-buildroot (binconfig,pkgconfig,libtool,desktop,gnuconfig) Checking contents of files in /usr/src/tmp/splitvt-buildroot/ (default) Compressing files in /usr/src/tmp/splitvt-buildroot (auto) 056-debuginfo.brp: WARNING: debuginfo without debug sources. Verifying ELF objects in /usr/src/tmp/splitvt-buildroot (arch=normal,fhs=normal,lfs=relaxed,lint=relaxed,rpath=normal,stack=normal,textrel=normal,unresolved=normal) Hardlinking identical .pyc and .pyo files Processing files: splitvt-1.6.6_6-alt1.qa1 Finding Provides (using /usr/lib/rpm/find-provides) Executing: /bin/sh -e /usr/src/tmp/rpm-tmp.53UNOz find-provides: running scripts (debuginfo,lib,pam,perl,pkgconfig,python,shell) Finding Requires (using /usr/lib/rpm/find-requires) Executing: /bin/sh -e /usr/src/tmp/rpm-tmp.dJ7XZ1 find-requires: running scripts (cpp,debuginfo,files,lib,pam,perl,pkgconfig,pkgconfiglib,python,rpmlib,shebang,shell,static,symlinks,systemd-services) find-requires: FINDPACKAGE-COMMANDS: xterm Requires: /bin/sh, /lib64/ld-linux-x86-64.so.2, libc.so.6(GLIBC_2.14)(64bit), libc.so.6(GLIBC_2.15)(64bit), libc.so.6(GLIBC_2.2.5)(64bit), libc.so.6(GLIBC_2.3)(64bit), libc.so.6(GLIBC_2.3.4)(64bit), libc.so.6(GLIBC_2.4)(64bit), rtld(GNU_HASH), xterm Finding debuginfo files (using /usr/lib/rpm/find-debuginfo-files) Executing: /bin/sh -e /usr/src/tmp/rpm-tmp.BYMfBx Creating splitvt-debuginfo package Processing files: splitvt-debuginfo-1.6.6_6-alt1.qa1 Finding Provides (using /usr/lib/rpm/find-provides) Executing: /bin/sh -e /usr/src/tmp/rpm-tmp.joGnD6 find-provides: running scripts (debuginfo) Finding Requires (using /usr/lib/rpm/find-requires) Executing: /bin/sh -e /usr/src/tmp/rpm-tmp.XnT05I find-requires: running scripts (debuginfo) Requires: splitvt = 1.6.6_6-alt1.qa1, /usr/lib/debug/lib64/ld-linux-x86-64.so.2.debug, debug64(libc.so.6) Wrote: /usr/src/RPM/RPMS/x86_64/splitvt-1.6.6_6-alt1.qa1.x86_64.rpm (w2.lzdio) Wrote: /usr/src/RPM/RPMS/x86_64/splitvt-debuginfo-1.6.6_6-alt1.qa1.x86_64.rpm (w2.lzdio) 1.85user 0.52system 0:07.00elapsed 33%CPU (0avgtext+0avgdata 32156maxresident)k 0inputs+0outputs (0major+241702minor)pagefaults 0swaps 4.47user 2.90system 0:11.38elapsed 64%CPU (0avgtext+0avgdata 120148maxresident)k 0inputs+0outputs (34398major+495059minor)pagefaults 0swaps --- splitvt-1.6.6_6-alt1.qa1.x86_64.rpm.repo 2013-04-17 16:27:14.000000000 +0000 +++ splitvt-1.6.6_6-alt1.qa1.x86_64.rpm.hasher 2021-12-26 06:50:35.129575518 +0000 @@ -2,3 +2,3 @@ /usr/bin/xsplitvt 100755 root:root -/usr/share/man/man1/splitvt.1 100644 root:root +/usr/share/man/man1/splitvt.1.xz 100644 root:root Requires: /bin/sh @@ -15,5 +15,5 @@ Provides: splitvt = 1.6.6_6-alt1.qa1 -File: /usr/bin/splitvt 100755 root:root 71e02a8fdb6f1c5ebf3c9d44965fe409 +File: /usr/bin/splitvt 100755 root:root f9fa73217de6d3fa7688628c1ffd13a1 File: /usr/bin/xsplitvt 100755 root:root 1c1190db931a2dc4440ba64cfa38538a -File: /usr/share/man/man1/splitvt.1 100644 root:root e3a04149378ce0f7b1e7aeab708eff15 -RPMIdentity: a618576c73e6365bf25190036c78f1356aab62bb36e2f4164e152dd1d33ee5f5caaeb82db603ad9f9c73ec3b1ec1751cb4cfedef13e5b9a5a1ee7e1176e27d8f +File: /usr/share/man/man1/splitvt.1.xz 100644 root:root 0b5ab537b3bd859f0d9230e574d038c7 +RPMIdentity: e9e85cac84997332c649d72c1f835e86b6d502a51bc91778fd7362e0c5042e232ad0d9e790bfb616a36ddb18f347ef59298f046e6b0a62c0f628ea2037481d68 --- splitvt-debuginfo-1.6.6_6-alt1.qa1.x86_64.rpm.repo 2013-04-17 16:27:14.000000000 +0000 +++ splitvt-debuginfo-1.6.6_6-alt1.qa1.x86_64.rpm.hasher 2021-12-26 06:50:35.184576334 +0000 @@ -1,4 +1,4 @@ -/usr/lib/debug/.build-id/9a 40755 root:root -/usr/lib/debug/.build-id/9a/bb15d94ba86550097b838f855931703ff405d4 120777 root:root ../../../../bin/splitvt -/usr/lib/debug/.build-id/9a/bb15d94ba86550097b838f855931703ff405d4.debug 120777 root:root ../../usr/bin/splitvt.debug +/usr/lib/debug/.build-id/53 40755 root:root +/usr/lib/debug/.build-id/53/754ecbe7c9c3894c683f9df29e5362d75c727a 120777 root:root ../../../../bin/splitvt +/usr/lib/debug/.build-id/53/754ecbe7c9c3894c683f9df29e5362d75c727a.debug 120777 root:root ../../usr/bin/splitvt.debug /usr/lib/debug/usr/bin/splitvt.debug 100644 root:root @@ -9,6 +9,6 @@ Provides: splitvt-debuginfo = 1.6.6_6-alt1.qa1 -File: /usr/lib/debug/.build-id/9a 40755 root:root -File: /usr/lib/debug/.build-id/9a/bb15d94ba86550097b838f855931703ff405d4 120777 root:root ../../../../bin/splitvt -File: /usr/lib/debug/.build-id/9a/bb15d94ba86550097b838f855931703ff405d4.debug 120777 root:root ../../usr/bin/splitvt.debug -File: /usr/lib/debug/usr/bin/splitvt.debug 100644 root:root 5496b4030ae1b2997a5324fa492f56d5 -RPMIdentity: 0b8ca5b7ebf3007f4879ee8059e928b15362b5c305e4ca45b4111ca84eb02e6875a91bec741a2917e795f855e2498056726b7251a1cee3fabfdc5b2abae36a46 +File: /usr/lib/debug/.build-id/53 40755 root:root +File: /usr/lib/debug/.build-id/53/754ecbe7c9c3894c683f9df29e5362d75c727a 120777 root:root ../../../../bin/splitvt +File: /usr/lib/debug/.build-id/53/754ecbe7c9c3894c683f9df29e5362d75c727a.debug 120777 root:root ../../usr/bin/splitvt.debug +File: /usr/lib/debug/usr/bin/splitvt.debug 100644 root:root 6d59db489a125e7f0862754169aaf2d6 +RPMIdentity: 20fbe6943b2d11a2e675c20d4ca0fd08044f8324c06a9740a316d01efc0e0b14734fa14eb7a876d8b734439fef487a1c74d7bbe33e78ad06c06568fc54f06a71