Skip to content

@gburd /async_nif.h
Last active

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Technique for running Erlang NIFs functions asynchronously, not on scheduler threads.
/*
* async_nif: An async thread-pool layer for Erlang's NIF API
*
* Copyright (c) 2012 Basho Technologies, Inc. All Rights Reserved.
* Author: Gregory Burd <greg@basho.com> <greg@burd.me>
*
* This file is provided to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
#ifndef __ASYNC_NIF_H__
#define __ASYNC_NIF_H__
#if defined(__cplusplus)
extern "C" {
#endif
#include <assert.h>
#include "queue.h"
#ifndef UNUSED
#define UNUSED(v) ((void)(v))
#endif
#define ASYNC_NIF_MAX_WORKERS 1024
#define ASYNC_NIF_MIN_WORKERS 2
#define ASYNC_NIF_WORKER_QUEUE_SIZE 100
#define ASYNC_NIF_MAX_QUEUED_REQS ASYNC_NIF_WORKER_QUEUE_SIZE * ASYNC_NIF_MAX_WORKERS
struct async_nif_req_entry {
ERL_NIF_TERM ref;
ErlNifEnv *env;
ErlNifPid pid;
void *args;
void (*fn_work)(ErlNifEnv*, ERL_NIF_TERM, ErlNifPid*, unsigned int, void *);
void (*fn_post)(void *);
STAILQ_ENTRY(async_nif_req_entry) entries;
};
struct async_nif_work_queue {
unsigned int num_workers;
unsigned int depth;
ErlNifMutex *reqs_mutex;
ErlNifCond *reqs_cnd;
STAILQ_HEAD(reqs, async_nif_req_entry) reqs;
};
struct async_nif_worker_entry {
ErlNifTid tid;
unsigned int worker_id;
struct async_nif_state *async_nif;
struct async_nif_work_queue *q;
SLIST_ENTRY(async_nif_worker_entry) entries;
};
struct async_nif_state {
unsigned int shutdown;
ErlNifMutex *we_mutex;
unsigned int we_active;
SLIST_HEAD(joining, async_nif_worker_entry) we_joining;
unsigned int num_queues;
unsigned int next_q;
STAILQ_HEAD(recycled_reqs, async_nif_req_entry) recycled_reqs;
unsigned int num_reqs;
ErlNifMutex *recycled_req_mutex;
struct async_nif_work_queue queues[];
};
#define ASYNC_NIF_DECL(decl, frame, pre_block, work_block, post_block) \
struct decl ## _args frame; \
static void fn_work_ ## decl (ErlNifEnv *env, ERL_NIF_TERM ref, ErlNifPid *pid, unsigned int worker_id, struct decl ## _args *args) { \
UNUSED(worker_id); \
DPRINTF("async_nif: calling \"%s\"", __func__); \
do work_block while(0); \
DPRINTF("async_nif: returned from \"%s\"", __func__); \
} \
static void fn_post_ ## decl (struct decl ## _args *args) { \
UNUSED(args); \
DPRINTF("async_nif: calling \"fn_post_%s\"", #decl); \
do post_block while(0); \
DPRINTF("async_nif: returned from \"fn_post_%s\"", #decl); \
} \
static ERL_NIF_TERM decl(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv_in[]) { \
struct decl ## _args on_stack_args; \
struct decl ## _args *args = &on_stack_args; \
struct decl ## _args *copy_of_args; \
struct async_nif_req_entry *req = NULL; \
unsigned int affinity = 0; \
ErlNifEnv *new_env = NULL; \
/* argv[0] is a ref used for selective recv */ \
const ERL_NIF_TERM *argv = argv_in + 1; \
argc -= 1; \
/* Note: !!! this assumes that the first element of priv_data is ours */ \
struct async_nif_state *async_nif = *(struct async_nif_state**)enif_priv_data(env); \
if (async_nif->shutdown) { \
return enif_make_tuple2(env, enif_make_atom(env, "error"), \
enif_make_atom(env, "shutdown")); \
} \
req = async_nif_reuse_req(async_nif); \
if (!req) { \
return enif_make_tuple2(env, enif_make_atom(env, "error"), \
enif_make_atom(env, "eagain")); \
} \
new_env = req->env; \
DPRINTF("async_nif: calling \"%s\"", __func__); \
do pre_block while(0); \
DPRINTF("async_nif: returned from \"%s\"", __func__); \
copy_of_args = (struct decl ## _args *)enif_alloc(sizeof(struct decl ## _args)); \
if (!copy_of_args) { \
fn_post_ ## decl (args); \
async_nif_recycle_req(req, async_nif); \
return enif_make_tuple2(env, enif_make_atom(env, "error"), \
enif_make_atom(env, "enomem")); \
} \
memcpy(copy_of_args, args, sizeof(struct decl ## _args)); \
req->ref = enif_make_copy(new_env, argv_in[0]); \
enif_self(env, &req->pid); \
req->args = (void*)copy_of_args; \
req->fn_work = (void (*)(ErlNifEnv *, ERL_NIF_TERM, ErlNifPid*, unsigned int, void *))fn_work_ ## decl ; \
req->fn_post = (void (*)(void *))fn_post_ ## decl; \
int h = -1; \
if (affinity) \
h = ((unsigned int)affinity) % async_nif->num_queues; \
ERL_NIF_TERM reply = async_nif_enqueue_req(async_nif, req, h); \
if (!reply) { \
fn_post_ ## decl (args); \
async_nif_recycle_req(req, async_nif); \
enif_free(copy_of_args); \
return enif_make_tuple2(env, enif_make_atom(env, "error"), \
enif_make_atom(env, "eagain")); \
} \
return reply; \
}
#define ASYNC_NIF_INIT(name) \
static ErlNifMutex *name##_async_nif_coord = NULL;
#define ASYNC_NIF_LOAD(name, priv) do { \
if (!name##_async_nif_coord) \
name##_async_nif_coord = enif_mutex_create(NULL); \
enif_mutex_lock(name##_async_nif_coord); \
priv = async_nif_load(); \
enif_mutex_unlock(name##_async_nif_coord); \
} while(0);
#define ASYNC_NIF_UNLOAD(name, env, priv) do { \
if (!name##_async_nif_coord) \
name##_async_nif_coord = enif_mutex_create(NULL); \
enif_mutex_lock(name##_async_nif_coord); \
async_nif_unload(env, priv); \
enif_mutex_unlock(name##_async_nif_coord); \
enif_mutex_destroy(name##_async_nif_coord); \
name##_async_nif_coord = NULL; \
} while(0);
#define ASYNC_NIF_UPGRADE(name, env) do { \
if (!name##_async_nif_coord) \
name##_async_nif_coord = enif_mutex_create(NULL); \
enif_mutex_lock(name##_async_nif_coord); \
async_nif_upgrade(env); \
enif_mutex_unlock(name##_async_nif_coord); \
} while(0);
#define ASYNC_NIF_RETURN_BADARG() do { \
async_nif_recycle_req(req, async_nif); \
return enif_make_badarg(env); \
} while(0);
#define ASYNC_NIF_WORK_ENV new_env
#define ASYNC_NIF_REPLY(msg) enif_send(NULL, pid, env, enif_make_tuple2(env, ref, msg))
/**
* Return a request structure from the recycled req queue if one exists,
* otherwise create one.
*/
struct async_nif_req_entry *
async_nif_reuse_req(struct async_nif_state *async_nif)
{
struct async_nif_req_entry *req = NULL;
ErlNifEnv *env = NULL;
enif_mutex_lock(async_nif->recycled_req_mutex);
if (STAILQ_EMPTY(&async_nif->recycled_reqs)) {
if (async_nif->num_reqs < ASYNC_NIF_MAX_QUEUED_REQS) {
req = enif_alloc(sizeof(struct async_nif_req_entry));
if (req) {
memset(req, 0, sizeof(struct async_nif_req_entry));
env = enif_alloc_env();
if (env) {
req->env = env;
async_nif->num_reqs++;
} else {
enif_free(req);
req = NULL;
}
}
}
} else {
req = STAILQ_FIRST(&async_nif->recycled_reqs);
STAILQ_REMOVE(&async_nif->recycled_reqs, req, async_nif_req_entry, entries);
}
enif_mutex_unlock(async_nif->recycled_req_mutex);
return req;
}
/**
* Store the request for future re-use.
*
* req a request entry with an ErlNifEnv* which will be cleared
* before reuse, but not until then.
* async_nif a handle to our state so that we can find and use the mutex
*/
void
async_nif_recycle_req(struct async_nif_req_entry *req, struct async_nif_state *async_nif)
{
ErlNifEnv *env = NULL;
enif_mutex_lock(async_nif->recycled_req_mutex);
enif_clear_env(req->env);
env = req->env;
memset(req, 0, sizeof(struct async_nif_req_entry));
req->env = env;
STAILQ_INSERT_TAIL(&async_nif->recycled_reqs, req, entries);
enif_mutex_unlock(async_nif->recycled_req_mutex);
}
static void *async_nif_worker_fn(void *);
/**
* Start up a worker thread.
*/
static int
async_nif_start_worker(struct async_nif_state *async_nif, struct async_nif_work_queue *q)
{
struct async_nif_worker_entry *we;
if (0 == q)
return EINVAL;
enif_mutex_lock(async_nif->we_mutex);
we = SLIST_FIRST(&async_nif->we_joining);
while(we != NULL) {
struct async_nif_worker_entry *n = SLIST_NEXT(we, entries);
SLIST_REMOVE(&async_nif->we_joining, we, async_nif_worker_entry, entries);
void *exit_value = 0; /* We ignore the thread_join's exit value. */
enif_thread_join(we->tid, &exit_value);
enif_free(we);
async_nif->we_active--;
we = n;
}
if (async_nif->we_active == ASYNC_NIF_MAX_WORKERS) {
enif_mutex_unlock(async_nif->we_mutex);
return EAGAIN;
}
we = enif_alloc(sizeof(struct async_nif_worker_entry));
if (!we) {
enif_mutex_unlock(async_nif->we_mutex);
return ENOMEM;
}
memset(we, 0, sizeof(struct async_nif_worker_entry));
we->worker_id = async_nif->we_active++;
we->async_nif = async_nif;
we->q = q;
enif_mutex_unlock(async_nif->we_mutex);
return enif_thread_create(NULL,&we->tid, &async_nif_worker_fn, (void*)we, 0);
}
/**
* Enqueue a request for processing by a worker thread.
*
* Places the request into a work queue determined either by the
* provided affinity or by iterating through the available queues.
*/
static ERL_NIF_TERM
async_nif_enqueue_req(struct async_nif_state* async_nif, struct async_nif_req_entry *req, int hint)
{
/* Identify the most appropriate worker for this request. */
unsigned int i, qid = 0;
struct async_nif_work_queue *q = NULL;
double avg_depth;
/* Either we're choosing a queue based on some affinity/hinted value or we
need to select the next queue in the rotation and atomically update that
global value (next_q is shared across worker threads) . */
if (hint >= 0) {
qid = (unsigned int)hint;
} else {
qid = async_nif->next_q;
qid = (qid + 1) % async_nif->num_queues;
async_nif->next_q = qid;
}
/* Now we inspect and interate across the set of queues trying to select one
that isn't too full or too slow. */
for (i = 0; i < async_nif->num_queues; i++) {
/* Compute the average queue depth not counting queues which are empty or
the queue we're considering right now. */
unsigned int j, n = 0;
for (j = 0; j < async_nif->num_queues; j++) {
if (j != qid && async_nif->queues[j].depth != 0) {
n++;
avg_depth += async_nif->queues[j].depth;
}
}
if (avg_depth != 0)
avg_depth /= n;
/* Lock this queue under consideration, then check for shutdown. While
we hold this lock either a) we're shutting down so exit now or b) this
queue will be valid until we release the lock. */
q = &async_nif->queues[qid];
enif_mutex_lock(q->reqs_mutex);
if (async_nif->shutdown) {
enif_mutex_unlock(q->reqs_mutex);
return 0;
}
/* Try not to enqueue a request into a queue that isn't keeping up with
the request volume. */
if (q->depth <= avg_depth) break;
else {
enif_mutex_unlock(q->reqs_mutex);
qid = (qid + 1) % async_nif->num_queues;
}
}
/* If the for loop finished then we didn't find a suitable queue for this
request, meaning we're backed up so trigger eagain. */
if (i == async_nif->num_queues) {
enif_mutex_unlock(q->reqs_mutex);
return 0;
}
/* Add the request to the queue. */
STAILQ_INSERT_TAIL(&q->reqs, req, entries);
q->depth++;
/* We've selected a queue for this new request now check to make sure there are
enough workers actively processing requests on this queue. */
if (q->depth > q->num_workers)
if (async_nif_start_worker(async_nif, q) == 0) q->num_workers++;
/* Build the term before releasing the lock so as not to race on the use of
the req pointer (which will soon become invalid in another thread
performing the request). */
ERL_NIF_TERM reply = enif_make_tuple2(req->env, enif_make_atom(req->env, "ok"),
enif_make_atom(req->env, "enqueued"));
enif_cond_signal(q->reqs_cnd);
enif_mutex_unlock(q->reqs_mutex);
return reply;
}
/**
* Worker threads execute this function. Here each worker pulls requests of
* their respective queues, executes that work and continues doing that until
* they see the shutdown flag is set at which point they exit.
*/
static void *
async_nif_worker_fn(void *arg)
{
struct async_nif_worker_entry *we = (struct async_nif_worker_entry *)arg;
unsigned int worker_id = we->worker_id;
struct async_nif_state *async_nif = we->async_nif;
struct async_nif_work_queue *q = we->q;
struct async_nif_req_entry *req = NULL;
for(;;) {
/* Examine the request queue, are there things to be done? */
enif_mutex_lock(q->reqs_mutex);
check_again_for_work:
if (async_nif->shutdown) {
enif_mutex_unlock(q->reqs_mutex);
break;
}
if (STAILQ_EMPTY(&q->reqs)) {
/* Queue is empty so we wait for more work to arrive. */
if (q->num_workers > ASYNC_NIF_MIN_WORKERS) {
enif_mutex_unlock(q->reqs_mutex);
break;
} else {
enif_cond_wait(q->reqs_cnd, q->reqs_mutex);
goto check_again_for_work;
}
} else {
/* At this point the next req is ours to process and we hold the
reqs_mutex lock. Take the request off the queue. */
req = STAILQ_FIRST(&q->reqs);
STAILQ_REMOVE(&q->reqs, req, async_nif_req_entry, entries);
q->depth--;
/* Ensure that there is at least one other worker thread watching this
queue. */
enif_cond_signal(q->reqs_cnd);
enif_mutex_unlock(q->reqs_mutex);
/* Perform the work. */
req->fn_work(req->env, req->ref, &req->pid, worker_id, req->args);
/* Now call the post-work cleanup function. */
req->fn_post(req->args);
/* Clean up req for reuse. */
req->ref = 0;
req->fn_work = 0;
req->fn_post = 0;
enif_free(req->args);
req->args = NULL;
async_nif_recycle_req(req, async_nif);
req = NULL;
}
}
enif_mutex_lock(async_nif->we_mutex);
SLIST_INSERT_HEAD(&async_nif->we_joining, we, entries);
enif_mutex_unlock(async_nif->we_mutex);
q->num_workers--;
enif_thread_exit(0);
return 0;
}
static void
async_nif_unload(ErlNifEnv *env, struct async_nif_state *async_nif)
{
unsigned int i;
unsigned int num_queues = async_nif->num_queues;
struct async_nif_work_queue *q = NULL;
struct async_nif_req_entry *req = NULL;
struct async_nif_worker_entry *we = NULL;
UNUSED(env);
/* Signal the worker threads, stop what you're doing and exit. To ensure
that we don't race with the enqueue() process we first lock all the worker
queues, then set shutdown to true, then unlock. The enqueue function will
take the queue mutex, then test for shutdown condition, then enqueue only
if not shutting down. */
for (i = 0; i < num_queues; i++) {
q = &async_nif->queues[i];
enif_mutex_lock(q->reqs_mutex);
}
/* Set the shutdown flag so that worker threads will no continue
executing requests. */
async_nif->shutdown = 1;
for (i = 0; i < num_queues; i++) {
q = &async_nif->queues[i];
enif_mutex_unlock(q->reqs_mutex);
}
/* Join for the now exiting worker threads. */
while(async_nif->we_active > 0) {
for (i = 0; i < num_queues; i++)
enif_cond_broadcast(async_nif->queues[i].reqs_cnd);
enif_mutex_lock(async_nif->we_mutex);
we = SLIST_FIRST(&async_nif->we_joining);
while(we != NULL) {
struct async_nif_worker_entry *n = SLIST_NEXT(we, entries);
SLIST_REMOVE(&async_nif->we_joining, we, async_nif_worker_entry, entries);
void *exit_value = 0; /* We ignore the thread_join's exit value. */
enif_thread_join(we->tid, &exit_value);
enif_free(we);
async_nif->we_active--;
we = n;
}
enif_mutex_unlock(async_nif->we_mutex);
}
enif_mutex_destroy(async_nif->we_mutex);
/* Cleanup in-flight requests, mutexes and conditions in each work queue. */
for (i = 0; i < num_queues; i++) {
q = &async_nif->queues[i];
/* Worker threads are stopped, now toss anything left in the queue. */
req = NULL;
req = STAILQ_FIRST(&q->reqs);
while(req != NULL) {
struct async_nif_req_entry *n = STAILQ_NEXT(req, entries);
enif_clear_env(req->env);
enif_send(NULL, &req->pid, req->env,
enif_make_tuple2(req->env, enif_make_atom(req->env, "error"),
enif_make_atom(req->env, "shutdown")));
req->fn_post(req->args);
enif_free_env(req->env);
enif_free(req->args);
enif_free(req);
req = n;
}
enif_mutex_destroy(q->reqs_mutex);
enif_cond_destroy(q->reqs_cnd);
}
/* Free any req structures sitting unused on the recycle queue. */
enif_mutex_lock(async_nif->recycled_req_mutex);
req = NULL;
req = STAILQ_FIRST(&async_nif->recycled_reqs);
while(req != NULL) {
struct async_nif_req_entry *n = STAILQ_NEXT(req, entries);
enif_free_env(req->env);
enif_free(req);
req = n;
}
enif_mutex_unlock(async_nif->recycled_req_mutex);
enif_mutex_destroy(async_nif->recycled_req_mutex);
memset(async_nif, 0, sizeof(struct async_nif_state) + (sizeof(struct async_nif_work_queue) * async_nif->num_queues));
enif_free(async_nif);
}
static void *
async_nif_load()
{
static int has_init = 0;
unsigned int i, num_queues;
ErlNifSysInfo info;
struct async_nif_state *async_nif;
/* Don't init more than once. */
if (has_init) return 0;
else has_init = 1;
/* Find out how many schedulers there are. */
enif_system_info(&info, sizeof(ErlNifSysInfo));
/* Size the number of work queues according to schedulers. */
if (info.scheduler_threads > ASYNC_NIF_MAX_WORKERS / 2) {
num_queues = ASYNC_NIF_MAX_WORKERS / 2;
} else {
int remainder = ASYNC_NIF_MAX_WORKERS % info.scheduler_threads;
if (remainder != 0)
num_queues = info.scheduler_threads - remainder;
else
num_queues = info.scheduler_threads;
if (num_queues < 2)
num_queues = 2;
}
/* Init our portion of priv_data's module-specific state. */
async_nif = enif_alloc(sizeof(struct async_nif_state) +
sizeof(struct async_nif_work_queue) * num_queues);
if (!async_nif)
return NULL;
memset(async_nif, 0, sizeof(struct async_nif_state) +
sizeof(struct async_nif_work_queue) * num_queues);
async_nif->num_queues = num_queues;
async_nif->we_active = 0;
async_nif->next_q = 0;
async_nif->shutdown = 0;
STAILQ_INIT(&async_nif->recycled_reqs);
async_nif->recycled_req_mutex = enif_mutex_create(NULL);
async_nif->we_mutex = enif_mutex_create(NULL);
SLIST_INIT(&async_nif->we_joining);
for (i = 0; i < async_nif->num_queues; i++) {
struct async_nif_work_queue *q = &async_nif->queues[i];
STAILQ_INIT(&q->reqs);
q->reqs_mutex = enif_mutex_create(NULL);
q->reqs_cnd = enif_cond_create(NULL);
}
return async_nif;
}
static void
async_nif_upgrade(ErlNifEnv *env)
{
UNUSED(env);
// TODO:
}
#if defined(__cplusplus)
}
#endif
#endif // __ASYNC_NIF_H__
%% -------------------------------------------------------------------
%%
%% async_nif: An async thread-pool layer for Erlang's NIF API
%%
%% Copyright (c) 2012 Basho Technologies, Inc. All Rights Reserved.
%% Author: Gregory Burd <greg@basho.com> <greg@burd.me>
%%
%% This file is provided to you under the Apache License,
%% Version 2.0 (the "License"); you may not use this file
%% except in compliance with the License. You may obtain
%% a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing,
%% software distributed under the License is distributed on an
%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
%% KIND, either express or implied. See the License for the
%% specific language governing permissions and limitations
%% under the License.
%%
%% -------------------------------------------------------------------
-spec async_nif_enqueue(reference(), function(), [term()]) -> term() | {error, term()}.
async_nif_enqueue(R, F, A) ->
case erlang:apply(F, [R|A]) of
{ok, enqueued} ->
receive
{R, {error, shutdown}=Error} ->
%% Work unit was queued, but not executed.
Error;
{R, {error, _Reason}=Error} ->
%% Work unit returned an error.
Error;
{R, Reply} ->
Reply
end;
{error, eagain} ->
%% Work unit was not queued, try again.
async_nif_enqueue(R, F, A);
%{error, enomem} ->
%{error, shutdown} ->
Other ->
Other
end.
-define(ASYNC_NIF_CALL(Fun, Args), async_nif_enqueue(erlang:make_ref(), Fun, Args)).
/* Global init for async_nif. */
ASYNC_NIF_INIT(wterl);
ASYNC_NIF_DECL(busywait_nif,
{ // struct
/* Store your arguments during the work block here,
this becomes a struct {} which you later use in the
work block: `args->___` */
unsigned int count;
ERL_NIF_TERM binary;
},
{ // pre
/* Check pre-conditions and gather values from arguments for
use later. Anything you need in your work block must be copied
out of the argv[] and into something in your args->___ as created
above in the 'struct' section.
This is the block that executes on the scheduler thread, so be quick
here and return ASAP.
The policy here is to either return with some badarg or other error
message or simply execute until the end of the block. Don't
return on success, if you do your request won't get queued.
NOTE: Because this is in a do { } while(0); loop you can decl variables
of local scope, but don't do:
int a, b, c;
do:
int a; int b; int c;
or else you'll spend hours reading compiler errors about macros having
6 args when they should have 5 and that will cause undue frustration.
On success, when control leaves this block the request is enqueued and
then the NIF function returns: {ok, QDepth} | {error, Reason}
`QDepth` is the number of items in the work request queue not being
run by workers yet. We use that in the ?ASYNC_NIF_CALL() Erlang
macro to inform the Erlang schuduler that the NIF is backing up with
work. The result is that the scheduler knows that it should do other
things while the work queue catches up, so it slows down the Erlang
side calling into the NIF.
Note: you can set a "affinity" to point to a "const char*" which will
be hashed and that hash will be used to select a work queue during
enqueue(). This helps to spread requests across queues and also create
a relationship between related work items and a subset of threads. */
if(!(enif_get_uint(env, argv[0], &args->count) && enif_is_binary, (env, argv[1])) {
ASYNC_NIF_RETURN_BADARG();
}
args->binary = enif_make_copy(ASYNC_NIF_WORK_ENV, argv[1]);
// you might enif_keep_resource(args->___) here
},
{
/* Perform your long running (file I/O, computations, etc.) NIF work in
this block on a non-Erlang scheduler thread and then send one or more
messages back to the calling Erlang process.
In your Erlang code your NIF interface will look like:
-include("async_nif.hrl").
do_something_async_nif(_Ref, _AnArg, _AnotherArg) ->
nif_not_loaded.
do_something(AnArg, AnotherArg) ->
Result = ?ASYNC_NIF_CALL(fun do_something_async_nif/3, [AnArg, AnotherArg]).
...
end.
*/
while(args->count > 0) { args->count--; }
ERL_NIF_TERM msg = enif_make_tuple2(env, ATOM_OK, enif_make_int(env, args->count));
/* or enif_make_resource(); enif_release_resource(); */
ErlNifBinary binary;
if (!enif_inspect_binary(env, args->binary, &binary)) {
ASYNC_NIF_REPLY(some error term);
return;
}
ASYNC_NIF_REPLY(msg);
},
{
/* Release resources allocated to hold things in args within this
block. If you alloc'ed something or increased a reference count
on something in the pre block, free or release it here.
Normally this should be a few enif_free(args->___) calls.
This block will be called:
1) after the work block has been called
2) during shutdown when the work queue is destroyed
3) if something goes wrong setting up the work block
*/
// if you keep() somthing, you must enif_release_resource(args->___) here
});
make test
CFLAGS="-std=c99" ./rebar clean compile
==> nifwait (clean)
==> nifwait (compile)
Compiled src/wait.erl
Compiling c_src/wait.c
c_src/wait.c: In function ‘fn_work_sleep_nif’:
c_src/wait.c:92:1: warning: implicit declaration of function ‘usleep’ [-Wimplicit-function-declaration]
erl -pa ebin -eval 'wait:run(10000, 30000, 5, 10000).'
{0,0,0,0,0,0,0,666}
{0,0,0,0,0,0,0,666}
{0,0,0,0,0,0,0,665}
{0,0,0,0,0,0,0,663}
{0,0,0,0,0,0,0,662}
{0,0,0,0,0,0,0,663}
{0,0,0,0,0,0,98,659}
{0,0,0,0,0,0,99,659}
{0,0,0,0,0,0,116,659}
{0,0,0,0,0,0,122,659}
{0,0,0,0,0,0,129,659}
{0,0,0,0,0,0,138,659}
{0,0,0,0,0,0,152,659}
{0,0,0,0,0,0,171,659}
{0,0,0,0,0,0,176,659}
{0,0,0,0,0,0,189,659}
{0,0,0,0,0,0,189,659}
{0,0,0,0,0,0,195,659}
{0,0,0,0,0,0,210,659}
{0,0,0,0,0,0,219,659}
{0,0,0,0,0,0,301,659}
{0,0,0,0,0,0,304,659}
{0,0,0,0,0,0,306,659}
{0,0,0,0,0,0,307,659}
{0,0,0,0,0,0,328,659}
{0,0,0,0,0,0,338,659}
{0,0,0,0,0,0,338,659}
{0,0,0,0,0,0,338,659}
{0,0,0,0,0,0,342,659}
{0,0,0,0,0,0,342,659}
{0,0,0,0,0,0,353,659}
{0,0,0,0,0,0,354,659}
{0,0,0,0,0,0,373,659}
{0,0,0,0,0,0,354,659}
{0,0,0,0,0,0,374,659}
{0,0,0,0,0,0,379,659}
{0,0,0,0,0,0,397,659}
{0,0,0,0,0,0,391,659}
{0,0,0,0,0,0,413,659}
{0,0,0,0,0,0,415,659}
{0,0,0,0,0,0,434,659}
{0,0,0,0,0,0,438,659}
{0,0,0,0,0,0,442,659}
{0,0,0,0,0,0,446,659}
{0,0,0,0,0,0,450,659}
{0,0,0,0,0,0,456,659}
{0,0,0,0,0,0,467,659}
{0,0,0,0,0,0,471,659}
{0,0,0,0,0,0,471,659}
{0,0,0,0,0,0,476,659}
{0,0,0,0,0,0,477,660}
{0,0,0,0,0,0,478,659}
{0,0,0,0,0,0,478,659}
{0,0,0,0,0,0,479,659}
{0,0,0,0,0,0,492,659}
{0,0,0,0,0,0,500,659}
{0,0,0,0,0,0,501,659}
{0,0,0,0,0,0,502,659}
{0,0,0,0,0,0,502,659}
{0,0,0,0,0,0,518,659}
{0,0,0,0,0,0,514,659}
{0,0,0,0,0,0,531,659}
{0,0,0,0,0,0,535,659}
{0,0,0,0,0,0,527,659}
{0,0,0,0,0,0,539,659}
{0,0,0,0,0,0,544,659}
{0,0,0,0,0,0,555,659}
{0,0,0,0,0,0,556,659}
{0,0,0,0,0,0,559,659}
{0,0,0,0,0,0,567,659}
{0,0,0,0,0,0,582,659}
{0,0,0,0,0,0,578,659}
{0,0,0,0,0,0,575,659}
{0,0,0,0,0,0,585,659}
{0,0,0,0,0,0,589,659}
{0,0,0,0,0,0,591,659}
{0,0,0,0,0,0,598,659}
{0,0,0,0,0,0,600,659}
{0,0,0,0,0,0,607,659}
{0,0,0,0,0,0,612,659}
{0,0,0,0,0,0,614,659}
{0,0,0,0,0,0,616,659}
{0,0,0,0,2,0,615,659}
{0,0,0,0,11,0,614,660}
{0,0,0,0,13,0,613,660}
{0,0,0,0,12,0,613,660}
{0,0,0,0,10,0,613,660}
{0,0,0,0,14,0,613,660}
{0,0,0,0,14,0,613,659}
{0,0,0,0,13,0,613,659}
{0,0,0,0,14,0,613,659}
{0,0,0,0,14,0,613,659}
{0,0,0,0,16,0,611,659}
{0,0,0,0,15,0,612,659}
{0,0,0,0,25,0,610,659}
{0,0,0,0,19,0,610,659}
{0,0,0,0,32,0,610,659}
{0,0,0,0,13,0,613,659}
{0,0,0,0,18,0,610,659}
{0,0,0,0,41,0,610,659}
{0,0,0,0,37,0,610,659}
{0,0,0,0,47,0,609,659}
{0,0,0,0,49,0,607,659}
{0,0,0,0,40,0,610,659}
{0,0,0,0,29,0,610,659}
{0,0,0,0,49,0,607,659}
{0,0,1,1,53,0,607,659}
{0,0,0,0,57,0,606,659}
{0,0,0,0,62,0,604,659}
{0,0,0,0,66,0,604,659}
{0,0,0,0,69,0,604,659}
{0,0,0,0,53,0,607,659}
{0,0,0,0,62,0,604,659}
{0,0,0,0,68,0,604,659}
{0,0,0,0,90,0,604,659}
{0,0,0,0,76,0,605,659}
{0,0,1,0,97,0,603,659}
{0,0,0,0,102,0,603,659}
{0,0,0,0,103,0,603,659}
{0,0,0,0,107,0,603,659}
{0,0,0,0,104,0,603,659}
{0,0,0,0,115,0,603,659}
{0,0,0,0,84,0,605,659}
{0,0,0,0,117,1,603,659}
{0,0,0,0,125,0,602,659}
{0,0,0,0,13,0,613,659}
{0,0,0,0,132,0,602,659}
{0,0,1,0,118,0,603,659}
{0,0,0,0,132,0,602,659}
{0,0,0,0,123,0,602,659}
{0,0,0,0,138,0,602,659}
{0,0,0,0,136,0,602,659}
{0,0,0,0,136,0,602,659}
{0,0,0,0,139,0,601,659}
{0,0,0,0,138,0,602,659}
{0,0,0,0,144,0,598,659}
{0,0,0,0,140,0,600,659}
{0,0,0,0,144,0,598,659}
{0,0,0,0,53,0,607,659}
{0,0,0,0,133,0,602,659}
{0,0,0,0,167,0,595,659}
{0,0,0,0,150,0,598,659}
{0,0,0,0,151,0,598,659}
{0,0,0,0,180,0,594,659}
{0,0,0,0,165,0,596,659}
{0,0,0,0,194,0,594,659}
{1,0,0,0,178,0,594,659}
{0,0,0,0,204,0,594,659}
{0,0,0,0,186,0,594,659}
{0,0,0,0,213,1,594,659}
{0,0,0,0,216,1,594,659}
{0,0,0,0,156,0,598,659}
{0,0,0,0,146,0,598,659}
{0,0,0,0,228,1,594,659}
{0,0,0,0,220,1,594,659}
{0,0,0,0,237,0,593,659}
{0,0,0,0,225,1,594,659}
{0,0,0,0,202,0,594,659}
{0,0,0,0,233,0,593,659}
{0,0,0,0,220,1,594,659}
{0,0,0,0,241,1,591,659}
{0,0,0,0,241,0,593,659}
{0,0,0,0,240,0,591,659}
{0,0,0,0,239,1,591,659}
{0,0,0,0,242,0,591,659}
{0,0,0,0,241,0,593,659}
{1,0,0,0,275,0,590,659}
{1,0,0,0,282,0,590,659}
{1,0,0,0,256,0,590,659}
{0,0,0,0,286,0,590,659}
{1,0,0,0,282,0,590,659}
{1,0,0,0,248,0,591,659}
{1,0,0,0,267,0,590,659}
{0,0,0,0,299,0,590,659}
{0,0,0,0,307,0,590,659}
{0,0,0,0,285,0,590,659}
{0,0,0,0,299,0,590,659}
{0,0,0,0,291,0,590,659}
{0,0,0,0,327,1,590,659}
{0,0,0,0,293,0,590,659}
{0,0,0,0,338,1,590,659}
{0,0,0,0,345,1,590,659}
{0,0,0,0,352,1,590,659}
{0,0,0,0,328,1,590,659}
{0,0,0,0,330,1,590,659}
{0,0,0,0,321,0,590,659}
{0,0,0,0,307,0,590,659}
{0,0,0,0,360,1,590,659}
{0,0,0,0,353,1,590,659}
{0,0,0,0,370,1,590,659}
{0,0,0,0,374,1,590,659}
{0,0,0,0,352,1,590,659}
{0,0,0,0,378,1,590,659}
{0,0,0,1,354,1,590,659}
{0,0,0,0,373,1,590,659}
{0,0,0,0,362,1,590,659}
{0,0,0,0,385,1,590,659}
{0,0,0,0,390,1,590,659}
{0,0,0,0,405,1,590,659}
{0,0,0,0,398,1,590,659}
{0,0,0,0,400,1,590,659}
{0,0,0,0,396,1,590,659}
{0,0,0,0,414,1,590,659}
{0,0,0,0,410,1,590,659}
{0,0,0,0,423,1,590,659}
{0,0,0,0,411,1,590,659}
{0,0,0,0,352,1,590,659}
{0,0,0,0,423,1,590,659}
{0,0,0,0,440,1,590,659}
{0,0,0,0,442,1,591,659}
{0,0,0,0,431,1,590,659}
{0,0,0,0,450,1,590,659}
{0,0,0,0,456,1,590,659}
{0,0,0,0,410,1,590,659}
{0,0,0,0,466,1,590,659}
{0,0,0,0,432,1,590,659}
{0,0,0,0,478,1,590,659}
{0,0,0,0,462,1,590,659}
{0,0,0,0,446,1,590,659}
{0,0,0,0,493,1,590,659}
{0,0,0,0,443,1,590,659}
{0,0,0,0,501,1,590,659}
{0,0,0,0,505,1,590,659}
{0,0,0,0,486,1,590,659}
{0,0,0,0,474,1,590,659}
{1,0,0,0,521,0,590,659}
{0,0,0,0,486,1,590,659}
{1,0,0,0,515,0,590,659}
{1,0,0,0,547,0,580,659}
{0,0,0,0,553,0,576,659}
{0,0,0,0,497,1,590,659}
{1,0,0,0,527,0,590,659}
{1,0,0,0,528,0,589,659}
{0,0,0,0,569,1,576,659}
{0,0,0,0,560,1,576,659}
{1,0,0,0,518,0,590,659}
{0,0,0,6,571,1,576,659}
{1,0,0,0,556,0,576,659}
{0,0,0,0,572,1,576,659}
{0,0,0,6,571,1,576,659}
{0,0,0,7,571,1,576,659}
{0,0,0,27,571,1,576,659}
{0,0,0,21,571,1,576,659}
{0,0,0,21,571,1,576,659}
{0,0,0,38,571,1,576,659}
{0,0,0,41,571,1,576,659}
{0,0,0,0,569,1,576,659}
{0,0,0,37,571,1,576,659}
{0,0,0,37,571,1,576,659}
{0,0,0,63,571,1,576,659}
{0,0,0,53,571,1,576,659}
{0,0,0,79,571,1,576,659}
{0,0,0,42,571,1,576,659}
{0,0,0,89,571,1,576,659}
{0,0,0,73,571,1,576,659}
{0,0,0,62,571,1,576,659}
{0,0,0,112,571,1,576,659}
{0,0,0,69,571,1,576,659}
{0,0,0,101,571,1,576,659}
{0,0,1,130,571,1,576,659}
{0,0,0,119,571,1,576,659}
{0,0,0,120,571,1,576,659}
{0,0,0,27,571,1,576,659}
{0,0,0,130,571,1,576,659}
{0,0,0,91,571,1,576,659}
{0,0,0,158,571,1,576,659}
{0,0,0,166,571,1,576,659}
{0,0,0,175,571,1,577,659}
{0,0,0,147,571,1,576,659}
{0,0,0,188,571,1,576,659}
{0,0,0,145,571,1,576,659}
{0,0,0,202,571,1,576,659}
{0,0,0,207,571,1,576,659}
{0,0,0,176,571,1,576,659}
{0,0,0,146,571,1,576,659}
{0,0,0,230,571,1,576,659}
{0,0,0,195,571,1,576,659}
{0,0,0,214,571,1,576,659}
{0,0,0,246,571,1,576,659}
{0,0,0,154,571,1,576,659}
{0,0,0,237,571,1,576,659}
{0,0,0,238,571,1,576,659}
{0,0,0,266,571,1,576,659}
{0,0,0,253,571,1,576,659}
{0,0,0,254,571,1,576,659}
{0,0,0,282,571,1,576,659}
{0,0,0,267,571,1,576,659}
{0,0,0,296,571,1,577,659}
{0,0,0,260,571,1,576,659}
{0,0,0,304,571,1,576,659}
{0,0,0,307,571,1,576,659}
{0,0,0,296,571,1,576,659}
{0,0,0,312,571,1,576,659}
{0,0,0,318,571,1,576,659}
{0,0,0,320,571,1,576,659}
{0,0,0,310,571,1,576,659}
{0,0,0,219,571,1,576,659}
{0,0,0,338,571,1,576,659}
{0,0,0,340,571,1,576,659}
{0,0,0,347,571,1,576,659}
{0,0,0,284,571,1,576,659}
{0,0,0,323,571,1,576,659}
{0,0,0,366,571,1,576,659}
{0,0,0,349,571,1,576,659}
{0,0,0,376,571,1,576,659}
{0,0,0,282,571,1,576,659}
{0,0,0,327,571,1,576,659}
{0,0,0,368,571,1,576,659}
{0,0,0,395,571,1,576,659}
{0,0,0,398,571,1,576,659}
{0,0,0,400,571,1,576,659}
{0,0,0,405,571,1,576,659}
{0,0,0,361,571,1,576,659}
{0,0,0,383,571,1,576,659}
{0,0,0,417,571,1,576,659}
{0,0,0,391,571,1,576,659}
{0,0,0,410,571,1,576,659}
{0,0,0,429,571,1,576,659}
{0,0,0,430,571,1,576,659}
{0,0,0,423,571,1,576,659}
{0,0,0,429,572,1,576,659}
{0,0,0,443,571,1,576,659}
{0,0,0,435,571,1,576,659}
{0,0,0,410,571,1,576,659}
{0,0,0,435,571,1,576,659}
{0,0,0,466,571,1,576,659}
{0,0,0,450,571,1,576,659}
{0,0,0,454,571,1,576,659}
{0,0,0,463,571,1,576,659}
{0,0,0,384,571,1,576,659}
{0,0,0,470,571,1,576,659}
{0,0,0,472,571,1,576,659}
{0,0,0,501,571,1,576,659}
{0,0,0,507,571,1,576,659}
{0,0,0,497,571,1,576,659}
{0,0,0,498,571,1,576,659}
{0,0,0,515,571,1,576,659}
{0,0,0,521,571,1,576,659}
{0,0,0,531,571,1,576,659}
{0,0,0,511,571,1,576,659}
{0,0,0,481,571,1,576,659}
{0,0,0,543,571,1,576,659}
{0,0,0,546,571,1,576,659}
{0,0,0,509,571,1,576,659}
{0,0,0,556,571,1,577,659}
{0,0,0,538,571,1,576,659}
{0,0,0,485,571,1,576,659}
{0,0,0,533,571,1,576,659}
{0,0,0,548,571,1,576,659}
{1,1,1,613,572,1,576,660}
{0,1,1,613,572,1,576,659}
{0,0,1,610,571,1,577,659}
{1,0,0,610,571,1,577,659}
{2,0,0,610,571,1,577,659}
{7,0,0,608,571,1,576,659}
{4,0,0,609,571,2,577,659}
{6,0,0,609,571,1,576,659}
{4,0,0,609,571,2,577,659}
{29,0,0,606,571,0,576,659}
{36,0,0,605,571,0,576,659}
{59,0,0,604,571,0,574,660}
{10,0,0,608,571,1,576,659}
{68,0,0,603,571,0,572,659}
{73,0,0,603,571,0,571,659}
{36,0,0,605,571,0,576,659}
{60,0,0,604,571,0,573,659}
{79,0,0,602,571,0,570,659}
{97,0,0,601,571,0,570,659}
{80,0,0,601,571,0,570,659}
{108,0,0,599,571,0,570,659}
{15,0,0,606,571,0,576,659}
{116,0,0,599,571,0,570,659}
{86,0,0,601,571,0,570,659}
{128,0,0,597,571,0,570,659}
{106,0,0,599,571,0,570,659}
{127,0,0,598,571,0,570,659}
{114,0,0,599,571,0,570,659}
{155,0,0,595,571,0,561,659}
{159,0,0,595,571,1,558,659}
{152,0,0,595,571,0,562,659}
{132,0,0,597,571,0,570,659}
{23,0,0,606,571,0,576,659}
{161,0,0,595,571,0,557,659}
{182,0,0,592,571,0,549,659}
{169,0,0,595,571,0,549,659}
{193,0,0,592,571,0,549,659}
{180,0,0,592,572,0,549,659}
{146,0,0,596,571,0,565,659}
{213,0,0,592,571,0,547,659}
{189,0,0,592,571,0,549,659}
{177,0,0,592,571,0,549,659}
{230,0,0,591,571,0,547,659}
{211,0,0,592,571,0,547,659}
{165,0,0,595,571,0,554,659}
{220,0,0,591,571,0,548,659}
{221,0,0,591,571,0,547,659}
{204,0,0,592,571,0,549,659}
{240,0,0,590,571,0,547,659}
{241,0,0,590,571,0,547,659}
{280,0,0,588,571,0,544,659}
{254,0,0,590,571,0,544,659}
{263,0,0,588,571,0,544,659}
{296,0,0,587,571,0,544,659}
{300,0,0,587,571,0,544,659}
{252,0,0,590,571,0,544,659}
{306,0,0,587,571,0,544,659}
{291,0,0,587,571,0,544,659}
{264,0,0,588,571,0,544,659}
{272,0,0,588,571,0,544,659}
{303,0,0,587,571,0,544,659}
{332,0,0,587,571,0,539,659}
{315,0,0,587,571,0,541,659}
{338,0,0,583,571,0,539,659}
{323,0,0,587,571,0,539,659}
{289,0,0,587,571,0,544,659}
{335,0,0,586,571,0,539,659}
{338,0,0,584,571,0,539,659}
{364,0,0,581,571,0,539,659}
{343,0,0,583,571,0,539,659}
{352,0,0,582,571,0,539,659}
{376,0,0,581,571,0,539,659}
{379,0,0,581,571,0,539,659}
{320,0,0,587,571,0,539,659}
{366,0,0,581,571,0,539,659}
{372,0,0,581,571,0,539,659}
{400,0,0,581,571,0,535,659}
{402,0,0,581,571,0,535,659}
{386,0,0,581,571,0,539,659}
{407,0,0,581,571,0,534,659}
{411,0,0,581,571,0,534,659}
{352,0,0,582,571,0,539,659}
{362,0,0,581,571,0,539,659}
{389,0,0,581,571,0,539,659}
{408,0,0,581,571,0,534,659}
{441,0,0,575,571,0,532,659}
{445,0,0,575,571,0,532,659}
{420,0,0,581,571,0,532,659}
{452,0,0,575,571,0,532,659}
{456,0,0,575,571,0,532,659}
{398,0,0,581,571,0,537,659}
{417,0,0,581,571,0,532,659}
{449,0,0,575,571,0,532,659}
{440,0,0,575,571,0,532,659}
{484,0,0,575,571,0,528,659}
{460,0,0,575,571,0,532,659}
{468,627,0,0,602,0,0,598}
{468,627,0,0,606,0,0,598}
{468,627,0,0,606,0,0,598}
{468,627,0,0,606,0,0,599}
{468,627,0,0,603,0,0,598}
{468,627,0,0,607,0,0,603}
queue depth: 0
queue depth: 1
queue depth: 0
queue depth: 0
{468,627,0,0,602,0,0,596}
{468,627,0,0,602,0,0,596}
{468,627,0,0,599,0,0,595}
{468,627,0,0,599,0,0,594}
{468,627,0,0,598,0,0,593}
{468,627,0,0,600,0,0,595}
{468,627,0,0,600,0,0,595}
{468,627,0,0,601,0,0,596}
{468,627,0,0,597,0,0,593}
{468,627,0,0,599,0,0,593}
{468,627,0,0,601,0,0,595}
{468,627,0,0,598,0,0,593}
{468,627,0,0,597,0,0,593}
{468,627,0,0,596,0,0,589}
{468,627,0,0,595,0,0,589}
{468,627,0,0,596,0,0,594}
{468,627,0,0,596,0,0,593}
{468,627,0,0,596,0,0,591}
{468,627,0,0,596,0,0,590}
{468,627,0,0,597,0,0,593}
{468,627,0,0,601,0,0,596}
{468,627,0,0,594,0,0,588}
{468,627,0,0,594,0,0,588}
{468,627,0,0,593,0,0,588}
{468,627,0,0,593,0,0,585}
{468,627,0,0,590,0,0,585}
{468,627,0,0,593,0,0,586}
{468,627,0,0,593,0,0,586}
{468,627,0,0,593,0,0,586}
{468,627,0,0,589,0,0,583}
{468,627,0,0,589,0,0,583}
{468,627,0,0,589,0,0,583}
{468,627,0,0,590,0,0,584}
{468,627,0,0,589,0,0,584}
{468,627,0,0,589,0,0,583}
{468,627,0,0,593,0,0,588}
{468,627,0,0,586,0,0,581}
queue depth: 1
queue depth: 1
queue depth: 0
queue depth: 1
queue depth: 0
queue depth: 0
queue depth: 1
queue depth: 1
queue depth: 0
queue depth: 0
queue depth: 1
queue depth: 0
queue depth: 0
queue depth: 1
queue depth: 1
queue depth: 0
{468,627,0,0,579,0,0,575}
{468,627,0,0,578,0,0,573}
{468,628,0,0,578,0,0,573}
{468,627,0,0,578,0,0,573}
{468,628,0,0,578,0,0,573}
{468,627,0,0,576,0,0,573}
queue depth: 0
queue depth: 0
queue depth: 0
queue depth: 0
queue depth: 1
queue depth: 0
queue depth: 0
{468,627,0,0,575,0,0,573}
{468,627,0,0,575,0,0,572}
{468,627,0,0,576,0,0,574}
{468,627,0,0,576,0,0,573}
{468,627,0,0,571,0,0,571}
{468,627,0,0,571,0,0,571}
{468,627,0,0,575,0,0,571}
{468,627,0,0,574,0,0,571}
queue depth: 1
{468,627,0,0,572,0,0,571}
{468,627,0,0,571,0,0,571}
{468,627,0,0,575,0,0,572}
{468,627,0,0,568,0,0,571}
{468,627,0,0,571,0,0,571}
{468,627,0,0,571,0,0,571}
{468,627,0,0,567,0,0,569}
{468,627,0,0,567,0,0,569}
{468,627,0,0,566,0,0,569}
{468,628,0,0,578,0,0,573}
{468,627,0,0,567,0,0,569}
{468,627,0,0,571,0,0,572}
{468,627,0,0,567,0,0,569}
{468,627,0,0,565,0,0,567}
{468,627,0,0,565,0,0,567}
{468,627,0,0,565,0,0,567}
{468,627,0,0,565,0,0,569}
{468,627,0,0,565,0,0,567}
{468,627,0,0,565,0,0,567}
{468,627,0,0,571,0,0,571}
{468,627,0,0,569,0,0,571}
queue depth: 1
queue depth: 1
queue depth: 2
queue depth: 1
queue depth: 1
queue depth: 1
queue depth: 0
queue depth: 0
queue depth: 0
queue depth: 1
queue depth: 1
queue depth: 1
queue depth: 1
queue depth: 0
queue depth: 1
queue depth: 1
{468,627,0,0,556,0,0,567}
{468,627,0,0,556,0,0,565}
{468,627,0,0,555,0,0,564}
queue depth: 1
queue depth: 3
queue depth: 4
queue depth: 5
queue depth: 7
queue depth: 8
queue depth: 9
queue depth: 10
queue depth: 11
{468,627,0,0,555,0,0,563}
{468,627,0,0,554,0,0,563}
{468,627,0,0,554,0,0,561}
{468,627,0,0,564,0,0,567}
{468,627,0,0,555,0,0,564}
{468,627,0,0,555,0,0,563}
{468,627,0,0,554,0,0,562}
{468,627,0,0,551,0,0,560}
queue depth: 13
queue depth: 14
queue depth: 15
queue depth: 16
{468,627,0,0,553,0,0,561}
{468,627,0,0,554,0,0,560}
{468,627,0,0,549,0,0,559}
{468,627,0,0,554,0,0,562}
{468,627,0,0,548,0,0,558}
{468,627,0,0,548,0,0,557}
{468,627,0,0,547,0,0,557}
{468,627,0,0,550,0,0,559}
{468,627,0,0,553,0,0,560}
{468,627,0,0,551,0,0,560}
{468,627,0,0,548,0,0,557}
{468,627,0,0,550,0,0,560}
{468,627,0,0,550,0,0,560}
{468,627,0,0,547,0,0,557}
{468,627,0,0,544,0,0,554}
{468,627,0,0,546,0,0,557}
{468,627,0,0,546,0,0,557}
{468,627,0,0,546,0,0,555}
{468,627,0,0,546,0,0,554}
{468,627,0,0,544,0,0,552}
{468,627,0,0,546,0,0,557}
{468,627,0,0,544,0,0,554}
{468,627,0,0,544,0,0,554}
{468,627,0,0,544,0,0,554}
{468,627,0,0,544,0,0,554}
{468,627,0,0,542,0,0,550}
{468,627,0,0,544,0,0,551}
{468,627,0,0,544,0,0,550}
{468,627,0,0,542,0,0,550}
{468,627,0,0,542,0,0,550}
{468,627,0,0,542,0,0,550}
{468,627,0,0,540,0,0,546}
{468,627,0,0,542,0,0,550}
queue depth: 19
queue depth: 20
queue depth: 21
queue depth: 23
queue depth: 25
queue depth: 26
queue depth: 27
queue depth: 22
queue depth: 18
queue depth: 29
queue depth: 30
queue depth: 31
queue depth: 33
queue depth: 34
queue depth: 35
queue depth: 36
queue depth: 32
queue depth: 28
queue depth: 38
queue depth: 40
queue depth: 41
queue depth: 42
queue depth: 39
queue depth: 37
queue depth: 43
queue depth: 44
queue depth: 45
queue depth: 46
queue depth: 47
queue depth: 49
queue depth: 48
queue depth: 50
queue depth: 51
queue depth: 52
queue depth: 53
queue depth: 54
queue depth: 55
queue depth: 56
queue depth: 57
queue depth: 58
queue depth: 60
queue depth: 64
queue depth: 65
queue depth: 66
queue depth: 67
queue depth: 63
queue depth: 61
queue depth: 59
queue depth: 70
queue depth: 71
queue depth: 74
queue depth: 75
queue depth: 72
queue depth: 69
queue depth: 77
queue depth: 76
queue depth: 79
queue depth: 81
queue depth: 85
queue depth: 87
queue depth: 83
queue depth: 89
queue depth: 86
queue depth: 91
queue depth: 84
queue depth: 93
queue depth: 82
queue depth: 94
queue depth: 95
queue depth: 97
queue depth: 99
queue depth: 101
queue depth: 102
queue depth: 103
queue depth: 100
queue depth: 104
queue depth: 106
queue depth: 107
queue depth: 109
queue depth: 111
queue depth: 112
queue depth: 113
queue depth: 115
queue depth: 116
queue depth: 117
queue depth: 118
queue depth: 119
queue depth: 120
queue depth: 122
queue depth: 124
queue depth: 126
queue depth: 125
queue depth: 127
queue depth: 129
queue depth: 130
queue depth: 131
queue depth: 134
queue depth: 136
queue depth: 138
queue depth: 141
queue depth: 142
queue depth: 143
queue depth: 145
queue depth: 146
queue depth: 148
queue depth: 150
queue depth: 152
queue depth: 154
queue depth: 155
queue depth: 156
queue depth: 158
queue depth: 161
queue depth: 159
queue depth: 157
queue depth: 144
queue depth: 139
queue depth: 137
queue depth: 132
queue depth: 123
queue depth: 110
queue depth: 108
queue depth: 96
queue depth: 164
queue depth: 80
queue depth: 78
queue depth: 163
queue depth: 167
queue depth: 168
queue depth: 170
queue depth: 171
queue depth: 172
queue depth: 173
queue depth: 177
queue depth: 179
queue depth: 180
queue depth: 182
queue depth: 183
queue depth: 185
queue depth: 187
queue depth: 188
queue depth: 190
queue depth: 192
queue depth: 195
queue depth: 195
queue depth: 196
queue depth: 197
queue depth: 200
queue depth: 202
queue depth: 204
queue depth: 206
queue depth: 207
queue depth: 208
queue depth: 209
queue depth: 211
queue depth: 214
queue depth: 217
queue depth: 219
queue depth: 220
queue depth: 222
queue depth: 224
queue depth: 226
queue depth: 232
queue depth: 233
queue depth: 234
queue depth: 235
queue depth: 236
queue depth: 240
queue depth: 242
queue depth: 249
queue depth: 252
queue depth: 252
queue depth: 254
queue depth: 257
queue depth: 259
queue depth: 263
queue depth: 265
queue depth: 266
queue depth: 271
queue depth: 272
queue depth: 273
queue depth: 274
queue depth: 275
queue depth: 277
queue depth: 279
queue depth: 284
queue depth: 282
queue depth: 281
queue depth: 289
queue depth: 166
queue depth: 291
queue depth: 290
queue depth: 294
queue depth: 295
queue depth: 293
queue depth: 296
queue depth: 286
queue depth: 297
queue depth: 280
queue depth: 269
queue depth: 299
queue depth: 268
queue depth: 298
queue depth: 303
queue depth: 300
queue depth: 307
queue depth: 305
queue depth: 309
queue depth: 301
queue depth: 262
queue depth: 260
queue depth: 310
queue depth: 248
queue depth: 246
queue depth: 311
queue depth: 244
queue depth: 238
queue depth: 230
queue depth: 228
queue depth: 223
queue depth: 218
queue depth: 212
queue depth: 210
queue depth: 203
queue depth: 201
queue depth: 189
queue depth: 181
queue depth: 174
queue depth: 165
queue depth: 316
queue depth: 315
queue depth: 313
queue depth: 321
queue depth: 317
queue depth: 324
queue depth: 327
queue depth: 329
queue depth: 325
queue depth: 323
queue depth: 331
queue depth: 330
queue depth: 335
queue depth: 341
queue depth: 340
queue depth: 338
queue depth: 342
queue depth: 332
queue depth: 344
queue depth: 339
queue depth: 346
queue depth: 337
queue depth: 349
queue depth: 351
queue depth: 359
queue depth: 357
queue depth: 355
queue depth: 348
queue depth: 362
queue depth: 365
queue depth: 364
queue depth: 367
queue depth: 363
queue depth: 361
queue depth: 354
queue depth: 352
queue depth: 368
queue depth: 377
queue depth: 375
queue depth: 373
queue depth: 366
queue depth: 379
queue depth: 374
queue depth: 372
queue depth: 380
queue depth: 370
queue depth: 394
queue depth: 392
queue depth: 389
queue depth: 395
queue depth: 386
queue depth: 383
queue depth: 381
queue depth: 398
queue depth: 399
queue depth: 390
queue depth: 387
queue depth: 385
queue depth: 403
queue depth: 382
queue depth: 405
queue depth: 402
queue depth: 406
queue depth: 411
queue depth: 413
queue depth: 409
queue depth: 407
queue depth: 416
queue depth: 417
queue depth: 419
queue depth: 418
queue depth: 421
queue depth: 423
queue depth: 424
queue depth: 426
queue depth: 425
queue depth: 428
queue depth: 429
queue depth: 431
queue depth: 434
queue depth: 422
queue depth: 436
queue depth: 432
queue depth: 438
queue depth: 440
queue depth: 439
queue depth: 441
queue depth: 442
queue depth: 437
queue depth: 444
queue depth: 448
queue depth: 447
queue depth: 451
queue depth: 453
queue depth: 452
queue depth: 449
queue depth: 457
queue depth: 455
queue depth: 458
queue depth: 460
queue depth: 461
queue depth: 459
queue depth: 465
queue depth: 466
queue depth: 470
queue depth: 469
queue depth: 463
queue depth: 473
queue depth: 474
queue depth: 471
queue depth: 475
queue depth: 468
queue depth: 482
queue depth: 477
queue depth: 483
queue depth: 484
queue depth: 479
queue depth: 486
queue depth: 487
queue depth: 490
queue depth: 489
queue depth: 485
queue depth: 496
queue depth: 499
queue depth: 497
queue depth: 492
queue depth: 500
queue depth: 505
queue depth: 508
queue depth: 510
queue depth: 509
queue depth: 504
queue depth: 506
queue depth: 512
queue depth: 514
queue depth: 517
queue depth: 519
queue depth: 516
queue depth: 520
queue depth: 521
queue depth: 524
queue depth: 523
queue depth: 527
queue depth: 528
queue depth: 529
queue depth: 531
queue depth: 530
queue depth: 537
queue depth: 533
queue depth: 539
queue depth: 535
queue depth: 534
queue depth: 546
queue depth: 547
queue depth: 548
queue depth: 542
queue depth: 543
queue depth: 553
queue depth: 551
queue depth: 555
queue depth: 544
queue depth: 561
queue depth: 562
queue depth: 564
queue depth: 554
queue depth: 569
queue depth: 567
queue depth: 572
queue depth: 574
queue depth: 570
queue depth: 579
queue depth: 580
queue depth: 583
queue depth: 582
queue depth: 587
queue depth: 585
queue depth: 592
queue depth: 581
queue depth: 594
queue depth: 588
queue depth: 596
queue depth: 598
queue depth: 604
queue depth: 600
queue depth: 606
queue depth: 601
queue depth: 609
queue depth: 599
queue depth: 608
queue depth: 612
queue depth: 610
queue depth: 615
queue depth: 613
queue depth: 611
queue depth: 619
queue depth: 620
queue depth: 622
queue depth: 623
queue depth: 616
queue depth: 626
queue depth: 624
queue depth: 629
queue depth: 638
queue depth: 636
queue depth: 634
queue depth: 640
queue depth: 631
queue depth: 644
queue depth: 643
queue depth: 647
queue depth: 649
queue depth: 651
queue depth: 652
queue depth: 650
queue depth: 646
queue depth: 654
queue depth: 641
queue depth: 632
queue depth: 630
queue depth: 627
queue depth: 656
queue depth: 658
queue depth: 659
queue depth: 657
queue depth: 663
queue depth: 665
queue depth: 664
queue depth: 666
queue depth: 661
queue depth: 671
queue depth: 674
queue depth: 675
queue depth: 668
queue depth: 676
queue depth: 680
queue depth: 683
queue depth: 677
queue depth: 685
queue depth: 688
queue depth: 689
queue depth: 693
queue depth: 692
queue depth: 694
queue depth: 697
queue depth: 696
queue depth: 690
queue depth: 703
queue depth: 700
queue depth: 705
queue depth: 704
queue depth: 708
queue depth: 710
queue depth: 711
queue depth: 709
queue depth: 702
queue depth: 717
queue depth: 713
queue depth: 719
queue depth: 720
queue depth: 723
queue depth: 717
queue depth: 726
queue depth: 724
queue depth: 727
queue depth: 732
queue depth: 733
queue depth: 735
queue depth: 731
queue depth: 728
queue depth: 738
queue depth: 739
queue depth: 742
queue depth: 741
queue depth: 748
queue depth: 745
queue depth: 750
queue depth: 752
queue depth: 755
queue depth: 757
queue depth: 758
queue depth: 760
queue depth: 761
queue depth: 762
queue depth: 763
queue depth: 765
queue depth: 766
queue depth: 768
queue depth: 770
queue depth: 772
queue depth: 775
queue depth: 773
queue depth: 778
queue depth: 779
queue depth: 780
queue depth: 781
queue depth: 784
queue depth: 782
queue depth: 786
queue depth: 783
queue depth: 789
queue depth: 795
queue depth: 796
queue depth: 793
queue depth: 794
queue depth: 792
queue depth: 790
queue depth: 798
queue depth: 799
queue depth: 800
queue depth: 801
queue depth: 803
queue depth: 802
queue depth: 804
queue depth: 806
queue depth: 812
queue depth: 816
queue depth: 810
queue depth: 824
queue depth: 826
queue depth: 825
queue depth: 820
queue depth: 829
queue depth: 832
queue depth: 833
queue depth: 834
queue depth: 838
queue depth: 836
queue depth: 840
queue depth: 844
queue depth: 843
queue depth: 852
queue depth: 850
queue depth: 842
queue depth: 856
queue depth: 857
queue depth: 858
queue depth: 861
queue depth: 863
queue depth: 864
queue depth: 866
queue depth: 868
queue depth: 869
queue depth: 871
queue depth: 874
queue depth: 877
queue depth: 881
queue depth: 883
queue depth: 878
queue depth: 885
queue depth: 889
queue depth: 891
queue depth: 892
queue depth: 893
queue depth: 895
queue depth: 894
queue depth: 897
queue depth: 902
queue depth: 905
queue depth: 900
queue depth: 908
queue depth: 911
queue depth: 910
queue depth: 917
queue depth: 916
queue depth: 914
queue depth: 920
queue depth: 922
queue depth: 921
queue depth: 925
queue depth: 929
queue depth: 934
queue depth: 939
queue depth: 937
queue depth: 938
queue depth: 942
queue depth: 940
queue depth: 930
queue depth: 935
queue depth: 945
queue depth: 928
queue depth: 946
queue depth: 951
queue depth: 952
queue depth: 955
queue depth: 954
queue depth: 964
queue depth: 956
queue depth: 961
queue depth: 967
queue depth: 965
queue depth: 963
queue depth: 971
queue depth: 969
queue depth: 972
queue depth: 983
queue depth: 987
queue depth: 978
queue depth: 981
queue depth: 992
queue depth: 993
queue depth: 977
queue depth: 989
queue depth: 995
queue depth: 994
queue depth: 974
queue depth: 999
queue depth: 1001
queue depth: 1002
queue depth: 996
queue depth: 1003
queue depth: 1005
queue depth: 1012
queue depth: 1009
queue depth: 1007
queue depth: 1015
queue depth: 1013
queue depth: 1010
queue depth: 1017
queue depth: 1033
queue depth: 1034
queue depth: 1031
queue depth: 1022
queue depth: 1036
queue depth: 1039
queue depth: 1020
queue depth: 1041
queue depth: 1049
queue depth: 1051
queue depth: 1054
queue depth: 1053
queue depth: 1052
queue depth: 1048
queue depth: 1056
queue depth: 1045
queue depth: 1042
queue depth: 1060
queue depth: 1067
queue depth: 1068
queue depth: 1069
queue depth: 1070
queue depth: 1066
queue depth: 1064
queue depth: 1072
queue depth: 1065
queue depth: 1073
queue depth: 1077
queue depth: 1079
queue depth: 1076
queue depth: 1084
queue depth: 1082
queue depth: 1085
queue depth: 1081
queue depth: 1086
queue depth: 1092
queue depth: 1083
queue depth: 1097
queue depth: 1096
queue depth: 1080
queue depth: 1091
queue depth: 1095
queue depth: 1100
queue depth: 1106
queue depth: 1107
queue depth: 1114
queue depth: 1115
queue depth: 1111
queue depth: 1119
queue depth: 1126
queue depth: 1118
queue depth: 1116
queue depth: 1128
queue depth: 1112
queue depth: 1122
queue depth: 1105
queue depth: 1131
queue depth: 1101
queue depth: 1134
queue depth: 1132
queue depth: 1138
queue depth: 1140
queue depth: 1141
queue depth: 1147
queue depth: 1148
queue depth: 1150
queue depth: 1149
queue depth: 1145
queue depth: 1154
queue depth: 1158
queue depth: 1157
queue depth: 1162
queue depth: 1161
queue depth: 1160
queue depth: 1167
queue depth: 1172
queue depth: 1170
queue depth: 1176
queue depth: 1186
queue depth: 1183
queue depth: 1182
queue depth: 1178
queue depth: 1193
queue depth: 1191
queue depth: 1197
queue depth: 1188
queue depth: 1201
queue depth: 1204
queue depth: 1205
queue depth: 1207
queue depth: 1211
queue depth: 1215
queue depth: 1213
queue depth: 1219
queue depth: 1217
queue depth: 1223
queue depth: 1209
queue depth: 1224
queue depth: 1206
queue depth: 1202
queue depth: 1198
queue depth: 1227
queue depth: 1179
queue depth: 1173
queue depth: 1228
queue depth: 1166
queue depth: 1225
queue depth: 1230
queue depth: 1231
queue depth: 1232
queue depth: 1159
queue depth: 1152
queue depth: 1236
queue depth: 1248
queue depth: 1238
queue depth: 1250
queue depth: 1251
queue depth: 1245
queue depth: 1252
queue depth: 1243
queue depth: 1235
queue depth: 1253
queue depth: 1254
queue depth: 1257
queue depth: 1262
queue depth: 1264
queue depth: 1258
queue depth: 1265
queue depth: 1267
queue depth: 1266
queue depth: 1270
queue depth: 1268
queue depth: 1276
queue depth: 1277
queue depth: 1278
queue depth: 1279
queue depth: 1263
queue depth: 1283
queue depth: 1285
queue depth: 1280
queue depth: 1292
queue depth: 1290
queue depth: 1295
queue depth: 1287
queue depth: 1297
queue depth: 1298
queue depth: 1296
queue depth: 1289
queue depth: 1300
queue depth: 1305
queue depth: 1304
queue depth: 1308
queue depth: 1306
queue depth: 1313
queue depth: 1310
queue depth: 1318
queue depth: 1316
queue depth: 1321
queue depth: 1322
queue depth: 1324
queue depth: 1326
queue depth: 1325
queue depth: 1323
queue depth: 1328
queue depth: 1329
queue depth: 1327
queue depth: 1334
queue depth: 1333
queue depth: 1330
queue depth: 1336
queue depth: 1340
queue depth: 1339
queue depth: 1345
queue depth: 1346
queue depth: 1348
queue depth: 1349
queue depth: 1342
queue depth: 1353
queue depth: 1355
queue depth: 1352
queue depth: 1356
queue depth: 1357
queue depth: 1362
queue depth: 1359
queue depth: 1366
queue depth: 1364
queue depth: 1371
queue depth: 1367
queue depth: 1373
queue depth: 1375
queue depth: 1374
queue depth: 1376
queue depth: 1385
queue depth: 1387
queue depth: 1389
queue depth: 1386
queue depth: 1384
queue depth: 1381
queue depth: 1378
queue depth: 1389
queue depth: 1399
queue depth: 1400
queue depth: 1398
queue depth: 1396
queue depth: 1402
queue depth: 1393
queue depth: 1394
queue depth: 1404
queue depth: 1407
queue depth: 1408
queue depth: 1410
queue depth: 1411
queue depth: 1418
queue depth: 1413
queue depth: 1431
queue depth: 1435
queue depth: 1433
queue depth: 1437
queue depth: 1438
queue depth: 1439
queue depth: 1445
queue depth: 1446
queue depth: 1443
queue depth: 1452
queue depth: 1456
queue depth: 1459
queue depth: 1450
queue depth: 1467
queue depth: 1469
queue depth: 1406
queue depth: 1464
queue depth: 1473
queue depth: 1466
queue depth: 1481
queue depth: 1480
queue depth: 1484
queue depth: 1482
queue depth: 1485
queue depth: 1487
queue depth: 1479
queue depth: 1453
queue depth: 1476
queue depth: 1489
queue depth: 1494
queue depth: 1492
queue depth: 1502
queue depth: 1504
queue depth: 1498
queue depth: 1493
queue depth: 1508
queue depth: 1511
queue depth: 1513
queue depth: 2134
queue depth: 2128
queue depth: 2126
queue depth: 2124
queue depth: 2133
queue depth: 2121
queue depth: 2116
queue depth: 2108
queue depth: 2138
queue depth: 2100
queue depth: 2098
queue depth: 2139
queue depth: 2096
queue depth: 2094
queue depth: 2141
queue depth: 2092
queue depth: 2090
queue depth: 2088
queue depth: 2143
queue depth: 2083
queue depth: 2071
queue depth: 2148
queue depth: 2063
queue depth: 2055
queue depth: 2146
queue depth: 2053
queue depth: 2049
queue depth: 2046
queue depth: 2041
queue depth: 2153
queue depth: 2152
queue depth: 2037
queue depth: 2129
queue depth: 2034
queue depth: 2157
queue depth: 2156
queue depth: 2127
queue depth: 2031
queue depth: 2125
queue depth: 2023
queue depth: 2020
queue depth: 2007
queue depth: 2161
queue depth: 2017
queue depth: 2118
queue depth: 2005
queue depth: 2003
queue depth: 1998
queue depth: 2113
queue depth: 1993
queue depth: 1982
queue depth: 1980
queue depth: 2110
queue depth: 1977
queue depth: 1972
queue depth: 1969
queue depth: 1965
queue depth: 2166
queue depth: 1962
queue depth: 2172
queue depth: 2171
queue depth: 2101
queue depth: 1954
queue depth: 1950
queue depth: 2175
queue depth: 2176
queue depth: 1946
queue depth: 2178
queue depth: 2183
queue depth: 2181
queue depth: 1943
queue depth: 2091
queue depth: 1938
queue depth: 1935
queue depth: 1930
queue depth: 1919
queue depth: 1916
queue depth: 1911
queue depth: 1904
queue depth: 2190
queue depth: 1896
queue depth: 2196
queue depth: 2195
queue depth: 1894
queue depth: 2193
queue depth: 1889
queue depth: 1887
queue depth: 1881
queue depth: 2187
queue depth: 1875
queue depth: 1860
queue depth: 2203
queue depth: 2206
queue depth: 2200
queue depth: 1850
queue depth: 1845
queue depth: 2208
queue depth: 1835
queue depth: 1833
queue depth: 2198
queue depth: 2212
queue depth: 1831
queue depth: 2209
queue depth: 1828
queue depth: 1825
queue depth: 1817
queue depth: 1813
queue depth: 2215
queue depth: 1797
queue depth: 1806
queue depth: 2086
queue depth: 2216
queue depth: 1795
queue depth: 2217
queue depth: 1790
queue depth: 2074
queue depth: 1785
queue depth: 2219
queue depth: 1781
queue depth: 1779
queue depth: 1774
queue depth: 2069
queue depth: 1773
queue depth: 2067
queue depth: 2222
queue depth: 1771
queue depth: 2226
queue depth: 2229
queue depth: 2231
queue depth: 2236
queue depth: 2239
queue depth: 2233
queue depth: 2062
queue depth: 2242
queue depth: 1763
queue depth: 1761
queue depth: 1748
queue depth: 2245
queue depth: 2247
queue depth: 2060
queue depth: 1745
queue depth: 1743
queue depth: 2248
queue depth: 1735
queue depth: 2058
queue depth: 1733
queue depth: 1729
queue depth: 2051
queue depth: 1724
queue depth: 2047
queue depth: 1719
queue depth: 1731
queue depth: 1717
queue depth: 1715
queue depth: 2045
queue depth: 1711
queue depth: 1713
queue depth: 2252
queue depth: 1709
queue depth: 1706
queue depth: 2253
queue depth: 1698
queue depth: 2040
queue depth: 1703
queue depth: 1696
queue depth: 1691
queue depth: 2027
queue depth: 1686
queue depth: 2026
queue depth: 2019
queue depth: 1683
queue depth: 1681
queue depth: 1679
queue depth: 1653
queue depth: 2014
queue depth: 1661
queue depth: 2012
queue depth: 1651
queue depth: 2010
queue depth: 2257
queue depth: 1649
queue depth: 2002
queue depth: 1647
queue depth: 1642
queue depth: 2264
queue depth: 2261
queue depth: 1640
queue depth: 1637
queue depth: 2266
queue depth: 2262
queue depth: 2267
queue depth: 1634
queue depth: 2272
queue depth: 2270
queue depth: 1629
queue depth: 1623
queue depth: 1997
queue depth: 1621
queue depth: 1616
queue depth: 2276
queue depth: 1608
queue depth: 1613
queue depth: 1990
queue depth: 1599
queue depth: 1988
queue depth: 1594
queue depth: 2282
queue depth: 1587
queue depth: 2285
queue depth: 1579
queue depth: 1573
queue depth: 2287
queue depth: 2288
queue depth: 1567
queue depth: 2280
queue depth: 2292
queue depth: 1986
queue depth: 1564
queue depth: 1979
queue depth: 1976
queue depth: 1560
queue depth: 1558
queue depth: 1550
queue depth: 1555
queue depth: 1540
queue depth: 1968
queue depth: 1534
queue depth: 1523
queue depth: 1516
queue depth: 2295
queue depth: 1960
queue depth: 2299
queue depth: 2298
queue depth: 2301
queue depth: 1955
queue depth: 1953
queue depth: 1949
queue depth: 1939
queue depth: 2304
queue depth: 1936
queue depth: 2307
queue depth: 2309
queue depth: 2306
queue depth: 2313
queue depth: 1929
queue depth: 1926
queue depth: 1921
queue depth: 1914
queue depth: 1909
queue depth: 1906
queue depth: 2317
queue depth: 2311
queue depth: 1900
queue depth: 2319
queue depth: 2322
queue depth: 1885
queue depth: 1879
queue depth: 1873
queue depth: 1871
queue depth: 2327
queue depth: 1863
queue depth: 2325
queue depth: 1861
queue depth: 1856
queue depth: 1853
queue depth: 2333
queue depth: 2334
queue depth: 1851
queue depth: 2336
queue depth: 2337
queue depth: 2330
queue depth: 1849
queue depth: 2328
queue depth: 2323
queue depth: 2318
queue depth: 2339
queue depth: 2316
queue depth: 2314
queue depth: 1844
queue depth: 2312
queue depth: 2342
queue depth: 2308
queue depth: 2341
queue depth: 2347
queue depth: 2346
queue depth: 2303
queue depth: 2349
queue depth: 2344
queue depth: 2294
queue depth: 2283
queue depth: 2297
queue depth: 2350
queue depth: 2274
queue depth: 2269
queue depth: 2265
queue depth: 2352
queue depth: 1841
queue depth: 2258
queue depth: 1838
queue depth: 2256
queue depth: 2251
queue depth: 2354
queue depth: 2246
queue depth: 2241
queue depth: 2235
queue depth: 1829
queue depth: 1827
queue depth: 2356
queue depth: 2357
queue depth: 2358
queue depth: 2230
queue depth: 2225
queue depth: 2211
queue depth: 2204
queue depth: 2360
queue depth: 2361
queue depth: 2199
queue depth: 1824
queue depth: 2192
queue depth: 2189
queue depth: 2186
queue depth: 1820
queue depth: 2182
queue depth: 2179
queue depth: 2363
queue depth: 2173
queue depth: 2364
queue depth: 2165
queue depth: 2168
queue depth: 2365
queue depth: 2366
queue depth: 2159
queue depth: 2154
queue depth: 2149
queue depth: 2368
queue depth: 2137
queue depth: 2135
queue depth: 2367
queue depth: 2130
queue depth: 2124
queue depth: 1814
queue depth: 2117
queue depth: 2371
queue depth: 2114
queue depth: 1811
queue depth: 2289
queue depth: 2109
queue depth: 1801
queue depth: 2106
queue depth: 2093
queue depth: 2087
queue depth: 2373
queue depth: 2080
queue depth: 2076
queue depth: 1796
queue depth: 2078
queue depth: 2375
queue depth: 2065
queue depth: 1793
queue depth: 2072
queue depth: 2369
queue depth: 2059
queue depth: 2378
queue depth: 2056
queue depth: 2379
queue depth: 1789
queue depth: 2048
queue depth: 2044
queue depth: 2381
queue depth: 2039
queue depth: 2382
queue depth: 2036
queue depth: 1783
queue depth: 2028
queue depth: 2033
queue depth: 2384
queue depth: 2015
queue depth: 2009
queue depth: 2001
queue depth: 1999
queue depth: 1991
queue depth: 1780
queue depth: 1975
queue depth: 1973
queue depth: 1778
queue depth: 1970
queue depth: 1967
queue depth: 1772
queue depth: 1964
queue depth: 1956
queue depth: 1945
queue depth: 1951
queue depth: 1758
queue depth: 1940
queue depth: 1933
queue depth: 1931
queue depth: 1928
queue depth: 1750
queue depth: 1923
queue depth: 1908
queue depth: 1915
queue depth: 1739
queue depth: 1910
queue depth: 1902
queue depth: 1895
queue depth: 1882
queue depth: 1877
queue depth: 1734
queue depth: 1868
queue depth: 1857
queue depth: 1846
queue depth: 1865
queue depth: 1840
queue depth: 1837
queue depth: 1821
queue depth: 1830
queue depth: 1812
queue depth: 1815
queue depth: 1728
queue depth: 1810
queue depth: 1805
queue depth: 1803
queue depth: 1721
queue depth: 1775
queue depth: 1768
queue depth: 1716
queue depth: 1765
queue depth: 1760
queue depth: 1708
queue depth: 1756
queue depth: 1753
queue depth: 1747
queue depth: 1741
queue depth: 1705
queue depth: 1726
queue depth: 1723
queue depth: 1720
queue depth: 1712
queue depth: 1710
queue depth: 1701
queue depth: 1697
queue depth: 1695
queue depth: 1684
queue depth: 1678
queue depth: 1675
queue depth: 1670
queue depth: 1667
queue depth: 1699
queue depth: 1664
queue depth: 1662
queue depth: 1659
queue depth: 1656
queue depth: 1693
queue depth: 1652
queue depth: 1645
queue depth: 1627
queue depth: 1689
queue depth: 1617
queue depth: 1611
queue depth: 1604
queue depth: 1601
queue depth: 1585
queue depth: 1673
queue depth: 1578
queue depth: 1557
queue depth: 1553
queue depth: 1635
queue depth: 1547
queue depth: 1542
queue depth: 1632
queue depth: 1530
queue depth: 1631
queue depth: 1536
queue depth: 1526
queue depth: 1521
queue depth: 1622
queue depth: 1517
queue depth: 1514
queue depth: 1618
queue depth: 1512
queue depth: 1505
queue depth: 1614
queue depth: 1495
queue depth: 1501
queue depth: 1490
queue depth: 1605
queue depth: 1483
queue depth: 1478
queue depth: 1603
queue depth: 1475
queue depth: 1472
queue depth: 1468
queue depth: 1598
queue depth: 1462
queue depth: 1454
queue depth: 1596
queue depth: 1449
queue depth: 1442
queue depth: 1592
queue depth: 1432
queue depth: 1430
queue depth: 1428
queue depth: 1426
queue depth: 1424
queue depth: 1590
queue depth: 1422
queue depth: 1420
queue depth: 1588
queue depth: 1414
queue depth: 1412
queue depth: 1403
queue depth: 1401
queue depth: 1583
queue depth: 1383
queue depth: 1380
queue depth: 1368
queue depth: 1581
queue depth: 1360
queue depth: 1350
queue depth: 1344
queue depth: 1347
queue depth: 1332
queue depth: 1319
queue depth: 1317
queue depth: 1315
queue depth: 1307
queue depth: 1301
queue depth: 1282
queue depth: 1275
queue depth: 1272
queue depth: 1271
queue depth: 1269
queue depth: 1261
queue depth: 1260
queue depth: 1256
queue depth: 1249
queue depth: 1241
queue depth: 1239
queue depth: 1233
queue depth: 1229
queue depth: 1221
queue depth: 1203
queue depth: 1200
queue depth: 1196
queue depth: 1185
queue depth: 1177
queue depth: 1169
queue depth: 1164
queue depth: 1151
queue depth: 1120
queue depth: 1136
queue depth: 1109
queue depth: 1104
queue depth: 1099
queue depth: 1093
queue depth: 1089
queue depth: 1047
queue depth: 1044
queue depth: 1029
queue depth: 1027
queue depth: 1025
queue depth: 1023
queue depth: 1011
queue depth: 1008
queue depth: 1000
queue depth: 998
queue depth: 991
queue depth: 985
queue depth: 979
queue depth: 976
queue depth: 966
queue depth: 970
queue depth: 962
queue depth: 958
queue depth: 948
queue depth: 943
queue depth: 932
queue depth: 927
queue depth: 915
queue depth: 909
queue depth: 907
queue depth: 904
queue depth: 903
queue depth: 901
queue depth: 887
queue depth: 879
queue depth: 860
queue depth: 854
queue depth: 841
queue depth: 839
queue depth: 830
queue depth: 823
queue depth: 818
queue depth: 815
queue depth: 813
queue depth: 787
queue depth: 754
queue depth: 721
queue depth: 707
queue depth: 712
queue depth: 699
queue depth: 687
queue depth: 686
queue depth: 684
queue depth: 682
queue depth: 679
queue depth: 672
queue depth: 670
queue depth: 662
queue depth: 655
queue depth: 648
queue depth: 645
queue depth: 639
queue depth: 637
queue depth: 635
queue depth: 628
queue depth: 625
queue depth: 603
queue depth: 591
queue depth: 589
queue depth: 586
queue depth: 577
queue depth: 575
queue depth: 573
queue depth: 571
queue depth: 568
queue depth: 558
queue depth: 550
queue depth: 545
queue depth: 541
queue depth: 538
queue depth: 525
queue depth: 518
queue depth: 513
queue depth: 503
queue depth: 494
queue depth: 491
queue depth: 481
queue depth: 478
queue depth: 464
queue depth: 456
queue depth: 454
queue depth: 450
queue depth: 445
queue depth: 443
queue depth: 435
queue depth: 430
queue depth: 427
queue depth: 415
queue depth: 412
queue depth: 408
queue depth: 404
queue depth: 400
queue depth: 397
queue depth: 396
queue depth: 360
queue depth: 376
queue depth: 353
queue depth: 347
queue depth: 345
queue depth: 333
queue depth: 322
queue depth: 320
queue depth: 318
queue depth: 292
queue depth: 288
queue depth: 285
queue depth: 278
queue depth: 276
queue depth: 270
queue depth: 267
queue depth: 261
queue depth: 255
queue depth: 253
queue depth: 247
queue depth: 245
queue depth: 243
queue depth: 231
queue depth: 229
queue depth: 227
queue depth: 225
queue depth: 216
queue depth: 199
queue depth: 175
queue depth: 2388
queue depth: 2387
queue depth: 2389
queue depth: 2392
queue depth: 2390
queue depth: 2397
queue depth: 2398
queue depth: 2396
queue depth: 2402
queue depth: 2408
queue depth: 2408
queue depth: 2409
queue depth: 2405
queue depth: 2411
queue depth: 2400
queue depth: 2394
queue depth: 2413
queue depth: 2393
queue depth: 1572
queue depth: 2417
queue depth: 2418
queue depth: 2422
queue depth: 2434
queue depth: 2432
queue depth: 2430
queue depth: 2426
queue depth: 2428
queue depth: 2443
queue depth: 2424
queue depth: 2416
queue depth: 2444
queue depth: 2446
queue depth: 2441
queue depth: 2420
queue depth: 2448
queue depth: 1566
queue depth: 2450
queue depth: 2453
queue depth: 1556
queue depth: 2451
queue depth: 2456
queue depth: 2452
queue depth: 1554
queue depth: 2457
queue depth: 1552
queue depth: 2460
queue depth: 2458
queue depth: 1543
queue depth: 2462
queue depth: 1541
queue depth: 1539
queue depth: 2464
queue depth: 1537
queue depth: 2465
queue depth: 1535
queue depth: 2466
queue depth: 1533
queue depth: 1525
queue depth: 2467
queue depth: 1519
queue depth: 2468
queue depth: 2469
queue depth: 2473
queue depth: 2474
queue depth: 2476
queue depth: 2477
queue depth: 2480
queue depth: 2481
queue depth: 2478
queue depth: 2484
queue depth: 2487
queue depth: 2472
queue depth: 1509
queue depth: 1444
queue depth: 2488
queue depth: 1436
queue depth: 2492
queue depth: 1434
queue depth: 2490
queue depth: 1427
queue depth: 2485
queue depth: 1425
queue depth: 1419
queue depth: 2494
queue depth: 1417
queue depth: 2496
queue depth: 2499
queue depth: 2498
queue depth: 2502
queue depth: 2504
queue depth: 2507
queue depth: 2513
queue depth: 2512
queue depth: 2510
queue depth: 2514
queue depth: 2515
queue depth: 2517
queue depth: 2511
queue depth: 2506
queue depth: 2519
queue depth: 2526
queue depth: 2525
queue depth: 2522
queue depth: 2531
queue depth: 2534
queue depth: 2529
queue depth: 2497
queue depth: 2542
queue depth: 2536
queue depth: 2539
queue depth: 2540
queue depth: 2538
queue depth: 2544
queue depth: 2535
queue depth: 2548
queue depth: 2550
queue depth: 2541
queue depth: 2547
queue depth: 2551
queue depth: 2555
queue depth: 2552
queue depth: 2553
queue depth: 2556
queue depth: 2560
queue depth: 2562
queue depth: 2564
queue depth: 2566
queue depth: 2565
queue depth: 2567
queue depth: 2558
queue depth: 2568
queue depth: 2569
queue depth: 2570
queue depth: 2574
queue depth: 2572
queue depth: 2578
queue depth: 2576
queue depth: 2575
queue depth: 2580
queue depth: 2579
queue depth: 2585
queue depth: 2584
queue depth: 2586
queue depth: 2583
queue depth: 2583
queue depth: 2588
queue depth: 2591
queue depth: 2590
queue depth: 2594
queue depth: 2596
queue depth: 2597
queue depth: 2595
queue depth: 2598
queue depth: 2592
queue depth: 2601
queue depth: 2589
queue depth: 2600
queue depth: 2604
queue depth: 2605
queue depth: 2608
queue depth: 2606
queue depth: 2612
queue depth: 2614
queue depth: 2615
queue depth: 2617
queue depth: 2616
queue depth: 2618
queue depth: 2619
queue depth: 2621
queue depth: 2623
queue depth: 2625
queue depth: 2624
queue depth: 2627
queue depth: 2628
queue depth: 2629
queue depth: 2631
queue depth: 2632
queue depth: 2633
queue depth: 2635
queue depth: 2634
queue depth: 2637
queue depth: 2641
queue depth: 2642
queue depth: 2645
queue depth: 2644
queue depth: 2646
queue depth: 2648
queue depth: 2647
queue depth: 2650
queue depth: 2639
queue depth: 2653
queue depth: 2651
queue depth: 2661
queue depth: 2658
queue depth: 2654
queue depth: 2665
queue depth: 2670
queue depth: 2671
queue depth: 2673
queue depth: 2668
queue depth: 2666
queue depth: 2660
queue depth: 2662
queue depth: 2656
queue depth: 2657
queue depth: 2677
queue depth: 2678
queue depth: 2679
queue depth: 2680
queue depth: 2682
queue depth: 2674
queue depth: 2684
queue depth: 2688
queue depth: 2690
queue depth: 2683
queue depth: 2691
queue depth: 2689
queue depth: 2685
queue depth: 2695
queue depth: 2694
queue depth: 2698
queue depth: 2699
queue depth: 2700
queue depth: 2701
queue depth: 2702
queue depth: 2705
queue depth: 2713
queue depth: 2711
queue depth: 2707
queue depth: 2712
queue depth: 2706
queue depth: 2716
queue depth: 2714
queue depth: 2708
queue depth: 2718
queue depth: 2722
queue depth: 2719
queue depth: 2723
queue depth: 2721
queue depth: 2731
queue depth: 2729
queue depth: 2736
queue depth: 2727
queue depth: 2735
queue depth: 2740
queue depth: 2743
queue depth: 2739
queue depth: 2732
queue depth: 2728
queue depth: 2725
queue depth: 2745
queue depth: 2744
queue depth: 2752
queue depth: 2748
queue depth: 2749
queue depth: 2756
queue depth: 2757
queue depth: 2760
queue depth: 2758
queue depth: 2761
queue depth: 2754
queue depth: 2753
queue depth: 2765
queue depth: 2766
queue depth: 2768
queue depth: 2769
queue depth: 2764
queue depth: 2772
queue depth: 2774
queue depth: 2773
queue depth: 2777
queue depth: 2780
queue depth: 2781
queue depth: 2779
queue depth: 2782
queue depth: 2784
queue depth: 2783
queue depth: 2786
queue depth: 2788
queue depth: 2789
queue depth: 2787
queue depth: 2790
queue depth: 2793
queue depth: 2796
queue depth: 2798
queue depth: 2800
queue depth: 2799
queue depth: 2801
queue depth: 2803
queue depth: 2805
queue depth: 2808
queue depth: 2810
queue depth: 2811
queue depth: 2812
queue depth: 2813
queue depth: 2814
queue depth: 2816
queue depth: 2809
queue depth: 2817
queue depth: 2802
queue depth: 2815
queue depth: 2819
queue depth: 2821
queue depth: 2823
queue depth: 2822
queue depth: 2825
queue depth: 2826
queue depth: 2827
queue depth: 2828
queue depth: 2829
queue depth: 2831
queue depth: 2830
queue depth: 2832
queue depth: 2833
queue depth: 2836
queue depth: 2837
queue depth: 2838
queue depth: 2835
queue depth: 2840
queue depth: 2842
queue depth: 2843
queue depth: 2848
queue depth: 2849
queue depth: 2847
queue depth: 2850
queue depth: 2851
queue depth: 2846
queue depth: 2852
queue depth: 2854
queue depth: 2853
queue depth: 2855
queue depth: 2856
queue depth: 2857
queue depth: 2859
queue depth: 2860
queue depth: 2858
queue depth: 2861
queue depth: 2866
queue depth: 2867
queue depth: 2864
queue depth: 2871
queue depth: 2870
queue depth: 2865
queue depth: 2875
queue depth: 2876
queue depth: 2881
queue depth: 2873
queue depth: 2880
queue depth: 2878
queue depth: 2882
queue depth: 2884
queue depth: 2888
queue depth: 2885
queue depth: 2891
queue depth: 2889
queue depth: 2894
queue depth: 2892
queue depth: 2898
queue depth: 2899
queue depth: 2896
queue depth: 2900
queue depth: 2893
queue depth: 2903
queue depth: 2901
queue depth: 2895
queue depth: 2904
queue depth: 2908
queue depth: 2909
queue depth: 2906
queue depth: 2910
queue depth: 2907
queue depth: 2912
queue depth: 2886
queue depth: 2883
queue depth: 2877
queue depth: 2863
queue depth: 2869
queue depth: 2874
queue depth: 2845
queue depth: 2839
queue depth: 2818
queue depth: 2890
queue depth: 2806
queue depth: 2797
queue depth: 2795
queue depth: 2804
queue depth: 2914
queue depth: 2792
queue depth: 2785
queue depth: 2778
queue depth: 2771
queue depth: 2767
queue depth: 2916
queue depth: 2762
queue depth: 2741
queue depth: 2746
queue depth: 2751
queue depth: 2737
queue depth: 2733
queue depth: 2715
queue depth: 2724
queue depth: 2703
queue depth: 2709
queue depth: 2775
queue depth: 2918
queue depth: 2693
queue depth: 2687
queue depth: 2920
queue depth: 2681
queue depth: 2676
queue depth: 2697
queue depth: 2672
queue depth: 2667
queue depth: 2659
queue depth: 2649
queue depth: 2664
queue depth: 2655
queue depth: 2923
queue depth: 2643
queue depth: 2640
queue depth: 2638
queue depth: 2620
queue depth: 2610
queue depth: 2622
queue depth: 2607
queue depth: 2925
queue depth: 2593
queue depth: 2599
queue depth: 2554
queue depth: 2603
queue depth: 2563
queue depth: 2549
queue depth: 2537
queue depth: 2559
queue depth: 2533
queue depth: 2530
queue depth: 2523
queue depth: 2521
queue depth: 2518
queue depth: 2527
queue depth: 2508
queue depth: 2501
queue depth: 2495
queue depth: 2927
queue depth: 2493
queue depth: 2491
queue depth: 2929
queue depth: 2489
queue depth: 2545
queue depth: 2471
queue depth: 2461
queue depth: 2463
queue depth: 2454
queue depth: 2483
queue depth: 2931
queue depth: 2445
queue depth: 2439
queue depth: 2442
queue depth: 2437
queue depth: 2421
queue depth: 2933
queue depth: 2395
queue depth: 2415
queue depth: 2385
queue depth: 2447
queue depth: 2345
queue depth: 2340
queue depth: 2335
queue depth: 2338
queue depth: 2332
queue depth: 2329
queue depth: 2320
queue depth: 2305
queue depth: 2302
queue depth: 2293
queue depth: 2296
queue depth: 2300
queue depth: 2290
queue depth: 2284
queue depth: 2275
queue depth: 2278
queue depth: 2281
queue depth: 2268
queue depth: 2935
queue depth: 2255
queue depth: 2260
queue depth: 2250
queue depth: 2244
queue depth: 2938
queue depth: 2240
queue depth: 2237
queue depth: 2228
queue depth: 2221
queue depth: 2213
queue depth: 2210
queue depth: 2201
queue depth: 2188
queue depth: 2197
queue depth: 2184
queue depth: 2207
queue depth: 2174
queue depth: 2169
queue depth: 2167
queue depth: 2164
queue depth: 2155
queue depth: 2147
queue depth: 2224
queue depth: 2144
queue depth: 2151
queue depth: 2140
queue depth: 2122
queue depth: 2132
queue depth: 2120
queue depth: 2111
queue depth: 2115
queue depth: 2107
queue depth: 2105
queue depth: 2103
queue depth: 2095
queue depth: 2089
queue depth: 2081
queue depth: 2084
queue depth: 2177
queue depth: 2940
queue depth: 2061
queue depth: 2079
queue depth: 2064
queue depth: 2052
queue depth: 2943
queue depth: 2038
queue depth: 2191
queue depth: 2043
queue depth: 2032
queue depth: 2025
queue depth: 2029
queue depth: 2945
queue depth: 2016
queue depth: 2022
queue depth: 2008
queue depth: 2004
queue depth: 1994
queue depth: 2006
queue depth: 1996
queue depth: 1992
queue depth: 2947
queue depth: 1971
queue depth: 1983
queue depth: 1985
queue depth: 2057
queue depth: 1957
queue depth: 1966
queue depth: 1959
queue depth: 1952
queue depth: 1948
queue depth: 1941
queue depth: 1937
queue depth: 2949
queue depth: 2951
queue depth: 1927
queue depth: 1920
queue depth: 1925
queue depth: 1918
queue depth: 1913
queue depth: 1903
queue depth: 1897
queue depth: 1899
queue depth: 1892
queue depth: 1891
queue depth: 1880
queue depth: 1876
queue depth: 1886
queue depth: 1872
queue depth: 1866
queue depth: 1870
queue depth: 1874
queue depth: 1864
queue depth: 1858
queue depth: 1855
queue depth: 1854
queue depth: 1848
queue depth: 2953
queue depth: 1839
queue depth: 1836
queue depth: 1843
queue depth: 1884
queue depth: 1834
queue depth: 2955
queue depth: 1826
queue depth: 1822
queue depth: 1832
queue depth: 1816
queue depth: 1809
queue depth: 1808
queue depth: 1800
queue depth: 1802
queue depth: 2957
queue depth: 1792
queue depth: 1794
queue depth: 1769
queue depth: 1776
queue depth: 1787
queue depth: 1762
queue depth: 1767
queue depth: 1752
queue depth: 1755
queue depth: 2959
queue depth: 1751
queue depth: 1740
queue depth: 1738
queue depth: 1718
queue depth: 1730
queue depth: 1700
queue depth: 1687
queue depth: 2961
queue depth: 1674
queue depth: 1682
queue depth: 1736
queue depth: 1677
queue depth: 1672
queue depth: 1669
queue depth: 1666
queue depth: 1658
queue depth: 1663
queue depth: 1655
queue depth: 1650
queue depth: 1644
queue depth: 1636
queue depth: 1633
queue depth: 1639
queue depth: 1630
queue depth: 1646
queue depth: 1626
queue depth: 1628
queue depth: 1619
queue depth: 1624
queue depth: 1610
queue depth: 2966
queue depth: 1609
queue depth: 1600
queue depth: 1577
queue depth: 1586
queue depth: 1606
queue depth: 1576
queue depth: 1570
queue depth: 1565
queue depth: 1568
queue depth: 1563
queue depth: 2968
queue depth: 2964
queue depth: 1548
queue depth: 1559
queue depth: 1546
queue depth: 1538
queue depth: 1549
queue depth: 1529
queue depth: 2970
queue depth: 1527
queue depth: 1524
queue depth: 1518
queue depth: 1499
queue depth: 1503
queue depth: 1506
queue depth: 1496
queue depth: 1491
queue depth: 2973
queue depth: 1531
queue depth: 1486
queue depth: 1488
queue depth: 2978
queue depth: 2982
queue depth: 2977
queue depth: 2975
queue depth: 1477
queue depth: 1474
queue depth: 1465
queue depth: 1471
queue depth: 1461
queue depth: 2985
queue depth: 1458
queue depth: 1447
queue depth: 2987
queue depth: 2980
queue depth: 1455
queue depth: 1440
queue depth: 1429
queue depth: 1405
queue depth: 1409
queue depth: 1397
queue depth: 1395
queue depth: 1392
queue depth: 1390
queue depth: 1416
queue depth: 1382
queue depth: 2989
queue depth: 1379
queue depth: 1377
queue depth: 1365
queue depth: 1358
queue depth: 1369
queue depth: 1338
queue depth: 1335
queue depth: 1320
queue depth: 1354
queue depth: 1299
queue depth: 1303
queue depth: 2991
queue depth: 1281
queue depth: 1311
queue depth: 2999
queue depth: 2997
queue depth: 2995
queue depth: 3018
queue depth: 3022
queue depth: 3028
queue depth: 3026
queue depth: 3032
queue depth: 3030
queue depth: 3024
queue depth: 3020
queue depth: 3017
queue depth: 3015
queue depth: 3012
queue depth: 3034
queue depth: 3009
queue depth: 3014
queue depth: 3007
queue depth: 3003
queue depth: 3011
queue depth: 3005
queue depth: 3036
queue depth: 3001
queue depth: 1259
queue depth: 1247
queue depth: 1244
queue depth: 1274
queue depth: 1242
queue depth: 1240
queue depth: 2993
queue depth: 1237
queue depth: 1212
queue depth: 1210
queue depth: 1208
queue depth: 1199
queue depth: 3038
queue depth: 1194
queue depth: 1190
queue depth: 1187
queue depth: 1180
queue depth: 3046
queue depth: 3048
queue depth: 3054
queue depth: 3050
queue depth: 3052
queue depth: 3044
queue depth: 1175
queue depth: 3042
queue depth: 3040
queue depth: 1163
queue depth: 1226
queue depth: 1153
queue depth: 1144
queue depth: 1155
queue depth: 1142
queue depth: 1139
queue depth: 1137
queue depth: 1135
queue depth: 1171
queue depth: 1133
queue depth: 1130
queue depth: 1127
queue depth: 3058
queue depth: 1129
queue depth: 1124
queue depth: 1103
queue depth: 1088
queue depth: 1071
queue depth: 1110
queue depth: 1063
queue depth: 1061
queue depth: 1058
queue depth: 1050
queue depth: 1043
queue depth: 1019
queue depth: 1016
queue depth: 1040
queue depth: 1074
queue depth: 1014
queue depth: 1004
queue depth: 3060
queue depth: 997
queue depth: 990
queue depth: 984
queue depth: 982
queue depth: 980
queue depth: 960
queue depth: 975
queue depth: 957
queue depth: 953
queue depth: 936
queue depth: 947
queue depth: 3061
queue depth: 950
queue depth: 926
queue depth: 923
queue depth: 919
queue depth: 906
queue depth: 913
queue depth: 898
queue depth: 896
queue depth: 890
queue depth: 888
queue depth: 886
queue depth: 876
queue depth: 873
queue depth: 875
queue depth: 872
queue depth: 865
queue depth: 867
queue depth: 859
queue depth: 853
queue depth: 851
queue depth: 848
queue depth: 837
queue depth: 846
queue depth: 827
queue depth: 821
queue depth: 835
queue depth: 817
queue depth: 810
queue depth: 808
queue depth: 805
queue depth: 788
queue depth: 791
queue depth: 807
queue depth: 776
queue depth: 769
queue depth: 767
queue depth: 759
queue depth: 753
queue depth: 3064
queue depth: 749
queue depth: 751
queue depth: 740
queue depth: 737
queue depth: 730
queue depth: 746
queue depth: 722
queue depth: 725
queue depth: 714
queue depth: 734
queue depth: 681
queue depth: 706
queue depth: 678
queue depth: 669
queue depth: 621
queue depth: 3066
queue depth: 602
queue depth: 593
queue depth: 633
queue depth: 595
queue depth: 578
queue depth: 556
queue depth: 565
queue depth: 540
queue depth: 3067
queue depth: 618
queue depth: 559
queue depth: 532
queue depth: 501
queue depth: 495
queue depth: 522
queue depth: 480
queue depth: 472
queue depth: 462
queue depth: 446
queue depth: 433
queue depth: 420
queue depth: 414
queue depth: 3069
queue depth: 401
queue depth: 393
queue depth: 410
queue depth: 371
queue depth: 388
queue depth: 391
queue depth: 384
queue depth: 378
queue depth: 369
queue depth: 358
queue depth: 350
queue depth: 356
queue depth: 343
queue depth: 336
queue depth: 334
queue depth: 3073
queue depth: 326
queue depth: 328
queue depth: 3071
queue depth: 319
queue depth: 314
queue depth: 312
queue depth: 3075
queue depth: 308
queue depth: 306
queue depth: 3079
queue depth: 3082
queue depth: 3077
queue depth: 3084
queue depth: 302
queue depth: 304
queue depth: 287
queue depth: 264
queue depth: 258
queue depth: 3086
queue depth: 283
queue depth: 256
queue depth: 250
queue depth: 241
queue depth: 239
queue depth: 221
queue depth: 237
queue depth: 3088
queue depth: 215
queue depth: 213
queue depth: 198
queue depth: 205
queue depth: 193
queue depth: 191
queue depth: 186
queue depth: 184
queue depth: 176
queue depth: 178
queue depth: 162
queue depth: 169
queue depth: 160
queue depth: 153
queue depth: 151
queue depth: 149
queue depth: 3090
queue depth: 140
queue depth: 147
queue depth: 135
queue depth: 133
queue depth: 3092
queue depth: 121
queue depth: 105
queue depth: 92
queue depth: 114
queue depth: 98
queue depth: 3094
queue depth: 90
queue depth: 73
queue depth: 88
queue depth: 68
queue depth: 62
queue depth: 24
queue depth: 12
queue depth: 7
queue depth: 128
queue depth: 6
queue depth: 17
queue depth: 3096
queue depth: 2
queue depth: 3105
queue depth: 3108
queue depth: 3101
queue depth: 3103
queue depth: 3099
queue depth: 1
queue depth: 0
queue depth: 0
queue depth: 0
queue depth: 1
queue depth: 0
queue depth: 0
queue depth: 1
queue depth: 0
queue depth: 0
queue depth: 0
queue depth: 1
queue depth: 0
queue depth: 0
queue depth: 0
queue depth: 0
queue depth: 0
queue depth: 0
queue depth: 0
queue depth: 3111
queue depth: 3114
queue depth: 3113