        /// <summary>
        /// The base URI of the service.
        /// </summary>
<%# ToDo: Add support for customBaseUri, priority is low-%>
        public System.Uri BaseUri { get; set; }
        /// <summary>
        /// Gets or sets json serialization settings.
        /// </summary>
        public Newtonsoft.Json.JsonSerializerSettings SerializationSettings { get; private set; }
        /// <summary>
        /// Gets or sets json deserialization settings.
        /// </summary>
        public Newtonsoft.Json.JsonSerializerSettings DeserializationSettings { get; private set; }
<% (project.model.globalParameters || []).filter(p=>p.language.default.name != '$host').forEach(function(parameter) {-%>
        /// <summary>
        /// <%=project.helper.wrapComments('        ', '/// ', parameter.language.default.description)%>
        /// </summary>
<% var type = parameter.schema.type == 'constant' ? parameter.schema.valueType.language.csharp.fullname : parameter.schema.language.csharp.fullname-%>
<%type = type.includes('.') || type == 'string' ? type : type + '?'-%>
<% if (parameter.readOnly || parameter.schema.type == 'constant') {-%>
        public <%- type %> <%- parameter.language.default.name%> { get; private set; }
<% } else {-%>
        public <%- type %> <%- parameter.language.default.name%> { get; set;}
<% }%>
<%});-%>
<% project.model.operationGroups.filter(methodGroup => methodGroup.$key != '').forEach(function(methodGroup){ -%>
<% var key = project.helper.ConvertToValidMethodGroupKey(methodGroup.$key)-%>
        /// <summary>
        /// Gets the I<%- project.helper.PascalCase(key) %>Operations
        /// </summary>
        public virtual I<%- project.helper.PascalCase(key) %>Operations <%- project.helper.PascalCase(methodGroup.$key) %> { get; private set; }
<% }); -%>
        /// <summary>
        /// Initializes a new instance of the <%-project.model.info.title%> class.
        /// </summary>
        /// <param name='httpClient'>
        /// HttpClient to be used
        /// </param>
        /// <param name='disposeHttpClient'>
        /// True: will dispose the provided httpClient on calling <%-project.model.info.title%>.Dispose(). False: will not dispose provided httpClient</param>
<%# ToDo: Add support for case that ContainsCredentials is false, low priority-%>
        protected <%-project.model.info.title%>(System.Net.Http.HttpClient httpClient, bool disposeHttpClient) : base(httpClient, disposeHttpClient)
        {
            this.Initialize();
        }
        /// <summary>
        /// Initializes a new instance of the <%-project.model.info.title%> class.
        /// </summary>
        /// <param name='handlers'>
        /// Optional. The delegating handlers to add to the http client pipeline.
        /// </param>
        protected <%-project.model.info.title%>(params System.Net.Http.DelegatingHandler[] handlers) : base(handlers)
        {
            this.Initialize();
        }
        /// <summary>
        /// Initializes a new instance of the <%-project.model.info.title%>  class.
        /// </summary>
        /// <param name='rootHandler'>
        /// Optional. The http client handler used to handle http transport.
        /// </param>
        /// <param name='handlers'>
        /// Optional. The delegating handlers to add to the http client pipeline.
        /// </param>
        protected <%-project.model.info.title%>(System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : base(rootHandler, handlers)
        {
            this.Initialize();
        }
<%# ToDo: following true means !IsCustomBaseUri, may need to implement IsCustomBaseUri, low priority -%>
<% if(true) {-%>
        /// <summary>
        /// Initializes a new instance of the <%-project.model.info.title%> class.
        /// </summary>
        /// <param name='baseUri'>
        /// Optional. The base URI of the service.
        /// </param>
        /// <param name='handlers'>
        /// Optional. The delegating handlers to add to the http client pipeline.
        /// </param>
        /// <exception cref="System.ArgumentNullException">
        /// Thrown when a required parameter is null
        /// </exception>
        protected <%-project.model.info.title%>(System.Uri baseUri, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers)
        {
            if (baseUri == null)
            {
                throw new System.ArgumentNullException("baseUri");
            }
            this.BaseUri = baseUri;
        }
        /// <summary>
        /// Initializes a new instance of the <%-project.model.info.title%> class.
        /// </summary>
        /// <param name='baseUri'>
        /// Optional. The base URI of the service.
        /// </param>
        /// <param name='rootHandler'>
        /// Optional. The http client handler used to handle http transport.
        /// </param>
        /// <param name='handlers'>
        /// Optional. The delegating handlers to add to the http client pipeline.
        /// </param>
        /// <exception cref="System.ArgumentNullException">
        /// Thrown when a required parameter is null
        /// </exception>
        protected <%-project.model.info.title%>(System.Uri baseUri, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers)
        {
            if (baseUri == null)
            {
                throw new System.ArgumentNullException("baseUri");
            }
        
            this.BaseUri = baseUri;
        }
<% } -%>
<% var parameters = (project.model.globalParameters || []).filter(p => p.required && p.readOnly)
if (parameters.length > 0) {-%>
        /// <summary>
        /// Initializes a new instance of the <%-project.model.info.title%> class.
        /// </summary>
<%parameters.filter(p => !project.helper.IsConstantParameter(p)).forEach(function(parameter){-%>
        /// <param name='<%-project.helper.CamelCase(parameter.language.default.name)%>'>
        /// Required. <%=project.helper.wrapComments('        ', '/// ', parameter.language.default.description)%>
        /// </param>
<%});-%>
        /// <param name='handlers'>
        /// Optional. The delegating handlers to add to the http client pipeline.
        /// </param>
        /// <exception cref="System.ArgumentNullException">
        /// Thrown when a required parameter is null
        /// </exception>
<%# ToDo: assume the access is public, need to figure the logic of ConstructorVisibility-%>
        public <%-project.model.info.title%>(<%-project.model.language.default.requiredConstructorParametersDeclaration%>, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers)
        {
<%parameters.forEach(function(parameter) {-%>
            if (<%-project.helper.CamelCase(parameter.language.default.name)%> == null)
            {
                throw new System.ArgumentNullException("<%-project.helper.CamelCase(parameter.language.default.name)%>");
            }
<%});-%>
<%parameters.forEach(function(parameter) {-%>
            this.<%-parameter.language.default.name%> = <%-project.helper.CamelCase(parameter.language.default.name)%>;
<%if(parameter.schema.language.csharp.fullname == 'Microsoft.Rest.ServiceClientCredentials') {-%>
            if (this.Credentials != null)
            {
                this.Credentials.InitializeServiceClient(this);
            }
<% }-%>            
<%});-%>
        }
        /// <summary>
        /// Initializes a new instance of the <%-project.model.info.title%> class.
        /// </summary>
<%parameters.filter(p => !project.helper.IsConstantParameter(p)).forEach(function(parameter) {-%>
        /// <param name="<%-project.helper.CamelCase(parameter.language.default.name)%>">
        /// Required. <%=project.helper.wrapComments('        ', '/// ', parameter.language.default.description)%>
        /// </param>
<%});-%>
        /// <param name='httpClient'>
        /// HttpClient to be used
        /// </param>
        /// <param name='disposeHttpClient'>
        /// True: will dispose the provided httpClient on calling <%-project.model.info.title%>.Dispose(). False: will not dispose provided httpClient</param>
        /// <exception cref="System.ArgumentNullException">
        /// Thrown when a required parameter is null
        /// </exception>
        public <%-project.model.info.title%>(<%-project.model.language.default.requiredConstructorParametersDeclaration%>, System.Net.Http.HttpClient httpClient, bool disposeHttpClient) : this(httpClient, disposeHttpClient)
        {
<%parameters.forEach(function(parameter) {-%>
            if (<%-project.helper.CamelCase(parameter.language.default.name)%> == null)
            {
                throw new System.ArgumentNullException("<%-project.helper.CamelCase(parameter.language.default.name)%>");
            }
<%});-%>
<%parameters.forEach(function(parameter) {-%>
            this.<%-parameter.language.default.name%> = <%-project.helper.CamelCase(parameter.language.default.name)%>;
<%if(parameter.schema.language.csharp.fullname == 'Microsoft.Rest.ServiceClientCredentials') {-%>
            if (this.Credentials != null)
            {
                this.Credentials.InitializeServiceClient(this);
            }
<% }-%>            
<%});-%>
        }
        /// <summary>
        /// Initializes a new instance of the <%-project.model.info.title%> class.
        /// </summary>
<%parameters.filter(p => !project.helper.IsConstantParameter(p)).forEach(function(parameter) {-%>
        /// <param name="<%-project.helper.CamelCase(parameter.language.default.name)%>">
        /// Required. <%=project.helper.wrapComments('        ', '/// ', parameter.language.default.description)%>
        /// </param>
<%});-%>
        /// <param name='rootHandler'>
        /// Optional. The http client handler used to handle http transport.
        /// </param>
        /// <param name='handlers'>
        /// Optional. The delegating handlers to add to the http client pipeline.
        /// </param>
        /// <exception cref="System.ArgumentNullException">
        /// Thrown when a required parameter is null
        /// </exception>
        public <%-project.model.info.title%>(<%-project.model.language.default.requiredConstructorParametersDeclaration%>, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers)
        {
<%parameters.forEach(function(parameter) {-%>
            if (<%-project.helper.CamelCase(parameter.language.default.name)%> == null)
            {
                throw new System.ArgumentNullException("<%-project.helper.CamelCase(parameter.language.default.name)%>");
            }
<%});-%>
<%parameters.forEach(function(parameter) {-%>
            this.<%-parameter.language.default.name%> = <%-project.helper.CamelCase(parameter.language.default.name)%>;
<%if(parameter.schema.language.csharp.fullname == 'Microsoft.Rest.ServiceClientCredentials') {-%>
            if (this.Credentials != null)
            {
                this.Credentials.InitializeServiceClient(this);
            }
<% }-%>            
<%});-%>
        }
<%# ToDo: following true means !IsCustomBaseUri, may need to implement IsCustomBaseUri, low priority -%>
<%if (true) {-%>
        /// <summary>
        /// Initializes a new instance of the <%-project.model.info.title%> class.
        /// </summary>
        /// <param name='baseUri'>
        /// Optional. The base URI of the service.
        /// </param>
<%parameters.filter(p => !project.helper.IsConstantParameter(p)).forEach(function(parameter) {-%>
        /// <param name="<%-project.helper.CamelCase(parameter.language.default.name)%>">
        /// Required. <%=project.helper.wrapComments('        ', '/// ', parameter.language.default.description)%>
        /// </param>
<%});-%>
        /// <param name='handlers'>
        /// Optional. The delegating handlers to add to the http client pipeline.
        /// </param>
        /// <exception cref="System.ArgumentNullException">
        /// Thrown when a required parameter is null
        /// </exception>
        public <%-project.model.info.title%>(System.Uri baseUri, <%-project.model.language.default.requiredConstructorParametersDeclaration%>, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) 
        {
            if (baseUri == null)
            {
                throw new System.ArgumentNullException("baseUri");
            }
<%parameters.forEach(function(parameter) {-%>
            if (<%-project.helper.CamelCase(parameter.language.default.name)%> == null)
            {
                throw new System.ArgumentNullException("<%-project.helper.CamelCase(parameter.language.default.name)%>");
            }
<%});-%>
            this.BaseUri = baseUri;
<%parameters.forEach(function(parameter) {-%>
            this.<%-parameter.language.default.name%> = <%-project.helper.CamelCase(parameter.language.default.name)%>;
<%if(parameter.schema.language.csharp.fullname == 'Microsoft.Rest.ServiceClientCredentials') {-%>
            if (this.Credentials != null)
            {
                this.Credentials.InitializeServiceClient(this);
            }
<% }-%>            
<%});-%>
        }
        /// <summary>
        /// Initializes a new instance of the <%-project.model.info.title%> class.
        /// </summary>
        /// <param name='baseUri'>
        /// Optional. The base URI of the service.
        /// </param>
<%parameters.filter(p => !project.helper.IsConstantParameter(p)).forEach(function(parameter) {-%>
        /// <param name="<%-project.helper.CamelCase(parameter.language.default.name)%>">
        /// Required. <%=project.helper.wrapComments('        ', '/// ', parameter.language.default.description)%>
        /// </param>
<%});-%>
        /// <param name='rootHandler'>
        /// Optional. The http client handler used to handle http transport.
        /// </param>
        /// <param name='handlers'>
        /// Optional. The delegating handlers to add to the http client pipeline.
        /// </param>
        /// <exception cref="System.ArgumentNullException">
        /// Thrown when a required parameter is null
        /// </exception>
        public <%-project.model.info.title%>(System.Uri baseUri, <%-project.model.language.default.requiredConstructorParametersDeclaration%>, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers)
        {
            if (baseUri == null)
            {
                throw new System.ArgumentNullException("baseUri");
            }
<%parameters.forEach(function(parameter) {-%>
            if (<%-project.helper.CamelCase(parameter.language.default.name)%> == null)
            {
                throw new System.ArgumentNullException("<%-project.helper.CamelCase(parameter.language.default.name)%>");
            }
<%});-%>
            this.BaseUri = baseUri;
<%parameters.forEach(function(parameter) {-%>
            this.<%-parameter.language.default.name%> = <%-project.helper.CamelCase(parameter.language.default.name)%>;
<%if(parameter.schema.language.csharp.fullname == 'Microsoft.Rest.ServiceClientCredentials') {-%>
            if (this.Credentials != null)
            {
                this.Credentials.InitializeServiceClient(this);
            }
<% }-%>            
<%});-%>
        }
<%}-%>
<% }-%>
