iowow (1.4.16) UNRELEASED; urgency=medium * iwpool_split_xx() now returns const pointer (iwpool.h) * Fixed iwre() regexp compilation error. * Added new regexp API implementation (iwre.h) based on https://github.com/jserv/cregex/ * Removed iwsha256() from sources. Use iwnet/beassl for hashing instead. -- Anton Adamansky Thu, 24 Feb 2022 09:18:55 +0700 iowow (1.4.15) testing; urgency=medium * Added format checking __attribute__ to all printf like functions. -- Anton Adamansky Fri, 18 Feb 2022 21:54:04 +0700 iowow (1.4.14) testing; urgency=medium * Used ftruncate() instead of posix_fallocate() due to EINVAL on ZFS (unix.c) * Enable XOPEN_SOURCE only for linux * Fixed incorrect selection of `strerror_r` for musl builds. * Set appropriate _XOPEN_SOURCE=700 level for `nftw` (unix.c) * iwxstr_printf() now conforms to stdlib printf function (iwxstr.h) * Moved some useful defs from iwutil.h into basedefs.h * Fixed iwre_match() function signatute allowing `const char* input` (iwre.h) * Added lightweight regexp implementation (iwre.h) * Added `size_t iwxstr_asize(IWXSTR*)` (iwxstr.h) * Added locale independed strtod: iwstrtod() (iwconv.h) -- Anton Adamansky Mon, 14 Feb 2022 18:01:17 +0700 iowow (1.4.13) testing; urgency=medium * Fixed SEGV in iwkv_cursor_open with zero-length key and IWDB_VNUM64_KEYS (#42) * Fixed Heap UAF in iwkv_close after invoking iwkv_db_set_meta on a database (#41) * Added `iwxstr_wrap()` (iwxstr.h) * Added `RCT()` checker for pthread routines (basedefs.h) * Added iwbin2hex() (iwconv.h) * iwxstr_clear() sets value of intgernal string buffer to zero (iwxstr.h) * Added user data store capability to iwxstr (iwxstr.h) * Added iwpool_strdup2(), iwpool_strndup2() (iwpool.h) * Added iwp_set_current_thread_name() (iwp.h) * Added RCENO define (basedefs.h) * Thread poll, single thread worker fixes * Added IW_MIN, IW_MAX, IW_XSTR defines -- Anton Adamansky Fri, 03 Sep 2021 16:03:05 +0700 iowow (1.4.12) testing; urgency=medium * Added IW_ERROR_UNSUPPORTED error code * Added IW_ALLOC __attribute__((malloc)) optimization * Added ring buffer implementation (iwrb.h) * Added `queue_blocking` argument `iwstw_start()` (iwstw.h) * Minor changes in iwlog.h api * `memcpy` replaced by `memmove` for overlaping cases (iwarr.c) -- Anton Adamansky Mon, 19 Jul 2021 10:09:05 +0700 iowow (1.4.11) testing; urgency=medium * Fixed typo (qsort_r => sort_r) (iwarr.c) * Added simple threads pool implementation (iwtp.h) * Added IW_ERROR_NOT_ALLOWED error code (iwlog.h) * Added RCR() error checking macro (basedefs.h) * Added iwlist_sort(), iwulist_sort() (iwarr.h) * Added iwstw_schedule_empty_only() (iwstw.h) * Added iwstw_queue_size() (iwstw.h) * Set O_CLOEXEC flag on all file open() calls * Added IW_ERROR_UNEXPECTED_RESPONSE error code (iwlog.h) * Added iwxstr_set_size(), iwxstr_destroy_keep_ptr() (iwxstr.h) * Added iwlist_at2() (iwarr.h) * Added handy ZRET definition (basedefs.h) * Added handy ZGO definition (basedefs.h) * Project code reformatted using uncrustify * Updated copyright headers * Fixed build errors on macOS * Removed dependency on glibc specific features * Added new iwxstr_pop() (iwxstr.h) -- Anton Adamansky Mon, 10 May 2021 16:43:52 +0700 iowow (1.4.10) testing; urgency=medium * Tuned iwkv file resizing policy * Fixed misuse of `IWKV_OPTS.file_lock_fail_fast` (#35) * Correct handling of EINTR, EAGAIN in read/write functions (unix.c) -- Anton Adamansky Tue, 22 Dec 2020 23:55:36 +0700 iowow (1.4.9) testing; urgency=medium * Code review of iwkv cache keys comparison, related issue: https://github.com/Softmotions/ejdb/issues/291 * Added `bool iwu_uuid_valid(const char *uuid)` (iwuuid.h) -- Anton Adamansky Wed, 18 Nov 2020 15:04:03 +0700 iowow (1.4.8) testing; urgency=medium * Fixed serios bug concerning non-unique ejdb2 indexes, details: https://github.com/Softmotions/ejdb/issues/291 * Fixed potencial memory leak in `iwlist_create()` (iwarr.h) * Fixed wrong `iwulist_clear()` behaviour (iwarr.h) * Code cleanup * Added `iwulist_at2()` (iwarr.h) * Removed not needed assertion (iwstree.c) -- Anton Adamansky Sun, 08 Nov 2020 21:51:49 +0700 iowow (1.4.7) testing; urgency=medium * Correct handling of EINTR, EAGAIN in read/write functions (unix.c) * Minor fixes on iwhmap -- Anton Adamansky Mon, 21 Sep 2020 12:14:06 +0700 iowow (1.4.6) testing; urgency=medium * Added `iwpool_user_data_detach()` (iwpool.h) * Added `iwpool_create_empty()` (iwpool.h) * Added simple hashmap implementation (iwhmap.h) * `IWPOOL` is able to store associated user data (iwpool.h) * `pthread_barrierattr` shim for android API < 24 * Added `iwsha256()` SHA-256 hash implementation (iwsha2.h) * Added single thread worker (iwstw.h) * Added `iwstree_clear()` (iwstree.h) -- Anton Adamansky Wed, 24 Jun 2020 18:32:24 +0700 iowow (1.4.5) testing; urgency=medium * Added `iwulist_clear` (iwarr.h) * Added `RCIF` (basedefs.h) * Fix assertion error in `iwstree_remove()` (iwstree.h) * Allows zero key/value placeholders in `iwstree_iter_next()` (iwstree.h) * Added `iwstree_put_overwrite` (iwstree.h) * Added iwstree iteration API (iwstree.h) * Added `iwpool_used_size` (iwpool.h) * Added `iwstree_int64_cmp` (iwstree.h) * Added `IW_DEPRECATED` (basedefs.h) -- Anton Adamansky Thu, 18 Jun 2020 14:19:32 +0700 iowow (1.4.4) testing; urgency=medium * Fixed incorrect copying of cursor key data in `IWDB_COMPOUND_KEYS` mode (iwkv.c) * Adde compound key example code (compoundkeys1.c) * Added `iwstree_visit` (iwstree.h) -- Anton Adamansky Sat, 02 May 2020 19:38:31 +0700 iowow (1.4.3) testing; urgency=medium * Fixed errors found by PVS studio -- Anton Adamansky Fri, 24 Apr 2020 00:16:42 +0700 iowow (1.4.2) testing; urgency=medium * Added IWULIST, IWLIST implementation (iwarr.h) * Added iwpool_split_string (iwpool.h) * Added iwpool_printf (iwpool.h) * Added iwpool_printf_split (iwpool.h) * Added iwxstr_shift (iwxstr.h) * Added `#define RCHECK` (basedefs.h) * Better error handling of `kh_put` -- Anton Adamansky Mon, 20 Apr 2020 16:23:50 +0700 iowow (1.4.1) testing; urgency=medium * Fixed possible data corruption in `_fsm_blk_allocate_aligned_lw` (iwfsmfile.c) * Better new SBLK blocks locality (performance) -- Anton Adamansky Sat, 07 Mar 2020 23:23:13 +0700 iowow (1.4.0) testing; urgency=medium * Implemented new compact and performant data storage format v2 * Added WiredTiger v3.2.1 benchmarks * Added BerkeleyDB v5.3.28 benchmarks * Added TokyoCabinet v1.4.48 benchmarks -- Anton Adamansky Fri, 06 Mar 2020 23:23:16 +0700 iowow (1.3.37) testing; urgency=medium * Added iwrc iwp_mkdirs(const char *path) (iwp.h) * Added uint32_t iwu_x31_u32_hash(const char *s) (iwutils.h) * Added iwu_replace() (iwutils.h) * Added RCA( macro definition * Removed IW_EXPORT iwrc iwkv_db_last_access_time(IWDB db, uint64_t *ts) for performance and simplicity reasons * Added `IW_ERROR_INVALID_VALUE` * Added iwstree - splay tree imlementation (iwstree.h) * Pointers allocated by iwpool are now 8-byte aligned -- Anton Adamansky Mon, 17 Feb 2020 23:16:31 +0700 iowow (1.3.36) testing; urgency=medium * Safer iowow initialization bootstrap process. -- Anton Adamansky Thu, 16 Jan 2020 12:44:31 +0700 iowow (1.3.35) testing; urgency=medium * Added specific checks for TARGET_OS_IPHONE * Ported to iOS * Added wal locking interceptor to WAL opts -- Anton Adamansky Wed, 15 Jan 2020 13:10:51 +0700 iowow (1.3.32) testing; urgency=medium * Improved WAL durability -- Anton Adamansky Thu, 19 Dec 2019 10:49:08 +0700 iowow (1.3.31) testing; urgency=medium * Keys comparison refactoring -- Anton Adamansky Wed, 20 Nov 2019 00:41:15 +0700 iowow (1.3.30) testing; urgency=medium * Added check if __unused is already defined in `iwth.c` * CRITICAL Comparsions keys fix #30 -- Anton Adamansky Tue, 19 Nov 2019 20:23:41 +0700 iowow (1.3.29) testing; urgency=medium * FIXED iwkv_open assertion fail on opening garbage file #29 -- Anton Adamansky Wed, 13 Nov 2019 23:55:35 +0700 iowow (1.3.28) testing; urgency=medium * iwlog now supports ANDROID NDK logging (iwlog.h) -- Anton Adamansky Thu, 07 Nov 2019 14:44:59 +0700 iowow (1.3.27) testing; urgency=medium * CRITICAL WAL durability fixes * Support of online backups #24 * Windows platform functions fixes * CLion project files added * WAL recovering fixes -- Anton Adamansky Mon, 28 Oct 2019 19:08:59 +0700 iowow (1.3.25) testing; urgency=medium * CRITICAL Fixed heap corruption due incorrect usage of khash API in `_db_destroy_lw` (iwkv.c) -- Anton Adamansky Thu, 29 Aug 2019 12:20:25 +0700 iowow (1.3.24) testing; urgency=medium * CRITICAL Fixed race condition in WAL rollforward -- Anton Adamansky Thu, 22 Aug 2019 02:04:08 +0700 iowow (1.3.23) testing; urgency=medium * WAL refactoring, better stability -- Anton Adamansky Sat, 17 Aug 2019 21:17:05 +0700 iowow (1.3.22) testing; urgency=medium * Small optimizations in `iwfsmfile.c` * Added `iwp_clock_get_time` as portable version of `clock_gettime` * `static_assert` is set to `_Static_assert` if not defined * Added `__USE_MINGW_ANSI_STDIO` for MinGW build -- Anton Adamansky Thu, 18 Jul 2019 17:50:14 +0700 iowow (1.3.20) testing; urgency=medium * CRITICAL Fixed incorrect keys allocation in IWDB_COMPOUND_KEYS mode -- Anton Adamansky Thu, 13 Jun 2019 21:43:47 +0700 iowow (1.3.19) testing; urgency=medium * CRITICAL: Fixed assertion fail in iwkv records cache -- Anton Adamansky Thu, 13 Jun 2019 19:08:48 +0700 iowow (1.3.18) testing; urgency=medium * Limit one time file allocation step to 2G -- Anton Adamansky Wed, 12 Jun 2019 16:42:47 +0700 iowow (1.3.17) testing; urgency=medium * CRITICAL: State of previously deleted database may have influence on newly created dbs * BUG: Fixed database metadata blocks leak (db->meta_blk) on database destroy -- Anton Adamansky Fri, 03 May 2019 18:20:39 +0700 iowow (1.3.16) testing; urgency=medium * CRITICAL: Fixed deadlock on database removal -- Anton Adamansky Fri, 03 May 2019 11:56:29 +0700 iowow (1.3.15) testing; urgency=medium * CRITICAL: Fixed database file corruption during sequential records deletion with `iwkv_cursor_del` (iwkv.c) -- Anton Adamansky Wed, 01 May 2019 23:29:18 +0700 iowow (1.3.14) testing; urgency=medium * CRITICAL: Fixed unexpected database file truncation and data loss on close. * Adjusted default WAL options for Android -- Anton Adamansky Sat, 27 Apr 2019 01:04:28 +0700 iowow (1.3.13) testing; urgency=medium * Performance impovements in Write Ahead Logging (iwal.c) * BUG: WAL file was not truncated after `wal->checkpoint_timeout_sec` timeout (iwal.c) -- Anton Adamansky Thu, 25 Apr 2019 17:43:06 +0700 iowow (1.3.12) testing; urgency=medium * Android NDK support (#23) * Pthreads `PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP` is used by default -- Anton Adamansky Sun, 21 Apr 2019 12:18:16 +0700 iowow (1.3.11) testing; urgency=medium * Added size_t iwpool_allocated_size(IWPOOL *pool) (iwpool.h) * Added `file_lock_fail_fast` iwkv open option. If `true` - do not wait and raise error if database is locked by another process * Fixed meaningful PVP studio errors: - kv/iwkv.c:593:1: error: V774 - kv/iwkv.c:1375:1: warning: V649 - kv/iwkv.c:3357:1: warning: V581 - utils/iwxstr.c:59:1: warning: V701 -- Anton Adamansky Mon, 08 Apr 2019 11:47:59 +0700 iowow (1.3.10) testing; urgency=medium * Added cmake `OWNER_PROJECT_NAME` option used to install header files in `CMAKE_INSTALL_INCLUDEDIR}/OWNER_PROJECT_NAME/PROJECT_NAME` * Removed `-fvisibility=hidden` C flag when building shared library -- Anton Adamansky Fri, 05 Apr 2019 11:53:34 +0700 iowow (1.3.9) testing; urgency=medium * BUG `IW_HAVE_PTHREAD_CONDATTR_SETCLOCK` was not properly set for `iwal.c` hence high CPU usage when `wal` mode is on. -- Anton Adamansky Fri, 29 Mar 2019 23:56:25 +0700 iowow (1.3.8) testing; urgency=medium * BUG Fixed incorrect call of `_kvblk_kv_get` in `iwkv_cursor_seth`. See https://github.com/Softmotions/ejdb/issues/231 -- Anton Adamansky Wed, 27 Mar 2019 12:34:10 +0700 iowow (1.3.7) testing; urgency=medium * Added `iwkv_cursor_del()` (#22) * Fixed memory corruption during simultaneous cursor iteration and value updating -- Anton Adamansky Tue, 26 Mar 2019 18:24:35 +0700 iowow (1.3.6) testing; urgency=medium * BUG: Memory leak in `iwkv_cursor_open` on error (#21) * BUG: `iwxstr_new2()` with zero size argument causes illegal memory write (#20) * Added `iwkv_cursor_seth()` record update handle supported by `iwkv_cursor_set` * Avoided deadlocks with `iwkv_del()` - now this function does't escalate exclusive lock on storage * More consistent error reporting using cursor functions -- Anton Adamansky Fri, 22 Mar 2019 16:29:32 +0700 iowow (1.3.5) testing; urgency=medium * BUG: Data from deleted database can interfere with newly created db (#19) -- Anton Adamansky Wed, 20 Mar 2019 20:26:22 +0700 iowow (1.3.4) testing; urgency=medium * Code documentation improvements -- Anton Adamansky Mon, 11 Mar 2019 22:42:51 +0700 iowow (1.3.3) testing; urgency=medium * BUG: `iwkv_puth` called with incorrect previous value (iwkv.h) * _kvblk_getvalue renamed to _kvblk_value_get (iwkv.c) * _kvblk_peek_val renamed to _kvblk_value_peek (iwkv.c) * _kvblk_getkey renamed to _kvblk_key_get (iwkv.c) * _kvblk_getkv renamed to _kvblk_kv_get (iwkv.c) -- Anton Adamansky Fri, 08 Mar 2019 17:02:46 +0700 iowow (1.3.2) testing; urgency=medium * Added `iwkv_cursor_is_matched_key` (iwkv.h) * `iwkv_cursor_copy_key` now aware of `IWDB_COMPOUND_KEYS` mode (iwkv.h) * `iwkv_cursor_copy_key` can accept zero kbuf,kbufsz only compound part will returned in this case (iwkv.h) -- Anton Adamansky Mon, 04 Mar 2019 20:50:03 +0700 iowow (1.3.1) testing; urgency=medium * Eliminate adaptive `IWDB_VNUM64_KEYS` key sizing in `_unpack_effective_key` for the sake of API simplicity (iwkv.c) * BUG: incorrect key handling in `iwkv_del` - key was not unpacked before. (iwkv.h) -- Anton Adamansky Thu, 28 Feb 2019 10:40:11 +0700 iowow (1.3.0) testing; urgency=medium * `IWKV_PUT_HANDLER` called for insert operations (not only for updates) * Added `IWFS_OUNLINK` flag. Unlink(delete) file on close (iwfile.h) * Added `IWFS_OTMP` flag. Create tmp file (iwfile.h) * Added UUID v4 generation function (iwuuid.h) * Added iwp_tmpdir() (iwp.h) * Added iwp_allocate_tmpfile_path() (iwp.h) * Added iwxstr_printf() (iwxstr.h) * Added iwxstr_cat2() (iwxstr.h) * Added `IWKV_VAL_INCREMENT` mode for `iwkv_put()` and test case (iwkv.h) * Added support of variable-length encoded integer keys `IWDB_VNUM64_KEYS` (iwkv.h) * Added support of compound keys (`IWDB_COMPOUND_KEYS`) (#18) * Removed `dup` integer value routines * Code cleanup and refactoring -- Anton Adamansky Wed, 27 Feb 2019 12:11:48 +0700 iowow (1.2.14) testing; urgency=medium * BUG: Fix WAL checkpoint workflow to avoid deadlocks with cursor threads * BUG: Clang6 fatal error: variable 'cur' is used uninitialized (#15) * Implemented new multithreaded stress test (iwkv_test6.c) used OMP stack * Added iwkv_new_db(IWKV iwkv, iwdb_flags_t dbflg, uint32_t *odbid, IWDB *dbp) (iwkv.h) * Removed unused `IWKV_NOLOCKS` option. * Added `IW_EXPORT` to `iowow_version_*` API functions (iowow.h) * Added iwrc iwkv_state(IWKV iwkv, IWFS_FSM_STATE *out) (iwkv.h) * Do not check `IWKV_NO_OVERWRITE` for databases in `IWDB_DUP_UINTXX_VALS` mode * Added iwkv_puth() with provided old value interceptor: `IWKV_PUT_HANDLER` (iwkv.h) * Added `IWKV_RC_DUP_ARRAY_EMPTY` flag and `IWKV_DUP_REPORT_EMPTY` opflag for `iwkv_put()` (iwkv.h) -- Anton Adamansky Tue, 06 Nov 2018 23:14:39 +0700 iowow (1.2.13) testing; urgency=medium * BUG: Correct cursors adjustments during db update operations (#13) * BUG: Fixed WAL integration for updates in IWDB_DUP_UINT32_VALS|IWDB_DUP_UINT64_VALS mode * Store arbitrary data blocks associated with iwkv internal databases (#12) * Checking of max key/value size (IWKV_MAX_KVSZ) for updates in IWDB_DUP_UINT32_VALS|IWDB_DUP_UINT64_VALS mode * Minor allocation performance optimizations in _kvblk_addkv() -- Anton Adamansky Thu, 02 Aug 2018 20:29:08 +0700 iowow (1.2.12) testing; urgency=medium * Set terminating '\0' in iwitoa() (iwconv.h) * Added MAP_NORESERVE option for PRIVATE mmaping on Linux (#11) * Added iwu_file_read_as_buf() (iwutils.h) * Optimized cmake config files generation -- Anton Adamansky Sat, 21 Jul 2018 01:59:40 +0700 iowow (1.2.11) testing; urgency=medium * iwpool refactoring fixed pool memory corruption (iwpool.h) * Fixed set terminating `\0` in iwpool_strdup() (iwpool.h) * Fixed wrong `if` in iwpool_calloc() (iwpool.h) -- Anton Adamansky Fri, 15 Jun 2018 17:58:20 +0700 iowow (1.2.10) testing; urgency=medium * Added iwpool_calloc() (iwpool.h) * Added iwpool_strdup(), iwpool_strndup() (iwpool.h) * Fixed memory leak in iwpool_destroy() (iwpool.h) * Renamed platform/linux/linux.c to platform/unix/unix.c (#9) * Added iwu_replace_char() (iwutils.h) -- Anton Adamansky Mon, 11 Jun 2018 23:00:21 +0700 iowow (1.2.9) testing; urgency=medium * Rewrite of iwftoa() (iwconv.h) * Fixed typo: iwtoa renamed to iwitoa (iwconv.h) * Added iwu_cmp_files (iwutils.h) * Return type of iwxstr_ptr() changed to char* (iwxstr.h) -- Anton Adamansky Tue, 29 May 2018 01:01:56 +0700 iowow (1.2.8) testing; urgency=medium * IOWOW Ported to MIPS32 (big-endian) tested on Debian GNU/Linux 9.4 -- Anton Adamansky Sat, 19 May 2018 21:09:04 +0700 iowow (1.2.7) testing; urgency=medium * Fixed incorrect exclusive locking in iwkv_del()" -- Anton Adamansky Thu, 17 May 2018 11:27:58 +0700 iowow (1.2.6) testing; urgency=medium * Fixed: database file is not created automatically if no open modes specified in opts -- Anton Adamansky Wed, 16 May 2018 19:57:35 +0700 iowow (1.2.5) testing; urgency=medium * Added iwkv_opflags opflags into iwkv_del -- Anton Adamansky Wed, 16 May 2018 19:33:16 +0700 iowow (1.2.4) testing; urgency=medium * Fixed race conditions in iwkv_cursor_to() -- Anton Adamansky Mon, 14 May 2018 09:28:13 +0700 iowow (1.2.3) testing; urgency=medium * Fixed race conditions in iwkv_cursor_set() -- Anton Adamansky Fri, 11 May 2018 23:17:13 +0700 iowow (1.2.2) testing; urgency=medium * Added static iowow_s libraries to the default CMake exports. -- Anton Adamansky Tue, 08 May 2018 22:58:41 +0700 iowow (1.2.1) testing; urgency=medium * Removed unistd.h from src/fs/iwdlsnr.h since it is not portable. * C++ friendly header files -- Anton Adamansky Mon, 07 May 2018 12:47:46 +0700 iowow (1.2.0) testing; urgency=medium * IOWOW ported to Windows x86-64 platform #1 -- Anton Adamansky Sun, 06 May 2018 20:35:14 +0700 iowow (1.1.0) testing; urgency=medium * Write Ahead Log (WAL) implemented #2 * Changed database block size to 128 bytes so max db size 512Gb WARNING: Database format of version 1.1.x is incompatible with previous versions. * Better basename/basename_r detection in iwlog.c #4 -- Anton Adamansky Wed, 02 May 2018 17:28:14 +0700 iowow (1.0.6) testing; urgency=medium * src/CMakeLists.txt cleanups #3 * x86-specific code in src/platform/iwp.c is not guarded #7 * Database size limited to 2GB on 32 bit CPUs #5 * Database block size changed: 64 to 128 bytes #8 -- Anton Adamansky Mon, 16 Apr 2018 10:21:00 +0700 iowow (1.0.5) testing; urgency=medium * iwextfile: do msync before munmap on file resizing -- Anton Adamansky Thu, 12 Apr 2018 20:48:26 +0700 iowow (1.0.4) testing; urgency=medium * Added IWFSM_SYNC_BMAP option to iwfs_fsm_aflags * Removed IWFS_NO_MMASYNC since it does noop on many platforms * Set exclusive iwkv write lock in iwkv_sync() -- Anton Adamansky Thu, 12 Apr 2018 12:33:53 +0700 iowow (1.0.3) testing; urgency=medium * Added basic iowow.3 man page to distribution archive * Use posix_fallocate() to extend iwkv file instead of ftruncate() on Linux/FreeBSD -- Anton Adamansky Tue, 10 Apr 2018 18:56:11 +0700 iowow (1.0.2) testing; urgency=medium * Removed unneeded -D_LARGE_FILE_SOURCE from iowow.h -- Anton Adamansky Mon, 09 Apr 2018 13:56:53 +0700 iowow (1.0.1) testing; urgency=medium * Fix export flags iwlog2 method -- Anton Adamansky Mon, 09 Apr 2018 12:44:23 +0700 iowow (1.0.0) testing; urgency=medium * Initial release. -- Anton Adamansky Sun, 08 Apr 2018 14:21:43 +0700