ServiceRestClient
                    class ServiceRestClient
                
                using Azure.Core;
using Azure.Core.Pipeline;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Common;
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace Azure.Storage.Blobs
{
    internal class ServiceRestClient
    {
        private readonly HttpPipeline _pipeline;
        private readonly string _url;
        private readonly string _version;
        internal ClientDiagnostics ClientDiagnostics { get; }
        public ServiceRestClient(ClientDiagnostics clientDiagnostics, HttpPipeline pipeline, string url, string version)
        {
            if (clientDiagnostics == null)
                throw new ArgumentNullException("clientDiagnostics");
            ClientDiagnostics = clientDiagnostics;
            if (pipeline == null)
                throw new ArgumentNullException("pipeline");
            _pipeline = pipeline;
            if (url == null)
                throw new ArgumentNullException("url");
            _url = url;
            if (version == null)
                throw new ArgumentNullException("version");
            _version = version;
        }
        internal HttpMessage CreateSetPropertiesRequest(BlobServiceProperties blobServiceProperties, int? timeout)
        {
            HttpMessage val = _pipeline.CreateMessage();
            Request request = val.get_Request();
            request.set_Method(RequestMethod.get_Put());
            RawRequestUriBuilder rawRequestUriBuilder = new RawRequestUriBuilder();
            rawRequestUriBuilder.AppendRaw(_url, false);
            rawRequestUriBuilder.AppendPath("/", false);
            rawRequestUriBuilder.AppendQuery("restype", "service", true);
            rawRequestUriBuilder.AppendQuery("comp", "properties", true);
            if (timeout.HasValue)
                rawRequestUriBuilder.AppendQuery("timeout", timeout.Value, true);
            request.set_Uri(rawRequestUriBuilder);
            RequestHeaders headers = request.get_Headers();
            headers.Add("x-ms-version", _version);
            headers = request.get_Headers();
            headers.Add("Accept", "application/xml");
            headers = request.get_Headers();
            headers.Add("Content-Type", "application/xml");
            XmlWriterContent xmlWriterContent = new XmlWriterContent();
            xmlWriterContent.XmlWriter.WriteObjectValue(blobServiceProperties, "StorageServiceProperties");
            request.set_Content(xmlWriterContent);
            return val;
        }
        [AsyncStateMachine(typeof(<SetPropertiesAsync>d__8))]
        public Task<ResponseWithHeaders<ServiceSetPropertiesHeaders>> SetPropertiesAsync(BlobServiceProperties blobServiceProperties, int? timeout = default(int?), CancellationToken cancellationToken = default(CancellationToken))
        {
            <SetPropertiesAsync>d__8 stateMachine = default(<SetPropertiesAsync>d__8);
            stateMachine.<>t__builder = AsyncTaskMethodBuilder<ResponseWithHeaders<ServiceSetPropertiesHeaders>>.Create();
            stateMachine.<>4__this = this;
            stateMachine.blobServiceProperties = blobServiceProperties;
            stateMachine.timeout = timeout;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        public ResponseWithHeaders<ServiceSetPropertiesHeaders> SetProperties(BlobServiceProperties blobServiceProperties, int? timeout = default(int?), CancellationToken cancellationToken = default(CancellationToken))
        {
            if (blobServiceProperties != null) {
                HttpMessage val = CreateSetPropertiesRequest(blobServiceProperties, timeout);
                try {
                    _pipeline.Send(val, cancellationToken);
                    ServiceSetPropertiesHeaders headers = new ServiceSetPropertiesHeaders(val.get_Response());
                    if (val.get_Response().get_Status() != 202)
                        throw new RequestFailedException(val.get_Response());
                    return ResponseWithHeaders.FromValue(headers, val.get_Response());
                } finally {
                    ((IDisposable)val)?.Dispose();
                }
            }
            throw new ArgumentNullException("blobServiceProperties");
        }
        internal HttpMessage CreateGetPropertiesRequest(int? timeout)
        {
            HttpMessage val = _pipeline.CreateMessage();
            Request request = val.get_Request();
            request.set_Method(RequestMethod.get_Get());
            RawRequestUriBuilder rawRequestUriBuilder = new RawRequestUriBuilder();
            rawRequestUriBuilder.AppendRaw(_url, false);
            rawRequestUriBuilder.AppendPath("/", false);
            rawRequestUriBuilder.AppendQuery("restype", "service", true);
            rawRequestUriBuilder.AppendQuery("comp", "properties", true);
            if (timeout.HasValue)
                rawRequestUriBuilder.AppendQuery("timeout", timeout.Value, true);
            request.set_Uri(rawRequestUriBuilder);
            RequestHeaders headers = request.get_Headers();
            headers.Add("x-ms-version", _version);
            headers = request.get_Headers();
            headers.Add("Accept", "application/xml");
            return val;
        }
        [AsyncStateMachine(typeof(<GetPropertiesAsync>d__11))]
        public Task<ResponseWithHeaders<BlobServiceProperties, ServiceGetPropertiesHeaders>> GetPropertiesAsync(int? timeout = default(int?), CancellationToken cancellationToken = default(CancellationToken))
        {
            <GetPropertiesAsync>d__11 stateMachine = default(<GetPropertiesAsync>d__11);
            stateMachine.<>t__builder = AsyncTaskMethodBuilder<ResponseWithHeaders<BlobServiceProperties, ServiceGetPropertiesHeaders>>.Create();
            stateMachine.<>4__this = this;
            stateMachine.timeout = timeout;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        public ResponseWithHeaders<BlobServiceProperties, ServiceGetPropertiesHeaders> GetProperties(int? timeout = default(int?), CancellationToken cancellationToken = default(CancellationToken))
        {
            HttpMessage val = CreateGetPropertiesRequest(timeout);
            try {
                _pipeline.Send(val, cancellationToken);
                ServiceGetPropertiesHeaders headers = new ServiceGetPropertiesHeaders(val.get_Response());
                if (val.get_Response().get_Status() != 200)
                    throw new RequestFailedException(val.get_Response());
                BlobServiceProperties value = null;
                XElement xElement = XDocument.Load(val.get_Response().get_ContentStream(), LoadOptions.PreserveWhitespace).Element("StorageServiceProperties");
                if (xElement != null)
                    value = BlobServiceProperties.DeserializeBlobServiceProperties(xElement);
                return ResponseWithHeaders.FromValue(value, headers, val.get_Response());
            } finally {
                ((IDisposable)val)?.Dispose();
            }
        }
        internal HttpMessage CreateGetStatisticsRequest(int? timeout)
        {
            HttpMessage val = _pipeline.CreateMessage();
            Request request = val.get_Request();
            request.set_Method(RequestMethod.get_Get());
            RawRequestUriBuilder rawRequestUriBuilder = new RawRequestUriBuilder();
            rawRequestUriBuilder.AppendRaw(_url, false);
            rawRequestUriBuilder.AppendPath("/", false);
            rawRequestUriBuilder.AppendQuery("restype", "service", true);
            rawRequestUriBuilder.AppendQuery("comp", "stats", true);
            if (timeout.HasValue)
                rawRequestUriBuilder.AppendQuery("timeout", timeout.Value, true);
            request.set_Uri(rawRequestUriBuilder);
            RequestHeaders headers = request.get_Headers();
            headers.Add("x-ms-version", _version);
            headers = request.get_Headers();
            headers.Add("Accept", "application/xml");
            return val;
        }
        [AsyncStateMachine(typeof(<GetStatisticsAsync>d__14))]
        public Task<ResponseWithHeaders<BlobServiceStatistics, ServiceGetStatisticsHeaders>> GetStatisticsAsync(int? timeout = default(int?), CancellationToken cancellationToken = default(CancellationToken))
        {
            <GetStatisticsAsync>d__14 stateMachine = default(<GetStatisticsAsync>d__14);
            stateMachine.<>t__builder = AsyncTaskMethodBuilder<ResponseWithHeaders<BlobServiceStatistics, ServiceGetStatisticsHeaders>>.Create();
            stateMachine.<>4__this = this;
            stateMachine.timeout = timeout;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        public ResponseWithHeaders<BlobServiceStatistics, ServiceGetStatisticsHeaders> GetStatistics(int? timeout = default(int?), CancellationToken cancellationToken = default(CancellationToken))
        {
            HttpMessage val = CreateGetStatisticsRequest(timeout);
            try {
                _pipeline.Send(val, cancellationToken);
                ServiceGetStatisticsHeaders headers = new ServiceGetStatisticsHeaders(val.get_Response());
                if (val.get_Response().get_Status() != 200)
                    throw new RequestFailedException(val.get_Response());
                BlobServiceStatistics value = null;
                XElement xElement = XDocument.Load(val.get_Response().get_ContentStream(), LoadOptions.PreserveWhitespace).Element("StorageServiceStats");
                if (xElement != null)
                    value = BlobServiceStatistics.DeserializeBlobServiceStatistics(xElement);
                return ResponseWithHeaders.FromValue(value, headers, val.get_Response());
            } finally {
                ((IDisposable)val)?.Dispose();
            }
        }
        internal HttpMessage CreateListContainersSegmentRequest(string prefix, string marker, int? maxresults, IEnumerable<ListContainersIncludeType> include, int? timeout)
        {
            HttpMessage val = _pipeline.CreateMessage();
            Request request = val.get_Request();
            request.set_Method(RequestMethod.get_Get());
            RawRequestUriBuilder rawRequestUriBuilder = new RawRequestUriBuilder();
            rawRequestUriBuilder.AppendRaw(_url, false);
            rawRequestUriBuilder.AppendPath("/", false);
            rawRequestUriBuilder.AppendQuery("comp", "list", true);
            if (prefix != null)
                rawRequestUriBuilder.AppendQuery("prefix", prefix, true);
            if (marker != null)
                rawRequestUriBuilder.AppendQuery("marker", marker, true);
            if (maxresults.HasValue)
                rawRequestUriBuilder.AppendQuery("maxresults", maxresults.Value, true);
            if (include != null) {
                ChangeTrackingList<ListContainersIncludeType> changeTrackingList = include as ChangeTrackingList<ListContainersIncludeType>;
                if (changeTrackingList == null || !changeTrackingList.IsUndefined)
                    rawRequestUriBuilder.AppendQueryDelimited("include", include, ",", true);
            }
            if (timeout.HasValue)
                rawRequestUriBuilder.AppendQuery("timeout", timeout.Value, true);
            request.set_Uri(rawRequestUriBuilder);
            RequestHeaders headers = request.get_Headers();
            headers.Add("x-ms-version", _version);
            headers = request.get_Headers();
            headers.Add("Accept", "application/xml");
            return val;
        }
        [AsyncStateMachine(typeof(<ListContainersSegmentAsync>d__17))]
        public Task<ResponseWithHeaders<ListContainersSegmentResponse, ServiceListContainersSegmentHeaders>> ListContainersSegmentAsync(string prefix = null, string marker = null, int? maxresults = default(int?), IEnumerable<ListContainersIncludeType> include = null, int? timeout = default(int?), CancellationToken cancellationToken = default(CancellationToken))
        {
            <ListContainersSegmentAsync>d__17 stateMachine = default(<ListContainersSegmentAsync>d__17);
            stateMachine.<>t__builder = AsyncTaskMethodBuilder<ResponseWithHeaders<ListContainersSegmentResponse, ServiceListContainersSegmentHeaders>>.Create();
            stateMachine.<>4__this = this;
            stateMachine.prefix = prefix;
            stateMachine.marker = marker;
            stateMachine.maxresults = maxresults;
            stateMachine.include = include;
            stateMachine.timeout = timeout;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        public ResponseWithHeaders<ListContainersSegmentResponse, ServiceListContainersSegmentHeaders> ListContainersSegment(string prefix = null, string marker = null, int? maxresults = default(int?), IEnumerable<ListContainersIncludeType> include = null, int? timeout = default(int?), CancellationToken cancellationToken = default(CancellationToken))
        {
            HttpMessage val = CreateListContainersSegmentRequest(prefix, marker, maxresults, include, timeout);
            try {
                _pipeline.Send(val, cancellationToken);
                ServiceListContainersSegmentHeaders headers = new ServiceListContainersSegmentHeaders(val.get_Response());
                if (val.get_Response().get_Status() != 200)
                    throw new RequestFailedException(val.get_Response());
                ListContainersSegmentResponse value = null;
                XElement xElement = XDocument.Load(val.get_Response().get_ContentStream(), LoadOptions.PreserveWhitespace).Element("EnumerationResults");
                if (xElement != null)
                    value = ListContainersSegmentResponse.DeserializeListContainersSegmentResponse(xElement);
                return ResponseWithHeaders.FromValue(value, headers, val.get_Response());
            } finally {
                ((IDisposable)val)?.Dispose();
            }
        }
        internal HttpMessage CreateGetUserDelegationKeyRequest(KeyInfo keyInfo, int? timeout)
        {
            HttpMessage val = _pipeline.CreateMessage();
            Request request = val.get_Request();
            request.set_Method(RequestMethod.get_Post());
            RawRequestUriBuilder rawRequestUriBuilder = new RawRequestUriBuilder();
            rawRequestUriBuilder.AppendRaw(_url, false);
            rawRequestUriBuilder.AppendPath("/", false);
            rawRequestUriBuilder.AppendQuery("restype", "service", true);
            rawRequestUriBuilder.AppendQuery("comp", "userdelegationkey", true);
            if (timeout.HasValue)
                rawRequestUriBuilder.AppendQuery("timeout", timeout.Value, true);
            request.set_Uri(rawRequestUriBuilder);
            RequestHeaders headers = request.get_Headers();
            headers.Add("x-ms-version", _version);
            headers = request.get_Headers();
            headers.Add("Accept", "application/xml");
            headers = request.get_Headers();
            headers.Add("Content-Type", "application/xml");
            XmlWriterContent xmlWriterContent = new XmlWriterContent();
            xmlWriterContent.XmlWriter.WriteObjectValue(keyInfo, "KeyInfo");
            request.set_Content(xmlWriterContent);
            return val;
        }
        [AsyncStateMachine(typeof(<GetUserDelegationKeyAsync>d__20))]
        public Task<ResponseWithHeaders<UserDelegationKey, ServiceGetUserDelegationKeyHeaders>> GetUserDelegationKeyAsync(KeyInfo keyInfo, int? timeout = default(int?), CancellationToken cancellationToken = default(CancellationToken))
        {
            <GetUserDelegationKeyAsync>d__20 stateMachine = default(<GetUserDelegationKeyAsync>d__20);
            stateMachine.<>t__builder = AsyncTaskMethodBuilder<ResponseWithHeaders<UserDelegationKey, ServiceGetUserDelegationKeyHeaders>>.Create();
            stateMachine.<>4__this = this;
            stateMachine.keyInfo = keyInfo;
            stateMachine.timeout = timeout;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        public ResponseWithHeaders<UserDelegationKey, ServiceGetUserDelegationKeyHeaders> GetUserDelegationKey(KeyInfo keyInfo, int? timeout = default(int?), CancellationToken cancellationToken = default(CancellationToken))
        {
            if (keyInfo != null) {
                HttpMessage val = CreateGetUserDelegationKeyRequest(keyInfo, timeout);
                try {
                    _pipeline.Send(val, cancellationToken);
                    ServiceGetUserDelegationKeyHeaders headers = new ServiceGetUserDelegationKeyHeaders(val.get_Response());
                    if (val.get_Response().get_Status() != 200)
                        throw new RequestFailedException(val.get_Response());
                    UserDelegationKey value = null;
                    XElement xElement = XDocument.Load(val.get_Response().get_ContentStream(), LoadOptions.PreserveWhitespace).Element("UserDelegationKey");
                    if (xElement != null)
                        value = UserDelegationKey.DeserializeUserDelegationKey(xElement);
                    return ResponseWithHeaders.FromValue(value, headers, val.get_Response());
                } finally {
                    ((IDisposable)val)?.Dispose();
                }
            }
            throw new ArgumentNullException("keyInfo");
        }
        internal HttpMessage CreateGetAccountInfoRequest(int? timeout)
        {
            HttpMessage val = _pipeline.CreateMessage();
            Request request = val.get_Request();
            request.set_Method(RequestMethod.get_Get());
            RawRequestUriBuilder rawRequestUriBuilder = new RawRequestUriBuilder();
            rawRequestUriBuilder.AppendRaw(_url, false);
            rawRequestUriBuilder.AppendPath("/", false);
            rawRequestUriBuilder.AppendQuery("restype", "account", true);
            rawRequestUriBuilder.AppendQuery("comp", "properties", true);
            if (timeout.HasValue)
                rawRequestUriBuilder.AppendQuery("timeout", timeout.Value, true);
            request.set_Uri(rawRequestUriBuilder);
            RequestHeaders headers = request.get_Headers();
            headers.Add("x-ms-version", _version);
            headers = request.get_Headers();
            headers.Add("Accept", "application/xml");
            return val;
        }
        [AsyncStateMachine(typeof(<GetAccountInfoAsync>d__23))]
        public Task<ResponseWithHeaders<ServiceGetAccountInfoHeaders>> GetAccountInfoAsync(int? timeout = default(int?), CancellationToken cancellationToken = default(CancellationToken))
        {
            <GetAccountInfoAsync>d__23 stateMachine = default(<GetAccountInfoAsync>d__23);
            stateMachine.<>t__builder = AsyncTaskMethodBuilder<ResponseWithHeaders<ServiceGetAccountInfoHeaders>>.Create();
            stateMachine.<>4__this = this;
            stateMachine.timeout = timeout;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        public ResponseWithHeaders<ServiceGetAccountInfoHeaders> GetAccountInfo(int? timeout = default(int?), CancellationToken cancellationToken = default(CancellationToken))
        {
            HttpMessage val = CreateGetAccountInfoRequest(timeout);
            try {
                _pipeline.Send(val, cancellationToken);
                ServiceGetAccountInfoHeaders headers = new ServiceGetAccountInfoHeaders(val.get_Response());
                if (val.get_Response().get_Status() != 200)
                    throw new RequestFailedException(val.get_Response());
                return ResponseWithHeaders.FromValue(headers, val.get_Response());
            } finally {
                ((IDisposable)val)?.Dispose();
            }
        }
        internal HttpMessage CreateSubmitBatchRequest(long contentLength, string multipartContentType, Stream body, int? timeout)
        {
            HttpMessage val = _pipeline.CreateMessage();
            Request request = val.get_Request();
            request.set_Method(RequestMethod.get_Post());
            RawRequestUriBuilder rawRequestUriBuilder = new RawRequestUriBuilder();
            rawRequestUriBuilder.AppendRaw(_url, false);
            rawRequestUriBuilder.AppendPath("/", false);
            rawRequestUriBuilder.AppendQuery("comp", "batch", true);
            if (timeout.HasValue)
                rawRequestUriBuilder.AppendQuery("timeout", timeout.Value, true);
            request.set_Uri(rawRequestUriBuilder);
            RequestHeaders headers = request.get_Headers();
            headers.Add("x-ms-version", _version);
            headers = request.get_Headers();
            headers.Add("Accept", "application/xml");
            request.get_Headers().Add("Content-Length", contentLength);
            headers = request.get_Headers();
            headers.Add("Content-Type", multipartContentType);
            request.set_Content(RequestContent.Create(body));
            return val;
        }
        [AsyncStateMachine(typeof(<SubmitBatchAsync>d__26))]
        public Task<ResponseWithHeaders<Stream, ServiceSubmitBatchHeaders>> SubmitBatchAsync(long contentLength, string multipartContentType, Stream body, int? timeout = default(int?), CancellationToken cancellationToken = default(CancellationToken))
        {
            <SubmitBatchAsync>d__26 stateMachine = default(<SubmitBatchAsync>d__26);
            stateMachine.<>t__builder = AsyncTaskMethodBuilder<ResponseWithHeaders<Stream, ServiceSubmitBatchHeaders>>.Create();
            stateMachine.<>4__this = this;
            stateMachine.contentLength = contentLength;
            stateMachine.multipartContentType = multipartContentType;
            stateMachine.body = body;
            stateMachine.timeout = timeout;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        public ResponseWithHeaders<Stream, ServiceSubmitBatchHeaders> SubmitBatch(long contentLength, string multipartContentType, Stream body, int? timeout = default(int?), CancellationToken cancellationToken = default(CancellationToken))
        {
            if (multipartContentType == null)
                throw new ArgumentNullException("multipartContentType");
            if (body != null) {
                HttpMessage val = CreateSubmitBatchRequest(contentLength, multipartContentType, body, timeout);
                try {
                    _pipeline.Send(val, cancellationToken);
                    ServiceSubmitBatchHeaders headers = new ServiceSubmitBatchHeaders(val.get_Response());
                    if (val.get_Response().get_Status() != 200)
                        throw new RequestFailedException(val.get_Response());
                    return ResponseWithHeaders.FromValue(val.ExtractResponseContent(), headers, val.get_Response());
                } finally {
                    ((IDisposable)val)?.Dispose();
                }
            }
            throw new ArgumentNullException("body");
        }
        internal HttpMessage CreateFilterBlobsRequest(int? timeout, string where, string marker, int? maxresults, IEnumerable<FilterBlobsIncludeItem> include)
        {
            HttpMessage val = _pipeline.CreateMessage();
            Request request = val.get_Request();
            request.set_Method(RequestMethod.get_Get());
            RawRequestUriBuilder rawRequestUriBuilder = new RawRequestUriBuilder();
            rawRequestUriBuilder.AppendRaw(_url, false);
            rawRequestUriBuilder.AppendPath("/", false);
            rawRequestUriBuilder.AppendQuery("comp", "blobs", true);
            if (timeout.HasValue)
                rawRequestUriBuilder.AppendQuery("timeout", timeout.Value, true);
            if (where != null)
                rawRequestUriBuilder.AppendQuery("where", where, true);
            if (marker != null)
                rawRequestUriBuilder.AppendQuery("marker", marker, true);
            if (maxresults.HasValue)
                rawRequestUriBuilder.AppendQuery("maxresults", maxresults.Value, true);
            if (include != null) {
                ChangeTrackingList<FilterBlobsIncludeItem> changeTrackingList = include as ChangeTrackingList<FilterBlobsIncludeItem>;
                if (changeTrackingList == null || !changeTrackingList.IsUndefined)
                    rawRequestUriBuilder.AppendQueryDelimited("include", include, ",", true);
            }
            request.set_Uri(rawRequestUriBuilder);
            RequestHeaders headers = request.get_Headers();
            headers.Add("x-ms-version", _version);
            headers = request.get_Headers();
            headers.Add("Accept", "application/xml");
            return val;
        }
        [AsyncStateMachine(typeof(<FilterBlobsAsync>d__29))]
        public Task<ResponseWithHeaders<FilterBlobSegment, ServiceFilterBlobsHeaders>> FilterBlobsAsync(int? timeout = default(int?), string where = null, string marker = null, int? maxresults = default(int?), IEnumerable<FilterBlobsIncludeItem> include = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            <FilterBlobsAsync>d__29 stateMachine = default(<FilterBlobsAsync>d__29);
            stateMachine.<>t__builder = AsyncTaskMethodBuilder<ResponseWithHeaders<FilterBlobSegment, ServiceFilterBlobsHeaders>>.Create();
            stateMachine.<>4__this = this;
            stateMachine.timeout = timeout;
            stateMachine.where = where;
            stateMachine.marker = marker;
            stateMachine.maxresults = maxresults;
            stateMachine.include = include;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        public ResponseWithHeaders<FilterBlobSegment, ServiceFilterBlobsHeaders> FilterBlobs(int? timeout = default(int?), string where = null, string marker = null, int? maxresults = default(int?), IEnumerable<FilterBlobsIncludeItem> include = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            HttpMessage val = CreateFilterBlobsRequest(timeout, where, marker, maxresults, include);
            try {
                _pipeline.Send(val, cancellationToken);
                ServiceFilterBlobsHeaders headers = new ServiceFilterBlobsHeaders(val.get_Response());
                if (val.get_Response().get_Status() != 200)
                    throw new RequestFailedException(val.get_Response());
                FilterBlobSegment value = null;
                XElement xElement = XDocument.Load(val.get_Response().get_ContentStream(), LoadOptions.PreserveWhitespace).Element("EnumerationResults");
                if (xElement != null)
                    value = FilterBlobSegment.DeserializeFilterBlobSegment(xElement);
                return ResponseWithHeaders.FromValue(value, headers, val.get_Response());
            } finally {
                ((IDisposable)val)?.Dispose();
            }
        }
        internal HttpMessage CreateListContainersSegmentNextPageRequest(string nextLink, string prefix, string marker, int? maxresults, IEnumerable<ListContainersIncludeType> include, int? timeout)
        {
            HttpMessage val = _pipeline.CreateMessage();
            Request request = val.get_Request();
            request.set_Method(RequestMethod.get_Get());
            RawRequestUriBuilder rawRequestUriBuilder = new RawRequestUriBuilder();
            rawRequestUriBuilder.AppendRaw(_url, false);
            rawRequestUriBuilder.AppendRawNextLink(nextLink, false);
            request.set_Uri(rawRequestUriBuilder);
            RequestHeaders headers = request.get_Headers();
            headers.Add("x-ms-version", _version);
            headers = request.get_Headers();
            headers.Add("Accept", "application/xml");
            return val;
        }
        [AsyncStateMachine(typeof(<ListContainersSegmentNextPageAsync>d__32))]
        public Task<ResponseWithHeaders<ListContainersSegmentResponse, ServiceListContainersSegmentHeaders>> ListContainersSegmentNextPageAsync(string nextLink, string prefix = null, string marker = null, int? maxresults = default(int?), IEnumerable<ListContainersIncludeType> include = null, int? timeout = default(int?), CancellationToken cancellationToken = default(CancellationToken))
        {
            <ListContainersSegmentNextPageAsync>d__32 stateMachine = default(<ListContainersSegmentNextPageAsync>d__32);
            stateMachine.<>t__builder = AsyncTaskMethodBuilder<ResponseWithHeaders<ListContainersSegmentResponse, ServiceListContainersSegmentHeaders>>.Create();
            stateMachine.<>4__this = this;
            stateMachine.nextLink = nextLink;
            stateMachine.prefix = prefix;
            stateMachine.marker = marker;
            stateMachine.maxresults = maxresults;
            stateMachine.include = include;
            stateMachine.timeout = timeout;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        public ResponseWithHeaders<ListContainersSegmentResponse, ServiceListContainersSegmentHeaders> ListContainersSegmentNextPage(string nextLink, string prefix = null, string marker = null, int? maxresults = default(int?), IEnumerable<ListContainersIncludeType> include = null, int? timeout = default(int?), CancellationToken cancellationToken = default(CancellationToken))
        {
            if (nextLink != null) {
                HttpMessage val = CreateListContainersSegmentNextPageRequest(nextLink, prefix, marker, maxresults, include, timeout);
                try {
                    _pipeline.Send(val, cancellationToken);
                    ServiceListContainersSegmentHeaders headers = new ServiceListContainersSegmentHeaders(val.get_Response());
                    if (val.get_Response().get_Status() != 200)
                        throw new RequestFailedException(val.get_Response());
                    ListContainersSegmentResponse value = null;
                    XElement xElement = XDocument.Load(val.get_Response().get_ContentStream(), LoadOptions.PreserveWhitespace).Element("EnumerationResults");
                    if (xElement != null)
                        value = ListContainersSegmentResponse.DeserializeListContainersSegmentResponse(xElement);
                    return ResponseWithHeaders.FromValue(value, headers, val.get_Response());
                } finally {
                    ((IDisposable)val)?.Dispose();
                }
            }
            throw new ArgumentNullException("nextLink");
        }
    }
}