>>> hiredict: Building community/hiredict 1.3.1-r0 (using abuild 3.13.0-r3) started Tue, 30 Apr 2024 04:43:27 +0000 >>> hiredict: Checking sanity of /home/buildozer/aports/community/hiredict/APKBUILD... >>> hiredict: Analyzing dependencies... >>> hiredict: Installing for build: build-base openssl-dev>3 redict (1/4) Installing openssl-dev (3.3.0-r1) (2/4) Installing redict (7.3.0-r1) Executing redict-7.3.0-r1.pre-install Executing redict-7.3.0-r1.post-install (3/4) Installing .makedepends-hiredict (20240430.044329) (4/4) Installing redict-openrc (7.3.0-r1) Executing busybox-1.36.1-r26.trigger OK: 478 MiB in 111 packages >>> hiredict: Cleaning up srcdir >>> hiredict: Cleaning up pkgdir >>> hiredict: Cleaning up tmpdir >>> hiredict: Fetching https://distfiles.alpinelinux.org/distfiles/v3.20/hiredict-1.3.1.tar.gz Connecting to distfiles.alpinelinux.org (172.105.82.32:443) saving to '/var/cache/distfiles/v3.20/hiredict-1.3.1.tar.gz.part' hiredict-1.3.1.tar.g 100% |********************************| 116k 0:00:00 ETA '/var/cache/distfiles/v3.20/hiredict-1.3.1.tar.gz.part' saved >>> hiredict: Fetching https://distfiles.alpinelinux.org/distfiles/v3.20/hiredict-1.3.1.tar.gz >>> hiredict: Checking sha512sums... hiredict-1.3.1.tar.gz: OK >>> hiredict: Unpacking /var/cache/distfiles/v3.20/hiredict-1.3.1.tar.gz... gcc -std=c99 -c -O3 -fPIC -Os -fstack-clash-protection -Wformat -Werror=format-security -fno-plt -DHIREDICT_TEST_SSL -Wall -Wextra -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -Werror -g -ggdb -pedantic alloc.c gcc -std=c99 -c -O3 -fPIC -Os -fstack-clash-protection -Wformat -Werror=format-security -fno-plt -DHIREDICT_TEST_SSL -Wall -Wextra -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -Werror -g -ggdb -pedantic net.c gcc -std=c99 -c -O3 -fPIC -Os -fstack-clash-protection -Wformat -Werror=format-security -fno-plt -DHIREDICT_TEST_SSL -Wall -Wextra -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -Werror -g -ggdb -pedantic hiredict.c gcc -std=c99 -c -O3 -fPIC -Os -fstack-clash-protection -Wformat -Werror=format-security -fno-plt -DHIREDICT_TEST_SSL -Wall -Wextra -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -Werror -g -ggdb -pedantic sds.c gcc -std=c99 -c -O3 -fPIC -Os -fstack-clash-protection -Wformat -Werror=format-security -fno-plt -DHIREDICT_TEST_SSL -Wall -Wextra -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -Werror -g -ggdb -pedantic async.c gcc -std=c99 -c -O3 -fPIC -Os -fstack-clash-protection -Wformat -Werror=format-security -fno-plt -DHIREDICT_TEST_SSL -Wall -Wextra -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -Werror -g -ggdb -pedantic read.c gcc -std=c99 -c -O3 -fPIC -Os -fstack-clash-protection -Wformat -Werror=format-security -fno-plt -DHIREDICT_TEST_SSL -Wall -Wextra -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -Werror -g -ggdb -pedantic sockcompat.c gcc -std=c99 -c -O3 -fPIC -Os -fstack-clash-protection -Wformat -Werror=format-security -fno-plt -DHIREDICT_TEST_SSL -Wall -Wextra -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -Werror -g -ggdb -pedantic ssl.c gcc -std=c99 -c -O3 -fPIC -Os -fstack-clash-protection -Wformat -Werror=format-security -fno-plt -DHIREDICT_TEST_SSL -Wall -Wextra -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -Werror -g -ggdb -pedantic test.c Generating hiredict.pc for pkgconfig... Generating shim/hiredis.pc for pkgconfig... Generating hiredict_ssl.pc for pkgconfig... Generating shim/hiredis_ssl.pc for pkgconfig... gcc -shared -Wl,-soname,libhiredict_ssl.so.1.3.1 -o libhiredict_ssl.so ssl.o -Wl,--as-needed,-O1,--sort-common -Wl,-z,pack-relative-relocs -Wl,--as-needed,-O1,--sort-common -Wl,-z,pack-relative-relocs -lssl -lcrypto ar rcs libhiredict_ssl.a ssl.o gcc -shared -Wl,-soname,libhiredict.so.1.3.1 -o libhiredict.so alloc.o net.o hiredict.o sds.o async.o read.o sockcompat.o -Wl,--as-needed,-O1,--sort-common -Wl,-z,pack-relative-relocs ar rcs libhiredict.a alloc.o net.o hiredict.o sds.o async.o read.o sockcompat.o gcc -o hiredict-test -O3 -fPIC -Os -fstack-clash-protection -Wformat -Werror=format-security -fno-plt -DHIREDICT_TEST_SSL -Wall -Wextra -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -Werror -g -ggdb -pedantic -I. test.o libhiredict.a libhiredict_ssl.a -Wl,--as-needed,-O1,--sort-common -Wl,-z,pack-relative-relocs -lssl -lcrypto -pthread make: 'hiredict-test' is up to date. 64128:C 30 Apr 2024 04:43:31.024 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 64128:C 30 Apr 2024 04:43:31.025 * oO0OoO0OoO0Oo Redict is starting oO0OoO0OoO0Oo 64128:C 30 Apr 2024 04:43:31.025 * Redict version=7.3.0, bits=64, commit=00000000, modified=1, pid=64128, just started 64128:C 30 Apr 2024 04:43:31.025 * Configuration loaded 64128:M 30 Apr 2024 04:43:31.026 # You requested maxclients of 10000 requiring at least 10032 max file descriptors. 64128:M 30 Apr 2024 04:43:31.026 # Server can't set maximum open files to 10032 because of OS error: Operation not permitted. 64128:M 30 Apr 2024 04:43:31.026 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'. 64128:M 30 Apr 2024 04:43:31.026 * monotonic clock: POSIX clock_gettime 64128:M 30 Apr 2024 04:43:31.027 * Running mode=standalone, port=6379. 64128:M 30 Apr 2024 04:43:31.027 * Server initialized 64128:M 30 Apr 2024 04:43:31.027 * Ready to accept connections tcp 64128:M 30 Apr 2024 04:43:31.027 * Ready to accept connections unix #01 redictContext uses injected allocators: PASSED #02 redictReader uses injected allocators: PASSED #03 hiredict calloc wrapper protects against overflow: PASSED #04 Format command without interpolation: PASSED #05 Format command with %s string interpolation: PASSED #06 Format command with %s and an empty string: PASSED #07 Format command with an empty string in between proper interpolations: PASSED #08 Format command with %b string interpolation: PASSED #09 Format command with %b and an empty string: PASSED #10 Format command with literal %: PASSED #11 Format command with printf-delegation (int): PASSED #12 Format command with printf-delegation (char): PASSED #13 Format command with printf-delegation (short): PASSED #14 Format command with printf-delegation (long): PASSED #15 Format command with printf-delegation (long long): PASSED #16 Format command with printf-delegation (unsigned int): PASSED #17 Format command with printf-delegation (unsigned char): PASSED #18 Format command with printf-delegation (unsigned short): PASSED #19 Format command with printf-delegation (unsigned long): PASSED #20 Format command with printf-delegation (unsigned long long): PASSED #21 Format command with printf-delegation (float): PASSED #22 Format command with printf-delegation (double): PASSED #23 Format command with unhandled printf format (specifier 'p' not supported): PASSED #24 Format command with invalid printf format (specifier missing): PASSED #25 Format command by passing argc/argv without lengths: PASSED #26 Format command by passing argc/argv with lengths: PASSED #27 Format command into sds by passing argc/argv without lengths: PASSED #28 Format command into sds by passing argc/argv with lengths: PASSED #29 Error handling in reply parser: PASSED #30 Memory cleanup in reply parser: PASSED #31 Can handle arbitrarily nested multi-bulks: PASSED #32 Can parse arbitrarily nested multi-bulks correctly: PASSED #33 Correctly parses LLONG_MAX: PASSED #34 Set error when > LLONG_MAX: PASSED #35 Correctly parses LLONG_MIN: PASSED #36 Set error when < LLONG_MIN: PASSED #37 Set error when array < -1: PASSED #38 Set error when bulk < -1: PASSED #39 Can configure maximum multi-bulk elements: PASSED #40 Multi-bulk never overflows regardless of maxelements: PASSED #41 Works with NULL functions for reply: PASSED #42 Works when a single newline (\r\n) covers two calls to feed: PASSED #43 Don't reset state after protocol error: PASSED #44 Don't reset state after protocol error(not segfault): PASSED #45 Don't do empty allocation for empty multi bulk: PASSED #46 Can parse RESP3 verbatim strings: PASSED #47 Can parse RESP3 push messages: PASSED #48 Can parse RESP3 doubles: PASSED #49 Set error on invalid RESP3 double: PASSED #50 Correctly parses RESP3 double INFINITY: PASSED #51 Correctly parses RESP3 double NaN: PASSED #52 Correctly parses RESP3 double -Nan: PASSED #53 Can parse RESP3 nil: PASSED #54 Set error on invalid RESP3 nil: PASSED #55 Can parse RESP3 bool (true): PASSED #56 Can parse RESP3 bool (false): PASSED #57 Set error on invalid RESP3 bool: PASSED #58 Can parse RESP3 map: PASSED #59 Can parse RESP3 attribute: PASSED #60 Can parse RESP3 set: PASSED #61 Can parse RESP3 bignum: PASSED #62 Can parse RESP3 doubles in an array: PASSED #63 Returns error when host cannot be resolved: PASSED #64 Returns error when the port is not open: PASSED #65 We don't clobber connection exception with setsockopt error: PASSED #66 Returns error when the unix_sock socket path doesn't accept connections: PASSED #67 Don't fail when redictFree is passed a NULL value: PASSED #68 Don't fail when freeReplyObject is passed a NULL value: PASSED Testing against TCP connection (127.0.0.1:6379): #69 Is able to deliver commands: PASSED #70 Is a able to send commands verbatim: PASSED #71 %s String interpolation works: PASSED #72 %b String interpolation works: PASSED #73 Binary reply length is correct: PASSED #74 Can parse nil replies: PASSED #75 Can parse integer replies: PASSED #76 Can parse multi bulk replies: PASSED #77 Can handle nested multi bulk replies: PASSED #78 Send command by passing argc/argv: PASSED #79 Can pass NULL to redictGetReply: PASSED #80 RESP3 PUSH messages are handled out of band by default: PASSED #81 We can set a custom RESP3 PUSH handler: PASSED #82 We properly handle a NIL invalidation payload: PASSED #83 With no handler, PUSH replies come in-band: PASSED #84 With no PUSH handler, no replies are lost: PASSED #85 We set a default RESP3 handler for redictContext: PASSED #86 We don't set a default RESP3 push handler for redictAsyncContext: PASSED #87 Our REDICT_OPT_NO_PUSH_AUTOFREE flag works: PASSED #88 We can use redictOptions to set a custom PUSH handler for redctsContext: PASSED #89 We can use redictOptions to set a custom PUSH handler for redictAsyncContext: PASSED #90 We can use redictOptions to set privdata: PASSED #91 Our privdata destructor fires when we free the context: PASSED #92 Successfully completes a command when the timeout is not exceeded: PASSED #93 Does not return a reply when the command times out: PASSED #94 Reconnect properly reconnects after a timeout: PASSED #95 Reconnect properly uses owned parameters: PASSED #96 Returns I/O error when the connection is lost: PASSED #97 Returns I/O error on socket timeout: PASSED #98 Set error when an invalid timeout usec value is used during connect: PASSED #99 Set error when an invalid timeout sec value is used during connect: PASSED #100 Append format command: PASSED #101 We can enable TCP_KEEPALIVE: PASSED #102 We can set TCP_USER_TIMEOUT: PASSED #103 Throughput: (1000x PING: 0.067s) (1000x LRANGE with 500 elements: 0.465s) (1000x INCRBY: 0.088s) (10000x PING (pipelined): 0.018s) (10000x LRANGE with 500 elements (pipelined): 1.833s) (10000x INCRBY (pipelined): 0.026s) Testing against Unix socket connection (/home/buildozer/aports/community/hiredict/src/hiredict/redict.sock): #104 Is able to deliver commands: PASSED #105 Is a able to send commands verbatim: PASSED #106 %s String interpolation works: PASSED #107 %b String interpolation works: PASSED #108 Binary reply length is correct: PASSED #109 Can parse nil replies: PASSED #110 Can parse integer replies: PASSED #111 Can parse multi bulk replies: PASSED #112 Can handle nested multi bulk replies: PASSED #113 Send command by passing argc/argv: PASSED #114 Can pass NULL to redictGetReply: PASSED #115 RESP3 PUSH messages are handled out of band by default: PASSED #116 We can set a custom RESP3 PUSH handler: PASSED #117 We properly handle a NIL invalidation payload: PASSED #118 With no handler, PUSH replies come in-band: PASSED #119 With no PUSH handler, no replies are lost: PASSED #120 We set a default RESP3 handler for redictContext: PASSED #121 We don't set a default RESP3 push handler for redictAsyncContext: PASSED #122 Our REDICT_OPT_NO_PUSH_AUTOFREE flag works: PASSED #123 We can use redictOptions to set a custom PUSH handler for redctsContext: PASSED #124 We can use redictOptions to set a custom PUSH handler for redictAsyncContext: PASSED #125 We can use redictOptions to set privdata: PASSED #126 Our privdata destructor fires when we free the context: PASSED #127 Successfully completes a command when the timeout is not exceeded: PASSED #128 Does not return a reply when the command times out: PASSED #129 Reconnect properly reconnects after a timeout: PASSED #130 Reconnect properly uses owned parameters: PASSED #131 Returns I/O error when the connection is lost: PASSED #132 Returns I/O error on socket timeout: PASSED #133 Set error when an invalid timeout usec value is used during connect: PASSED #134 Set error when an invalid timeout sec value is used during connect: PASSED #135 Setting TCP_KEEPALIVE on a unix socket returns an error: PASSED #136 Setting TCP_KEEPALIVE on a unix socket doesn't break the connection: PASSED #137 Throughput: (1000x PING: 0.045s) (1000x LRANGE with 500 elements: 0.417s) (1000x INCRBY: 0.029s) (10000x PING (pipelined): 0.015s) (10000x LRANGE with 500 elements (pipelined): 1.791s) (10000x INCRBY (pipelined): 0.026s) Testing asynchronous API using polling_adapter TCP (127.0.0.1:6379): #138 Async connect: PASSED #139 Async free after connect: PASSED #140 Async connect timeout: PASSED #141 Async PING/PONG: PASSED #142 Async PING/PONG after connect timeout: PASSED #143 Disconnect from onConnected callback (Issue #931): PASSED #144 Ping/Pong from onConnected callback (Issue #931): PASSED Testing asynchronous API using polling_adapter UNIX (/home/buildozer/aports/community/hiredict/src/hiredict/redict.sock): #145 Async connect: PASSED #146 Async free after connect: PASSED #147 Async PING/PONG: PASSED #148 Disconnect from onConnected callback (Issue #931): PASSED #149 Ping/Pong from onConnected callback (Issue #931): PASSED Testing against inherited fd (/home/buildozer/aports/community/hiredict/src/hiredict/redict.sock): Connecting to inherited fd 28 #150 Is able to deliver commands: PASSED #151 Is a able to send commands verbatim: PASSED #152 %s String interpolation works: PASSED #153 %b String interpolation works: PASSED #154 Binary reply length is correct: PASSED #155 Can parse nil replies: PASSED #156 Can parse integer replies: PASSED #157 Can parse multi bulk replies: PASSED #158 Can handle nested multi bulk replies: PASSED #159 Send command by passing argc/argv: PASSED #160 Can pass NULL to redictGetReply: PASSED #161 RESP3 PUSH messages are handled out of band by default: PASSED #162 We can set a custom RESP3 PUSH handler: PASSED #163 We properly handle a NIL invalidation payload: PASSED #164 With no handler, PUSH replies come in-band: PASSED #165 With no PUSH handler, no replies are lost: PASSED #166 We set a default RESP3 handler for redictContext: PASSED #167 We don't set a default RESP3 push handler for redictAsyncContext: PASSED #168 Our REDICT_OPT_NO_PUSH_AUTOFREE flag works: PASSED #169 We can use redictOptions to set a custom PUSH handler for redctsContext: PASSED #170 We can use redictOptions to set a custom PUSH handler for redictAsyncContext: PASSED #171 We can use redictOptions to set privdata: PASSED #172 Our privdata destructor fires when we free the context: PASSED ALL TESTS PASSED (0 skipped) 64128:signal-handler (1714452223) Received SIGTERM scheduling shutdown... >>> hiredict: Entering fakeroot... 64128:M 30 Apr 2024 04:43:43.391 * User requested shutdown... 64128:M 30 Apr 2024 04:43:43.391 * Saving the final RDB snapshot before exiting. mkdir -p /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/include/hiredict /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/lib /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/include/hiredis 64128:M 30 Apr 2024 04:43:43.423 * DB saved on disk 64128:M 30 Apr 2024 04:43:43.423 * Removing the unix socket file. 64128:M 30 Apr 2024 04:43:43.424 # Redict is now ready to exit, bye bye... cp -pPR hiredict_ssl.h /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/include/hiredict cp -pPR shim/hiredis_ssl.h /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/include/hiredis cp -pPR libhiredict_ssl.so /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/lib/libhiredict_ssl.so.1.3.1 cd /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/lib && ln -sf libhiredict_ssl.so.1.3.1 libhiredict_ssl.so && ln -sf libhiredict_ssl.so.1.3.1 libhiredict_ssl.so.1 cp -pPR libhiredict_ssl.a /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/lib mkdir -p /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/lib/pkgconfig cp -pPR hiredict_ssl.pc shim/hiredis_ssl.pc /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/lib/pkgconfig mkdir -p /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/include/hiredict /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/include/hiredict/adapters /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/lib /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/include/hiredis /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/include/hiredis/adapters cp -pPR hiredict.h async.h read.h sds.h alloc.h sockcompat.h /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/include/hiredict cp -pPR shim/hiredis.h shim/async.h shim/read.h shim/sds.h shim/alloc.h shim/sockcompat.h /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/include/hiredis cp -pPR adapters/*.h /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/include/hiredict/adapters cp -pPR shim/adapters/*.h /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/include/hiredis/adapters cp -pPR libhiredict.so /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/lib/libhiredict.so.1.3.1 cd /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/lib && ln -sf libhiredict.so.1.3.1 libhiredict.so && ln -sf libhiredict.so.1.3.1 libhiredict.so.1 cp -pPR libhiredict.a /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/lib mkdir -p /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/lib/pkgconfig cp -pPR hiredict.pc shim/hiredis.pc /home/buildozer/aports/community/hiredict/pkg/hiredict/usr/lib/pkgconfig >>> hiredict-ssl*: Running split function ssl... '/home/buildozer/aports/community/hiredict/pkg/hiredict/usr/lib/libhiredict_ssl.so' -> '/home/buildozer/aports/community/hiredict/pkg/hiredict-ssl/usr/lib/libhiredict_ssl.so' '/home/buildozer/aports/community/hiredict/pkg/hiredict/usr/lib/libhiredict_ssl.so.1' -> '/home/buildozer/aports/community/hiredict/pkg/hiredict-ssl/usr/lib/libhiredict_ssl.so.1' '/home/buildozer/aports/community/hiredict/pkg/hiredict/usr/lib/libhiredict_ssl.so.1.3.1' -> '/home/buildozer/aports/community/hiredict/pkg/hiredict-ssl/usr/lib/libhiredict_ssl.so.1.3.1' >>> hiredict-ssl*: Preparing subpackage hiredict-ssl... >>> hiredict-ssl*: Stripping binaries >>> hiredict-ssl*: Running postcheck for hiredict-ssl >>> hiredict-dev*: Running split function dev... >>> hiredict-dev*: Preparing subpackage hiredict-dev... >>> hiredict-dev*: Stripping binaries >>> hiredict-dev*: Running postcheck for hiredict-dev >>> hiredict*: Running postcheck for hiredict >>> hiredict*: Preparing package hiredict... >>> hiredict*: Stripping binaries >>> hiredict-dev*: Scanning shared objects >>> hiredict-ssl*: Scanning shared objects >>> hiredict*: Scanning shared objects >>> hiredict-dev*: Tracing dependencies... hiredict=1.3.1-r0 pkgconfig >>> hiredict-dev*: Package size: 576.0 KB >>> hiredict-dev*: Compressing data... >>> hiredict-dev*: Create checksum... >>> hiredict-dev*: Create hiredict-dev-1.3.1-r0.apk >>> hiredict-ssl*: Tracing dependencies... so:libc.musl-x86_64.so.1 so:libcrypto.so.3 so:libssl.so.3 >>> hiredict-ssl*: Package size: 32.0 KB >>> hiredict-ssl*: Compressing data... >>> hiredict-ssl*: Create checksum... >>> hiredict-ssl*: Create hiredict-ssl-1.3.1-r0.apk >>> hiredict*: Tracing dependencies... so:libc.musl-x86_64.so.1 >>> hiredict*: Package size: 76.0 KB >>> hiredict*: Compressing data... >>> hiredict*: Create checksum... >>> hiredict*: Create hiredict-1.3.1-r0.apk >>> hiredict: Build complete at Tue, 30 Apr 2024 04:43:44 +0000 elapsed time 0h 0m 17s >>> hiredict: Cleaning up srcdir >>> hiredict: Cleaning up pkgdir >>> hiredict: Uninstalling dependencies... (1/4) Purging .makedepends-hiredict (20240430.044329) (2/4) Purging openssl-dev (3.3.0-r1) (3/4) Purging redict-openrc (7.3.0-r1) (4/4) Purging redict (7.3.0-r1) Executing busybox-1.36.1-r26.trigger OK: 472 MiB in 107 packages >>> hiredict: Updating the community/x86_64 repository index... >>> hiredict: Signing the index...