// Token: 0x06006E22 RID: 28194 RVA: 0x0017AC2C File Offset: 0x00178E2C
            public IAsyncLocalValueMap Set(IAsyncLocal key, object value, bool treatNullValueAsNonexistent)
            {
                int  count = base.Count;
                bool flag  = base.ContainsKey(key);

                if (value != null || !treatNullValueAsNonexistent)
                {
                    AsyncLocalValueMap.ManyElementAsyncLocalValueMap manyElementAsyncLocalValueMap = new AsyncLocalValueMap.ManyElementAsyncLocalValueMap(count + (flag ? 0 : 1));
                    foreach (KeyValuePair <IAsyncLocal, object> keyValuePair in this)
                    {
                        manyElementAsyncLocalValueMap[keyValuePair.Key] = keyValuePair.Value;
                    }
                    manyElementAsyncLocalValueMap[key] = value;
                    return(manyElementAsyncLocalValueMap);
                }
                if (!flag)
                {
                    return(this);
                }
                if (count == 17)
                {
                    AsyncLocalValueMap.MultiElementAsyncLocalValueMap multiElementAsyncLocalValueMap = new AsyncLocalValueMap.MultiElementAsyncLocalValueMap(16);
                    int num = 0;
                    foreach (KeyValuePair <IAsyncLocal, object> keyValuePair2 in this)
                    {
                        if (key != keyValuePair2.Key)
                        {
                            multiElementAsyncLocalValueMap.UnsafeStore(num++, keyValuePair2.Key, keyValuePair2.Value);
                        }
                    }
                    return(multiElementAsyncLocalValueMap);
                }
                AsyncLocalValueMap.ManyElementAsyncLocalValueMap manyElementAsyncLocalValueMap2 = new AsyncLocalValueMap.ManyElementAsyncLocalValueMap(count - 1);
                foreach (KeyValuePair <IAsyncLocal, object> keyValuePair3 in this)
                {
                    if (key != keyValuePair3.Key)
                    {
                        manyElementAsyncLocalValueMap2[keyValuePair3.Key] = keyValuePair3.Value;
                    }
                }
                return(manyElementAsyncLocalValueMap2);
            }
            // Token: 0x06006E1F RID: 28191 RVA: 0x0017A880 File Offset: 0x00178A80
            public IAsyncLocalValueMap Set(IAsyncLocal key, object value, bool treatNullValueAsNonexistent)
            {
                int i = 0;

                while (i < this._keyValues.Length)
                {
                    if (key == this._keyValues[i].Key)
                    {
                        if (value != null || !treatNullValueAsNonexistent)
                        {
                            AsyncLocalValueMap.MultiElementAsyncLocalValueMap multiElementAsyncLocalValueMap = new AsyncLocalValueMap.MultiElementAsyncLocalValueMap(this._keyValues.Length);
                            Array.Copy(this._keyValues, 0, multiElementAsyncLocalValueMap._keyValues, 0, this._keyValues.Length);
                            multiElementAsyncLocalValueMap._keyValues[i] = new KeyValuePair <IAsyncLocal, object>(key, value);
                            return(multiElementAsyncLocalValueMap);
                        }
                        if (this._keyValues.Length != 4)
                        {
                            AsyncLocalValueMap.MultiElementAsyncLocalValueMap multiElementAsyncLocalValueMap2 = new AsyncLocalValueMap.MultiElementAsyncLocalValueMap(this._keyValues.Length - 1);
                            if (i != 0)
                            {
                                Array.Copy(this._keyValues, 0, multiElementAsyncLocalValueMap2._keyValues, 0, i);
                            }
                            if (i != this._keyValues.Length - 1)
                            {
                                Array.Copy(this._keyValues, i + 1, multiElementAsyncLocalValueMap2._keyValues, i, this._keyValues.Length - i - 1);
                            }
                            return(multiElementAsyncLocalValueMap2);
                        }
                        if (i == 0)
                        {
                            return(new AsyncLocalValueMap.ThreeElementAsyncLocalValueMap(this._keyValues[1].Key, this._keyValues[1].Value, this._keyValues[2].Key, this._keyValues[2].Value, this._keyValues[3].Key, this._keyValues[3].Value));
                        }
                        if (i == 1)
                        {
                            return(new AsyncLocalValueMap.ThreeElementAsyncLocalValueMap(this._keyValues[0].Key, this._keyValues[0].Value, this._keyValues[2].Key, this._keyValues[2].Value, this._keyValues[3].Key, this._keyValues[3].Value));
                        }
                        if (i != 2)
                        {
                            return(new AsyncLocalValueMap.ThreeElementAsyncLocalValueMap(this._keyValues[0].Key, this._keyValues[0].Value, this._keyValues[1].Key, this._keyValues[1].Value, this._keyValues[2].Key, this._keyValues[2].Value));
                        }
                        return(new AsyncLocalValueMap.ThreeElementAsyncLocalValueMap(this._keyValues[0].Key, this._keyValues[0].Value, this._keyValues[1].Key, this._keyValues[1].Value, this._keyValues[3].Key, this._keyValues[3].Value));
                    }
                    else
                    {
                        i++;
                    }
                }
                if (value == null && treatNullValueAsNonexistent)
                {
                    return(this);
                }
                if (this._keyValues.Length < 16)
                {
                    AsyncLocalValueMap.MultiElementAsyncLocalValueMap multiElementAsyncLocalValueMap3 = new AsyncLocalValueMap.MultiElementAsyncLocalValueMap(this._keyValues.Length + 1);
                    Array.Copy(this._keyValues, 0, multiElementAsyncLocalValueMap3._keyValues, 0, this._keyValues.Length);
                    multiElementAsyncLocalValueMap3._keyValues[this._keyValues.Length] = new KeyValuePair <IAsyncLocal, object>(key, value);
                    return(multiElementAsyncLocalValueMap3);
                }
                AsyncLocalValueMap.ManyElementAsyncLocalValueMap manyElementAsyncLocalValueMap = new AsyncLocalValueMap.ManyElementAsyncLocalValueMap(17);
                foreach (KeyValuePair <IAsyncLocal, object> keyValuePair in this._keyValues)
                {
                    manyElementAsyncLocalValueMap[keyValuePair.Key] = keyValuePair.Value;
                }
                manyElementAsyncLocalValueMap[key] = value;
                return(manyElementAsyncLocalValueMap);
            }