+ __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("TabProxies._force_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "TabProxies.pyx":47
+ * raise TypeError, u"Argument must be string, bytes or unicode."
+ *
+ * cdef inline bytes _force_cmdline_bytes(object s): # <<<<<<<<<<<<<<
+ * return _force_bytes(s)
+ *
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_10TabProxies__force_cmdline_bytes(PyObject *__pyx_v_s) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("_force_cmdline_bytes", 0);
+
+ /* "TabProxies.pyx":48
+ *
+ * cdef inline bytes _force_cmdline_bytes(object s):
+ * return _force_bytes(s) # <<<<<<<<<<<<<<
+ *
+ * cdef _charptr_to_str(char* s):
+ */
+ __Pyx_XDECREF(((PyObject *)__pyx_r));
+ __pyx_t_1 = ((PyObject *)__pyx_f_10TabProxies__force_bytes(__pyx_v_s)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = ((PyObject*)__pyx_t_1);
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("TabProxies._force_cmdline_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "TabProxies.pyx":50
+ * return _force_bytes(s)
+ *
+ * cdef _charptr_to_str(char* s): # <<<<<<<<<<<<<<
+ * if PY_MAJOR_VERSION < 3:
+ * return s
+ */
+
+static PyObject *__pyx_f_10TabProxies__charptr_to_str(char *__pyx_v_s) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("_charptr_to_str", 0);
+
+ /* "TabProxies.pyx":51
+ *
+ * cdef _charptr_to_str(char* s):
+ * if PY_MAJOR_VERSION < 3: # <<<<<<<<<<<<<<
+ * return s
+ * else:
+ */
+ __pyx_t_1 = (PY_MAJOR_VERSION < 3);
+ if (__pyx_t_1) {
+
+ /* "TabProxies.pyx":52
+ * cdef _charptr_to_str(char* s):
+ * if PY_MAJOR_VERSION < 3:
+ * return s # <<<<<<<<<<<<<<
+ * else:
+ * return s.decode("ascii")
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = PyBytes_FromString(__pyx_v_s); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+ __pyx_r = ((PyObject *)__pyx_t_2);
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+ goto __pyx_L3;
+ }
+ /*else*/ {
+
+ /* "TabProxies.pyx":54
+ * return s
+ * else:
+ * return s.decode("ascii") # <<<<<<<<<<<<<<
+ *
+ * cdef _force_str(object s):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = ((PyObject *)PyUnicode_DecodeASCII(__pyx_v_s, strlen(__pyx_v_s), NULL)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+ __pyx_r = ((PyObject *)__pyx_t_2);
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+ }
+ __pyx_L3:;
+
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("TabProxies._charptr_to_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "TabProxies.pyx":56
+ * return s.decode("ascii")
+ *
+ * cdef _force_str(object s): # <<<<<<<<<<<<<<
+ * """Return s converted to str type of current Python (bytes in Py2, unicode in Py3)"""
+ * if s is None:
+ */
+
+static PyObject *__pyx_f_10TabProxies__force_str(PyObject *__pyx_v_s) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("_force_str", 0);
+
+ /* "TabProxies.pyx":58
+ * cdef _force_str(object s):
+ * """Return s converted to str type of current Python (bytes in Py2, unicode in Py3)"""
+ * if s is None: # <<<<<<<<<<<<<<
+ * return None
+ * if PY_MAJOR_VERSION < 3:
+ */
+ __pyx_t_1 = (__pyx_v_s == Py_None);
+ if (__pyx_t_1) {
+
+ /* "TabProxies.pyx":59
+ * """Return s converted to str type of current Python (bytes in Py2, unicode in Py3)"""
+ * if s is None:
+ * return None # <<<<<<<<<<<<<<
+ * if PY_MAJOR_VERSION < 3:
+ * return s
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(Py_None);
+ __pyx_r = Py_None;
+ goto __pyx_L0;
+ goto __pyx_L3;
+ }
+ __pyx_L3:;
+
+ /* "TabProxies.pyx":60
+ * if s is None:
+ * return None
+ * if PY_MAJOR_VERSION < 3: # <<<<<<<<<<<<<<
+ * return s
+ * elif PyBytes_Check(s):
+ */
+ __pyx_t_1 = (PY_MAJOR_VERSION < 3);
+ if (__pyx_t_1) {
+
+ /* "TabProxies.pyx":61
+ * return None
+ * if PY_MAJOR_VERSION < 3:
+ * return s # <<<<<<<<<<<<<<
+ * elif PyBytes_Check(s):
+ * return s.decode('ascii')
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(__pyx_v_s);
+ __pyx_r = __pyx_v_s;
+ goto __pyx_L0;
+ goto __pyx_L4;
+ }
+
+ /* "TabProxies.pyx":62
+ * if PY_MAJOR_VERSION < 3:
+ * return s
+ * elif PyBytes_Check(s): # <<<<<<<<<<<<<<
+ * return s.decode('ascii')
+ * else:
+ */
+ __pyx_t_1 = PyBytes_Check(__pyx_v_s);
+ if (__pyx_t_1) {
+
+ /* "TabProxies.pyx":63
+ * return s
+ * elif PyBytes_Check(s):
+ * return s.decode('ascii') # <<<<<<<<<<<<<<
+ * else:
+ * # assume unicode
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = PyObject_GetAttr(__pyx_v_s, __pyx_n_s__decode); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_r = __pyx_t_3;
+ __pyx_t_3 = 0;
+ goto __pyx_L0;
+ goto __pyx_L4;
+ }
+ /*else*/ {
+
+ /* "TabProxies.pyx":66
+ * else:
+ * # assume unicode
+ * return s # <<<<<<<<<<<<<<
+ *
+ * cdef char * nextItem( char * buffer ):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(__pyx_v_s);
+ __pyx_r = __pyx_v_s;
+ goto __pyx_L0;
+ }
+ __pyx_L4:;
+
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("TabProxies._force_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "TabProxies.pyx":68
+ * return s
+ *
+ * cdef char * nextItem( char * buffer ): # <<<<<<<<<<<<<<
+ * cdef char * pos
+ * pos = strchr( buffer, '\t' )
+ */
+
+static char *__pyx_f_10TabProxies_nextItem(char *__pyx_v_buffer) {
+ char *__pyx_v_pos;
+ char *__pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("nextItem", 0);
+
+ /* "TabProxies.pyx":70
+ * cdef char * nextItem( char * buffer ):
+ * cdef char * pos
+ * pos = strchr( buffer, '\t' ) # <<<<<<<<<<<<<<
+ * if pos == NULL: raise ValueError( "malformatted entry at %s" % buffer )
+ * pos[0] = '\0'
+ */
+ __pyx_v_pos = strchr(__pyx_v_buffer, '\t');
+
+ /* "TabProxies.pyx":71
+ * cdef char * pos
+ * pos = strchr( buffer, '\t' )
+ * if pos == NULL: raise ValueError( "malformatted entry at %s" % buffer ) # <<<<<<<<<<<<<<
+ * pos[0] = '\0'
+ * pos += 1
+ */
+ __pyx_t_1 = (__pyx_v_pos == NULL);
+ if (__pyx_t_1) {
+ __pyx_t_2 = PyBytes_FromString(__pyx_v_buffer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+ __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_5), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+ __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+ __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __Pyx_GOTREF(__pyx_t_2);
+ PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3));
+ __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
+ __pyx_t_3 = 0;
+ __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+ __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+ goto __pyx_L3;
+ }
+ __pyx_L3:;
+
+ /* "TabProxies.pyx":72
+ * pos = strchr( buffer, '\t' )
+ * if pos == NULL: raise ValueError( "malformatted entry at %s" % buffer )
+ * pos[0] = '\0' # <<<<<<<<<<<<<<
+ * pos += 1
+ * return pos
+ */
+ (__pyx_v_pos[0]) = '\x00';
+
+ /* "TabProxies.pyx":73
+ * if pos == NULL: raise ValueError( "malformatted entry at %s" % buffer )
+ * pos[0] = '\0'
+ * pos += 1 # <<<<<<<<<<<<<<
+ * return pos
+ *
+ */
+ __pyx_v_pos = (__pyx_v_pos + 1);
+
+ /* "TabProxies.pyx":74
+ * pos[0] = '\0'
+ * pos += 1
+ * return pos # <<<<<<<<<<<<<<
+ *
+ * cdef char *StrOrEmpty( char * buffer ):
+ */
+ __pyx_r = __pyx_v_pos;
+ goto __pyx_L0;
+
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_WriteUnraisable("TabProxies.nextItem", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "TabProxies.pyx":76
+ * return pos
+ *
+ * cdef char *StrOrEmpty( char * buffer ): # <<<<<<<<<<<<<<
+ * if buffer == NULL: return ""
+ * else: return buffer
+ */
+
+static char *__pyx_f_10TabProxies_StrOrEmpty(char *__pyx_v_buffer) {
+ char *__pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ __Pyx_RefNannySetupContext("StrOrEmpty", 0);
+
+ /* "TabProxies.pyx":77
+ *
+ * cdef char *StrOrEmpty( char * buffer ):
+ * if buffer == NULL: return "" # <<<<<<<<<<<<<<
+ * else: return buffer
+ *
+ */
+ __pyx_t_1 = (__pyx_v_buffer == NULL);
+ if (__pyx_t_1) {
+ __pyx_r = __pyx_k_6;
+ goto __pyx_L0;
+ goto __pyx_L3;
+ }
+ /*else*/ {
+
+ /* "TabProxies.pyx":78
+ * cdef char *StrOrEmpty( char * buffer ):
+ * if buffer == NULL: return ""
+ * else: return buffer # <<<<<<<<<<<<<<
+ *
+ * cdef int isNew( char * p, char * buffer, size_t nbytes ):
+ */
+ __pyx_r = __pyx_v_buffer;
+ goto __pyx_L0;
+ }
+ __pyx_L3:;
+
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "TabProxies.pyx":80
+ * else: return buffer
+ *
+ * cdef int isNew( char * p, char * buffer, size_t nbytes ): # <<<<<<<<<<<<<<
+ * if p == NULL: return 0
+ * return not (buffer <= p < buffer + nbytes )
+ */
+
+static int __pyx_f_10TabProxies_isNew(char *__pyx_v_p, char *__pyx_v_buffer, size_t __pyx_v_nbytes) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ __Pyx_RefNannySetupContext("isNew", 0);
+
+ /* "TabProxies.pyx":81
+ *
+ * cdef int isNew( char * p, char * buffer, size_t nbytes ):
+ * if p == NULL: return 0 # <<<<<<<<<<<<<<
+ * return not (buffer <= p < buffer + nbytes )
+ *
+ */
+ __pyx_t_1 = (__pyx_v_p == NULL);
+ if (__pyx_t_1) {
+ __pyx_r = 0;
+ goto __pyx_L0;
+ goto __pyx_L3;
+ }
+ __pyx_L3:;
+
+ /* "TabProxies.pyx":82