diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9373222 --- /dev/null +++ b/.gitignore @@ -0,0 +1,107 @@ +# Build Folders (you can keep bin if you'd like, to store dlls and pdbs) +[Bb]in/ +[Oo]bj/ + +# mstest test results +TestResults + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results +[Dd]ebug/ +[Rr]elease/ +x64/ +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.log +*.txt +*.vspscc +*.vssscc +.builds + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper* + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish + +# Publish Web Output +*.Publish.xml + +# NuGet Packages Directory +packages + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +[Bb]in +[Oo]bj +sql +*.Cache +ClientBin +[Ss]tyle[Cc]op.* +~$* +*.dbmdl +Generated_Code #added for RIA/Silverlight projects + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML diff --git a/ab.exe b/ab.exe new file mode 100644 index 0000000..648bd3c Binary files /dev/null and b/ab.exe differ diff --git a/lib/DotNetOpenAuth.dll b/lib/DotNetOpenAuth.dll new file mode 100644 index 0000000..8040b4a Binary files /dev/null and b/lib/DotNetOpenAuth.dll differ diff --git a/lib/DotNetOpenAuth.xml b/lib/DotNetOpenAuth.xml new file mode 100644 index 0000000..5974b5e --- /dev/null +++ b/lib/DotNetOpenAuth.xml @@ -0,0 +1,36991 @@ + + + + DotNetOpenAuth + + + + + A design-time helper to allow Intellisense to aid typing + ClaimType URIs. + + The strong-type of the property this class is affixed to. + + + + A cache of the standard claim types known to the application. + + + + + Initializes a new instance of the ConverterBase class. + + + + + Returns whether this object supports a standard set of values that can be picked from a list, using the specified context. + + An that provides a format context. + + true if should be called to find a common set of values the object supports; otherwise, false. + + + + + Returns a collection of standard values for the data type this type converter is designed for when provided with a format context. + + An that provides a format context that can be used to extract additional information about the environment from which this converter is invoked. This parameter or properties of this parameter can be null. + + A that holds a standard set of valid values, or null if the data type does not support a standard set of values. + + + + + Returns whether the collection of standard values returned from is an exclusive list of possible values, using the specified context. + + An that provides a format context. + + true if the returned from is an exhaustive list of possible values; false if other values are possible. + + + + + Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. + + An that provides a format context. + A that represents the type you want to convert from. + + true if this converter can perform the conversion; otherwise, false. + + + + + Returns whether this converter can convert the object to the specified type, using the specified context. + + An that provides a format context. + A that represents the type you want to convert to. + + true if this converter can perform the conversion; otherwise, false. + + + + + Converts the given object to the type of this converter, using the specified context and culture information. + + An that provides a format context. + The to use as the current culture. + The to convert. + + An that represents the converted value. + + + The conversion cannot be performed. + + + + + Converts the given value object to the specified type, using the specified context and culture information. + + An that provides a format context. + A . If null is passed, the current culture is assumed. + The to convert. + The to convert the parameter to. + + An that represents the converted value. + + + The parameter is null. + + + The conversion cannot be performed. + + + + + Creates an instance, protecting against the LinkDemand. + + The member info. + The arguments. + A , or null if sufficient permissions are unavailable. + + + + Gets the standard values to suggest with Intellisense in the designer. + + A collection of the standard values. + + + + Converts a value from its string representation to its strongly-typed object. + + The value. + The strongly-typed object. + + + + Creates the reflection instructions for recreating an instance later. + + The value to recreate later. + The description of how to recreate an instance. + + + + Converts the strongly-typed value to a string. + + The value to convert. + The string representation of the object. + + + + Creates an instance, protecting against the LinkDemand. + + The member info. + The arguments. + A . + + + + Gets a cache of the standard values to suggest. + + + + + A type that generates suggested strings for Intellisense, + but doesn't actually convert between strings and other types. + + + + + Initializes a new instance of the class. + + + + + Gets the values of public static fields and properties on a given type. + + The type to reflect over. + A collection of values. + + + + Converts a value from its string representation to its strongly-typed object. + + The value. + The strongly-typed object. + + + + Creates the reflection instructions for recreating an instance later. + + The value to recreate later. + + The description of how to recreate an instance. + + + + + Converts the strongly-typed value to a string. + + The value to convert. + The string representation of the object. + + + + Gets the standard values to suggest with Intellisense in the designer. + + A collection of the standard values. + + + + Gets the type to reflect over for the well known values. + + + + + A design-time helper to give a Uri property an auto-complete functionality + listing the URIs in the class. + + + + + Initializes a new instance of the class. + + + + + Gets the type to reflect over to extract the well known values. + + + + + Contract class for the class. + + + + + Gets the type to reflect over for the well known values. + + + + + Error reporting methods specific to InfoCard validation. + + + + + Checks a condition and throws an + if it evaluates to false. + + The condition to check. + The message to include in the exception, if created. + The formatting arguments. + Thrown if evaluates to false. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to The token is invalid: The audience restrictions does not match the Relying Party.. + + + + + Looks up a localized string similar to The list of claims requested for inclusion in the InfoCard must be non-empty.. + + + + + Looks up a localized string similar to Failed to find the encryptionAlgorithm.. + + + + + Looks up a localized string similar to This operation requires the PPID claim to be included in the InfoCard token.. + + + + + Looks up a localized string similar to The PrivacyVersion property must be set whenever the PrivacyUrl property is set.. + + + + + Looks up a localized string similar to Click here to select your Information Card.. + + + + + An exception class for Information Cards. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a specified + error message. + + The error message. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is + the cause of this exception. + + The error message that explains the reason for the exception. + + The exception that is the cause of the current exception, or a null reference + (Nothing in Visual Basic) if no inner exception is specified. + + + + + Initializes a new instance of the class + with serialized data. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + The parameter is null. + + + The class name is null or is zero (0). + + + + + The decrypted token that was submitted as an Information Card. + + + + + Backing field for the property. + + + + + Backing field for the property. + + + + + Initializes a new instance of the class. + + Xml token, which may be encrypted. + The audience. May be null to avoid audience checking. + The decryptor to use to decrypt the token, if necessary.. + Thrown for any problem decoding or decrypting the token. + + + + Deserializes an XML document into a token. + + The token XML. + The deserialized token. + + + + Deserializes an XML document into a token. + + The token XML. + The URI that this token must have been crafted to be sent to. Use null to accept any intended audience. + The deserialized token. + + + + Deserializes an XML document into a token. + + The token XML. + Any X.509 certificates that may be used to decrypt the token, if necessary. + The deserialized token. + + + + Deserializes an XML document into a token. + + The token XML. + The URI that this token must have been crafted to be sent to. Use null to accept any intended audience. + Any X.509 certificates that may be used to decrypt the token, if necessary. + The deserialized token. + + + + Determines whether the specified token XML is encrypted. + + The token XML. + + true if the specified token XML is encrypted; otherwise, false. + + + + + Determines whether the specified token XML is encrypted. + + The token XML. + + true if the specified token XML is encrypted; otherwise, false. + + + + + Flattens the claims into a dictionary + + A dictionary of claim type URIs and claim values. + + + + Gets the AuthorizationContext behind this token. + + + + + Gets the the decrypted token XML. + + + + + Gets the UniqueID of this token, usable as a stable username that the user + has already verified belongs to him/her. + + + By default, this uses the PPID and the Issuer's Public Key and hashes them + together to generate a UniqueID. + + + + + Gets the hash of the card issuer's public key. + + + + + Gets the Site Specific ID that the user sees in the Identity Selector. + + + + + Gets the claims in all the claimsets as a dictionary of strings. + + + + + Tools for reading InfoCard tokens. + + + + + Token Authentication. Translates the decrypted data into a AuthContext. + + The token XML reader. + The audience that the token must be scoped for. + Use null to indicate any audience is acceptable. + + The authorization context carried by the token. + + + + + Translates claims to strings + + Claim to translate to a string + The string representation of a claim's value. + + + + Generates a UniqueID based off the Issuer's key + + the Authorization Context + the hash of the internal key of the issuer + + + + Generates a UniqueID based off the Issuer's key and the PPID. + + The Authorization Context + A unique ID for this user at this web site. + + + + Generates the Site Specific ID to match the one in the Identity Selector. + + The ID displayed by the Identity Selector. + The personal private identifier. + A string containing the XXX-XXXX-XXX cosmetic value. + + + + Gets the Unique RSA Claim from the SAML token. + + the claimset which contains the claim + a RSA claim + + + + Does the actual calculation of a combined ID from a value and an RSA key. + + The key of the issuer of the token + the claim value to hash with. + A base64 representation of the combined ID. + + + + Gets the maximum amount the token can be out of sync with time. + + + + + A utility class for decrypting InfoCard tokens. + + + + + A set of strings used in parsing the XML token. + + + + + Backing field for the property. + + + + + Initializes a new instance of the class. + + + + + Adds a certificate to the list of certificates to decrypt with. + + The x509 cert to use for decryption + + + + Adds a certificate to the list of certificates to decrypt with. + + store name of the certificate + store location + thumbprint of the cert to use + + + + Adds a store of certificates to the list of certificates to decrypt with. + + store name of the certificates + store location + + + + Decrpyts a security token from an XML EncryptedData + + The encrypted token XML reader. + A byte array of the contents of the encrypted token + + + + Adds a store of certificates to the list of certificates to decrypt with. + + store name of the certificates + store location + A filter to on the certificates to add. + + + + Gets a list of possible decryption certificates, from the store/location set + + + Defaults to localmachine:my (same place SSL certs are) + + + + + Common InfoCard issuers. + + + + + The Issuer URI to use for self-issued cards. + + + + + Prevents a default instance of the class from being created. + + + + + A design-time helper to give a Uri property an auto-complete functionality + listing the URIs in the class. + + + + + Initializes a new instance of the class. + + + + + Gets the type to reflect over to extract the well known values. + + + + + A design-time helper to allow controls to have properties + of type . + + + + + Initializes a new instance of the UriConverter class. + + + + + Returns whether the given value object is valid for this type and for the specified context. + + An that provides a format context. + The to test for validity. + + true if the specified value is valid for this object; otherwise, false. + + + + + Converts a value from its string representation to its strongly-typed object. + + The value. + The strongly-typed object. + + + + Creates the reflection instructions for recreating an instance later. + + The value to recreate later. + + The description of how to recreate an instance. + + + + + Converts the strongly-typed value to a string. + + The value to convert. + The string representation of the object. + + + + Gets the standard claim type URIs known to the library. + + An array of the standard claim types. + + + + Gets the type to reflect over to extract the well known values. + + + + + Description of a claim that is requested or required in a submitted Information Card. + + + + + Initializes a new instance of the class. + + + + + Returns a that represents the current . + + + A that represents the current . + + + + + Gets or sets the URI of a requested claim. + + + For a list of well-known claim type URIs, see the class. + + + + + Gets or sets a value indicating whether this claim is optional. + + + true if this instance is optional; otherwise, false. + + + + + A set of sizes for which standard InfoCard icons are available. + + + + + A standard InfoCard icon with size 14x10 + + + + + A standard InfoCard icon with size 23x16 + + + + + A standard InfoCard icon with size 34x24 + + + + + A standard InfoCard icon with size 41x29 + + + + + A standard InfoCard icon with size 50x35 + + + + + A standard InfoCard icon with size 60x42 + + + + + A standard InfoCard icon with size 71x50 + + + + + A standard InfoCard icon with size 92x64 + + + + + A standard InfoCard icon with size 114x80 + + + + + A standard InfoCard icon with size 164x108 + + + + + A standard InfoCard icon with size 214x50 + + + + + A standard InfoCard icon with size 300x210 + + + + + A standard InfoCard icon with size 365x256 + + + + + Assists in selecting the InfoCard image to display in the user agent. + + + + + The default size of the InfoCard icon to use. + + + + + The format to use when generating the image manifest resource stream name. + + + + + Gets the name of the image manifest resource stream for an InfoCard image of the given size. + + The size of the desired InfoCard image. + The manifest resource stream name. + + + + Arguments for the event. + + + + + Initializes a new instance of the class. + + The raw token XML, prior to any decryption. + + + + Adds a security token that may be used to decrypt the incoming token. + + The security token. + + + + Adds an X.509 certificate with a private key that may be used to decrypt the incoming token. + + The certificate. + + + + Gets a value indicating whether the token is encrypted. + + + true if the token is encrypted; otherwise, false. + + + + + Gets the raw token XML, prior to any decryption. + + + + + Gets or sets a value indicating whether processing + this token should be canceled. + + + true if cancel; otherwise, false. + + If set the true, the + event will never be fired. + + + + + Gets a list where security tokens such as X.509 certificates may be + added to be used for token decryption. + + + + + Arguments for the event. + + + + + Initializes a new instance of the class. + + The token XML. + The exception. + + + + Gets the raw token XML. + + + + + Gets the exception that was generated while processing the token. + + + + + The style to use for NOT displaying a hidden region. + + + + + A hidden region should be invisible while still occupying space in the page layout. + + + + + A hidden region should collapse so that it does not occupy space in the page layout. + + + + + An Information Card selector ASP.NET control. + + + + + The resource name for getting at the SupportingScript.js embedded manifest stream. + + + + + Default value for the property. + + + + + Default value for the property. + + + + + Default value for the property. + + + + + Default value for the property. + + + + + Default value for the property. + + + + + Default value for the property. + + + + + Default value for the property. + + + + + Default value for the property. + + + + + The default value for the property. + + + + + The viewstate key for storing the property. + + + + + The viewstate key for storing the property. + + + + + The viewstate key for storing the property. + + + + + The viewstate key for storing the property. + + + + + The viewstate key for storing the property. + + + + + The viewstate key for storing the property. + + + + + The viewstate key for storing the property. + + + + + The viewstate key for storing the property. + + + + + The viewstate key for storing the property. + + + + + The viewstate key for storing the property. + + + + + The viewstate key for storing the property. + + + + + The "Behavior" property category. + + + + + The "Appearance" property category. + + + + + The "InfoCard" property category. + + + + + The panel containing the controls to display if InfoCard is supported in the user agent. + + + + + The panel containing the controls to display if InfoCard is NOT supported in the user agent. + + + + + Recalls whether the property has been set yet, + so its default can be set as soon as possible without overwriting + an intentional value. + + + + + Initializes a new instance of the class. + + + + + When implemented by a class, enables a server control to process an event raised when a form is posted to the server. + + A that represents an optional event argument to be passed to the event handler. + + + + Fires the event. + + The token XML, prior to any processing. + The event arguments sent to the event handlers. + + + + Fires the event. + + The token, if it was decrypted. + + + + Fires the event. + + The unprocessed token. + The exception generated while processing the token. + + + + Raises the event. + + An object that contains the event data. + + + + Called by the ASP.NET page framework to notify server controls that use composition-based implementation to create any child controls they contain in preparation for posting back or rendering. + + + + + Raises the event. + + An object that contains the event data. + + + + Creates a control that renders to <Param Name="{0}" Value="{1}" /> + + The parameter name. + The parameter value. + The control that renders to the Param tag. + + + + Creates the panel whose contents are displayed to the user + on a user agent that has an Information Card selector. + + The Panel control + + + + Gets the InfoCard selector activation script. + + Whether a postback should always immediately follow the selector, even if is false. + The javascript to inject into the surrounding context. + + + + Creates the panel whose contents are displayed to the user + on a user agent that does not have an Information Card selector. + + The Panel control. + + + + Adds the javascript that adds the info card selector <object> HTML tag to the page. + + + + + Creates the info card clickable image. + + An Image object. + + + + Compiles lists of requested/required claims that should accompany + any submitted Information Card. + + A space-delimited list of claim type URIs for claims that must be included in a submitted Information Card. + A space-delimited list of claim type URIs for claims that may optionally be included in a submitted Information Card. + + + + Adds Javascript snippets to the page to help the Information Card selector do its work, + or to downgrade gracefully if the user agent lacks an Information Card selector. + + + + + Gets the set of claims that are requested from the Information Card. + + + + + Gets or sets the issuer URI. + + + + + Gets or sets the issuer policy URI. + + + + + Gets or sets the URL to this site's privacy policy. + + + + + Gets or sets the version of the privacy policy file. + + + + + Gets or sets the URI that must be found for the SAML token's intended audience + in order for the token to be processed. + + Typically the URI of the page hosting the control, or null to disable audience verification. + + Disabling audience verification introduces a security risk + because tokens can be redirected to allow access to unintended resources. + + + + + Gets or sets a value indicating whether a postback will automatically + be invoked when the user selects an Information Card. + + + + + Gets or sets the size of the standard InfoCard image to display. + + The default size is 114x80. + + + + Gets or sets the template to display when the user agent lacks + an Information Card selector. + + + + + Gets or sets a value indicating whether a hidden region (either + the unsupported or supported InfoCard HTML) + collapses or merely becomes invisible when it is not to be displayed. + + + + + Gets or sets a value indicating whether the identity selector will be triggered at page load. + + + + + Gets the name of the hidden field that is used to transport the token back to the server. + + + + + Gets the id of the OBJECT tag that creates the InfoCard Selector. + + + + + Gets the XML token, which will be encrypted if it was received over SSL. + + + + + Gets or sets the type of token the page is prepared to receive. + + + + + Occurs when an InfoCard has been submitted but not decoded yet. + + + + + Occurs when an InfoCard has been submitted and decoded. + + + + + Occurs when an InfoCard token is submitted but an error occurs in processing. + + + + + Arguments for the event. + + + + + Initializes a new instance of the class. + + The token. + + + + Gets the processed token. + + + + + Represents an OAuth consumer that is impersonating a known user on the system. + + + + + Initializes a new instance of the class. + + The username. + + + + Gets the type of authentication used. + + The constant "OAuth" + + The type of authentication used to identify the user. + + + + + Gets a value indicating whether the user has been authenticated. + + The value true + true if the user was authenticated; otherwise, false. + + + + + Gets the name of the user who authorized the OAuth token the consumer is using for authorization. + + + The name of the user on whose behalf the code is running. + + + + + Represents an OAuth consumer that is impersonating a known user on the system. + + + + + The roles this user belongs to. + + + + + Initializes a new instance of the class. + + The username. + The roles this user belongs to. + + + + Initializes a new instance of the class. + + The identity. + The roles this user belongs to. + + + + Determines whether the current principal belongs to the specified role. + + The name of the role for which to check membership. + + true if the current principal is a member of the specified role; otherwise, false. + + + The role membership check uses . + + + + + Creates a new instance of GenericPrincipal based on this OAuthPrincipal. + + A new instance of GenericPrincipal with a GenericIdentity, having the same username and roles as this OAuthPrincipal and OAuthIdentity + + + + Gets or sets the access token used to create this principal. + + A non-empty string. + + + + Gets the roles that this principal has as a ReadOnlyCollection. + + + + + Gets the identity of the current principal. + + + + + The object associated with the current principal. + + + + + A token manager for use by a web site in its role as a consumer of + an individual ServiceProvider. + + + + + Gets the consumer key. + + The consumer key. + + + + Gets the consumer secret. + + The consumer secret. + + + + The messaging channel for OAuth 1.0(a) Consumers. + + + + + Initializes a new instance of the class. + + The binding element to use for signing. + The web application store to use for nonces. + The token manager instance to use. + The security settings. + The message factory. + + + + Gets the consumer secret for a given consumer key. + + The consumer key. + The consumer secret. + + + + Initializes the binding elements for the OAuth channel. + + The signing binding element. + The nonce store. + + An array of binding elements used to initialize the channel. + + + + + An OAuth-protocol specific implementation of the + interface. + + + + + Initializes a new instance of the class. + + + + + Analyzes an incoming request message payload to discover what kind of + message is embedded in it and returns the type, or null if no match is found. + + The intended or actual recipient of the request message. + The name/value pairs that make up the message payload. + + A newly instantiated -derived object that this message can + deserialize to. Null if the request isn't recognized as a valid protocol message. + + + The request messages are: + UserAuthorizationResponse + + + + + Analyzes an incoming request message payload to discover what kind of + message is embedded in it and returns the type, or null if no match is found. + + + The message that was sent as a request that resulted in the response. + Null on a Consumer site that is receiving an indirect message from the Service Provider. + + The name/value pairs that make up the message payload. + + A newly instantiated -derived object that this message can + deserialize to. Null if the request isn't recognized as a valid protocol message. + + + The response messages are: + UnauthorizedTokenResponse + AuthorizedTokenResponse + + + + + A binding element that signs outgoing messages and verifies the signature on incoming messages. + + + + + Initializes a new instance of the class. + + The certificate used to sign outgoing messages. + + + + Determines whether the signature on some message is valid. + + The message to check the signature on. + + true if the signature on the message is valid; otherwise, false. + + + + + Calculates a signature for a given message. + + The message to sign. + The signature for the message. + + This method signs the message per OAuth 1.0 section 9.3. + + + + + Creates a new object that is a copy of the current instance. + + + A new object that is a copy of this instance. + + + + + Gets or sets the certificate used to sign outgoing messages. Used only by Consumers. + + + + + Base class for and types. + + + + + Initializes a new instance of the class. + + The endpoints and behavior of the Service Provider. + The host's method of storing and recalling tokens and secrets. + + + + Obtains an access token for a new account at the Service Provider via 2-legged OAuth. + + Any applicable parameters to include in the query string of the token request. + The access token. + + The token secret is stored in the . + + + + + Creates an HTTP handler that automatically applies an OAuth 1 access token and signature to outbound HTTP requests. + The result of this method can be supplied to the constructor. + + The access token to use to authorize each outbound HTTP message. + The inner HTTP handler to use. The default uses as the inner handler. + An instance. + + + + Creates a web request prepared with OAuth authorization + that may be further tailored by adding parameters by the caller. + + The URL and method on the Service Provider to send the request to. + The access token that permits access to the protected resource. + The initialized WebRequest object. + + + + Creates a web request prepared with OAuth authorization + that may be further tailored by adding parameters by the caller. + + The URL and method on the Service Provider to send the request to. + The access token that permits access to the protected resource. + Extra parameters to include in the message. Must not be null, but may be empty. + The initialized WebRequest object. + + + + Prepares an authorized request that carries an HTTP multi-part POST, allowing for binary data. + + The URL and method on the Service Provider to send the request to. + The access token that permits access to the protected resource. + Extra parameters to include in the message. Must not be null, but may be empty. + The initialized WebRequest object. + + + + Prepares an HTTP request that has OAuth authorization already attached to it. + + The OAuth authorization message to attach to the HTTP request. + + The HttpWebRequest that can be used to send the HTTP request to the remote service provider. + + + If property on the + has the + flag set and + is set to an HTTP method + that includes an entity body, the request stream is automatically sent + if and only if the dictionary is non-empty. + + + + + Creates a web request prepared with OAuth authorization + that may be further tailored by adding parameters by the caller. + + The URL and method on the Service Provider to send the request to. + The access token that permits access to the protected resource. + The initialized WebRequest object. + Thrown if the request fails for any reason after it is sent to the Service Provider. + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Creates a web request prepared with OAuth authorization + that may be further tailored by adding parameters by the caller. + + The URL and method on the Service Provider to send the request to. + The access token that permits access to the protected resource. + The initialized WebRequest object. + + + + Prepares an OAuth message that begins an authorization request that will + redirect the user to the Service Provider to provide that authorization. + + + An optional Consumer URL that the Service Provider should redirect the + User Agent to upon successful authorization. + + Extra parameters to add to the request token message. Optional. + Extra parameters to add to the redirect to Service Provider message. Optional. + The request token that must be exchanged for an access token after the user has provided authorization. + The pending user agent redirect based message to be sent as an HttpResponse. + + + + Exchanges a given request token for access token. + + The request token that the user has authorized. + The verifier code. + + The access token assigned by the Service Provider. + + + + + Releases unmanaged and - optionally - managed resources + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Gets the Consumer Key used to communicate with the Service Provider. + + + + + Gets the Service Provider that will be accessed. + + + + + Gets the persistence store for tokens and secrets. + + + + + Gets the channel to use for sending/receiving messages. + + + + + Gets the security settings for this consumer. + + + + + Gets or sets the channel to use for sending/receiving messages. + + + + + Used by a desktop application to use OAuth to access the Service Provider on behalf of the User. + + + The methods on this class are thread-safe. Provided the properties are set and not changed + afterward, a single instance of this class may be used by an entire desktop application safely. + + + + + Initializes a new instance of the class. + + The endpoints and behavior of the Service Provider. + The host's method of storing and recalling tokens and secrets. + + + + Begins an OAuth authorization request. + + Extra parameters to add to the request token message. Optional. + Extra parameters to add to the redirect to Service Provider message. Optional. + The request token that must be exchanged for an access token after the user has provided authorization. + The URL to open a browser window to allow the user to provide authorization. + + + + Exchanges a given request token for access token. + + The request token that the user has authorized. + The access token assigned by the Service Provider. + + + + Exchanges a given request token for access token. + + The request token that the user has authorized. + The verifier code typed in by the user. Must not be Null for OAuth 1.0a service providers and later. + + The access token assigned by the Service Provider. + + + + + A base class for delegating s that sign + outgoing HTTP requests per the OAuth 1.0 "3.4 Signature" in RFC 5849. + + + This implements http://tools.ietf.org/html/rfc5849#section-3.4 + + + + + The locations that oauth parameters may be added to HTTP requests. + + + + + These are the characters that may be chosen from when forming a random nonce. + + + + + The default nonce length. + + + + + The default parameters location. + + + + + The reference date and time for calculating time stamps. + + + + + An array containing simply the amperstand character. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The inner handler which is responsible for processing the HTTP response messages. + + + + Applies OAuth authorization to the specified request. + This method is applied automatically to outbound requests that use this message handler instance. + However this method may be useful for obtaining the OAuth 1.0 signature without actually sending the request. + + The request. + + + + Sends an HTTP request to the inner handler to send to the server as an asynchronous operation. + + The HTTP request message to send to the server. + A cancellation token to cancel operation. + + Returns . The task object representing the asynchronous operation. + + + + + Calculates the signature for the specified buffer. + + The payload to calculate the signature for. + The signature. + + + + Gets the OAuth 1.0 signature to apply to the specified request. + + The outbound HTTP request. + The oauth parameters. + + The value for the "oauth_signature" parameter. + + + + + Gets the "ConsumerSecret&AccessTokenSecret" string, allowing either property to be empty or null. + + The concatenated string. + + This is useful in the PLAINTEXT and HMAC-SHA1 signature algorithms. + + + + + Escapes a value for transport in a URI, per RFC 3986. + + The value to escape. Null and empty strings are OK. + The escaped value. Never null. + + + + Returns the OAuth 1.0 timestamp for the current time. + + The date time. + A string representation of the number of seconds since "the epoch". + + + + Constructs the "Base String URI" as described in http://tools.ietf.org/html/rfc5849#section-3.4.1.2 + + The request URI. + + The string to include in the signature base string. + + + + + Constructs the "Signature Base String" as described in http://tools.ietf.org/html/rfc5849#section-3.4.1 + + The HTTP request message. + The oauth parameters. + + The signature base string. + + + + + Generates a string of random characters for use as a nonce. + + The nonce string. + + + + Gets the "oauth_" prefixed parameters that should be added to an outbound request. + + A collection of name=value pairs. + + + + Gets a normalized string of the query string parameters included in the request and the additional OAuth parameters. + + The HTTP request. + The oauth parameters that will be added to the request. + The normalized string of parameters to included in the signature base string. + + + + Gets or sets the location to add OAuth parameters to outbound HTTP requests. + + + + + Gets or sets the consumer key. + + + The consumer key. + + + + + Gets or sets the consumer secret. + + + The consumer secret. + + + + + Gets or sets the access token. + + + The access token. + + + + + Gets or sets the access token secret. + + + The access token secret. + + + + + Gets or sets the length of the nonce. + + + The length of the nonce. + + + + + Gets the signature method to include in the oauth_signature_method parameter. + + + The signature method. + + + + + A delegating HTTP handler that signs outgoing HTTP requests + with an HMAC-SHA1 signature. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The inner handler which is responsible for processing the HTTP response messages. + + + + Calculates the signature for the specified buffer. + + The payload to calculate the signature for. + + The signature. + + + + + Gets the signature method to include in the oauth_signature_method parameter. + + + The signature method. + + + + + A delegating HTTP handler that signs outgoing HTTP requests + with the PLAINTEXT signature. + + + + + Calculates the signature for the specified buffer. + + The payload to calculate the signature for. + + The signature. + + Always thrown. + + + + Gets the OAuth 1.0 signature to apply to the specified request. + + The outbound HTTP request. + The oauth parameters. + + The value for the "oauth_signature" parameter. + + + + + Gets the signature method to include in the oauth_signature_method parameter. + + + The signature method. + + + + + A delegating HTTP handler that signs outgoing HTTP requests + with an RSA-SHA1 signature. + + + + + Calculates the signature for the specified buffer. + + The payload to calculate the signature for. + + The signature. + + + + + Gets or sets the certificate used to sign outgoing messages. Used only by Consumers. + + + + + Gets the signature method to include in the oauth_signature_method parameter. + + + The signature method. + + + + + A website or application that uses OAuth to access the Service Provider on behalf of the User. + + + The methods on this class are thread-safe. Provided the properties are set and not changed + afterward, a single instance of this class may be used by an entire web application safely. + + + + + Initializes a new instance of the class. + + The endpoints and behavior of the Service Provider. + The host's method of storing and recalling tokens and secrets. + + + + Begins an OAuth authorization request and redirects the user to the Service Provider + to provide that authorization. Upon successful authorization, the user is redirected + back to the current page. + + The pending user agent redirect based message to be sent as an HttpResponse. + + Requires HttpContext.Current. + + + + + Prepares an OAuth message that begins an authorization request that will + redirect the user to the Service Provider to provide that authorization. + + + An optional Consumer URL that the Service Provider should redirect the + User Agent to upon successful authorization. + + Extra parameters to add to the request token message. Optional. + Extra parameters to add to the redirect to Service Provider message. Optional. + The pending user agent redirect based message to be sent as an HttpResponse. + + + + Processes an incoming authorization-granted message from an SP and obtains an access token. + + The access token, or null if no incoming authorization message was recognized. + + Requires HttpContext.Current. + + + + + Processes an incoming authorization-granted message from an SP and obtains an access token. + + The incoming HTTP request. + The access token, or null if no incoming authorization message was recognized. + + + + Represents the <oauth/consumer> element in the host's .config file. + + + + + Gets the name of the security sub-element. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the security settings. + + + + + Security settings that are applicable to consumers. + + + + + Initializes a new instance of the class. + + + + + Initializes a programmatically manipulatable bag of these security settings with the settings from the config file. + + The newly created security settings object. + + + + Represents the <oauth> element in the host's .config file. + + + + + The name of the oauth section. + + + + + The name of the <consumer> sub-element. + + + + + The name of the <serviceProvider> sub-element. + + + + + Initializes a new instance of the class. + + + + + Gets the configuration section from the .config file. + + + + + Gets or sets the configuration specific for Consumers. + + + + + Gets or sets the configuration specific for Service Providers. + + + + + Represents the <oauth/serviceProvider> element in the host's .config file. + + + + + The name of the custom store sub-element. + + + + + Gets the name of the security sub-element. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the type to use for storing application state. + + + + + Gets or sets the security settings. + + + + + Security settings that are applicable to service providers. + + + + + Gets the name of the @minimumRequiredOAuthVersion attribute. + + + + + Gets the name of the @maxAuthorizationTime attribute. + + + + + Initializes a new instance of the class. + + + + + Initializes a programmatically manipulatable bag of these security settings with the settings from the config file. + + The newly created security settings object. + + + + Gets or sets the minimum OAuth version a Consumer is required to support in order for this library to interoperate with it. + + + Although the earliest versions of OAuth are supported, for security reasons it may be desirable to require the + remote party to support a later version of OAuth. + + + + + Gets or sets the maximum time a user can take to complete authorization. + + + This time limit serves as a security mitigation against brute force attacks to + compromise (unauthorized or authorized) request tokens. + Longer time limits is more friendly to slow users or consumers, while shorter + time limits provide better security. + + + + + An interface that must be implemented by message transforms/validators in order + to be included in the channel stack. + + + + + Clones this instance. + + The cloned instance. + + + + Gets or sets the delegate that will initialize the non-serialized properties necessary on a + signable message so that its signature can be correctly calculated or verified. + + + + + Contract class for the interface. + + + + + Utility methods specific to OAuth feature reporting. + + + + + Records the feature and dependency use. + + The consumer or service provider. + The service. + The token manager. + The nonce store. + + + + An interface OAuth hosts must implement for persistent storage + and recall of tokens and secrets for an individual OAuth consumer + or service provider. + + + + + Gets the Token Secret given a request or access token. + + The request or access token. + The secret associated with the given token. + Thrown if the secret cannot be found for the given token. + + + + Stores a newly generated unauthorized request token, secret, and optional + application-specific parameters for later recall. + + The request message that resulted in the generation of a new unauthorized request token. + The response message that includes the unauthorized request token. + Thrown if the consumer key is not registered, or a required parameter was not found in the parameters collection. + + Request tokens stored by this method SHOULD NOT associate any user account with this token. + It usually opens up security holes in your application to do so. Instead, you associate a user + account with access tokens (not request tokens) in the + method. + + + + + Deletes a request token and its associated secret and stores a new access token and secret. + + The Consumer that is exchanging its request token for an access token. + The Consumer's request token that should be deleted/expired. + The new access token that is being issued to the Consumer. + The secret associated with the newly issued access token. + + + Any scope of granted privileges associated with the request token from the + original call to should be carried over + to the new Access Token. + + + To associate a user account with the new access token, + HttpContext.Current.User may be + useful in an ASP.NET web application within the implementation of this method. + Alternatively you may store the access token here without associating with a user account, + and wait until WebConsumer.ProcessUserAuthorization or + DesktopConsumer.ProcessUserAuthorization return the access + token to associate the access token with a user account at that point. + + + + + + Classifies a token as a request token or an access token. + + The token to classify. + Request or Access token, or invalid if the token is not recognized. + + + + The code contract class for the interface. + + + + + Prevents a default instance of the class from being created. + + + + + Sets the HTTP Method property on a signed message before the signing module gets to it. + + + + + Prepares a message for sending based on the rules of this channel binding element. + + The message to prepare for sending. + + True if the applied to this binding element + and the operation was successful. False otherwise. + + + + + Performs any transformation on an incoming message that may be necessary and/or + validates an incoming message based on the rules of this channel binding element. + + The incoming message to process. + + True if the applied to this binding element + and the operation was successful. False if the operation did not apply to this message. + + + Thrown when the binding element rules indicate that this message is invalid and should + NOT be processed. + + + + + Gets the protection offered (if any) by this binding element. + + + + + Gets or sets the channel that this binding element belongs to. + + + + + A binding element that signs outgoing messages and verifies the signature on incoming messages. + + + + + The signature method this binding element uses. + + + + + Initializes a new instance of the class. + + The OAuth signature method that the binding element uses. + + + + Signs the outgoing message. + + The message to sign. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + + + Verifies the signature on an incoming message. + + The message whose signature should be verified. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + Thrown if the signature is invalid. + + + + Constructs the OAuth Signature Base String and returns the result. + + The message. + The message to derive the signature base string from. + The signature base string. + + This method implements OAuth 1.0 section 9.1. + + + + + Calculates a signature for a given message. + + The message to sign. + The signature for the message. + + This method signs the message per OAuth 1.0 section 9.2. + + + + + Gets the "ConsumerSecret&TokenSecret" string, allowing either property to be empty or null. + + The message to extract the secrets from. + The concatenated string. + + + + Determines whether the signature on some message is valid. + + The message to check the signature on. + + true if the signature on the message is valid; otherwise, false. + + + + + Clones this instance. + + A new instance of the binding element. + + Implementations of this method need not clone the SignatureVerificationCallback member, as the + class does this. + + + + + Calculates a signature for a given message. + + The message to sign. + The signature for the message. + + + + Checks whether this binding element applies to this message. + + The message that needs to be signed. + True if this binding element can be used to sign the message. False otherwise. + + + + Sorts parameters according to OAuth signature base string rules. + + The first parameter to compare. + The second parameter to compare. + Negative, zero or positive. + + + + Gets the message protection provided by this binding element. + + + + + Gets or sets the channel that this binding element belongs to. + + + + + Gets or sets the delegate that will initialize the non-serialized properties necessary on a signed + message so that its signature can be correctly calculated for verification. + + + + + A binding element that signs outgoing messages and verifies the signature on incoming messages. + + + + + Initializes a new instance of the class. + + + + + Calculates a signature for a given message. + + The message to sign. + The signature for the message. + + This method signs the message according to OAuth 1.0 section 9.4.1. + + + + + Checks whether this binding element applies to this message. + + The message that needs to be signed. + True if this binding element can be used to sign the message. False otherwise. + + + + Clones this instance. + + A new instance of the binding element. + + + + A binding element that signs outgoing messages and verifies the signature on incoming messages. + + + + + Initializes a new instance of the class + + + + + Calculates a signature for a given message. + + The message to sign. + The signature for the message. + + This method signs the message per OAuth 1.0 section 9.2. + + + + + Clones this instance. + + A new instance of the binding element. + + + + Code Contract for the class. + + + + + Prevents a default instance of the SigningBindingElementBaseContract class from being created. + + + + + Clones this instance. + + A new instance of the binding element. + + Implementations of this method need not clone the SignatureVerificationCallback member, as the + class does this. + + + + + Calculates a signature for a given message. + + The message to sign. + The signature for the message. + + + + A tamper protection applying binding element that can use any of several given + binding elements to apply the protection. + + + + + The various signing binding elements that may be applicable to a message in preferred use order. + + + + + Initializes a new instance of the class. + + + The signing binding elements that may be used for some outgoing message, + in preferred use order. + + + + + Prepares a message for sending based on the rules of this channel binding element. + + The message to prepare for sending. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + + + Performs any transformation on an incoming message that may be necessary and/or + validates an incoming message based on the rules of this channel binding element. + + The incoming message to process. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + + + Gets or sets the delegate that will initialize the non-serialized properties necessary on a signed + message so that its signature can be correctly calculated for verification. + May be null for Consumers (who never have to verify signatures). + + + + + Gets the protection offered (if any) by this binding element. + + + + + Gets or sets the channel that this binding element belongs to. + + + + + The two types of tokens that exist in the OAuth protocol. + + + + + A token that is freely issued to any known Consumer. + It does not grant any authorization to access protected resources, + but is used as a step in obtaining that access. + + + + + A token only obtained after the owner of some protected resource(s) + has approved a Consumer's access to said resource(s). + + + + + An unrecognized, expired or invalid token. + + + + + An URI encoder that translates null references as "oob" + instead of an empty/missing argument. + + + + + The string constant "oob", used to indicate an out-of-band configuration. + + + + + Initializes a new instance of the class. + + + + + Encodes the specified value. + + The value. Guaranteed to never be null. + + The in string form, ready for message transport. + + + + + Decodes the specified value. + + The string value carried by the transport. Guaranteed to never be null, although it may be empty. + + The deserialized form of the given string. + + Thrown when the string value given cannot be decoded into the required object type. + + + + Gets the string representation to include in a serialized message + when the message part has a null value. + + + + + + + Security settings that may be applicable to both consumers and service providers. + + + + + Initializes a new instance of the class. + + + + + Security settings that are applicable to consumers. + + + + + Initializes a new instance of the class. + + + + + An interface implemented by all OAuth messages that have a request or access token property. + + + + + Gets or sets the Request or Access Token. + + + + + An interface implemented by all OAuth messages that have a request or access token and secret properties. + + + + + Gets or sets the Request or Access Token secret. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Cannot send access token to Consumer for request token '{0}' before it has been authorized.. + + + + + Looks up a localized string similar to The access token '{0}' is invalid or expired.. + + + + + Looks up a localized string similar to Failure looking up secret for consumer or token.. + + + + + Looks up a localized string similar to oauth_verifier argument was incorrect.. + + + + + Looks up a localized string similar to An invalid OAuth message received and discarded.. + + + + + Looks up a localized string similar to The {0} message included extra data which is not allowed.. + + + + + Looks up a localized string similar to This OAuth service provider requires OAuth consumers to implement OAuth {0}, but this consumer appears to only support {1}.. + + + + + Looks up a localized string similar to Cannot send OAuth message as multipart POST without an authorization HTTP header because sensitive data would not be signed.. + + + + + Looks up a localized string similar to Use of the OpenID+OAuth extension requires that the token manager in use implement the {0} interface.. + + + + + Looks up a localized string similar to The OpenID Relying Party's realm is not recognized as belonging to the OAuth Consumer identified by the consumer key given.. + + + + + Looks up a localized string similar to The request URL query MUST NOT contain any OAuth Protocol Parameters.. + + + + + Looks up a localized string similar to The signing element already has been associated with a channel.. + + + + + Looks up a localized string similar to All signing elements must offer the same message protection.. + + + + + Looks up a localized string similar to A token in the message was not recognized by the service provider.. + + + + + Looks up a localized string similar to The RSA-SHA1 signing binding element has not been set with a certificate for signing.. + + + + + A description of the endpoints on a Service Provider. + + + + + The field used to store the value of the property. + + + + + Initializes a new instance of the class. + + + + + Creates a signing element that includes all the signing elements this service provider supports. + + The created signing element. + + + + Gets or sets the OAuth version supported by the Service Provider. + + + + + Gets or sets the URL used to obtain an unauthorized Request Token, + described in Section 6.1 (Obtaining an Unauthorized Request Token). + + + The request URL query MUST NOT contain any OAuth Protocol Parameters. + This is the URL that messages are directed to. + + Thrown if this property is set to a URI with OAuth protocol parameters. + + + + Gets or sets the URL used to obtain User authorization for Consumer access, + described in Section 6.2 (Obtaining User Authorization). + + + This is the URL that messages are + indirectly (via the user agent) sent to. + + + + + Gets or sets the URL used to exchange the User-authorized Request Token + for an Access Token, described in Section 6.3 (Obtaining an Access Token). + + + This is the URL that messages are directed to. + + + + + Gets or sets the signing policies that apply to this Service Provider. + + + + + Gets the OAuth version supported by the Service Provider. + + + + + A base class for all OAuth messages. + + + + + A store for extra name/value data pairs that are attached to this message. + + + + + Gets a value indicating whether signing this message is required. + + + + + Gets a value indicating whether this is a direct or indirect message. + + + + + The URI to the remote endpoint to send this message to. + + + + + Backing store for the properties. + + + + + Backing store for the properties. + + + + + Initializes a new instance of the class for direct response messages. + + The level of protection the message requires. + The request that asked for this direct response. + The OAuth version. + + + + Initializes a new instance of the class for direct requests or indirect messages. + + The level of protection the message requires. + A value indicating whether this message requires a direct or indirect transport. + The URI that a directed message will be delivered to. + The OAuth version. + + + + Returns a human-friendly string describing the message and all serializable properties. + + The channel that will carry this message. + + The string representation of this object. + + + + + Sets a flag indicating that this message is received (as opposed to sent). + + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + + + Gets or sets a value indicating whether security sensitive strings are + emitted from the ToString() method. + + + + + Gets a value indicating whether this message was deserialized as an incoming message. + + + + + Gets the version of the protocol this message is prepared to implement. + + + + + Gets the level of protection this message requires. + + + + + Gets a value indicating whether this is a direct or indirect message. + + + + + Gets the dictionary of additional name/value fields tacked on to this message. + + + + + Gets the preferred method of transport for the message. + + + + + Gets or sets the URI to the Service Provider endpoint to send this message to. + + + + + Gets the originating request message that caused this response to be formed. + + + + + An interface that OAuth messages implement to support signing. + + + + + Gets or sets the method used to sign the message. + + + + + Gets or sets the Token Secret used to sign the message. + + + + + Gets or sets the Consumer key. + + + + + Gets or sets the Consumer Secret used to sign the message. + + + + + Gets or sets the HTTP method that will be used to transmit the message. + + + + + Gets or sets the URL of the intended receiver of this message. + + + + + A base class for all signed OAuth messages. + + + + + The reference date and time for calculating time stamps. + + + + + The number of seconds since 1/1/1970, consistent with the OAuth timestamp requirement. + + + + + Initializes a new instance of the class. + + A value indicating whether this message requires a direct or indirect transport. + The URI that a directed message will be delivered to. + The OAuth version. + + + + Gets or sets the Consumer key. + + + + + Gets or sets the original message parts, before any normalization or default values were assigned. + + + + + Gets or sets the signature method used to sign the request. + + + + + Gets or sets the Token Secret used to sign the message. + + + + + Gets or sets the Consumer Secret used to sign the message. + + + + + Gets or sets the HTTP method that will be used to transmit the message. + + + + + Gets or sets the message signature. + + + + + Gets or sets the version of the protocol this message was created with. + + + + + Security settings that are applicable to service providers. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the minimum required version of OAuth that must be implemented by a Consumer. + + + + + Gets or sets the maximum time a user can take to complete authorization. + + + This time limit serves as a security mitigation against brute force attacks to + compromise (unauthorized or authorized) request tokens. + Longer time limits is more friendly to slow users or consumers, while shorter + time limits provide better security. + + + + + A direct message sent by the Consumer to exchange an authorized Request Token + for an Access Token and Token Secret. + + + The class is sealed because the OAuth spec forbids adding parameters to this message. + + + + + Initializes a new instance of the class. + + The URI of the Service Provider endpoint to send this message to. + The OAuth version. + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + + + Gets or sets the verification code received by the Consumer from the Service Provider + in the property. + + + + + Gets or sets the authorized Request Token used to obtain authorization. + + + + + A message attached to a request for protected resources that provides the necessary + credentials to be granted access to those resources. + + + + + A store for the binary data that is carried in the message. + + + + + Initializes a new instance of the class. + + The URI of the Service Provider endpoint to send this message to. + The OAuth version. + + + + Gets or sets the Access Token. + + + In addition to just allowing OAuth to verify a valid message, + this property is useful on the Service Provider to verify that the access token + has proper authorization for the resource being requested, and to know the + context around which user provided the authorization. + + + + + Gets the parts of the message that carry binary data. + + A list of parts. Never null. + + + + Gets a value indicating whether this message should be sent as multi-part POST. + + + + + A direct message sent from Service Provider to Consumer in response to + a Consumer's request. + + + + + Initializes a new instance of the class. + + The originating request. + + + + Gets or sets the Access Token assigned by the Service Provider. + + + + + Gets the extra, non-OAuth parameters that will be included in the message. + + + + + Gets or sets the Token Secret. + + + + + A message used to redirect the user from a Service Provider to a Consumer's web site. + + + The class is sealed because extra parameters are determined by the callback URI provided by the Consumer. + + + + + Initializes a new instance of the class. + + The URI of the Consumer endpoint to send this message to. + The OAuth version. + + + + Gets or sets the verification code that must accompany the request to exchange the + authorized request token for an access token. + + An unguessable value passed to the Consumer via the User and REQUIRED to complete the process. + + If the Consumer did not provide a callback URL, the Service Provider SHOULD display the value of the + verification code, and instruct the User to manually inform the Consumer that authorization is + completed. If the Service Provider knows a Consumer to be running on a mobile device or set-top box, + the Service Provider SHOULD ensure that the verifier value is suitable for manual entry. + + + + + Gets or sets the Request Token. + + + + + A message used to redirect the user from a Consumer to a Service Provider's web site + so the Service Provider can ask the user to authorize the Consumer's access to some + protected resource(s). + + + + + Initializes a new instance of the class. + + The URI of the Service Provider endpoint to send this message to. + The request token. + The OAuth version. + + + + Initializes a new instance of the class. + + The URI of the Service Provider endpoint to send this message to. + The OAuth version. + + + + Gets the extra, non-OAuth parameters that will be included in the message. + + + + + Gets a value indicating whether this is a safe OAuth authorization request. + + + true if the Consumer is using OAuth 1.0a or later; otherwise, false. + + + + Gets or sets the Request Token obtained in the previous step. + + + The Service Provider MAY declare this parameter as REQUIRED, or + accept requests to the User Authorization URL without it, in which + case it will prompt the User to enter it manually. + + + + + Gets or sets a URL the Service Provider will use to redirect the User back + to the Consumer when Obtaining User Authorization is complete. Optional. + + + + + A direct message sent from Service Provider to Consumer in response to + a Consumer's request. + + + + + Initializes a new instance of the class. + + The unauthorized request token message that this message is being generated in response to. + The request token. + The token secret. + + This constructor is used by the Service Provider to send the message. + + + + + Initializes a new instance of the class. + + The originating request. + The OAuth version. + This constructor is used by the consumer to deserialize the message. + + + + Gets the extra, non-OAuth parameters that will be included in the message. + + + + + Gets or sets the Request Token. + + + + + Gets the original request for an unauthorized token. + + + + + Gets or sets the Token Secret. + + + + + Gets a value indicating whether the Service Provider recognized the callback parameter in the request. + + + + + An OAuth-specific implementation of the class. + + + + + Initializes a new instance of the class. + + The binding element to use for signing. + The ITokenManager instance to use. + The security settings. + An injected message type provider instance. + Except for mock testing, this should always be one of + OAuthConsumerMessageFactory or OAuthServiceProviderMessageFactory. + The binding elements. + + + + Uri-escapes the names and values in a dictionary per OAuth 1.0 section 5.1. + + The message with data to encode. + A dictionary of name-value pairs with their strings encoded. + + + + Initializes a web request for sending by attaching a message to it. + Use this method to prepare a protected resource request that you do NOT + expect an OAuth message response to. + + The message to attach. + The initialized web request. + + + + Initializes the binding elements for the OAuth channel. + + The signing binding element. + The nonce store. + + An array of binding elements used to initialize the channel. + + + + + Searches an incoming HTTP request for data that could be used to assemble + a protocol request message. + + The HTTP request to search. + The deserialized message, if one is found. Null otherwise. + + + + Gets the protocol message that may be in the given HTTP response. + + The response that is anticipated to contain an protocol message. + + The deserialized message parts, if found. Null otherwise. + + + + + Prepares an HTTP request that carries a given message. + + The message to send. + + The prepared to send the request. + + + + + Queues a message for sending in the response stream where the fields + are sent in the response stream in querystring style. + + The message to send as a response. + The pending user agent redirect based message to be sent as an HttpResponse. + + This method implements spec V1.0 section 5.3. + + + + + Gets the consumer secret for a given consumer key. + + The consumer key. + A consumer secret. + + + + Uri-escapes the names and values in a dictionary per OAuth 1.0 section 5.1. + + The dictionary with names and values to encode. + The dictionary to add the encoded pairs to. + + + + Gets the HTTP method to use for a message. + + The message. + "POST", "GET" or some other similar http verb. + + + + Prepares to send a request to the Service Provider via the Authorization header. + + The message to be transmitted to the ServiceProvider. + The web request ready to send. + + If the message has non-empty ExtraData in it, the request stream is sent to + the server automatically. If it is empty, the request stream must be sent by the caller. + This method implements OAuth 1.0 section 5.2, item #1 (described in section 5.4). + + + + + Fills out the secrets in a message so that signing/verification can be performed. + + The message about to be signed or whose signature is about to be verified. + + + + Gets or sets the Consumer web application path. + + + + + Gets the token manager being used. + + + + + A direct message sent from Consumer to Service Provider to request a Request Token. + + + + + Initializes a new instance of the class. + + The URI of the Service Provider endpoint to send this message to. + The OAuth version. + + + + Gets or sets the absolute URL to which the Service Provider will redirect the + User back when the Obtaining User Authorization step is completed. + + + The callback URL; or null if the Consumer is unable to receive + callbacks or a callback URL has been established via other means. + + + + + Gets the extra, non-OAuth parameters that will be included in the message. + + + + + A binding element that signs outgoing messages and verifies the signature on incoming messages. + + + + + The name of the hash algorithm to use. + + + + + Initializes a new instance of the class. + + + + + An enumeration of the OAuth protocol versions supported by this library. + + + + + OAuth 1.0 specification + + + + + OAuth 1.0a specification + + + + + Constants used in the OAuth protocol. + + + OAuth Protocol Parameter names and values are case sensitive. Each OAuth Protocol Parameters MUST NOT appear more than once per request, and are REQUIRED unless otherwise noted, + per OAuth 1.0 section 5. + + + + + The namespace to use for V1.0 of the protocol. + + + + + The prefix used for all key names in the protocol. + + + + + The string representation of a instance to be used to represent OAuth 1.0a. + + + + + The scheme to use in Authorization header message requests. + + + + + Gets the instance with values initialized for V1.0 of the protocol. + + + + + Gets the instance with values initialized for V1.0a of the protocol. + + + + + A list of all supported OAuth versions, in order starting from newest version. + + + + + The default (or most recent) supported version of the OAuth protocol. + + + + + The namespace to use for this version of the protocol. + + + + + Initializes a new instance of the class. + + + + + Gets the OAuth Protocol instance to use for the given version. + + The OAuth version to get. + A matching instance. + + + + Gets the OAuth Protocol instance to use for the given version. + + The OAuth version to get. + A matching instance. + + + + Gets the OAuth version this instance represents. + + + + + Gets the version to declare on the wire. + + + + + Gets the enum value for the instance. + + + + + Gets the namespace to use for this version of the protocol. + + + + + A description of a consumer from a Service Provider's point of view. + + + + + Gets the Consumer key. + + + + + Gets the consumer secret. + + + + + Gets the certificate that can be used to verify the signature of an incoming + message from a Consumer. + + The public key from the Consumer's X.509 Certificate, if one can be found; otherwise null. + + This property must be implemented only if the RSA-SHA1 algorithm is supported by the Service Provider. + + + + + Gets the callback URI that this consumer has pre-registered with the service provider, if any. + + A URI that user authorization responses should be directed to; or null if no preregistered callback was arranged. + + + + Gets the verification code format that is most appropriate for this consumer + when a callback URI is not available. + + A set of characters that can be easily keyed in by the user given the Consumer's + application type and form factor. + + The value should NEVER be returned + since this property is only used in no callback scenarios anyway. + + + + + Gets the length of the verification code to issue for this Consumer. + + A positive number, generally at least 4. + + + + A description of an access token and its metadata as required by a Service Provider. + + + + + Gets the token itself. + + + + + Gets the expiration date (local time) for the access token. + + The expiration date, or null if there is no expiration date. + + + + Gets the username of the principal that will be impersonated by this access token. + + + The name of the user who authorized the OAuth request token originally. + + + + + Gets the roles that the OAuth principal should belong to. + + + The roles that the user belongs to, or a subset of these according to the rights + granted when the user authorized the request token. + + + + + A description of a request token and its metadata as required by a Service Provider + + + + + Gets the token itself. + + + + + Gets the consumer key that requested this token. + + + + + Gets the (local) date that this request token was first created on. + + + + + Gets or sets the callback associated specifically with this token, if any. + + The callback URI; or null if no callback was specifically assigned to this token. + + + + Gets or sets the verifier that the consumer must include in the + message to exchange this request token for an access token. + + The verifier code, or null if none has been assigned (yet). + + + + Gets or sets the version of the Consumer that requested this token. + + + This property is used to determine whether a must be + generated when the user authorizes the Consumer or not. + + + + + A token manager for use by a web site in its role as a + service provider. + + + + + Gets the Consumer description for a given a Consumer Key. + + The Consumer Key. + A description of the consumer. Never null. + Thrown if the consumer key cannot be found. + + + + Checks whether a given request token has already been authorized + by some user for use by the Consumer that requested it. + + The Consumer's request token. + + True if the request token has already been fully authorized by the user + who owns the relevant protected resources. False if the token has not yet + been authorized, has expired or does not exist. + + + + + Gets details on the named request token. + + The request token. + A description of the token. Never null. + Thrown if the token cannot be found. + + It is acceptable for implementations to find the token, see that it has expired, + delete it from the database and then throw , + or alternatively it can return the expired token anyway and the OAuth channel will + log and throw the appropriate error. + + + + + Gets details on the named access token. + + The access token. + A description of the token. Never null. + Thrown if the token cannot be found. + + It is acceptable for implementations to find the token, see that it has expired, + delete it from the database and then throw , + or alternatively it can return the expired token anyway and the OAuth channel will + log and throw the appropriate error. + + + + + Persists any changes made to the token. + + The token whose properties have been changed. + + This library will invoke this method after making a set + of changes to the token as part of a web request to give the host + the opportunity to persist those changes to a database. + Depending on the object persistence framework the host site uses, + this method MAY not need to do anything (if changes made to the token + will automatically be saved without any extra handling). + + + + + Code contract class for the interface. + + + + + Prevents a default instance of the class from being created. + + + + + An interface allowing OAuth hosts to inject their own algorithm for generating tokens and secrets. + + + + + Generates a new token to represent a not-yet-authorized request to access protected resources. + + The consumer that requested this token. + The newly generated token. + + This method should not store the newly generated token in any persistent store. + This will be done in . + + + + + Generates a new token to represent an authorized request to access protected resources. + + The consumer that requested this token. + The newly generated token. + + This method should not store the newly generated token in any persistent store. + This will be done in . + + + + + Returns a cryptographically strong random string for use as a token secret. + + The generated string. + + + + Represents an OAuth consumer that is impersonating a known user on the system. + + + + + Initializes a new instance of the class. + + The access token. + + + + The messaging channel for OAuth 1.0(a) Service Providers. + + + + + Initializes a new instance of the class. + + The binding element to use for signing. + The web application store to use for nonces. + The token manager instance to use. + The security settings. + The message type provider. + + + + Gets the consumer secret for a given consumer key. + + The consumer key. + The consumer secret. + + + + Initializes the binding elements for the OAuth channel. + + The signing binding element. + The nonce store. + The token manager. + The security settings. + + An array of binding elements used to initialize the channel. + + + + + An OAuth-protocol specific implementation of the + interface. + + + + + The token manager to use for discerning between request and access tokens. + + + + + Initializes a new instance of the class. + + The token manager instance to use. + + + + Analyzes an incoming request message payload to discover what kind of + message is embedded in it and returns the type, or null if no match is found. + + The intended or actual recipient of the request message. + The name/value pairs that make up the message payload. + + A newly instantiated -derived object that this message can + deserialize to. Null if the request isn't recognized as a valid protocol message. + + + The request messages are: + UnauthorizedTokenRequest + AuthorizedTokenRequest + UserAuthorizationRequest + AccessProtectedResourceRequest + + + + + Analyzes an incoming request message payload to discover what kind of + message is embedded in it and returns the type, or null if no match is found. + + + The message that was sent as a request that resulted in the response. + Null on a Consumer site that is receiving an indirect message from the Service Provider. + + The name/value pairs that make up the message payload. + + The -derived concrete class that this message can + deserialize to. Null if the request isn't recognized as a valid protocol message. + + + The response messages are: + None. + + + + + A binding element that signs outgoing messages and verifies the signature on incoming messages. + + + + + The token manager for the service provider. + + + + + Initializes a new instance of the class. + + The token manager. + + + + Determines whether the signature on some message is valid. + + The message to check the signature on. + + true if the signature on the message is valid; otherwise, false. + + + + + Calculates a signature for a given message. + + The message to sign. + + The signature for the message. + + + + + Clones this instance. + + + A new instance of the binding element. + + + + + A cryptographically strong random string generator for tokens and secrets. + + + + + Generates a new token to represent a not-yet-authorized request to access protected resources. + + The consumer that requested this token. + The newly generated token. + + This method should not store the newly generated token in any persistent store. + This will be done in . + + + + + Generates a new token to represent an authorized request to access protected resources. + + The consumer that requested this token. + The newly generated token. + + This method should not store the newly generated token in any persistent store. + This will be done in . + + + + + Returns a cryptographically strong random string for use as a token secret. + + The generated string. + + + + Returns a new random string. + + The new random string. + + + + A binding element for Service Providers to manage the + callbacks and verification codes on applicable messages. + + + + + The token manager offered by the service provider. + + + + + The security settings for this service provider. + + + + + Initializes a new instance of the class. + + The token manager. + The security settings. + + + + Prepares a message for sending based on the rules of this channel binding element. + + The message to prepare for sending. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Performs any transformation on an incoming message that may be necessary and/or + validates an incoming message based on the rules of this channel binding element. + + The incoming message to process. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Thrown when the binding element rules indicate that this message is invalid and should + NOT be processed. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Ensures that access tokens have not yet expired. + + The incoming message carrying the access token. + + + + Ensures that short-lived request tokens included in incoming messages have not expired. + + The incoming message. + Thrown when the token in the message has expired. + + + + Gets or sets the channel that this binding element belongs to. + + + This property is set by the channel when it is first constructed. + + + + + Gets the protection commonly offered (if any) by this binding element. + + + This value is used to assist in sorting binding elements in the channel stack. + + + + + A web application that allows access via OAuth. + + + The Service Provider’s documentation should include: + + The URLs (Request URLs) the Consumer will use when making OAuth requests, and the HTTP methods (i.e. GET, POST, etc.) used in the Request Token URL and Access Token URL. + Signature methods supported by the Service Provider. + Any additional request parameters that the Service Provider requires in order to obtain a Token. Service Provider specific parameters MUST NOT begin with oauth_. + + + + + + The name of the key to use in the HttpApplication cache to store the + instance of to use. + + + + + The length of the verifier code (in raw bytes before base64 encoding) to generate. + + + + + The field behind the property. + + + + + Initializes a new instance of the class. + + The endpoints and behavior on the Service Provider. + The host's method of storing and recalling tokens and secrets. + + + + Initializes a new instance of the class. + + The endpoints and behavior on the Service Provider. + The host's method of storing and recalling tokens and secrets. + An object that can figure out what type of message is being received for deserialization. + + + + Initializes a new instance of the class. + + The endpoints and behavior on the Service Provider. + The host's method of storing and recalling tokens and secrets. + The nonce store. + + + + Initializes a new instance of the class. + + The endpoints and behavior on the Service Provider. + The host's method of storing and recalling tokens and secrets. + The nonce store. + An object that can figure out what type of message is being received for deserialization. + + + + Creates a cryptographically strong random verification code. + + The desired format of the verification code. + The length of the code. + When is , + this is the length of the original byte array before base64 encoding rather than the actual + length of the final string. + The verification code. + + + + Reads any incoming OAuth message. + + The deserialized message. + + Requires HttpContext.Current. + + + + + Reads any incoming OAuth message. + + The HTTP request to read the message from. + The deserialized message. + + + + Gets the incoming request for an unauthorized token, if any. + + The incoming request, or null if no OAuth message was attached. + Thrown if an unexpected OAuth message is attached to the incoming request. + + Requires HttpContext.Current. + + + + + Reads a request for an unauthorized token from the incoming HTTP request. + + The HTTP request to read from. + The incoming request, or null if no OAuth message was attached. + Thrown if an unexpected OAuth message is attached to the incoming request. + + + + Prepares a message containing an unauthorized token for the Consumer to use in a + user agent redirect for subsequent authorization. + + The token request message the Consumer sent that the Service Provider is now responding to. + The response message to send using the , after optionally adding extra data to it. + + + + Gets the incoming request for the Service Provider to authorize a Consumer's + access to some protected resources. + + The incoming request, or null if no OAuth message was attached. + Thrown if an unexpected OAuth message is attached to the incoming request. + + Requires HttpContext.Current. + + + + + Reads in a Consumer's request for the Service Provider to obtain permission from + the user to authorize the Consumer's access of some protected resource(s). + + The HTTP request to read from. + The incoming request, or null if no OAuth message was attached. + Thrown if an unexpected OAuth message is attached to the incoming request. + + + + Prepares the message to send back to the consumer following proper authorization of + a token by an interactive user at the Service Provider's web site. + + The Consumer's original authorization request. + + The message to send to the Consumer using if one is necessary. + Null if the Consumer did not request a callback as part of the authorization request. + + + + + Prepares the message to send back to the consumer following proper authorization of + a token by an interactive user at the Service Provider's web site. + + The Consumer's original authorization request. + The callback URI the consumer has previously registered + with this service provider or that came in the . + + The message to send to the Consumer using . + + + + + Gets the incoming request to exchange an authorized token for an access token. + + The incoming request, or null if no OAuth message was attached. + Thrown if an unexpected OAuth message is attached to the incoming request. + + Requires HttpContext.Current. + + + + + Reads in a Consumer's request to exchange an authorized request token for an access token. + + The HTTP request to read from. + The incoming request, or null if no OAuth message was attached. + Thrown if an unexpected OAuth message is attached to the incoming request. + + + + Prepares and sends an access token to a Consumer, and invalidates the request token. + + The Consumer's message requesting an access token. + The HTTP response to actually send to the Consumer. + + + + Gets the authorization (access token) for accessing some protected resource. + + The authorization message sent by the Consumer, or null if no authorization message is attached. + + This method verifies that the access token and token secret are valid. + It falls on the caller to verify that the access token is actually authorized + to access the resources being requested. + + Thrown if an unexpected message is attached to the request. + + + + Gets the authorization (access token) for accessing some protected resource. + + HTTP details from an incoming WCF message. + The URI of the WCF service endpoint. + The authorization message sent by the Consumer, or null if no authorization message is attached. + + This method verifies that the access token and token secret are valid. + It falls on the caller to verify that the access token is actually authorized + to access the resources being requested. + + Thrown if an unexpected message is attached to the request. + + + + Gets the authorization (access token) for accessing some protected resource. + + The incoming HTTP request. + The authorization message sent by the Consumer, or null if no authorization message is attached. + + This method verifies that the access token and token secret are valid. + It falls on the caller to verify that the access token is actually authorized + to access the resources being requested. + + Thrown if an unexpected message is attached to the request. + + + + Creates a security principal that may be used. + + The request. + The instance that can be used for access control of resources. + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Releases unmanaged and - optionally - managed resources + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Gets the standard state storage mechanism that uses ASP.NET's + HttpApplication state dictionary to store associations and nonces. + + + + + Gets the description of this Service Provider. + + + + + Gets or sets the generator responsible for generating new tokens and secrets. + + + + + Gets the persistence store for tokens and secrets. + + + + + Gets the channel to use for sending/receiving messages. + + + + + Gets the security settings for this service provider. + + + + + Gets or sets the channel to use for sending/receiving messages. + + + + + The different formats a user authorization verifier code can take + in order to be as secure as possible while being compatible with + the type of OAuth Consumer requesting access. + + + Some Consumers may be set-top boxes, video games, mobile devies, etc. + with very limited character entry support and no ability to receive + a callback URI. OAuth 1.0a requires that these devices operators + must manually key in a verifier code, so in these cases it better + be possible to do so given the input options on that device. + + + + + The strongest verification code. + The best option for web consumers since a callback is usually an option. + + + + + A combination of upper and lowercase letters and numbers may be used, + allowing a computer operator to easily read from the screen and key + in the verification code. + + + Some letters and numbers will be skipped where they are visually similar + enough that they can be difficult to distinguish when displayed with most fonts. + + + + + Only uppercase letters will be used in the verification code. + Verification codes are case-sensitive, so consumers with fixed + keyboards with only one character case option may require this option. + + + + + Only lowercase letters will be used in the verification code. + Verification codes are case-sensitive, so consumers with fixed + keyboards with only one character case option may require this option. + + + + + Only the numbers 0-9 will be used in the verification code. + Must useful for consumers running on mobile phone devices. + + + + + Represents the <oauth2/authorizationServer> section in the host's .config file. + + + + + The name of the oauth2/authorizationServer section. + + + + + The name of the <clientAuthenticationModules> sub-element. + + + + + The built-in set of client authentication modules. + + + + + Initializes a new instance of the class. + + + + + Gets the configuration section from the .config file. + + + + + Gets or sets the services to use for discovering service endpoints for identifiers. + + + If no discovery services are defined in the (web) application's .config file, + the default set of discovery services built into the library are used. + + + + + Authorization Server supporting the web server flow. + + + + + A reusable instance of the scope satisfied checker. + + + + + The list of modules that verify client authentication data. + + + + + The lone aggregate client authentication module that uses the and applies aggregating policy. + + + + + Initializes a new instance of the class. + + The authorization server. + + + + Reads in a client's request for the Authorization Server to obtain permission from + the user to authorize the Client's access of some protected resource(s). + + The HTTP request to read from. + The incoming request, or null if no OAuth message was attached. + Thrown if an unexpected OAuth message is attached to the incoming request. + + + + Approves an authorization request and sends an HTTP response to the user agent to redirect the user back to the Client. + + The authorization request to approve. + The username of the account that approved the request (or whose data will be accessed by the client). + The scope of access the client should be granted. If null, all scopes in the original request will be granted. + The Client callback URL to use when formulating the redirect to send the user agent back to the Client. + + + + Rejects an authorization request and sends an HTTP response to the user agent to redirect the user back to the Client. + + The authorization request to disapprove. + The Client callback URL to use when formulating the redirect to send the user agent back to the Client. + + + + Handles an incoming request to the authorization server's token endpoint. + + The HTTP request. + The HTTP response to send to the client. + + + + Handles an incoming request to the authorization server's token endpoint. + + The HTTP request. + The HTTP response to send to the client. + + + + Prepares a response to inform the Client that the user has rejected the Client's authorization request. + + The authorization request. + The Client callback URL to use when formulating the redirect to send the user agent back to the Client. + The authorization response message to send to the Client. + + + + Approves an authorization request. + + The authorization request to approve. + The username of the account that approved the request (or whose data will be accessed by the client). + The scope of access the client should be granted. If null, all scopes in the original request will be granted. + The Client callback URL to use when formulating the redirect to send the user agent back to the Client. + The authorization response message to send to the Client. + + + + Decodes a refresh token into its authorization details. + + The encoded refresh token as it would appear to the client. + A description of the authorization represented by the refresh token. + Thrown if the refresh token is not valid due to expiration, corruption or not being authentic. + + This can be useful if the authorization server supports the client revoking its own access (on uninstall, for example). + Outside the scope of the OAuth 2 spec, the client may contact the authorization server host requesting that its refresh + token be revoked. The authorization server would need to decode the refresh token so it knows which authorization in + the database to delete. + + + + + Gets the redirect URL to use for a particular authorization request. + + The authorization request. + The URL to redirect to. Never null. + Thrown if no callback URL could be determined. + + + + Prepares the response to an access token request. + + The request for an access token. + If set to true, the response will include a long-lived refresh token. + The response message to send to the client. + + + + Gets the channel. + + The channel. + + + + Gets the authorization server. + + The authorization server. + + + + Gets the extension modules that can read client authentication data from incoming messages. + + + + + Gets or sets the service that checks whether a granted set of scopes satisfies a required set of scopes. + + + + + An access token minted by the authorization server that can be serialized for transmission to the client. + + + + + Initializes a new instance of the class. + + + + + Serializes this instance to a simple string for transmission to the client. + + A non-empty string. + + + + Gets or sets the crypto service provider with the asymmetric private key to use for signing access tokens. + + A crypto service provider instance that contains the private key. + Must not be null, and must contain the private key. + + The public key in the private/public key pair will be used by the resource + servers to validate that the access token is minted by a trusted authorization server. + + + + + Gets or sets the key to encrypt the access token. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to The requested access scope exceeds the grant scope.. + + + + + Looks up a localized string similar to The access token's private signing key must be set.. + + + + + Looks up a localized string similar to The callback URL ({0}) is not allowed for this client.. + + + + + Looks up a localized string similar to Failure looking up secret for client or token.. + + + + + Looks up a localized string similar to The client secret was incorrect.. + + + + + Looks up a localized string similar to Invalid resource owner password credential.. + + + + + Looks up a localized string similar to No callback URI was available for this request.. + + + + + Utility methods for authorization servers. + + + + + Gets information about the client with a given identifier. + + The authorization server. + The client identifier. + The client information. Never null. + + + + Verifies a condition is true or throws an exception describing the problem. + + The condition that evaluates to true to avoid an exception. + The request message. + A single error code from . + The authentication module from which to glean the WWW-Authenticate header when applicable. + A human-readable UTF-8 encoded text providing additional information, used to assist the client developer in understanding the error that occurred. + The formatting arguments to generate the actual description. + + + + Describes the result of an automated authorization check, such as for client credential or resource owner password grants. + + + + + Initializes a new instance of the class. + + The access token request. + A value indicating whether the authorization should be approved. + + + + Gets a value indicating whether the authorization should be approved. + + + + + Gets the scope to be granted. + + + + + Describes the result of an automated authorization check for resource owner grants. + + + + + Initializes a new instance of the class. + + The access token request. + A value indicating whether the authorization should be approved. + + Canonical username of the authorizing user (resource owner), as the resource server would recognize it. + Ignored if is false. + + + + + Gets the canonical username of the authorizing user (resource owner). + + + + + A base class for extensions that can read incoming messages and extract the client identifier and + possibly authentication information (like a shared secret, signed nonce, etc.) + + + + + Initializes a new instance of the class. + + + + + Attempts to extract client identification/authentication information from a message. + + The authorization server host. + The incoming message. + Receives the client identifier, if one was found. + The level of the extracted client information. + + + + Validates a client identifier and shared secret against the authoriation server's database. + + The authorization server host; cannot be null. + The alleged client identifier. + The alleged client secret to be verified. + An indication as to the outcome of the validation. + + + + Gets this module's contribution to an HTTP 401 WWW-Authenticate header so the client knows what kind of authentication this module supports. + + + + + Applies OAuth 2 spec policy for supporting multiple methods of client authentication. + + + + + The set of authenticators to apply to an incoming request. + + + + + Initializes a new instance of the class. + + The set of authentication modules to apply. + + + + Attempts to extract client identification/authentication information from a message. + + The authorization server host. + The incoming message. + Receives the client identifier, if one was found. + The level of the extracted client information. + + + + Gets this module's contribution to an HTTP 401 WWW-Authenticate header so the client knows what kind of authentication this module supports. + + + + + Reads client authentication information from the HTTP Authorization header via Basic authentication. + + + + + Attempts to extract client identification/authentication information from a message. + + The authorization server host. + The incoming message. + Receives the client identifier, if one was found. + The level of the extracted client information. + + + + Gets this module's contribution to an HTTP 401 WWW-Authenticate header so the client knows what kind of authentication this module supports. + + + + + Gets or sets the realm that is included in an HTTP WWW-Authenticate header included in a 401 Unauthorized response. + + + + + Reads client authentication information from the message payload itself (POST entity as a URI-encoded parameter). + + + + + Attempts to extract client identification/authentication information from a message. + + The authorization server host. + The incoming message. + Receives the client identifier, if one was found. + The level of the extracted client information. + + + + The base class for any authorization server channel binding element. + + + + + Initializes a new instance of the class. + + + + + Prepares a message for sending based on the rules of this channel binding element. + + The message to prepare for sending. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Performs any transformation on an incoming message that may be necessary and/or + validates an incoming message based on the rules of this channel binding element. + + The incoming message to process. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Thrown when the binding element rules indicate that this message is invalid and should + NOT be processed. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Gets or sets the channel that this binding element belongs to. + + + This property is set by the channel when it is first constructed. + + + + + Gets the protection commonly offered (if any) by this binding element. + + + This value is used to assist in sorting binding elements in the channel stack. + + + + + Gets the channel to which this binding element belongs. + + + + + Gets the authorization server hosting this channel. + + The authorization server. + + + + Serializes and deserializes authorization codes, refresh tokens and access tokens + on incoming and outgoing messages. + + + + + Prepares a message for sending based on the rules of this channel binding element. + + The message to prepare for sending. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Performs any transformation on an incoming message that may be necessary and/or + validates an incoming message based on the rules of this channel binding element. + + The incoming message to process. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Thrown when the binding element rules indicate that this message is invalid and should + NOT be processed. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Gets the protection commonly offered (if any) by this binding element. + + + + + This value is used to assist in sorting binding elements in the channel stack. + + + + + Represents the authorization code created when a user approves authorization that + allows the client to request an access/refresh token. + + + + + The name of the bucket for symmetric keys used to sign authorization codes. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The client identifier. + The callback the client used to obtain authorization, if one was explicitly included in the request. + The authorized scopes. + The name on the account that authorized access. + + + + Creates a serializer/deserializer for this type. + + The authorization server that will be serializing/deserializing this authorization code. Must not be null. + A DataBag formatter. + + + + Verifies the the given callback URL matches the callback originally given in the authorization request. + + The callback. + + This method serves to verify that the callback URL given in the original authorization request + and the callback URL given in the access token request match. + + Thrown when the callback URLs do not match. + + + + Calculates the hash of the callback URL. + + The callback whose hash should be calculated. + + A base64 encoding of the hash of the URL. + + + + + Gets the maximum message age from the standard expiration binding element. + + This interval need not account for clock skew because it is only compared within a single authorization server or farm of servers. + + + + Gets or sets the hash of the callback URL. + + + + + A guard for all messages to or from an Authorization Server to ensure that they are well formed, + have valid secrets, callback URIs, etc. + + + This binding element also ensures that the code/token coming in is issued to + the same client that is sending the code/token and that the authorization has + not been revoked and that an access token has not expired. + + + + + The aggregating client authentication module. + + + + + Initializes a new instance of the class. + + The aggregating client authentication module. + + + + Prepares a message for sending based on the rules of this channel binding element. + + The message to prepare for sending. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Performs any transformation on an incoming message that may be necessary and/or + validates an incoming message based on the rules of this channel binding element. + + The incoming message to process. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Thrown when the binding element rules indicate that this message is invalid and should + NOT be processed. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Gets the protection commonly offered (if any) by this binding element. + + + This value is used to assist in sorting binding elements in the channel stack. + + + + + An interface on an OAuth 2 Authorization Server channel + to expose the host provided authorization server object. + + + + + Gets the authorization server. + + The authorization server. + + + + Gets or sets the service that checks whether a granted set of scopes satisfies a required set of scopes. + + + + + The channel for the OAuth protocol. + + + + + The messages receivable by this channel. + + + + + Initializes a new instance of the class. + + The authorization server. + The aggregating client authentication module. + + + + Gets the protocol message that may be in the given HTTP response. + + The response that is anticipated to contain an protocol message. + + The deserialized message parts, if found. Null otherwise. + + Thrown when the response is not valid. + + + + Queues a message for sending in the response stream. + + The message to send as a response. + + The pending user agent redirect based message to be sent as an HttpResponse. + + + This method implements spec OAuth V1.0 section 5.3. + + + + + Gets the protocol message that may be embedded in the given HTTP request. + + The request to search for an embedded message. + + The deserialized message, if one is found. Null otherwise. + + + + + Initializes the binding elements for the OAuth channel. + + The authorization server. + The aggregating client authentication module. + + An array of binding elements used to initialize the channel. + + + + + Gets the authorization server. + + The authorization server. + + + + Gets or sets the service that checks whether a granted set of scopes satisfies a required set of scopes. + + + + + The refresh token issued to a client by an authorization server that allows the client + to periodically obtain new short-lived access tokens. + + + + + The name of the bucket for symmetric keys used to sign refresh tokens. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The authorization this refresh token should describe. + + + + Creates a formatter capable of serializing/deserializing a refresh token. + + The crypto key store. + + A DataBag formatter. Never null. + + + + + A default implementation of the interface. + + + + + The client's secret, if any. + + + + + Initializes a new instance of the class. + + The secret. + The default callback. + Type of the client. + + + + Determines whether a callback URI included in a client's authorization request + is among those allowed callbacks for the registered client. + + The absolute URI the client has requested the authorization result be received at. Never null. + + true if the callback URL is allowable for this client; otherwise, false. + + + This method may be overridden to allow for several callbacks to match. + + + + + Checks whether the specified client secret is correct. + + The secret obtained from the client. + + true if the secret matches the one in the authorization server's record for the client; false otherwise. + + All string equality checks, whether checking secrets or their hashes, + should be done using to mitigate timing attacks. + + + + + Gets the callback to use when an individual authorization request + does not include an explicit callback URI. + + + An absolute URL; or null if none is registered. + + + + + Gets the type of the client. + + + + + Gets a value indicating whether a non-empty secret is registered for this client. + + + + + Provides host-specific authorization server services needed by this library. + + + + + Acquires the access token and related parameters that go into the formulation of the token endpoint's response to a client. + + Details regarding the resources that the access token will grant access to, and the identity of the client + that will receive that access. + Based on this information the receiving resource server can be determined and the lifetime of the access + token can be set based on the sensitivity of the resources. + + A non-null parameters instance that DotNetOpenAuth will dispose after it has been used. + + + + Gets the client with a given identifier. + + The client identifier. + The client registration. Never null. + Thrown when no client with the given identifier is registered with this authorization server. + + + + Determines whether a described authorization is (still) valid. + + The authorization. + + true if the original authorization is still valid; otherwise, false. + + + When establishing that an authorization is still valid, + it's very important to only match on recorded authorizations that + meet these criteria: + 1) The client identifier matches. + 2) The user account matches. + 3) The scope on the recorded authorization must include all scopes in the given authorization. + 4) The date the recorded authorization was issued must be no later that the date the given authorization was issued. + One possible scenario is where the user authorized a client, later revoked authorization, + and even later reinstated authorization. This subsequent recorded authorization + would not satisfy requirement #4 in the above list. This is important because the revocation + the user went through should invalidate all previously issued tokens as a matter of + security in the event the user was revoking access in order to sever authorization on a stolen + account or piece of hardware in which the tokens were stored. + + + + Determines whether a given set of resource owner credentials is valid based on the authorization server's user database + and if so records an authorization entry such that subsequent calls to would + return true. + + Username on the account. + The user's password. + + The access request the credentials came with. + This may be useful if the authorization server wishes to apply some policy based on the client that is making the request. + + A value that describes the result of the authorization check. + + May be thrown if the authorization server does not support the resource owner password credential grant type. + + + + + Determines whether an access token request given a client credential grant should be authorized + and if so records an authorization entry such that subsequent calls to would + return true. + + + The access request the credentials came with. + This may be useful if the authorization server wishes to apply some policy based on the client that is making the request. + + A value that describes the result of the authorization check. + + May be thrown if the authorization server does not support the client credential grant type. + + + + + Gets the store for storing crypto keys used to symmetrically encrypt and sign authorization codes and refresh tokens. + + + This store should be kept strictly confidential in the authorization server(s) + and NOT shared with the resource server. Anyone with these secrets can mint + tokens to essentially grant themselves access to anything they want. + + + + + Gets the authorization code nonce store to use to ensure that authorization codes can only be used once. + + The authorization code nonce store. + + + + Code Contract for the interface. + + + + + Prevents a default instance of the class from being created. + + + + + A message that carries an authorization code between client and authorization server. + + + + + Gets or sets the authorization code. + + + + + Gets or sets the authorization that the code describes. + + + + + A request from a Client to an Authorization Server to exchange an authorization code for an access token, + and (at the authorization server's option) a refresh token. + + + + + Initializes a new instance of the class. + + The Authorization Server's access token endpoint URL. + The version. + + + + A message that carries a refresh token between client and authorization server. + + + + + Gets or sets the refresh token. + + + + + Gets or sets the authorization that the token describes. + + + + + A request from the client to the token endpoint for a new access token + in exchange for a refresh token that the client has previously obtained. + + + + + Initializes a new instance of the class. + + The token endpoint. + The version. + + + + Describes the parameters to be fed into creating a response to an access token request. + + + + + Initializes a new instance of the class. + + The access token to include in this result. + + + + Gets or sets a value indicating whether to provide the client with a refresh token, when applicable. + + The default value is true. + > + The refresh token will never be provided when this value is false. + The refresh token may be provided when this value is true. + + + + + Gets the access token. + + + + + The message sent by the Authorization Server to the Client via the user agent + to indicate that user authorization was granted, carrying an authorization code and possibly an access token, + and to return the user to the Client where they started their experience. + + + + + Initializes a new instance of the class. + + The URL to redirect to so the client receives the message. This may not be built into the request message if the client pre-registered the URL with the authorization server. + The protocol version. + + + + Initializes a new instance of the class. + + The URL to redirect to so the client receives the message. This may not be built into the request message if the client pre-registered the URL with the authorization server. + The authorization request from the user agent on behalf of the client. + + + + Represents the <oauth2/client> section in the host's .config file. + + + + + The name of the oauth2/client section. + + + + + The name of the @maxAuthorizationTime attribute. + + + + + Initializes a new instance of the class. + + + + + Gets the configuration section from the .config file. + + + + + Gets or sets the maximum time a user can take to complete authentication. + + + + + A description of an OAuth Authorization Server as seen by an OAuth Client. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the Authorization Server URL from which an Access Token is requested by the Client. + + An HTTPS URL. + + After obtaining authorization from the resource owner, clients request an access token from the authorization server's token endpoint. + The URI of the token endpoint can be found in the service documentation, or can be obtained by the client by making an unauthorized protected resource request (from the WWW-Authenticate response header token-uri (The 'authorization-uri' Attribute) attribute). + The token endpoint advertised by the resource server MAY include a query component as defined by [RFC3986] (Berners-Lee, T., Fielding, R., and L. Masinter, “Uniform Resource Identifier (URI): Generic Syntax,” January 2005.) section 3. + Since requests to the token endpoint result in the transmission of plain text credentials in the HTTP request and response, the authorization server MUST require the use of a transport-layer mechanism such as TLS/SSL (or a secure channel with equivalent protections) when sending requests to the token endpoints. + + + + + Gets or sets the Authorization Server URL where the Client (re)directs the User + to make an authorization request. + + An HTTPS URL. + + Clients direct the resource owner to the authorization endpoint to approve their access request. Before granting access, the resource owner first authenticates with the authorization server. The way in which the authorization server authenticates the end-user (e.g. username and password login, OpenID, session cookies) and in which the authorization server obtains the end-user's authorization, including whether it uses a secure channel such as TLS/SSL, is beyond the scope of this specification. However, the authorization server MUST first verify the identity of the end-user. + The URI of the authorization endpoint can be found in the service documentation, or can be obtained by the client by making an unauthorized protected resource request (from the WWW-Authenticate response header auth-uri (The 'authorization-uri' Attribute) attribute). + The authorization endpoint advertised by the resource server MAY include a query component as defined by [RFC3986] (Berners-Lee, T., Fielding, R., and L. Masinter, “Uniform Resource Identifier (URI): Generic Syntax,” January 2005.) section 3. + Since requests to the authorization endpoint result in user authentication and the transmission of sensitive values, the authorization server SHOULD require the use of a transport-layer mechanism such as TLS/SSL (or a secure channel with equivalent protections) when sending requests to the authorization endpoints. + + + + + Gets or sets the OAuth version supported by the Authorization Server. + + + + + Gets the version of the OAuth protocol to use with this Authorization Server. + + The version. + + + + Provides access to a persistent object that tracks the state of an authorization. + + + + + Deletes this authorization, including access token and refresh token where applicable. + + + This method is invoked when an authorization attempt fails, is rejected, is revoked, or + expires and cannot be renewed. + + + + + Saves any changes made to this authorization object's properties. + + + This method is invoked after DotNetOpenAuth changes any property. + + + + + Gets or sets the callback URL used to obtain authorization. + + The callback URL. + + + + Gets or sets the long-lived token used to renew the short-lived . + + The refresh token. + + + + Gets or sets the access token. + + The access token. + + + + Gets or sets the access token issue date UTC. + + The access token issue date UTC. + + + + Gets or sets the access token UTC expiration date. + + + + + Gets the scope the token is (to be) authorized for. + + The scope. + + + + A simple in-memory copy of an authorization state. + + + + + Initializes a new instance of the class. + + The scopes of access being requested or that was obtained. + + + + Deletes this authorization, including access token and refresh token where applicable. + + + This method is invoked when an authorization attempt fails, is rejected, is revoked, or + expires and cannot be renewed. + + + + + Saves any changes made to this authorization object's properties. + + + This method is invoked after DotNetOpenAuth changes any property. + + + + + Gets or sets the callback URL used to obtain authorization. + + The callback URL. + + + + Gets or sets the long-lived token used to renew the short-lived . + + The refresh token. + + + + Gets or sets the access token. + + The access token. + + + + Gets or sets the access token UTC expiration date. + + + + + + + Gets or sets the access token issue date UTC. + + The access token issue date UTC. + + + + Gets the scope the token is (to be) authorized for. + + The scope. + + + + Gets or sets a value indicating whether this instance is deleted. + + + true if this instance is deleted; otherwise, false. + + + + + An that applies a bearer token to each outbound HTTP request. + + + + + Initializes a new instance of the class. + + The bearer token. + The inner handler. + + + + Initializes a new instance of the class. + + The client associated with the authorization. + The authorization. + The inner handler. + + + + Sends an HTTP request to the inner handler to send to the server as an asynchronous operation. + + The HTTP request message to send to the server. + A cancellation token to cancel operation. + + Returns . The task object representing the asynchronous operation. + + + + + Gets the bearer token. + + + The bearer token. + + + + + Gets the authorization. + + + + + Gets the OAuth 2 client associated with the . + + + + + An interface that defines the OAuth2 client specific channel additions. + + + + + Gets or sets the identifier by which this client is known to the Authorization Server. + + + + + Gets or sets the client credentials applicator extension to use. + + + + + Gets quotas used when deserializing JSON. + + + + + The messaging channel used by OAuth 2.0 Clients. + + + + + The messages receivable by this channel. + + + + + Initializes a new instance of the class. + + + + + Prepares an HTTP request that carries a given message. + + The message to send. + + The prepared to send the request. + + + This method must be overridden by a derived class, unless the method + is overridden and does not require this method. + + + + + Gets the protocol message that may be in the given HTTP response. + + The response that is anticipated to contain an protocol message. + + The deserialized message parts, if found. Null otherwise. + + Thrown when the response is not valid. + + + + Gets the protocol message that may be embedded in the given HTTP request. + + The request to search for an embedded message. + + The deserialized message, if one is found. Null otherwise. + + + + + Queues a message for sending in the response stream where the fields + are sent in the response stream in querystring style. + + The message to send as a response. + + The pending user agent redirect based message to be sent as an HttpResponse. + + + This method implements spec OAuth V1.0 section 5.3. + + + + + Performs additional processing on an outgoing web request before it is sent to the remote server. + + The request. + + + + Gets or sets the identifier by which this client is known to the Authorization Server. + + + + + Gets or sets the tool to use to apply client credentials to authenticated requests to the Authorization Server. + + May be null if this client has no client secret. + + + + Gets quotas used when deserializing JSON. + + + + + A base class for extensions that apply client authentication to messages for the authorization server in specific ways. + + + + + Authenticates the client via HTTP Basic. + + + + + Initializes a new instance of the class. + + The client secret. + + + + Initializes a new instance of the class. + + The client credential. + + + + Applies the client identifier and (when applicable) the client authentication to an outbound message. + + The identifier by which the authorization server should recognize this client. + The outbound message to apply authentication information to. + + + + Applies the client identifier and (when applicable) the client authentication to an outbound message. + + The identifier by which the authorization server should recognize this client. + The outbound message to apply authentication information to. + + + + Authenticates the client via a client_secret parameter in the message. + + + + + Initializes a new instance of the class. + + The client secret. + + + + Applies the client identifier and (when applicable) the client authentication to an outbound message. + + The identifier by which the authorization server should recognize this client. + The outbound message to apply authentication information to. + + + + Initializes a new instance of the class. + + + + + Transmits the secret the client shares with the authorization server as a parameter in the POST entity payload. + + The secret the client shares with the authorization server. + The credential applicator to provide to the instance. + + + + Transmits the client identifier and secret in the HTTP Authorization header via HTTP Basic authentication. + + The client id and secret. + The credential applicator to provide to the instance. + + + + Transmits the client identifier and secret in the HTTP Authorization header via HTTP Basic authentication. + + The secret the client shares with the authorization server. + The credential applicator to provide to the instance. + + + + Never transmits a secret. Useful for anonymous clients or clients unable to keep a secret. + + The credential applicator to provide to the instance. + + + + Applies the client identifier and (when applicable) the client authentication to an outbound message. + + The identifier by which the authorization server should recognize this client. + The outbound message to apply authentication information to. + + + + Applies the client identifier and (when applicable) the client authentication to an outbound message. + + The identifier by which the authorization server should recognize this client. + The outbound message to apply authentication information to. + + + + A token manager implemented by some clients to assist in tracking authorization state. + + + + + Gets the state of the authorization for a given callback URL and client state. + + The callback URL. + State of the client stored at the beginning of an authorization request. + The authorization state; may be null if no authorization state matches. + + + + Contract class for the interface. + + + + + Prevents a default instance of the class from being created. + + + + + A request from a Client to an Authorization Server to exchange an authorization code for an access token, + and (at the authorization server's option) a refresh token. + + + + + Initializes a new instance of the class. + + The authorization server. + + + + A request from the client to the token endpoint for a new access token + in exchange for a refresh token that the client has previously obtained. + + + + + Initializes a new instance of the class. + + The authorization server. + + + + A message sent by a web application Client to the AuthorizationServer + via the user agent to obtain authorization from the user and prepare + to issue an access token to the client if permission is granted. + + + + + Initializes a new instance of the class. + + The authorization server. + + + + A message sent by a web application Client to the AuthorizationServer + via the user agent to obtain authorization from the user and prepare + to issue an access token to the client if permission is granted. + + + + + Initializes a new instance of the class. + + The authorization server. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Access token has expired and cannot be automatically refreshed.. + + + + + Looks up a localized string similar to Authorization has expired.. + + + + + Looks up a localized string similar to Unexpected OAuth authorization response received with callback and client state that does not match an expected value.. + + + + + Looks up a localized string similar to Failed to obtain access token. Authorization Server reports reason: {0}. + + + + + Looks up a localized string similar to Unexpected response Content-Type {0}. + + + + + A base class for common OAuth Client behaviors. + + + + + Initializes a new instance of the class. + + The token issuer. + The client identifier. + + The tool to use to apply client credentials to authenticated requests to the Authorization Server. + May be null for clients with no secret or other means of authentication. + + + + + Adds the necessary HTTP Authorization header to an HTTP request for protected resources + so that the Service Provider will allow the request through. + + The request for protected resources from the service provider. + The access token previously obtained from the Authorization Server. + + + + Adds the necessary HTTP Authorization header to an HTTP request for protected resources + so that the Service Provider will allow the request through. + + The headers on the request for protected resources from the service provider. + The access token previously obtained from the Authorization Server. + + + + Adds the OAuth authorization token to an outgoing HTTP request, renewing a + (nearly) expired access token if necessary. + + The request for protected resources from the service provider. + The authorization for this request previously obtained via OAuth. + + + + Adds the OAuth authorization token to an outgoing HTTP request, renewing a + (nearly) expired access token if necessary. + + The headers on the request for protected resources from the service provider. + The authorization for this request previously obtained via OAuth. + + + + Creates an HTTP handler that automatically applies an OAuth 2 (bearer) access token to outbound HTTP requests. + The result of this method can be supplied to the constructor. + + The bearer token to apply to each outbound HTTP message. + The inner HTTP handler to use. The default uses as the inner handler. + An instance. + + + + Creates an HTTP handler that automatically applies the OAuth 2 access token to outbound HTTP requests. + The result of this method can be supplied to the constructor. + + The authorization to apply to the message. + The inner HTTP handler to use. The default uses as the inner handler. + An instance. + + + + Refreshes a short-lived access token using a longer-lived refresh token + with a new access token that has the same scope as the refresh token. + The refresh token itself may also be refreshed. + + The authorization to update. + If given, the access token will not be refreshed if its remaining lifetime exceeds this value. + A value indicating whether the access token was actually renewed; true if it was renewed, or false if it still had useful life remaining. + + This method may modify the value of the property on + the parameter if the authorization server has cycled out your refresh token. + If the parameter value was updated, this method calls on that instance. + + + + + Gets an access token that may be used for only a subset of the scope for which a given + refresh token is authorized. + + The refresh token. + The scope subset desired in the access token. + A description of the obtained access token, and possibly a new refresh token. + + If the return value includes a new refresh token, the old refresh token should be discarded and + replaced with the new one. + + + + + Exchanges a resource owner's password credential for OAuth 2.0 refresh and access tokens. + + The resource owner's username, as it is known by the authorization server. + The resource owner's account password. + The desired scope of access. + The result, containing the tokens if successful. + + + + Obtains an access token for accessing client-controlled resources on the resource server. + + The desired scopes. + The result of the authorization request. + + + + Updates the authorization state maintained by the client with the content of an outgoing response. + + The authorization state maintained by the client. + The access token containing response message. + + + + Updates the authorization state maintained by the client with the content of an outgoing response. + + The authorization state maintained by the client. + The access token containing response message. + + + + Updates authorization state with a success response from the Authorization Server. + + The authorization state to update. + The authorization success message obtained from the authorization server. + + + + Applies the default client authentication mechanism given a client secret. + + The client secret. May be null + The client credential applicator. + + + + Applies any applicable client credential to an authenticated outbound request to the authorization server. + + The request to apply authentication information to. + + + + Calculates the fraction of life remaining in an access token. + + The authorization to measure. + A fractional number no greater than 1. Could be negative if the access token has already expired. + + + + Requests an access token using a partially .initialized request message. + + The request message. + The scopes requested by the client. + The result of the request. + + + + Gets the token issuer. + + The token issuer. + + + + Gets the OAuth channel. + + The channel. + + + + Gets or sets the identifier by which this client is known to the Authorization Server. + + + + + Gets or sets the tool to use to apply client credentials to authenticated requests to the Authorization Server. + + May be null if this client has no client secret. + + + + Gets quotas used when deserializing JSON. + + + + + Gets the OAuth client channel. + + + + + The OAuth client for the user-agent flow, providing services for installed apps + and in-browser Javascript widgets. + + + + + Initializes a new instance of the class. + + The token issuer. + The client identifier. + The client secret. + + + + Initializes a new instance of the class. + + The authorization endpoint. + The token endpoint. + The client identifier. + The client secret. + + + + Initializes a new instance of the class. + + The authorization endpoint. + The token endpoint. + The client identifier. + + The tool to use to apply client credentials to authenticated requests to the Authorization Server. + May be null for clients with no secret or other means of authentication. + + + + + Initializes a new instance of the class. + + The token issuer. + The client identifier. + + The tool to use to apply client credentials to authenticated requests to the Authorization Server. + May be null for clients with no secret or other means of authentication. + + + + + Generates a URL that the user's browser can be directed to in order to authorize + this client to access protected data at some resource server. + + The scope of authorized access requested. + The client state that should be returned with the authorization response. + The URL that the authorization response should be sent to via a user-agent redirect. + + A fully-qualified URL suitable to initiate the authorization flow. + + + + + Generates a URL that the user's browser can be directed to in order to authorize + this client to access protected data at some resource server. + + The authorization state that is tracking this particular request. Optional. + + true to request an access token in the fragment of the response's URL; + false to authenticate to the authorization server and acquire the access token (and possibly a refresh token) via a private channel. + + The client state that should be returned with the authorization response. + + A fully-qualified URL suitable to initiate the authorization flow. + + + + + Scans the incoming request for an authorization response message. + + The actual URL of the incoming HTTP request. + The authorization. + The granted authorization, or null if the incoming HTTP request did not contain an authorization server response or authorization was rejected. + + + + Scans the incoming request for an authorization response message. + + The authorization. + The incoming authorization response message. + + The granted authorization, or null if the incoming HTTP request did not contain an authorization server response or authorization was rejected. + + + + + Generates a URL that the user's browser can be directed to in order to authorize + this client to access protected data at some resource server. + + The authorization state that is tracking this particular request. Optional. + + true to request an access token in the fragment of the response's URL; + false to authenticate to the authorization server and acquire the access token (and possibly a refresh token) via a private channel. + + The client state that should be returned with the authorization response. + + A message to send to the authorization server. + + + + + An OAuth 2.0 consumer designed for web applications. + + + + + The cookie name for XSRF mitigation during authorization code grant flows. + + + + + Initializes a new instance of the class. + + The authorization server. + The client identifier. + The client secret. + + + + Initializes a new instance of the class. + + The authorization server. + The client identifier. + + The tool to use to apply client credentials to authenticated requests to the Authorization Server. + May be null for clients with no secret or other means of authentication. + + + + + Prepares a request for user authorization from an authorization server. + + The scope of authorized access requested. + The URL the authorization server should redirect the browser (typically on this site) to when the authorization is completed. If null, the current request's URL will be used. + + + + Prepares a request for user authorization from an authorization server. + + The scope of authorized access requested. + The URL the authorization server should redirect the browser (typically on this site) to when the authorization is completed. If null, the current request's URL will be used. + The authorization request. + + + + Prepares a request for user authorization from an authorization server. + + The authorization state to associate with this particular request. + The authorization request. + + + + Processes the authorization response from an authorization server, if available. + + The incoming HTTP request that may carry an authorization response. + The authorization state that contains the details of the authorization. + + + + Gets or sets an optional component that gives you greater control to record and influence the authorization process. + + The authorization tracker. + + + + Describes the results of a completed authorization flow. + + + + + Initializes a new instance of the class. + + The authorization. + + + + Gets the authorization tracking object. + + Null if authorization was rejected by the user. + + + + A WinForms control that hosts a mini-browser for hosting by native applications to + allow the user to authorize the client without leaving the application. + + + + + Required designer variable. + + + + + Initializes a new instance of the class. + + + + + Called when the authorization flow has been completed. + + + + + Raises the event. + + An that contains the event data. + + + + Tests whether two URLs are equal for purposes of detecting the conclusion of authorization. + + The first location. + The second location. + The components to compare. + + true if the given components are equal. + + + + Handles the Navigating event of the webBrowser1 control. + + The source of the event. + The instance containing the event data. + + + + Processes changes in the URL the browser has navigated to. + + The location. + + + + Handles the Navigated event of the webBrowser1 control. + + The source of the event. + The instance containing the event data. + + + + Handles the LocationChanged event of the webBrowser1 control. + + The source of the event. + The instance containing the event data. + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Gets the authorization tracking object. + + + + + Gets or sets the client used to coordinate the authorization flow. + + + + + Gets the set of scopes that describe the requested level of access. + + + + + Gets or sets the callback URL used to indicate the flow has completed. + + + + + Gets a value indicating whether the authorization flow has been completed. + + + + + Gets a value indicating whether authorization has been granted. + + Null if is false + + + + Gets a value indicating whether authorization has been rejected. + + Null if is false + + + + Occurs when the authorization flow has completed. + + + + + Encodes/decodes the OAuth 2.0 response_type argument. + + + + + Initializes a new instance of the class. + + + + + Encodes the specified value. + + The value. Guaranteed to never be null. + + The in string form, ready for message transport. + + + + + Decodes the specified value. + + The string value carried by the transport. Guaranteed to never be null, although it may be empty. + + The deserialized form of the given string. + + Thrown when the string value given cannot be decoded into the required object type. + + + + Encodes/decodes the OAuth 2.0 grant_type argument. + + + + + Initializes a new instance of the class. + + + + + Encodes the specified value. + + The value. Guaranteed to never be null. + + The in string form, ready for message transport. + + + + + Decodes the specified value. + + The string value carried by the transport. Guaranteed to never be null, although it may be empty. + + The deserialized form of the given string. + + Thrown when the string value given cannot be decoded into the required object type. + + + + The base messaging channel used by OAuth 2.0 parties. + + + + + The protocol versions supported by this channel. + + + + + Initializes a new instance of the class. + + The message types that are received by this channel. + + The binding elements to use in sending and receiving messages. + The order they are provided is used for outgoing messgaes, and reversed for incoming messages. + + + + + Allows preprocessing and validation of message data before an appropriate message type is + selected or deserialized. + + The received message data. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to The request message type {0} should not be responded to with a refresh token.. + + + + + Looks up a localized string similar to The Authorization Server's token endpoint generated error {0}: '{1}'. + + + + + OAuth 2 Client types + + + Based on their ability to + authenticate securely with the authorization server (i.e. ability to + maintain the confidentiality of their client credentials). + The client type designation is based on the authorization server's + definition of secure authentication and its acceptable exposure + levels of client credentials. + The authorization server SHOULD NOT make assumptions about the client + type, nor accept the type information provided by the client + developer without first establishing trust. + A client application consisting of multiple components, each with its + own client type (e.g. a distributed client with both a confidential + server-based component and a public browser-based component), MUST + register each component separately as a different client to ensure + proper handling by the authorization server. The authorization + server MAY provider tools to manage such complex clients through a + single administration interface. + + + + + Clients capable of maintaining the confidentiality of their + credentials (e.g. client implemented on a secure server with + restricted access to the client credentials), or capable of secure + client authentication using other means. + + + + + Clients incapable of maintaining the confidentiality of their + credentials (e.g. clients executing on the device used by the + resource owner such as an installed native application or a web + browser-based application), and incapable of secure client + authentication via any other means. + + + + + A description of a client from an Authorization Server's point of view. + + + + + Determines whether a callback URI included in a client's authorization request + is among those allowed callbacks for the registered client. + + The absolute URI the client has requested the authorization result be received at. Never null. + + true if the callback URL is allowable for this client; otherwise, false. + + + + At the point this method is invoked, the identity of the client has not + been confirmed. To avoid open redirector attacks, the alleged client's identity + is used to lookup a list of allowable callback URLs to make sure that the callback URL + the actual client is requesting is one of the expected ones. + + + From OAuth 2.0 section 2.1: + The authorization server SHOULD require the client to pre-register + their redirection URI or at least certain components such as the + scheme, host, port and path. If a redirection URI was registered, + the authorization server MUST compare any redirection URI received at + the authorization endpoint with the registered URI. + + + + + + Checks whether the specified client secret is correct. + + The secret obtained from the client. + + true if the secret matches the one in the authorization server's record for the client; false otherwise. + + All string equality checks, whether checking secrets or their hashes, + should be done using to mitigate timing attacks. + + + + + Gets the callback to use when an individual authorization request + does not include an explicit callback URI. + + An absolute URL; or null if none is registered. + + + + Gets the type of the client. + + + + + Gets a value indicating whether a non-empty secret is registered for this client. + + + + + Contract class for the interface. + + + + + A direct message from the client to the authorization server that includes the client's credentials. + + + + + The backing for the property. + + + + + Initializes a new instance of the class. + + The Authorization Server's access token endpoint URL. + The version. + + + + Gets the client identifier previously obtained from the Authorization Server. + + The client identifier. + + Not required, because the client id may be communicate through alternate means like HTTP Basic authentication (the OAuth 2 spec allows a lot of freedom here). + + + + + Gets the client secret. + + The client secret. + + REQUIRED. The client secret as described in Section 2.1 (Client Credentials). OPTIONAL if no client secret was issued. + + + + + Gets the HTTP headers of the request. + + May be an empty collection, but must not be null. + + + + A request from a client that should be responded to directly with an access token. + + + + + Gets a value indicating whether the client requesting the access token has authenticated itself. + + + false for implicit grant requests; otherwise, true. + + + + + Gets the identifier of the client authorized to access protected data. + + + + + Gets the username of the authorizing user, when applicable. + + A non-empty string; or null when no user has authorized this access token. + + + + Gets the scope of operations the client is allowed to invoke. + + + + + Implemented by all message types whose response may contain an access token. + + + + + Gets or sets the result of calling the authorization server host's access token creation method. + + + + + A message sent from the client to the authorization server to exchange a previously obtained grant for an access token. + + + + + Initializes a new instance of the class. + + The Authorization Server's access token endpoint URL. + The version. + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Gets a value indicating whether the client requesting the access token has authenticated itself. + + + Always true, because of our base class. + + + + + Gets the username of the authorizing user, when applicable. + + + A non-empty string; or null when no user has authorized this access token. + + + + + Gets the type of the grant. + + The type of the grant. + + + + Gets the scope of operations the client is allowed to invoke. + + + + + A request from a Client to an Authorization Server to exchange an authorization code for an access token, + and (at the authorization server's option) a refresh token. + + + + + Initializes a new instance of the class. + + The Authorization Server's access token endpoint URL. + The version. + + + + Gets the type of the grant. + + The type of the grant. + + + + Gets or sets the verification code previously communicated to the Client + in . + + The verification code received from the authorization server. + + + + Gets or sets the callback URL used in + + The Callback URL used to obtain the Verification Code. + + + REQUIRED, if the redirect_uri parameter was included in the authorization request as described in Section 4.1.1, and their values MUST be identical. + + + + + Gets the scope of operations the client is allowed to invoke. + + + + + An access token request that includes a scope parameter. + + + + + Initializes a new instance of the class. + + The Authorization Server's access token endpoint URL. + The version. + + + + Gets the set of scopes the Client would like the access token to provide access to. + + A set of scopes. Never null. + + + + Gets the scope of operations the client is allowed to invoke. + + + + + A request for an access token for a client application that has its + own (non-user affiliated) client name and password. + + + This is somewhat analogous to 2-legged OAuth. + + + + + Initializes a new instance of the class. + + The authorization server. + The version. + + + + Gets the type of the grant. + + The type of the grant. + + + + A response from the Authorization Server to the Client to indicate that a + request for an access token renewal failed, probably due to an invalid + refresh token. + + + This message type is shared by the Web App, Rich App, and Username/Password profiles. + + + + + A value indicating whether this error response is in result to a request that had invalid client credentials which were supplied in the HTTP Authorization header. + + + + + The headers to include in the response. + + + + + Initializes a new instance of the class. + + The faulty request. + + + + Initializes a new instance of the class. + + The faulty request. + A value indicating whether this error response is in result to a request that had invalid client credentials which were supplied in the HTTP Authorization header. + + + + Initializes a new instance of the class. + + The protocol version. + + + + Gets the HTTP headers to add to the response. + + May be an empty collection, but must not be null. + + + + Gets or sets the error. + + One of the values given in . + + + + Gets or sets a human readable description of the error. + + Human-readable text providing additional information, used to assist in the understanding and resolution of the error that occurred. + + + + Gets or sets the location of the web page that describes the error and possible resolution. + + A URI identifying a human-readable web page with information about the error, used to provide the end-user with additional information about the error. + + + + A request from the client to the token endpoint for a new access token + in exchange for a refresh token that the client has previously obtained. + + + + + Initializes a new instance of the class. + + The token endpoint. + The version. + + + + Gets or sets the refresh token. + + The refresh token. + + REQUIRED. The refresh token associated with the access token to be refreshed. + + + + + Gets the type of the grant. + + The type of the grant. + + + + A request from a Client to an Authorization Server to exchange the user's username and password for an access token. + + + + + Initializes a new instance of the class. + + The access token endpoint. + The protocol version. + + + + Gets the username of the authorizing user, when applicable. + + + A non-empty string; or null when no user has authorized this access token. + + + + + Gets the type of the grant. + + The type of the grant. + + + + Gets or sets the user's account username. + + The username on the user's account. + + + + Gets or sets the user's password. + + The password. + + + + Gets or sets a value indicating whether the resource owner's credentials have been validated at the authorization server. + + + + + Describes the parameters to be fed into creating a response to an access token request. + + + + + Gets or sets a value indicating whether to provide the client with a refresh token, when applicable. + + The default value is true. + > + The refresh token will never be provided when this value is false. + The refresh token may be provided when this value is true. + + + + + Gets the access token. + + + + + A message sent from the Authorization Server to the client carrying an access token. + + + + + Gets or sets the lifetime of the access token. + + The lifetime. + + + + A response from the Authorization Server to the Client containing a delegation code + that the Client should use to obtain an access token. + + + This message type is shared by the Web App, Rich App, and Username/Password profiles. + + + + + Initializes a new instance of the class. + + The request. + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + Thrown if the message is invalid. + + + + Gets or sets the access token. + + The access token. + + + + Gets or sets the token type. + + Usually "bearer". + + Described in OAuth 2.0 section 7.1. + + + + + Gets or sets the lifetime of the access token. + + The lifetime. + + + + Gets or sets the refresh token. + + The refresh token. + + OPTIONAL. The refresh token used to obtain new access tokens using the same end-user access grant as described in Section 6 (Refreshing an Access Token). + + + + + Gets the scope of access being requested. + + The scope of the access request expressed as a list of space-delimited strings. The value of the scope parameter is defined by the authorization server. If the value contains multiple space-delimited strings, their order does not matter, and each string adds an additional access range to the requested scope. + + + + Gets or sets a value indicating whether a refresh token is or should be included in the response. + + + + + A message carrying client state the authorization server should preserve on behalf of the client + during an authorization. + + + + + Gets or sets the state of the client. + + The state of the client. + + + + The message that an Authorization Server responds to a Client with when the user denies a user authorization request. + + + + + Initializes a new instance of the class. + + The URL to redirect to so the client receives the message. This may not be built into the request message if the client pre-registered the URL with the authorization server. + The protocol version. + + + + Initializes a new instance of the class. + + The URL to redirect to so the client receives the message. This may not be built into the request message if the client pre-registered the URL with the authorization server. + The authorization request from the user agent on behalf of the client. + + + + Gets or sets the error. + + + One of the values given in . + OR a numerical HTTP status code from the 4xx or 5xx + range, with the exception of the 400 (Bad Request) and + 401 (Unauthorized) status codes. For example, if the + service is temporarily unavailable, the authorization + server MAY return an error response with "error" set to + "503". + + + + + Gets or sets a human readable description of the error. + + Human-readable text providing additional information, used to assist in the understanding and resolution of the error that occurred. + + + + Gets or sets the location of the web page that describes the error and possible resolution. + + A URI identifying a human-readable web page with information about the error, used to provide the end-user with additional information about the error. + + + + A message sent by a web application Client to the AuthorizationServer + via the user agent to obtain authorization from the user and prepare + to issue an access token to the client if permission is granted. + + + + + Gets the grant type that the client expects of the authorization server. + + Always . Other response types are not supported. + + + + Initializes a new instance of the class. + + The Authorization Server's user authorization URL to direct the user to. + The protocol version. + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + Thrown if the message is invalid. + + + + Gets the grant type that the client expects of the authorization server. + + + + + Gets or sets the identifier by which this client is known to the Authorization Server. + + + + + Gets or sets the callback URL. + + + An absolute URL to which the Authorization Server will redirect the User back after + the user has approved the authorization request. + + + REQUIRED unless a redirection URI has been established between the client and authorization server via other means. An absolute URI to which the authorization server will redirect the user-agent to when the end-user authorization step is completed. The authorization server MAY require the client to pre-register their redirection URI. The redirection URI MUST NOT include a query component as defined by [RFC3986] (Berners-Lee, T., Fielding, R., and L. Masinter, “Uniform Resource Identifier (URI): Generic Syntax,” January 2005.) section 3 if the state parameter is present. + + + + + Gets or sets state of the client that should be sent back with the authorization response. + + + An opaque value that Clients can use to maintain state associated with this request. + + + This data is proprietary to the client and should be considered an opaque string to the + authorization server. + + + + + Gets the scope of access being requested. + + The scope of the access request expressed as a list of space-delimited strings. The value of the scope parameter is defined by the authorization server. If the value contains multiple space-delimited strings, their order does not matter, and each string adds an additional access range to the requested scope. + + + + A message sent by a web application Client to the AuthorizationServer + via the user agent to obtain authorization from the user and prepare + to issue an access token to the client if permission is granted. + + + + + Gets or sets the grant type that the client expects of the authorization server. + + Always . Other response types are not supported. + + + + Initializes a new instance of the class. + + The Authorization Server's user authorization URL to direct the user to. + The protocol version. + + + + Gets the grant type that the client expects of the authorization server. + + + + + An indication of what kind of response the client is requesting from the authorization server + after the user has granted authorized access. + + + + + An access token should be returned immediately. + + + + + An authorization code should be returned, which can later be exchanged for refresh and access tokens. + + + + + The message sent by the Authorization Server to the Client via the user agent + to indicate that user authorization was granted, and to return the user + to the Client where they started their experience. + + + + + Initializes a new instance of the class. + + The URL to redirect to so the client receives the message. This may not be built into the request message if the client pre-registered the URL with the authorization server. + The protocol version. + + + + Initializes a new instance of the class. + + The URL to redirect to so the client receives the message. This may not be built into the request message if the client pre-registered the URL with the authorization server. + The authorization request from the user agent on behalf of the client. + + + + Gets or sets the scope of the if one is given; otherwise the scope of the authorization code. + + The scope. + + + + Gets or sets the authorizing user's account name. + + + + + The message sent by the Authorization Server to the Client via the user agent + to indicate that user authorization was granted, carrying only an access token, + and to return the user to the Client where they started their experience. + + + + + Initializes a new instance of the class. + + The URL to redirect to so the client receives the message. This may not be built into the request message if the client pre-registered the URL with the authorization server. + The protocol version. + + + + Initializes a new instance of the class. + + The URL to redirect to so the client receives the message. This may not be built into the request message if the client pre-registered the URL with the authorization server. + The authorization request from the user agent on behalf of the client. + + + + Gets or sets the token type. + + Usually "bearer". + + Described in OAuth 2.0 section 7.1. + + + + + Gets or sets the access token. + + The access token. + + + + Gets or sets the scope of the if one is given; otherwise the scope of the authorization code. + + The scope. + + + + Gets or sets the lifetime of the authorization. + + The lifetime. + + + + The message sent by the Authorization Server to the Client via the user agent + to indicate that user authorization was granted, carrying an authorization code and possibly an access token, + and to return the user to the Client where they started their experience. + + + + + Initializes a new instance of the class. + + The URL to redirect to so the client receives the message. This may not be built into the request message if the client pre-registered the URL with the authorization server. + The protocol version. + + + + Initializes a new instance of the class. + + The URL to redirect to so the client receives the message. This may not be built into the request message if the client pre-registered the URL with the authorization server. + The authorization request from the user agent on behalf of the client. + + + + Gets or sets the authorization code. + + The authorization code. + + + + The types of authorizations that a client can use to obtain + a refresh token and/or an access token. + + + + + The client is providing the authorization code previously obtained from an end user authorization response. + + + + + The client is providing the end user's username and password to the authorization server. + + + + + The client is providing an assertion it obtained from another source. + + + + + The client is providing a refresh token. + + + + + No authorization to access a user's data has been given. The client is requesting + an access token authorized for its own private data. This fits the classic OAuth 1.0(a) "2-legged OAuth" scenario. + + + When requesting an access token using the none access grant type (no access grant is included), the client is requesting access to the protected resources under its control, or those of another resource owner which has been previously arranged with the authorization server (the method of which is beyond the scope of this specification). + + + + + Describes an error generated by an Authorization Server's token endpoint. + + + + + The message being processed that caused this exception to be thrown. + + + + + The WWW-Authenticate header to add to the response message. + + + + + Initializes a new instance of the class. + + The message whose processing resulted in this error. + A single error code from . + A human-readable UTF-8 encoded text providing additional information, used to assist the client developer in understanding the error that occurred. + A URI identifying a human-readable web page with information about the error, used to provide the client developer with additional information about the error. + The WWW-Authenticate header to add to the response. + + + + Initializes a new instance of the class. + + The inner exception. + + + + Gets the response message to send to the client. + + A message. + + + + Gets a single error code from . + + + + + Gets a human-readable UTF-8 encoded text providing additional information, used to assist the client developer in understanding the error that occurred. + + + + + Gets a URI identifying a human-readable web page with information about the error, used to provide the client developer with additional information about the error. + + + + + Represents the <oauth> element in the host's .config file. + + + + + The name of the oauth section. + + + + + Initializes a new instance of the class. + + + + + Describes a delegated authorization between a resource server, a client, and a user. + + + + + Gets the identifier of the client authorized to access protected data. + + + + + Gets the date this authorization was established or the token was issued. + + A date/time expressed in UTC. + + + + Gets the name on the account whose data on the resource server is accessible using this authorization. + + + + + Gets the scope of operations the client is allowed to invoke. + + + + + A data bag that stores authorization data. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the identifier of the client authorized to access protected data. + + + + + Gets the date this authorization was established or the token was issued. + + A date/time expressed in UTC. + + + + Gets or sets the name on the account whose data on the resource server is accessible using this authorization. + + + + + Gets the scope of operations the client is allowed to invoke. + + + + + A short-lived token that accompanies HTTP requests to protected data to authorize the request. + + + + + Initializes a new instance of the class. + + + + + Creates a formatter capable of serializing/deserializing an access token. + + The crypto service provider with the authorization server's private key used to asymmetrically sign the access token. + The crypto service provider with the resource server's public key used to encrypt the access token. + An access token serializer. + + + + Initializes this instance of the class. + + The authorization to apply to this access token. + + + + Initializes this instance of the class. + + The scopes. + The username of the account that authorized this token. + The lifetime for this access token. + + The is left null in this case because this constructor + is invoked in the case where the client is not authenticated, and therefore no + trust in the client_id is appropriate. + + + + + Serializes this instance to a simple string for transmission to the client. + + A non-empty string. + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Gets or sets the lifetime of the access token. + + The lifetime. + + + + Gets the type of this instance. + + The type of the bag. + + This ensures that one token cannot be misused as another kind of token. + + + + + Describes the various levels at which client information may be extracted from an inbound message. + + + + + No client identification or authentication was discovered. + + + + + The client identified itself, but did not attempt to authenticate itself. + + + + + The client authenticated itself (provided compelling evidence that it was who it claims to be). + + + + + The client failed in an attempt to authenticate itself, claimed to be an unrecognized client, or otherwise messed up. + + + + + A message that carries some kind of token from the client to the authorization or resource server. + + + + + Gets the authorization that the code or token describes. + + + + + A message that carries an access token between client and authorization server. + + + + + Gets or sets the access token. + + + + + Gets or sets the authorization that the token describes. + + + + + An extensibility point that allows authorization servers and resource servers to customize how scopes may be considered + supersets of each other. + + + Implementations must be thread-safe. + + + + + Checks whether the granted scope is a superset of the required scope. + + The set of strings that the resource server demands in an access token's scope in order to complete some operation. + The set of strings that define the scope within an access token that the client is authorized to. + + true if is a superset of to allow the request to proceed; false otherwise. + + The default reasonable implementation of this is: + + return .IsSupersetOf(); + In some advanced cases it may not be so simple. One case is that there may be a string that aggregates the capabilities of several others + in order to simplify common scenarios. For example, the scope "ReadAll" may represent the same authorization as "ReadProfile", "ReadEmail", and + "ReadFriends". + Great care should be taken in implementing this method as this is a critical security module for the authorization and resource servers. + + + + Encodes or decodes a set of scopes into the OAuth 2.0 scope message part. + + + + + Initializes a new instance of the class. + + + + + Encodes the specified value. + + The value. Guaranteed to never be null. + + The in string form, ready for message transport. + + + + + Decodes the specified value. + + The string value carried by the transport. Guaranteed to never be null, although it may be empty. + + The deserialized form of the given string. + + Thrown when the string value given cannot be decoded into the required object type. + + + + Code contract for the interface. + + + + + Prevents a default instance of the class from being created. + + + + + A common message base class for OAuth messages. + + + + + A dictionary to contain extra message data. + + + + + The originating request. + + + + + The backing field for the property. + + + + + A value indicating whether this message is a direct or indirect message. + + + + + Initializes a new instance of the class + that is used for direct response messages. + + The version. + + + + Initializes a new instance of the class. + + The originating request. + The recipient of the directed message. Null if not applicable. + + + + Initializes a new instance of the class + that is used for directed messages. + + The version. + The message transport. + The recipient. + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Gets the extra, non-standard Protocol parameters included in the message. + + + + + Implementations of this interface should ensure that this property never returns null. + + + + + Gets the level of protection this message requires. + + + + + Gets a value indicating whether this is a direct or indirect message. + + + + + Gets the version of the protocol or extension this message is prepared to implement. + + + + + Gets or sets the preferred method of transport for the message. + + + For indirect messages this will likely be GET+POST, which both can be simulated in the user agent: + the GET with a simple 301 Redirect, and the POST with an HTML form in the response with javascript + to automate submission. + + + + + Gets the originating request message that caused this response to be formed. + + + + + Gets the URL of the intended receiver of this message. + + + + + A message that accompanies an HTTP request to a resource server that provides authorization. + + + In its current form, this class only accepts bearer access tokens. + When support for additional access token types is added, this class should probably be refactored + into derived types, where each derived type supports a particular access token type. + + + + + Initializes a new instance of the class. + + The recipient. + The version. + + + + Gets the type of the access token. + + + Always "bearer". + + + + + Gets or sets the access token. + + The access token. + + + + A direct response sent in response to a rejected Bearer access token. + + + This satisfies the spec in: http://self-issued.info/docs/draft-ietf-oauth-v2-bearer.html#authn-header + + + + + The headers in the response message. + + + + + Initializes a new instance of the class. + + The protocol version. + + + + Initializes a new instance of the class. + + The request. + + + + Initializes a new instance of the class + to inform the client that the request was invalid. + + The exception. + The version of OAuth 2 that is in use. + The error message. + + + + Initializes a new instance of the class + to inform the client that the bearer token included in the request was rejected. + + The request. + The exception. + The error message. + + + + Initializes a new instance of the class + to inform the client of the required set of scopes required to perform this operation. + + The request. + The set of scopes required to perform this operation. + The error message. + + + + Ensures the message is valid. + + + + + Ensures the error or error_description parameters contain only allowed characters. + + The argument. + The name of the parameter being validated. Used when errors are reported. + + + + Ensures the error_uri parameter contains only allowed characters and is an absolute URI. + + The absolute URI. + + + + Gets or sets the HTTP status code that the direct response should be sent with. + + + + + Gets the HTTP headers to add to the response. + + May be an empty collection, but must not be null. + + + + Gets or sets the well known error code. + + One of the values from . + + + + Gets or sets a human-readable explanation for developers that is not meant to be displayed to end users. + + + + + Gets or sets an absolute URI identifying a human-readable web page explaining the error. + + + + + Gets or sets the realm. + + The realm. + + + + Gets or sets the scope. + + The scope. + + + + Gets the scheme to use in the WWW-Authenticate header. + + + + + Some common utility methods for OAuth 2.0. + + + + + The string "Basic ". + + + + + The instance to use when comparing scope equivalence. + + + + + The delimiter between scope elements. + + + + + A colon, in a 1-length character array. + + + + + The encoding to use when preparing credentials for transit in HTTP Basic base64 encoding form. + + + + + The characters that may appear in an access token that is included in an HTTP Authorization header. + + + This is defined in OAuth 2.0 DRAFT 10, section 5.1.1. (http://tools.ietf.org/id/draft-ietf-oauth-v2-10.html#authz-header) + + + + + Identifies individual scope elements + + The space-delimited list of scopes. + A set of individual scopes, with any duplicates removed. + + + + Serializes a set of scopes as a space-delimited list. + + The scopes to serialize. + A space-delimited list. + + + + Parses a space-delimited list of scopes into a set. + + The space-delimited string. + A set. + + + + Creates a set out of an array of strings. + + The array of strings. + A set. + + + + Verifies that a sequence of scope tokens are all valid. + + The scopes. + + + + Verifies that a given scope token (not a space-delimited set, but a single token) is valid. + + The scope token. + + + + Authorizes an HTTP request using an OAuth 2.0 access token in an HTTP Authorization header. + + The request to authorize. + The access token previously obtained from the Authorization Server. + + + + Authorizes an HTTP request using an OAuth 2.0 access token in an HTTP Authorization header. + + The headers on the request for protected resources from the service provider. + The access token previously obtained from the Authorization Server. + + + + Applies the HTTP Authorization header for HTTP Basic authentication. + + The headers collection to set the authorization header to. + The username. Cannot be empty. + The password. Cannot be null. + + + + Extracts the username and password from an HTTP Basic authorized web header. + + The incoming web headers. + The network credentials; or null if none could be discovered in the request. + + + + The default scope superset checker, which assumes that no scopes overlap. + + + + + Checks whether the granted scope is a superset of the required scope. + + The set of strings that the resource server demands in an access token's scope in order to complete some operation. + The set of strings that define the scope within an access token that the client is authorized to. + + true if is a superset of to allow the request to proceed; false otherwise. + + The default reasonable implementation of this is: + + return .IsSupersetOf(); + In some advanced cases it may not be so simple. One case is that there may be a string that aggregates the capabilities of several others + in order to simplify common scenarios. For example, the scope "ReadAll" may represent the same authorization as "ReadProfile", "ReadEmail", and + "ReadFriends". + Great care should be taken in implementing this method as this is a critical security module for the authorization and resource servers. + + + + An enumeration of the OAuth protocol versions supported by this library. + + + + + The OAuth 2.0 specification. + + + + + Protocol constants for OAuth 2.0. + + + + + Values for the "response_type" parameter. + + + + + Error codes that an authorization server can return to a client in response to a malformed or unsupported access token request. + + + + + Error codes that an authorization server can return to a client in response to a malformed or unsupported end user authorization request. + + + + + Recognized access token types. + + + + + The error codes prescribed in http://self-issued.info/docs/draft-ietf-oauth-v2-bearer.html#resource-error-codes + + + + + The HTTP authorization scheme "Bearer"; + + + + + The HTTP authorization scheme "Bearer "; + + + + + The format of the HTTP Authorization header value that authorizes OAuth 2.0 requests using bearer access tokens. + + + + + The name of the parameter whose value is an OAuth 2.0 bearer access token, as it is defined + in a URL-encoded POST entity or URL query string. + + + + + The "state" string. + + + + + The "redirect_uri_mismatch" string. + + + + + The "redirect_uri" string. + + + + + The "client_id" string. + + + + + The "scope" string. + + + + + The "client_secret" string. + + + + + The "code" string. + + + + + The "error" string. + + + + + The "access_token" string. + + + + + The "token_type" string. + + + + + The "refresh_token" string. + + + + + The "expires_in" string. + + + + + The "username" string. + + + + + The "password" string. + + + + + The "error_uri" string. + + + + + The "error_description" string. + + + + + The "response_type" string. + + + + + The "grant_type" string. + + + + + Gets the instance with values initialized for V1.0 of the protocol. + + + + + A list of all supported OAuth versions, in order starting from newest version. + + + + + The default (or most recent) supported version of the OpenID protocol. + + + + + Gets the OAuth Protocol instance to use for the given version. + + The OAuth version to get. + A matching instance. + + + + Gets or sets the OAuth 2.0 version represented by this instance. + + The version. + + + + Gets or sets the OAuth 2.0 version represented by this instance. + + The protocol version. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to The value for message part "{0}" must be an absolute URI.. + + + + + Looks up a localized string similar to The access token contains characters that must not appear in the HTTP Authorization header.. + + + + + Looks up a localized string similar to At least one parameter is required for the Bearer scheme in its WWW-Authenticate header.. + + + + + Looks up a localized string similar to This message can only be sent over HTTPS.. + + + + + Looks up a localized string similar to The scope token "{0}" contains illegal characters or is empty.. + + + + + Looks up a localized string similar to Refresh tokens should not be granted without the request including an access grant.. + + + + + Looks up a localized string similar to The '{0}' parameter contains the illegal character '{1}'.. + + + + + Looks up a localized string similar to The return value of {0}.{1} should never be null.. + + + + + Looks up a localized string similar to Individual scopes may not contain spaces.. + + + + + Represents the <oauth2/resourceServer> section in the host's .config file. + + + + + The name of the oauth2/client section. + + + + + Initializes a new instance of the class. + + + + + Gets the configuration section from the .config file. + + + + + The channel for the OAuth protocol. + + + + + The messages receivable by this channel. + + + + + The protocol versions supported by this channel. + + + + + Initializes a new instance of the class. + + + + + Gets the protocol message that may be embedded in the given HTTP request. + + The request to search for an embedded message. + + The deserialized message, if one is found. Null otherwise. + + + + + Gets the protocol message that may be in the given HTTP response. + + The response that is anticipated to contain an protocol message. + + The deserialized message parts, if found. Null otherwise. + + Thrown when the response is not valid. + + + + Queues a message for sending in the response stream where the fields + are sent in the response stream in querystring style. + + The message to send as a response. + + The pending user agent redirect based message to be sent as an HttpResponse. + + + This method implements spec OAuth V1.0 section 5.3. + + + + + Searches for a bearer access token in the request. + + The request. + The bearer access token, if one exists. Otherwise null. + + + + An interface that resource server hosts should implement if they accept access tokens + issued by non-DotNetOpenAuth authorization servers. + + + + + Reads an access token to find out what data it authorizes access to. + + The message carrying the access token. + The access token's serialized representation. + The deserialized, validated token. + Thrown if the access token is expired, invalid, or from an untrusted authorization server. + + + + Code contract for the interface. + + + + + Prevents a default instance of the class from being created. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Client Identifier starts with a resource owner prefix. Authorization aborted.. + + + + + Looks up a localized string similar to Invalid access token.. + + + + + Looks up a localized string similar to Missing access token.. + + + + + Looks up a localized string similar to Resource owner username starts with a client prefix. Authorization aborted.. + + + + + Provides services for validating OAuth access tokens. + + + + + A reusable instance of the scope satisfied checker. + + + + + Initializes a new instance of the class. + + The access token analyzer. + + + + Discovers what access the client should have considering the access token in the current request. + + The HTTP request info. + The set of scopes required to approve this request. + + The access token describing the authorization the client has. Never null. + + + Thrown when the client is not authorized. This exception should be caught and the + message should be returned to the client. + + + + + Discovers what access the client should have considering the access token in the current request. + + The HTTP request message. + The set of scopes required to approve this request. + + The access token describing the authorization the client has. Never null. + + + Thrown when the client is not authorized. This exception should be caught and the + message should be returned to the client. + + + + + Discovers what access the client should have considering the access token in the current request. + + The HTTP request info. + The set of scopes required to approve this request. + + The principal that contains the user and roles that the access token is authorized for. Never null. + + + Thrown when the client is not authorized. This exception should be caught and the + message should be returned to the client. + + + + + Discovers what access the client should have considering the access token in the current request. + + HTTP details from an incoming WCF message. + The URI of the WCF service endpoint. + The set of scopes required to approve this request. + + The principal that contains the user and roles that the access token is authorized for. Never null. + + + Thrown when the client is not authorized. This exception should be caught and the + message should be returned to the client. + + + + + Discovers what access the client should have considering the access token in the current request. + + HTTP details from an incoming HTTP request message. + The set of scopes required to approve this request. + + The principal that contains the user and roles that the access token is authorized for. Never null. + + + Thrown when the client is not authorized. This exception should be caught and the + message should be returned to the client. + + + + + Gets the access token analyzer. + + The access token analyzer. + + + + Gets or sets the service that checks whether a granted set of scopes satisfies a required set of scopes. + + + + + Gets or sets the prefix to apply to a resource owner's username when used as the username in an . + + The default value is the empty string. + + + + Gets or sets the prefix to apply to a client identifier when used as the username in an . + + The default value is "client:" + + + + Gets the channel. + + The channel. + + + + An access token reader that understands DotNetOpenAuth authorization server issued tokens. + + + + + Initializes a new instance of the class. + + The crypto service provider with the authorization server public signing key. + The crypto service provider with the resource server private encryption key. + + + + Reads an access token to find out what data it authorizes access to. + + The message carrying the access token. + The access token's serialized representation. + The deserialized, validated token. + Thrown if the access token is expired, invalid, or from an untrusted authorization server. + + + + Gets the authorization server public signing key. + + The authorization server public signing key. + + + + Gets the resource server private encryption key. + + The resource server private encryption key. + + + + Describes a collection of association type sub-elements in a .config file. + + + + + Initializes a new instance of the class. + + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + + + + When overridden in a derived class, creates a new . + + + A new . + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + The to return the key for. + + An that acts as the key for the specified . + + + + + Describes an association type and its maximum lifetime as an element + in a .config file. + + + + + The name of the attribute that stores the association type. + + + + + The name of the attribute that stores the association's maximum lifetime. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the protocol name of the association. + + + + + Gets or sets the maximum time a shared association should live. + + The default value is 14 days. + + + + The configuration element that can adjust how hostmeta discovery works. + + + + + The property name for enableCertificateValidationCache. + + + + + Initializes a new instance of the class. + + + + + Gets or sets a value indicating whether validated certificates should be cached and not validated again. + + + This helps to avoid unexplained 5-10 second delays in certificate validation for Google Apps for Domains that impact some servers. + + + + + Represents the <openid> element in the host's .config file. + + + + + The name of the section under which this library's settings must be found. + + + + + The name of the <relyingParty> sub-element. + + + + + The name of the <provider> sub-element. + + + + + The name of the <extensions> sub-element. + + + + + The name of the <xriResolver> sub-element. + + + + + The name of the @maxAuthenticationTime attribute. + + + + + The name of the @cacheDiscovery attribute. + + + + + Initializes a new instance of the class. + + + + + Gets the configuration section from the .config file. + + + + + Gets or sets the maximum time a user can take to complete authentication. + + + This time limit allows the library to decide how long to cache certain values + necessary to complete authentication. The lower the time, the less demand on + the server. But too short a time can frustrate the user. + + + + + Gets or sets a value indicating whether the results of Identifier discovery + should be cached. + + + Use true to allow identifier discovery to immediately return cached results when available; + otherwise, use false.to force fresh results every time at the cost of slightly slower logins. + The default value is true. + + + When enabled, caching is done according to HTTP standards. + + + + + Gets or sets the configuration specific for Relying Parties. + + + + + Gets or sets the configuration specific for Providers. + + + + + Gets or sets the registered OpenID extension factories. + + + + + Gets or sets the configuration for the XRI resolver. + + + + + The section in the .config file that allows customization of OpenID Provider behaviors. + + + + + The name of the <provider> sub-element. + + + + + The name of the security sub-element. + + + + + Gets the name of the <behaviors> sub-element. + + + + + The name of the custom store sub-element. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the security settings. + + + + + Gets or sets the special behaviors to apply. + + + + + Gets or sets the type to use for storing application state. + + + + + Represents the .config file element that allows for setting the security policies of the Provider. + + + + + Gets the name of the @protectDownlevelReplayAttacks attribute. + + + + + Gets the name of the @minimumHashBitLength attribute. + + + + + Gets the name of the @maximumHashBitLength attribute. + + + + + The name of the associations collection sub-element. + + + + + The name of the @encodeAssociationSecretsInHandles attribute. + + + + + Gets the name of the @requireSsl attribute. + + + + + Gets the name of the @unsolicitedAssertionVerification attribute. + + + + + Initializes a new instance of the class. + + + + + Initializes a programmatically manipulatable bag of these security settings with the settings from the config file. + + The newly created security settings object. + + + + Gets or sets a value indicating whether all discovery and authentication should require SSL security. + + + + + Gets or sets the minimum length of the hash that protects the protocol from hijackers. + + + + + Gets or sets the maximum length of the hash that protects the protocol from hijackers. + + + + + Gets or sets a value indicating whether the Provider should take special care + to protect OpenID 1.x relying parties against replay attacks. + + + + + Gets or sets the level of verification a Provider performs on an identifier before + sending an unsolicited assertion for it. + + The default value is . + + + + Gets or sets the configured lifetimes of the various association types. + + + + + Gets or sets a value indicating whether the Provider should ease the burden of storing associations + by encoding their secrets (in signed, encrypted form) into the association handles themselves, storing only + a few rotating, private symmetric keys in the Provider's store instead. + + + + + The section in the .config file that allows customization of OpenID Relying Party behaviors. + + + + + The name of the custom store sub-element. + + + + + The name of the <relyingParty> sub-element. + + + + + The name of the attribute that specifies whether dnoa.userSuppliedIdentifier is tacked onto the openid.return_to URL. + + + + + Gets the name of the security sub-element. + + + + + The name of the <behaviors> sub-element. + + + + + The name of the <discoveryServices> sub-element. + + + + + The name of the <hostMetaDiscovery> sub-element. + + + + + The built-in set of identifier discovery services. + + + + + Initializes a new instance of the class. + + + + + Gets or sets a value indicating whether "dnoa.userSuppliedIdentifier" is tacked onto the openid.return_to URL in order to preserve what the user typed into the OpenID box. + + + The default value is true. + + + + + Gets or sets the security settings. + + + + + Gets or sets the special behaviors to apply. + + + + + Gets or sets the type to use for storing application state. + + + + + Gets or sets the host meta discovery configuration element. + + + + + Gets or sets the services to use for discovering service endpoints for identifiers. + + + If no discovery services are defined in the (web) application's .config file, + the default set of discovery services built into the library are used. + + + + + Represents the .config file element that allows for setting the security policies of the Relying Party. + + + + + Gets the name of the @minimumRequiredOpenIdVersion attribute. + + + + + Gets the name of the @minimumHashBitLength attribute. + + + + + Gets the name of the @maximumHashBitLength attribute. + + + + + Gets the name of the @requireSsl attribute. + + + + + Gets the name of the @requireDirectedIdentity attribute. + + + + + Gets the name of the @requireAssociation attribute. + + + + + Gets the name of the @rejectUnsolicitedAssertions attribute. + + + + + Gets the name of the @rejectDelegatedIdentifiers attribute. + + + + + Gets the name of the @ignoreUnsignedExtensions attribute. + + + + + Gets the name of the @allowDualPurposeIdentifiers attribute. + + + + + Gets the name of the @allowApproximateIdentifierDiscovery attribute. + + + + + Gets the name of the @protectDownlevelReplayAttacks attribute. + + + + + The name of the <trustedProviders> sub-element. + + + + + Initializes a new instance of the class. + + + + + Initializes a programmatically manipulatable bag of these security settings with the settings from the config file. + + The newly created security settings object. + + + + Gets or sets a value indicating whether all discovery and authentication should require SSL security. + + + + + Gets or sets a value indicating whether only OP Identifiers will be discoverable + when creating authentication requests. + + + + + Gets or sets a value indicating whether authentication requests + will only be created where an association with the Provider can be established. + + + + + Gets or sets the minimum OpenID version a Provider is required to support in order for this library to interoperate with it. + + + Although the earliest versions of OpenID are supported, for security reasons it may be desirable to require the + remote party to support a later version of OpenID. + + + + + Gets or sets the minimum length of the hash that protects the protocol from hijackers. + + + + + Gets or sets the maximum length of the hash that protects the protocol from hijackers. + + + + + Gets or sets a value indicating whether all unsolicited assertions should be ignored. + + The default value is false. + + + + Gets or sets a value indicating whether delegating identifiers are refused for authentication. + + The default value is false. + + When set to true, login attempts that start at the RP or arrive via unsolicited + assertions will be rejected if discovery on the identifier shows that OpenID delegation + is used for the identifier. This is useful for an RP that should only accept identifiers + directly issued by the Provider that is sending the assertion. + + + + + Gets or sets a value indicating whether unsigned extensions in authentication responses should be ignored. + + The default value is false. + + When set to true, the methods + will not return any extension that was not signed by the Provider. + + + + + Gets or sets a value indicating whether identifiers that are both OP Identifiers and Claimed Identifiers + should ever be recognized as claimed identifiers. + + + The default value is false, per the OpenID 2.0 spec. + + + + + Gets or sets a value indicating whether certain Claimed Identifiers that exploit + features that .NET does not have the ability to send exact HTTP requests for will + still be allowed by using an approximate HTTP request. + + + The default value is true. + + + + + Gets or sets a value indicating whether the Relying Party should take special care + to protect users against replay attacks when interoperating with OpenID 1.1 Providers. + + + + + Gets or sets the set of trusted OpenID Provider Endpoints. + + + + + Represents the <xriResolver> element in the host's .config file. + + + + + Gets the name of the @enabled attribute. + + + + + The default value for . + + + + + The name of the <proxy> sub-element. + + + + + The default XRI proxy resolver to use. + + + + + Initializes a new instance of the class. + + + + + Gets or sets a value indicating whether this XRI resolution is enabled. + + The default value is true. + + + + Gets or sets the proxy to use for resolving XRIs. + + The default value is "xri.net". + + + + Adds OpenID-specific extension methods to the XrdsDocument class. + + + + + Creates the service endpoints described in this document, useful for requesting + authentication of one of the OpenID Providers that result from it. + + The XrdsDocument instance to use in this process. + The claimed identifier that was used to discover this XRDS document. + The user supplied identifier. + + A sequence of OpenID Providers that can assert ownership of the . + + + + + Creates the service endpoints described in this document, useful for requesting + authentication of one of the OpenID Providers that result from it. + + The XrdsDocument instance to use in this process. + The user-supplied i-name that was used to discover this XRDS document. + A sequence of OpenID Providers that can assert ownership of the canonical ID given in this document. + + + + Generates OpenID Providers that can authenticate using directed identity. + + The XrdsDocument instance to use in this process. + The OP Identifier entered (and resolved) by the user. Essentially the user-supplied identifier. + A sequence of the providers that can offer directed identity services. + + + + Generates the OpenID Providers that are capable of asserting ownership + of a particular URI claimed identifier. + + The XrdsDocument instance to use in this process. + The claimed identifier. + The user supplied identifier. + + A sequence of the providers that can assert ownership of the given identifier. + + + + + Generates the OpenID Providers that are capable of asserting ownership + of a particular XRI claimed identifier. + + The XrdsDocument instance to use in this process. + The i-name supplied by the user. + A sequence of the providers that can assert ownership of the given identifier. + + + + Enumerates the XRDS service elements that describe OpenID Providers offering directed identity assertions. + + The XrdsDocument instance to use in this process. + A sequence of service elements. + + + + Returns the OpenID-compatible services described by a given XRDS document, + in priority order. + + The XrdsDocument instance to use in this process. + A sequence of the services offered. + + + + Stores a secret used in signing and verifying messages. + + + OpenID associations may be shared between Provider and Relying Party (smart + associations), or be a way for a Provider to recall its own secret for later + (dumb associations). + + + + + Initializes a new instance of the class. + + The handle. + The secret. + How long the association will be useful. + The UTC time of when this association was originally issued by the Provider. + + + + Re-instantiates an previously persisted in a database or some + other shared store. + + + The property of the previous instance. + + + The UTC value of the property of the previous instance. + + + The byte array returned by a call to on the previous + instance. + + + The newly dehydrated , which can be returned + from a custom association store's + IRelyingPartyAssociationStore.GetAssociation method. + + + + + Returns private data required to persist this in + permanent storage (a shared database for example) for deserialization later. + + + An opaque byte array that must be stored and returned exactly as it is provided here. + The byte array may vary in length depending on the specific type of , + but in current versions are no larger than 256 bytes. + + + Values of public properties on the base class are not included + in this byte array, as they are useful for fast database lookup and are persisted separately. + + + + + Tests equality of two objects. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + + Returns the hash code. + + + A hash code for the current . + + + + + The string to pass as the assoc_type value in the OpenID protocol. + + The protocol version of the message that the assoc_type value will be included in. + The value that should be used for the openid.assoc_type parameter. + + + + Generates a signature from a given blob of data. + + The data to sign. This data will not be changed (the signature is the return value). + The calculated signature of the data. + + + + Returns the specific hash algorithm used for message signing. + + The hash algorithm used for message signing. + + + + Gets a unique handle by which this may be stored or retrieved. + + + + + Gets the UTC time when this will expire. + + + + + Gets a value indicating whether this has already expired. + + + + + Gets the length (in bits) of the hash this association creates when signing. + + + + + Gets a value indicating whether this instance has useful life remaining. + + + true if this instance has useful life remaining; otherwise, false. + + + + + Gets or sets the UTC time that this was first created. + + + + + Gets the duration a secret key used for signing dumb client requests will be good for. + + + + + Gets the number of seconds until this expires. + Never negative (counter runs to zero). + + + + + Gets the shared secret key between the consumer and provider. + + + + + Gets the lifetime the OpenID provider permits this . + + + + + Gets the minimum lifetime an association must still be good for in order for it to be used for a future authentication. + + + Associations that are not likely to last the duration of a user login are not worth using at all. + + + + + Gets the TimeSpan till this association expires. + + + + + Indicates the mode the Provider should use while authenticating the end user. + + + + + The Provider should use whatever credentials are immediately available + to determine whether the end user owns the Identifier. If sufficient + credentials (i.e. cookies) are not immediately available, the Provider + should fail rather than prompt the user. + + + + + The Provider should determine whether the end user owns the Identifier, + displaying a web page to the user to login etc., if necessary. + + + + + An Attribute Exchange and Simple Registration filter to make all incoming attribute + requests look like Simple Registration requests, and to convert the response + to the originally requested extension and format. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the AX attribute type URI formats this transform is willing to work with. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to The PAPE request has an incomplete set of authentication policies.. + + + + + Looks up a localized string similar to A PAPE response is missing or is missing required policies.. + + + + + Looks up a localized string similar to No personally identifiable information should be included in authentication responses when the PAPE authentication policy http://www.idmanagement.gov/schema/2009/05/icam/no-pii.pdf is present.. + + + + + Looks up a localized string similar to No personally identifiable information should be requested when the http://www.idmanagement.gov/schema/2009/05/icam/no-pii.pdf PAPE policy is present.. + + + + + Looks up a localized string similar to No PPID provider has been configured.. + + + + + Looks up a localized string similar to Discovery on the Realm URL MUST be performed before sending a positive assertion.. + + + + + Looks up a localized string similar to The Realm in an authentication request must be an HTTPS URL.. + + + + + Implements the Identity, Credential, & Access Management (ICAM) OpenID 2.0 Profile + for the General Services Administration (GSA). + + + Relying parties that include this profile are always held to the terms required by the profile, + but Providers are only affected by the special behaviors of the profile when the RP specifically + indicates that they want to use this profile. + + + + + Backing field for the static property. + + + + + Initializes a new instance of the class. + + + + + Gets or sets a value indicating whether PII is allowed to be requested or received via OpenID. + + The default value is false. + + + + Gets or sets a value indicating whether to ignore the SSL requirement (for testing purposes only). + + + + + Provides a mechanism for Relying Parties to work with OpenID 1.0 Providers + without losing claimed_id and op_endpoint data, which OpenID 2.0 Providers + are required to send back with positive assertions. + + + + + The "dnoa.op_endpoint" callback parameter that stores the Provider Endpoint URL + to tack onto the return_to URI. + + + + + The "dnoa.claimed_id" callback parameter that stores the Claimed Identifier + to tack onto the return_to URI. + + + + + Prepares a message for sending based on the rules of this channel binding element. + + The message to prepare for sending. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Performs any transformation on an incoming message that may be necessary and/or + validates an incoming message based on the rules of this channel binding element. + + The incoming message to process. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Thrown when the binding element rules indicate that this message is invalid and should + NOT be processed. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Gets or sets the channel that this binding element belongs to. + + + + + This property is set by the channel when it is first constructed. + + + + + Gets the protection offered (if any) by this binding element. + + + + + + + + Signs and verifies authentication assertions. + + + + + Prepares a message for sending based on the rules of this channel binding element. + + The message to prepare for sending. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + + + Performs any transformation on an incoming message that may be necessary and/or + validates an incoming message based on the rules of this channel binding element. + + The incoming message to process. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Thrown when the binding element rules indicate that this message is invalid and should + NOT be processed. + + + + + Verifies the signature by unrecognized handle. + + The message. + The signed message. + The protections applied. + The applied protections. + + + + Calculates the signature for a given message. + + The message to sign or verify. + The association to use to sign the message. + The calculated signature of the method. + + + + Gets the association to use to sign or verify a message. + + The message to sign or verify. + The association to use to sign or verify the message. + + + + Gets a specific association referenced in a given message's association handle. + + The signed message whose association handle should be used to lookup the association to return. + The referenced association; or null if such an association cannot be found. + + If the association handle set in the message does not match any valid association, + the association handle property is cleared, and the + property is set to the + handle that could not be found. + + + + + Gets a private Provider association used for signing messages in "dumb" mode. + + An existing or newly created association. + + + + Ensures that all message parameters that must be signed are in fact included + in the signature. + + The signed message. + + + + Gets the protection offered (if any) by this binding element. + + + + + + + + Gets or sets the channel that this binding element belongs to. + + + + + Gets a value indicating whether this binding element is on a Provider channel. + + + + + Code contract for the class. + + + + + Verifies the signature by unrecognized handle. + + The message. + The signed message. + The protections applied. + + The applied protections. + + + + + Gets the association to use to sign or verify a message. + + The message to sign or verify. + + The association to use to sign or verify the message. + + + + + Gets a specific association referenced in a given message's association handle. + + The signed message whose association handle should be used to lookup the association to return. + + The referenced association; or null if such an association cannot be found. + + + + + The binding element that serializes/deserializes OpenID extensions to/from + their carrying OpenID messages. + + + + + False if unsigned extensions should be dropped. Must always be true on Providers, since RPs never sign extensions. + + + + + Initializes a new instance of the class. + + The extension factory. + The security settings. + Security setting for relying parties. Should be true for Providers. + + + + Prepares a message for sending based on the rules of this channel binding element. + + The message to prepare for sending. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Performs any transformation on an incoming message that may be necessary and/or + validates an incoming message based on the rules of this channel binding element. + + The incoming message to process. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Thrown when the binding element rules indicate that this message is invalid and should + NOT be processed. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Gets the extensions on a message. + + The carrier of the extensions. + If set to true only signed extensions will be available. + A optional filter that takes an extension type URI and + returns a value indicating whether that extension should be deserialized and + returned in the sequence. May be null. + A sequence of extensions in the message. + + + + Gets the dictionary of message parts that should be deserialized into extensions. + + The message. + If set to true only signed extensions will be available. + + A dictionary of message parts, including only signed parts when appropriate. + + + + + Gets or sets the channel that this binding element belongs to. + + + + + This property is set by the channel when it is first constructed. + + + + + Gets the extension factory. + + + + + Gets the protection offered (if any) by this binding element. + + + + + + + + OpenID extension factory class for creating extensions based on received Type URIs. + + + OpenID extension factories must be registered with the library. This can be + done by adding a factory to OpenIdRelyingParty.ExtensionFactories + or OpenIdProvider.ExtensionFactories, or by adding a snippet + such as the following to your web.config file: + + <dotNetOpenAuth> + <openid> + <extensionFactories> + <add type="DotNetOpenAuth.ApplicationBlock.CustomExtensions.Acme, DotNetOpenAuth.ApplicationBlock" /> + </extensionFactories> + </openid> + </dotNetOpenAuth> + + + + + Creates a new instance of some extension based on the received extension parameters. + + The type URI of the extension. + The parameters associated specifically with this extension. + The OpenID message carrying this extension. + A value indicating whether this extension is being received at the OpenID Provider. + + An instance of if the factory recognizes + the extension described in the input parameters; null otherwise. + + + This factory method need only initialize properties in the instantiated extension object + that are not bound using . + + + + + An interface that OAuth messages implement to support signing. + + + + + Gets or sets the association handle used to sign the message. + + The handle for the association that was used to sign this assertion. + + + + Gets or sets the association handle that the Provider wants the Relying Party to not use any more. + + If the Relying Party sent an invalid association handle with the request, it SHOULD be included here. + + + + Gets or sets the signed parameter order. + + Comma-separated list of signed fields. + "op_endpoint,identity,claimed_id,return_to,assoc_handle,response_nonce" + + This entry consists of the fields without the "openid." prefix that the signature covers. + This list MUST contain at least "op_endpoint", "return_to" "response_nonce" and "assoc_handle", + and if present in the response, "claimed_id" and "identity". + Additional keys MAY be signed as part of the message. See Generating Signatures. + + + + + A Uri encoder that serializes using + rather than the standard . + + + + + Encodes the specified value. + + The value. Guaranteed to never be null. + + The in string form, ready for message transport. + + + + + Decodes the specified value. + + The string value carried by the transport. Guaranteed to never be null, although it may be empty. + + The deserialized form of the given string. + + Thrown when the string value given cannot be decoded into the required object type. + + + + Indicates the level of strictness to require when decoding a + Key-Value Form encoded dictionary. + + + + + Be as forgiving as possible to errors made while encoding. + + + + + Allow for certain errors in encoding attributable to ambiguities + in the OpenID 1.1 spec's description of the encoding. + + + + + The strictest mode. The decoder requires the encoded dictionary + to be in strict compliance with OpenID 2.0's description of + the encoding. + + + + + Performs conversion to and from the Key-Value Form Encoding defined by + OpenID Authentication 2.0 section 4.1.1. + http://openid.net/specs/openid-authentication-2_0.html#anchor4 + + + This class is thread safe and immutable. + + + + + The newline character sequence to use. + + + + + Characters that must not appear in parameter names. + + + + + Characters that must not appaer in parameter values. + + + + + The character encoding to use. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + How strictly an incoming Key-Value Form message will be held to the spec. + + + + Encodes key/value pairs to Key-Value Form. + + + The dictionary of key/value pairs to convert to a byte stream. + + The UTF8 byte array. + + Enumerating a Dictionary<TKey, TValue> has undeterministic ordering. + If ordering of the key=value pairs is important, a deterministic enumerator must + be used. + + + + + Decodes bytes in Key-Value Form to key/value pairs. + + The stream of Key-Value Form encoded bytes. + The deserialized dictionary. + Thrown when the data is not in the expected format. + + + + Gets a value controlling how strictly an incoming Key-Value Form message will be held to the spec. + + + + + A channel that knows how to send and receive OpenID messages. + + + + + The HTTP Content-Type to use in Key-Value Form responses. + + + OpenID 2.0 section 5.1.2 says this SHOULD be text/plain. But this value + does not prevent free hosters like GoDaddy from tacking on their ads + to the end of the direct response, corrupting the data. So we deviate + from the spec a bit here to improve the story for free Providers. + + + + + The encoder that understands how to read and write Key-Value Form. + + + + + Initializes a new instance of the class. + + A class prepared to analyze incoming messages and indicate what concrete + message types can deserialize from it. + The binding elements to use in sending and receiving messages. + + + + Verifies the integrity and applicability of an incoming message. + + The message just received. + + Thrown when the message is somehow invalid, except for check_authentication messages. + This can be due to tampering, replay attack or expiration, among other things. + + + + + Prepares an HTTP request that carries a given message. + + The message to send. + + The prepared to send the request. + + + + + Gets the protocol message that may be in the given HTTP response. + + The response that is anticipated to contain an protocol message. + + The deserialized message parts, if found. Null otherwise. + + Thrown when the response is not valid. + + + + Called when receiving a direct response message, before deserialization begins. + + The HTTP direct response. + The newly instantiated message, prior to deserialization. + + + + Queues a message for sending in the response stream where the fields + are sent in the response stream in querystring style. + + The message to send as a response. + + The pending user agent redirect based message to be sent as an HttpResponse. + + + This method implements spec V1.0 section 5.3. + + + + + Gets the direct response of a direct HTTP request. + + The web request. + The response to the web request. + Thrown on network or protocol errors. + + + + This binding element signs a Relying Party's openid.return_to parameter + so that upon return, it can verify that it hasn't been tampered with. + + + Since Providers can send unsolicited assertions, not all openid.return_to + values will be signed. But those that are signed will be validated, and + any invalid or missing signatures will cause this library to not trust + the parameters in the return_to URL. + In the messaging stack, this binding element looks like an ordinary + transform-type of binding element rather than a protection element, + due to its required order in the channel stack and that it doesn't sign + anything except a particular message part. + + + + + The name of the callback parameter we'll tack onto the return_to value + to store our signature on the return_to parameter. + + + + + The name of the callback parameter we'll tack onto the return_to value + to store the handle of the association we use to sign the return_to parameter. + + + + + The URI to use for private associations at this RP. + + + + + The key store used to generate the private signature on the return_to parameter. + + + + + Initializes a new instance of the class. + + The crypto key store. + + + + Prepares a message for sending based on the rules of this channel binding element. + + The message to prepare for sending. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Performs any transformation on an incoming message that may be necessary and/or + validates an incoming message based on the rules of this channel binding element. + + The incoming message to process. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Thrown when the binding element rules indicate that this message is invalid and should + NOT be processed. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Gets the return to signature. + + The return to. + The crypto key. + + The generated signature. + + + Only the parameters in the return_to URI are signed, rather than the base URI + itself, in order that OPs that might change the return_to's implicit port :80 part + or other minor changes do not invalidate the signature. + + + + + Gets or sets the channel that this binding element belongs to. + + + + + This property is set by the channel when it is first constructed. + + + + + Gets the protection offered (if any) by this binding element. + + + + + + No message protection is reported because this binding element + does not protect the entire message -- only a part. + + + + + Spoofs security checks on incoming OpenID messages. + + + + + Prepares a message for sending based on the rules of this channel binding element. + + The message to prepare for sending. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Performs any transformation on an incoming message that may be necessary and/or + validates an incoming message based on the rules of this channel binding element. + + The incoming message to process. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Thrown when the binding element rules indicate that this message is invalid and should + NOT be processed. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Gets or sets the channel that this binding element belongs to. + + + + + This property is set by the channel when it is first constructed. + + + + + Gets the protection commonly offered (if any) by this binding element. + + + + + + This value is used to assist in sorting binding elements in the channel stack. + + + + + Code contract for the class. + + + + + Prevents a default instance of the class from being created. + + + + + The string to pass as the assoc_type value in the OpenID protocol. + + The protocol version of the message that the assoc_type value will be included in. + + The value that should be used for the openid.assoc_type parameter. + + + + + Returns the specific hash algorithm used for message signing. + + + The hash algorithm used for message signing. + + + + + Gets the length (in bits) of the hash this association creates when signing. + + + + + Manages a fast, two-way mapping between type URIs and their aliases. + + + + + The format of auto-generated aliases. + + + + + Tracks extension Type URIs and aliases assigned to them. + + + + + Tracks extension aliases and Type URIs assigned to them. + + + + + Gets an alias assigned for a given Type URI. A new alias is assigned if necessary. + + The type URI. + The alias assigned to this type URI. Never null. + + + + Sets an alias and the value that will be returned by . + + The alias. + The type URI. + + + + Takes a sequence of type URIs and assigns aliases for all of them. + + The type URIs to create aliases for. + An optional dictionary of URI/alias pairs that suggest preferred aliases to use if available for certain type URIs. + + + + Sets up aliases for any Type URIs in a dictionary that do not yet have aliases defined, + and where the given preferred alias is still available. + + A dictionary of type URI keys and alias values. + + + + Gets the Type Uri encoded by a given alias. + + The alias. + The Type URI. + Thrown if the given alias does not have a matching TypeURI. + + + + Gets the Type Uri encoded by a given alias. + + The alias. + The Type URI for the given alias, or null if none for that alias exist. + + + + Returns a value indicating whether an alias has already been assigned to a type URI. + + The alias in question. + True if the alias has already been assigned. False otherwise. + + + + Determines whether a given TypeURI has an associated alias assigned to it. + + The type URI. + + true if the given type URI already has an alias assigned; false otherwise. + + + + + Assigns a new alias to a given Type URI. + + The type URI to assign a new alias to. + The newly generated alias. + + + + Gets the aliases that have been set. + + + + + An individual attribute to be requested of the OpenID Provider using + the Attribute Exchange extension. + + + + + Backing field for the property. + + + + + Initializes a new instance of the class + with = false, = 1. + + + + + Initializes a new instance of the class + with = false, = 1. + + The unique TypeURI for that describes the attribute being sought. + + + + Initializes a new instance of the class + with = 1. + + The unique TypeURI for that describes the attribute being sought. + A value indicating whether the Relying Party considers this attribute to be required for registration. + + + + Initializes a new instance of the class. + + The unique TypeURI for that describes the attribute being sought. + A value indicating whether the Relying Party considers this attribute to be required for registration. + The maximum number of values for this attribute the Relying Party is prepared to receive. + + + + Used by a Provider to create a response to a request for an attribute's value(s) + using a given array of strings. + + The values for the requested attribute. + + The newly created object that should be added to + the object. + + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Gets or sets the URI uniquely identifying the attribute being requested. + + + + + Gets or sets a value indicating whether the relying party considers this a required field. + Note that even if set to true, the Provider may not provide the value. + + + + + Gets or sets the maximum number of values for this attribute the + Relying Party wishes to receive from the OpenID Provider. + A value of int.MaxValue is considered infinity. + + + + + An individual attribute's value(s) as supplied by an OpenID Provider + in response to a prior request by an OpenID Relying Party as part of + a fetch request, or by a relying party as part of a store request. + + + + + Initializes a new instance of the class. + + The TypeURI that uniquely identifies the attribute. + The values for the attribute. + + + + Initializes a new instance of the class. + + + This is internal because web sites should be using the + method to instantiate. + + + + + Initializes a new instance of the class. + + The TypeURI of the attribute whose values are being provided. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Gets the URI uniquely identifying the attribute whose value is being supplied. + + + + + Gets the values supplied by the Provider. + + + + + The various Type URI formats an AX attribute may use by various remote parties. + + + + + No attribute format. + + + + + AX attributes should use the Type URI format starting with http://axschema.org/. + + + + + AX attributes should use the Type URI format starting with http://schema.openid.net/. + + + + + AX attributes should use the Type URI format starting with http://openid.net/schema/. + + + + + All known schemas. + + + + + The most common schemas. + + + + + Helper methods shared by multiple messages in the Attribute Exchange extension. + + + + + Adds a request for an attribute considering it 'required'. + + The attribute request collection. + The type URI of the required attribute. + + + + Adds a request for an attribute without considering it 'required'. + + The attribute request collection. + The type URI of the requested attribute. + + + + Adds a given attribute with one or more values to the request for storage. + Applicable to Relying Parties only. + + The collection of to add to. + The type URI of the attribute. + The attribute values. + + + + Serializes a set of attribute values to a dictionary of fields to send in the message. + + The dictionary to fill with serialized attributes. + The attributes. + + + + Deserializes attribute values from an incoming set of message data. + + The data coming in with the message. + The attribute values found in the message. + + + + Reads through the attributes included in the response to discover + the alias-TypeURI relationships. + + The data included in the extension message. + The alias manager that provides lookup between aliases and type URIs. + + + + Attribute Exchange constants + + + + + The TypeURI by which the AX extension is recognized in + OpenID messages and in XRDS documents. + + + + + The contract any OpenID extension for DotNetOpenAuth must implement. + + + Classes that implement this interface should be marked as + [] to allow serializing state servers + to cache messages, particularly responses. + + + + + Gets the TypeURI the extension uses in the OpenID protocol and in XRDS advertisements. + + + + + Gets the additional TypeURIs that are supported by this extension, in preferred order. + May be empty if none other than is supported, but + should not be null. + + + Useful for reading in messages with an older version of an extension. + The value in the property is always checked before + trying this list. + If you do support multiple versions of an extension using this method, + consider adding a CreateResponse method to your request extension class + so that the response can have the context it needs to remain compatible + given the version of the extension in the request message. + The for an example. + + + + + Gets or sets a value indicating whether this extension was + signed by the sender. + + + true if this instance is signed by the sender; otherwise, false. + + + + + A handy base class for built-in extensions. + + + + + Backing store for the property. + + + + + Backing store for the property. + + + + + Backing store for the property. + + + + + Initializes a new instance of the class. + + The version of the extension. + The type URI to use in the OpenID message. + The additional supported type URIs by which this extension might be recognized. May be null. + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Gets the version of the protocol or extension this message is prepared to implement. + + + + + Gets the TypeURI the extension uses in the OpenID protocol and in XRDS advertisements. + + + + + Gets or sets a value indicating whether this extension was + signed by the OpenID Provider. + + + true if this instance is signed by the provider; otherwise, false. + + + + + Gets the additional TypeURIs that are supported by this extension, in preferred order. + May be empty if none other than is supported, but + should not be null. + + + + + Useful for reading in messages with an older version of an extension. + The value in the property is always checked before + trying this list. + If you do support multiple versions of an extension using this method, + consider adding a CreateResponse method to your request extension class + so that the response can have the context it needs to remain compatible + given the version of the extension in the request message. + The for an example. + + + + + Gets the extra, non-standard Protocol parameters included in the message. + + + + + Implementations of this interface should ensure that this property never returns null. + + + + + The Attribute Exchange Fetch message, request leg. + + + + + The value for the 'mode' parameter. + + + + + The factory method that may be used in deserialization of this message. + + + + + Characters that may not appear in an attribute alias list. + + + + + Characters that may not appear in an attribute Type URI alias. + + + + + The collection of requested attributes. + + + + + Initializes a new instance of the class. + + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Splits a list of aliases by their commas. + + The comma-delimited list of aliases. May be null or empty. + The list of aliases. Never null, but may be empty. + + + + Gets a collection of the attributes whose values are + requested by the Relying Party. + + A collection where the keys are the attribute type URIs, and the value + is all the attribute request details. + + + + Gets or sets the URL that the OpenID Provider may re-post the fetch response + message to at some time after the initial response has been sent, using an + OpenID Authentication Positive Assertion to inform the relying party of updates + to the requested fields. + + + + + Gets or sets a list of aliases for optional attributes. + + A comma-delimited list of aliases. + + + + Gets or sets a list of aliases for required attributes. + + A comma-delimited list of aliases. + + + + The Attribute Exchange Fetch message, response leg. + + + + + The value of the 'mode' parameter. + + + + + The factory method that may be used in deserialization of this message. + + + + + The collection of provided attributes. This field will never be null. + + + + + Initializes a new instance of the class. + + + + + Gets the first attribute value provided for a given attribute Type URI. + + + The type URI of the attribute. + Usually a constant from . + + The first value provided for the attribute, or null if the attribute is missing or no values were provided. + + + This is meant as a helper method for the common case of just wanting one attribute value. + For greater flexibility or to retrieve more than just the first value for an attribute, + use the collection directly. + + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Gets a sequence of the attributes whose values are provided by the OpenID Provider. + + + + + Gets a value indicating whether the OpenID Provider intends to + honor the request for updates. + + + + + Gets or sets the URL the OpenID Provider will post updates to. + Must be set if the Provider supports and will use this feature. + + + + + Gets a value indicating whether this extension is signed by the Provider. + + + true if this instance is signed by the Provider; otherwise, false. + + + + + The Attribute Exchange Store message, request leg. + + + + + The value of the 'mode' parameter. + + + + + The factory method that may be used in deserialization of this message. + + + + + The collection of provided attribute values. This field will never be null. + + + + + Initializes a new instance of the class. + + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Gets the collection of all the attributes that are included in the store request. + + + + + The Attribute Exchange Store message, response leg. + + + + + The value of the mode parameter used to express a successful store operation. + + + + + The value of the mode parameter used to express a store operation failure. + + + + + The factory method that may be used in deserialization of this message. + + + + + Initializes a new instance of the class + to represent a successful store operation. + + + + + Initializes a new instance of the class + to represent a failed store operation. + + The reason for failure. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Gets or sets a value indicating whether the storage request succeeded. + + Defaults to true. + + + + Gets or sets the reason for the failure, if applicable. + + + + + Gets a value indicating whether this extension is signed by the Provider. + + + true if this instance is signed by the Provider; otherwise, false. + + + + + Gets or sets the mode argument. + + One of 'store_response_success' or 'store_response_failure'. + + + + Attribute types defined at http://www.axschema.org/types/. + + + If you don't see what you need here, check that URL to see if any have been added. + You can use new ones directly without adding them to this class, and can even make + up your own if you expect the other end to understand what you make up. + + + + + Inherent attributes about a personality such as gender and bio. + + + + + Preferences such as language and timezone. + + + + + The names a person goes by. + + + + + Business affiliation. + + + + + Information about a person's birthdate. + + + + + Various ways to contact a person. + + + + + Various types of phone numbers. + + + + + The many fields that make up an address. + + + + + The many fields that make up an address. + + + + + Various handles for instant message clients. + + + + + Various web addresses connected with this personality. + + + + + Audio and images of this personality. + + + + + Images of this personality. + + + + + Manages the processing and construction of OpenID extensions parts. + + + + + This contains a set of aliases that we must be willing to implicitly + match to namespaces for backward compatibility with other OpenID libraries. + + + + + The version of OpenID that the message is using. + + + + + Whether extensions are being read or written. + + + + + The alias manager that will track Type URI to alias mappings. + + + + + A complex dictionary where the key is the Type URI of the extension, + and the value is another dictionary of the name/value args of the extension. + + + + + Prevents a default instance of the class from being created. + + + + + Creates a instance to process incoming extensions. + + The parameters in the OpenID message. + The newly created instance of . + + + + Creates a instance to prepare outgoing extensions. + + The protocol version used for the outgoing message. + + The newly created instance of . + + + + + Adds query parameters for OpenID extensions to the request directed + at the OpenID provider. + + The extension type URI. + The arguments for this extension to add to the message. + + + + Gets the actual arguments to add to a querystring or other response, + where type URI, alias, and actual key/values are all defined. + + + true if the generated parameter names should include the 'openid.' prefix. + This should be true for all but direct response messages. + + A dictionary of key=value pairs to add to the message to carry the extension. + + + + Gets the fields carried by a given OpenId extension. + + The type URI of the extension whose fields are being queried for. + + The fields included in the given extension, or null if the extension is not present. + + + + + Gets whether any arguments for a given extension are present. + + The extension Type URI in question. + + true if this extension is present; false otherwise. + + + + Gets the type URIs of all discovered extensions in the message. + + A sequence of the type URIs. + + + + Gets a value indicating whether the extensions are being read (as opposed to written). + + + + + An interface that OpenID extensions can implement to allow authentication response + messages with included extensions to be processed by Javascript on the user agent. + + + + + Reads the extension information on an authentication response from the provider. + + The incoming OpenID response carrying the extension. + + A Javascript snippet that when executed on the user agent returns an object with + the information deserialized from the extension response. + + + This method is called before the signature on the assertion response has been + verified. Therefore all information in these fields should be assumed unreliable + and potentially falsified. + + + + + An extension to include with an authentication request in order to also + obtain authorization to access user data at the combined OpenID Provider + and Service Provider. + + + When requesting OpenID Authentication via the protocol mode "checkid_setup" + or "checkid_immediate", this extension can be used to request that the end + user authorize an OAuth access token at the same time as an OpenID + authentication. This is done by sending the following parameters as part + of the OpenID request. (Note that the use of "oauth" as part of the parameter + names here and in subsequent sections is just an example. See Section 5 for details.) + See section 8. + + + + + The factory method that may be used in deserialization of this message. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the consumer key agreed upon between the Consumer and Service Provider. + + + + + Gets or sets a string that encodes, in a way possibly specific to the Combined Provider, one or more scopes for the OAuth token expected in the authentication response. + + + + + The OAuth response that a Provider may include with a positive + OpenID identity assertion with an approved request token. + + + + + The factory method that may be used in deserialization of this message. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the user-approved request token. + + The request token. + + + + Gets or sets a string that encodes, in a way possibly specific to the Combined Provider, one or more scopes that the returned request token is valid for. This will typically indicate a subset of the scopes requested in Section 8. + + + + + Constants used in the OpenID OAuth extension. + + + + + The TypeURI for the OpenID OAuth extension. + + + + + The name of the parameter that carries the request token in the response. + + + + + The OAuth response that a Provider should include with a positive + OpenID identity assertion when OAuth authorization was declined. + + + + + The factory method that may be used in deserialization of this message. + + + + + Initializes a new instance of the class. + + + + + An OpenID extension factory that only delegates extension + instantiation requests to other factories. + + + + + The list of factories this factory delegates to. + + + + + Initializes a new instance of the class. + + + + + Creates a new instance of some extension based on the received extension parameters. + + The type URI of the extension. + The parameters associated specifically with this extension. + The OpenID message carrying this extension. + A value indicating whether this extension is being received at the OpenID Provider. + + An instance of if the factory recognizes + the extension described in the input parameters; null otherwise. + + + This factory method need only initialize properties in the instantiated extension object + that are not bound using . + + + + + Loads the default factory and additional ones given by the configuration. + + A new instance of . + + + + Gets the extension factories that this aggregating factory delegates to. + + A list of factories. May be empty, but never null. + + + + Encodes/decodes the Simple Registration Gender type to its string representation. + + + + + Encodes the specified value. + + The value. Guaranteed to never be null. + + The in string form, ready for message transport. + + + + + Decodes the specified value. + + The string value carried by the transport. Guaranteed to never be null, although it may be empty. + + The deserialized form of the given string. + + Thrown when the string value given cannot be decoded into the required object type. + + + + An OpenID extension factory that supports registration so that third-party + extensions can add themselves to this library's supported extension list. + + + + + A delegate that individual extensions may register with this factory. + + The type URI of the extension. + The parameters associated specifically with this extension. + The OpenID message carrying this extension. + A value indicating whether this extension is being received at the OpenID Provider. + + An instance of if the factory recognizes + the extension described in the input parameters; null otherwise. + + + + + A collection of the registered OpenID extensions. + + + + + Initializes a new instance of the class. + + + + + Creates a new instance of some extension based on the received extension parameters. + + The type URI of the extension. + The parameters associated specifically with this extension. + The OpenID message carrying this extension. + A value indicating whether this extension is being received at the OpenID Provider. + + An instance of if the factory recognizes + the extension described in the input parameters; null otherwise. + + + This factory method need only initialize properties in the instantiated extension object + that are not bound using . + + + + + Registers a new extension delegate. + + The factory method that can create the extension. + + + + Well-known authentication policies defined in the PAPE extension spec or by a recognized + standards body. + + + This is a class of constants rather than a flags enum because policies may be + freely defined and used by anyone, just by using a new Uri. + + + + + An authentication mechanism where the End User does not provide a shared secret to a party potentially under the control of the Relying Party. (Note that the potentially malicious Relying Party controls where the User-Agent is redirected to and thus may not send it to the End User's actual OpenID Provider). + + + + + An authentication mechanism where the End User authenticates to the OpenID Provider by providing over one authentication factor. Common authentication factors are something you know, something you have, and something you are. An example would be authentication using a password and a software token or digital certificate. + + + + + An authentication mechanism where the End User authenticates to the OpenID Provider by providing over one authentication factor where at least one of the factors is a physical factor such as a hardware device or biometric. Common authentication factors are something you know, something you have, and something you are. This policy also implies the Multi-Factor Authentication policy (http://schemas.openid.net/pape/policies/2007/06/multi-factor) and both policies MAY BE specified in conjunction without conflict. An example would be authentication using a password and a hardware token. + + + + + Indicates that the Provider MUST use a pair-wise pseudonym for the user that is persistent + and unique across the requesting realm as the openid.claimed_id and openid.identity (see Section 4.2). + + + + + Indicates that the OP MUST only respond with a positive assertion if the requirements demonstrated + by the OP to obtain certification by a Federally adopted Trust Framework Provider have been met. + + + Notwithstanding the RP may request this authentication policy, the RP MUST still + verify that this policy appears in the positive assertion response rather than assume the OP + recognized and complied with the request. + + + + + Indicates that the OP MUST not include any OpenID Attribute Exchange or Simple Registration + information regarding the user in the assertion. + + + + + Used in a PAPE response to indicate that no PAPE authentication policies could be satisfied. + + + Used internally by the PAPE extension, so that users don't have to know about it. + + + + + OpenID Provider Authentication Policy extension constants. + + + + + Well-known assurance level Type URIs. + + + + + Parameters to be included with PAPE requests. + + + + + The namespace used by this extension in messages. + + + + + The namespace alias to use for OpenID 1.x interop, where aliases are not defined in the message. + + + + + The string to prepend on an Auth Level Type alias definition. + + + + + An encoder/decoder design for DateTimes that must conform to the PAPE spec. + + + The timestamp MUST be formatted as specified in section 5.6 of [RFC3339] (Klyne, G. and C. Newman, “Date and Time on the Internet: Timestamps,” .), with the following restrictions: + * All times must be in the UTC timezone, indicated with a "Z". + * No fractional seconds are allowed + For example: 2005-05-15T17:11:51Z + + + + + An array of the date/time formats allowed by the PAPE extension. + + + TODO: This array of formats is not yet a complete list. + + + + + Encodes the specified value. + + The value. Guaranteed to never be null. + + The in string form, ready for message transport. + + + + + Decodes the specified value. + + The string value carried by the transport. Guaranteed to never be null, although it may be empty. + + The deserialized form of the given string. + + Thrown when the string value given cannot be decoded into the required object type. + + + + Descriptions for NIST-defined levels of assurance that a credential + has not been compromised and therefore the extent to which an + authentication assertion can be trusted. + + + One using this enum should review the following publication for details + before asserting or interpreting what these levels signify, notwithstanding + the brief summaries attached to each level in DotNetOpenAuth documentation. + http://csrc.nist.gov/publications/nistpubs/800-63/SP800-63V1_0_2.pdf + + See PAPE spec Appendix A.1.2 (NIST Assurance Levels) for high-level example classifications of authentication methods within the defined levels. + + + + + + Not an assurance level defined by NIST, but rather SHOULD be used to + signify that the OP recognizes the parameter and the End User + authentication did not meet the requirements of Level 1. + + + + + See this document for a thorough description: + http://csrc.nist.gov/publications/nistpubs/800-63/SP800-63V1_0_2.pdf + + + + + See this document for a thorough description: + http://csrc.nist.gov/publications/nistpubs/800-63/SP800-63V1_0_2.pdf + + + + + See this document for a thorough description: + http://csrc.nist.gov/publications/nistpubs/800-63/SP800-63V1_0_2.pdf + + + + + See this document for a thorough description: + http://csrc.nist.gov/publications/nistpubs/800-63/SP800-63V1_0_2.pdf + + + + + Utility methods for use by the PAPE extension. + + + + + Looks at the incoming fields and figures out what the aliases and name spaces for auth level types are. + + The incoming message data in which to discover TypeURIs and aliases. + The initialized with the given data. + + + + Concatenates a sequence of strings using a space as a separator. + + The elements to concatenate together.. + The concatenated string of elements. + Thrown if any element in the sequence includes a space. + + + + The PAPE request part of an OpenID Authentication request message. + + + + + The factory method that may be used in deserialization of this message. + + + + + The transport field for the RP's preferred authentication policies. + + + This field is written to/read from during custom serialization. + + + + + Initializes a new instance of the class. + + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Serializes the policies as a single string per the PAPE spec.. + + The policies to include in the list. + The concatenated string of the given policies. + + + + Serializes the auth levels to a list of aliases. + + The preferred auth level types. + The alias manager. + A space-delimited list of aliases. + + + + Gets or sets the maximum acceptable time since the End User has + actively authenticated to the OP in a manner fitting the requested + policies, beyond which the Provider SHOULD authenticate the + End User for this request. + + + The OP should realize that not adhering to the request for re-authentication + most likely means that the End User will not be allowed access to the + services provided by the RP. If this parameter is absent in the request, + the OP should authenticate the user at its own discretion. + + + + + Gets the list of authentication policy URIs that the OP SHOULD + conform to when authenticating the user. If multiple policies are + requested, the OP SHOULD satisfy as many as it can. + + List of authentication policy URIs obtainable from + the class or from a custom + list. + + If no policies are requested, the RP may be interested in other + information such as the authentication age. + + + + + Gets the namespaces of the custom Assurance Level the + Relying Party requests, in the order of its preference. + + + + + The PAPE response part of an OpenID Authentication response message. + + + + + The first part of a parameter name that gives the custom string value for + the assurance level. The second part of the parameter name is the alias for + that assurance level. + + + + + The factory method that may be used in deserialization of this message. + + + + + One or more authentication policy URIs that the OP conformed to when authenticating the End User. + + Space separated list of authentication policy URIs. + + If no policies were met though the OP wishes to convey other information in the response, this parameter MUST be included with the value of "none". + + + + + Backing field for the property. + + + + + Initializes a new instance of the class. + + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Serializes the applied policies for transmission from the Provider + to the Relying Party. + + The applied policies. + A space-delimited list of applied policies. + + + + Gets a list of authentication policy URIs that the + OP conformed to when authenticating the End User. + + + + + Gets or sets the most recent timestamp when the End User has + actively authenticated to the OP in a manner fitting the asserted policies. + + + If the RP's request included the "openid.pape.max_auth_age" parameter + then the OP MUST include "openid.pape.auth_time" in its response. + If "openid.pape.max_auth_age" was not requested, the OP MAY choose to include + "openid.pape.auth_time" in its response. + + + + + Gets or sets the Assurance Level as defined by the National + Institute of Standards and Technology (NIST) in Special Publication + 800-63 (Burr, W., Dodson, D., and W. Polk, Ed., “Electronic + Authentication Guideline,” April 2006.) [NIST_SP800‑63] corresponding + to the authentication method and policies employed by the OP when + authenticating the End User. + + + See PAPE spec Appendix A.1.2 (NIST Assurance Levels) for high-level + example classifications of authentication methods within the defined + levels. + + + + + Gets a dictionary where keys are the authentication level type URIs and + the values are the per authentication level defined custom value. + + + A very common key is + and values for this key are available in . + + + + + Gets a value indicating whether this extension is signed by the Provider. + + + true if this instance is signed by the Provider; otherwise, false. + + + + + Carries the request/require/none demand state of the simple registration fields. + + + + + The factory method that may be used in deserialization of this message. + + + + + The type URI that this particular (deserialized) extension was read in using, + allowing a response to alter be crafted using the same type URI. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + by deserializing from a message. + + The type URI this extension was recognized by in the OpenID message. + + + + Tests equality between two structs. + + One instance to compare. + Another instance to compare. + The result of the operator. + + + + Tests inequality between two structs. + + One instance to compare. + Another instance to compare. + The result of the operator. + + + + Tests equality between two structs. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Renders the requested information as a string. + + + A that represents the current . + + + + + Prepares a Simple Registration response extension that is compatible with the + version of Simple Registration used in the request message. + + The newly created instance. + + + + Sets the profile request properties according to a list of + field names that might have been passed in the OpenId query dictionary. + + + The list of field names that should receive a given + . These field names should match + the OpenId specification for field names, omitting the 'openid.sreg' prefix. + + The none/request/require state of the listed fields. + + + + Assembles the profile parameter names that have a given . + + The demand level (request, require, none). + An array of the profile parameter names that meet the criteria. + + + + Gets or sets the URL the consumer site provides for the authenticating user to review + for how his claims will be used by the consumer web site. + + + + + Gets or sets the level of interest a relying party has in the nickname of the user. + + + + + Gets or sets the level of interest a relying party has in the email of the user. + + + + + Gets or sets the level of interest a relying party has in the full name of the user. + + + + + Gets or sets the level of interest a relying party has in the birthdate of the user. + + + + + Gets or sets the level of interest a relying party has in the gender of the user. + + + + + Gets or sets the level of interest a relying party has in the postal code of the user. + + + + + Gets or sets the level of interest a relying party has in the Country of the user. + + + + + Gets or sets the level of interest a relying party has in the language of the user. + + + + + Gets or sets the level of interest a relying party has in the time zone of the user. + + + + + Gets or sets a value indicating whether this instance + is synthesized from an AX request at the Provider. + + + + + Gets or sets the value of the sreg.required parameter. + + A comma-delimited list of sreg fields. + + + + Gets or sets the value of the sreg.optional parameter. + + A comma-delimited list of sreg fields. + + + + A struct storing Simple Registration field values describing an + authenticating user. + + + + + The factory method that may be used in deserialization of this message. + + + + + The allowed format for birthdates. + + + + + Storage for the raw string birthdate value. + + + + + Backing field for the property. + + + + + Backing field for the property. + + + + + Initializes a new instance of the class + using the most common, and spec prescribed type URI. + + + + + Initializes a new instance of the class. + + + The type URI that must be used to identify this extension in the response message. + This value should be the same one the relying party used to send the extension request. + Commonly used type URIs supported by relying parties are defined in the + class. + + + + + Tests equality of two objects. + + One instance to compare. + Another instance to compare. + The result of the operator. + + + + Tests inequality of two objects. + + One instance to compare. + Another instance to compare. + The result of the operator. + + + + Tests equality of two objects. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Translates an empty string value to null, or passes through non-empty values. + + The value to consider changing to null. + Either null or a non-empty string. + + + + Gets or sets the nickname the user goes by. + + + + + Gets or sets the user's email address. + + + + + Gets or sets the full name of a user as a single string. + + + + + Gets or sets the user's birthdate. + + + + + Gets or sets the raw birth date string given by the extension. + + A string in the format yyyy-MM-dd. + + + + Gets or sets the gender of the user. + + + + + Gets or sets the zip code / postal code of the user. + + + + + Gets or sets the country of the user. + + + + + Gets or sets the primary/preferred language of the user. + + + + + Gets or sets the user's timezone. + + + + + Gets a combination of the user's full name and email address. + + + + + Gets or sets a combination of the language and country of the user. + + + + + Gets a value indicating whether this extension is signed by the Provider. + + + true if this instance is signed by the Provider; otherwise, false. + + + + + Simple Registration constants + + + + + Commonly used type URIs to represent the Simple Registration extension. + + + + + Additional type URIs that this extension is sometimes known by remote parties. + + + + + Specifies what level of interest a relying party has in obtaining the value + of a given field offered by the Simple Registration extension. + + + + + The relying party has no interest in obtaining this field. + + + + + The relying party would like the value of this field, but wants + the Provider to display the field to the user as optionally provided. + + + + + The relying party considers this a required field as part of + authentication. The Provider and/or user agent MAY still choose to + not provide the value of the field however, according to the + Simple Registration extension specification. + + + + + Indicates the gender of a user. + + + + + The user is male. + + + + + The user is female. + + + + + Constants used to support the UI extension. + + + + + The type URI associated with this extension. + + + + + The Type URI that appears in an XRDS document when the OP supports popups through the UI extension. + + + + + The Type URI that appears in an XRDS document when the OP supports the RP + specifying the user's preferred language through the UI extension. + + + + + The Type URI that appears in the XRDS document when the OP supports the RP + specifying the icon for the OP to display during authentication through the UI extension. + + + + + Valid values for the mode parameter of the OpenID User Interface extension. + + + + + Indicates that the Provider's authentication page appears in a popup window. + + The constant "popup". + + The RP SHOULD create the popup to be 450 pixels wide and 500 pixels tall. The popup MUST have the address bar displayed, and MUST be in a standalone browser window. The contents of the popup MUST NOT be framed by the RP. + The RP SHOULD open the popup centered above the main browser window, and SHOULD dim the contents of the parent window while the popup is active. The RP SHOULD ensure that the user is not surprised by the appearance of the popup, and understands how to interact with it. + To keep the user popup user experience consistent, it is RECOMMENDED that the OP does not resize the popup window unless the OP requires additional space to show special features that are not usually displayed as part of the default popup user experience. + The OP MAY close the popup without returning a response to the RP. Closing the popup without sending a response should be interpreted as a negative assertion. + The response to an authentication request in a popup is unchanged from [OpenID 2.0] (OpenID 2.0 Workgroup, “OpenID 2.0,” .). Relying Parties detecting that the popup was closed without receiving an authentication response SHOULD interpret the close event to be a negative assertion. + + + + + OpenID User Interface extension 1.0 request message. + + + Implements the extension described by: http://wiki.openid.net/f/openid_ui_extension_draft01.html + This extension only applies to checkid_setup requests, since checkid_immediate requests display + no UI to the user. + For rules about how the popup window should be displayed, please see the documentation of + . + An RP may determine whether an arbitrary OP supports this extension (and thereby determine + whether to use a standard full window redirect or a popup) via the + method. + + + + + The factory method that may be used in deserialization of this message. + + + + + Additional type URIs that this extension is sometimes known by remote parties. + + + + + Backing store for . + + + + + Initializes a new instance of the class. + + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Called when the message is about to be transmitted, + before it passes through the channel binding elements. + + + + + Called when the message has been received, + after it passes through the channel binding elements. + + + + + Gets or sets the list of user's preferred languages, sorted in decreasing preferred order. + + The default is the of the thread that created this instance. + + The user's preferred languages as a [BCP 47] language priority list, represented as a comma-separated list of BCP 47 basic language ranges in descending priority order. For instance, the value "fr-CA,fr-FR,en-CA" represents the preference for French spoken in Canada, French spoken in France, followed by English spoken in Canada. + + + + + Gets or sets the style of UI that the RP is hosting the OP's authentication page in. + + Some value from the class. Defaults to . + + + + Gets or sets a value indicating whether the Relying Party has an icon + it would like the Provider to display to the user while asking them + whether they would like to log in. + + + true if the Provider should display an icon; otherwise, false. + + By default, the Provider displays the relying party's favicon.ico. + + + + + Gets the TypeURI the extension uses in the OpenID protocol and in XRDS advertisements. + + + + + + + Gets the additional TypeURIs that are supported by this extension, in preferred order. + May be empty if none other than is supported, but + should not be null. + + + Useful for reading in messages with an older version of an extension. + The value in the property is always checked before + trying this list. + If you do support multiple versions of an extension using this method, + consider adding a CreateResponse method to your request extension class + so that the response can have the context it needs to remain compatible + given the version of the extension in the request message. + The for an example. + + + + + Gets or sets a value indicating whether this extension was + signed by the sender. + + + true if this instance is signed by the sender; otherwise, false. + + + + + Gets the version of the protocol or extension this message is prepared to implement. + + The value 1.0. + + Implementations of this interface should ensure that this property never returns null. + + + + + Gets the extra, non-standard Protocol parameters included in the message. + + + Implementations of this interface should ensure that this property never returns null. + + + + + Constants used in implementing support for the UI extension. + + + + + The required width of the popup window the relying party creates for the provider. + + + + + The required height of the popup window the relying party creates for the provider. + + + + + An Identifier is either a "http" or "https" URI, or an XRI. + + + + + Provides conversions to and from strings for messages that include members of this type. + + + + + Encodes the specified value as the original value that was formerly decoded. + + The value. Guaranteed to never be null. + The in string form, ready for message transport. + + + + Encodes the specified value. + + The value. Guaranteed to never be null. + The in string form, ready for message transport. + + + + Decodes the specified value. + + The string value carried by the transport. Guaranteed to never be null, although it may be empty. + The deserialized form of the given string. + Thrown when the string value given cannot be decoded into the required object type. + + + + Initializes a new instance of the class. + + The original string before any normalization. + Whether the derived class is prepared to guarantee end-to-end discovery + and initial redirect for authentication is performed using SSL. + + + + Converts the string representation of an Identifier to its strong type. + + The identifier. + The particular Identifier instance to represent the value given. + + + + Converts a given Uri to a strongly-typed Identifier. + + The identifier to convert. + The result of the conversion. + + + + Converts an Identifier to its string representation. + + The identifier to convert to a string. + The result of the conversion. + + + + Parses an identifier string and automatically determines + whether it is an XRI or URI. + + Either a URI or XRI identifier. + An instance for the given value. + + + + Parses an identifier string and automatically determines + whether it is an XRI or URI. + + Either a URI or XRI identifier. + if set to true this Identifier will serialize exactly as given rather than in its normalized form. + + An instance for the given value. + + + + + Attempts to parse a string for an OpenId Identifier. + + The string to be parsed. + The parsed Identifier form. + + True if the operation was successful. False if the string was not a valid OpenId Identifier. + + + + + Checks the validity of a given string representation of some Identifier. + + The identifier. + + true if the specified identifier is valid; otherwise, false. + + + + + Tests equality between two s. + + The first Identifier. + The second Identifier. + + true if the two instances should be considered equal; false otherwise. + + + + + Tests inequality between two s. + + The first Identifier. + The second Identifier. + + true if the two instances should be considered unequal; false if they are equal. + + + + + Tests equality between two s. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Gets the hash code for an for storage in a hashtable. + + + A hash code for the current . + + + + + Reparses the specified identifier in order to be assured that the concrete type that + implements the identifier is one of the well-known ones. + + The identifier. + Either or . + + + + Returns an that has no URI fragment. + Quietly returns the original if it is not + a or no fragment exists. + + A new instance if there was a + fragment to remove, otherwise this same instance.. + + + + Converts a given identifier to its secure equivalent. + UriIdentifiers originally created with an implied HTTP scheme change to HTTPS. + Discovery is made to require SSL for the entire resolution process. + + + The newly created secure identifier. + If the conversion fails, retains + this identifiers identity, but will never discover any endpoints. + + + True if the secure conversion was successful. + False if the Identifier was originally created with an explicit HTTP scheme. + + + + + Gets the original string that was normalized to create this Identifier. + + + + + Gets the Identifier in the form in which it should be serialized. + + + For Identifiers that were originally deserialized, this is the exact same + string that was deserialized. For Identifiers instantiated in some other way, this is + the normalized form of the string used to instantiate the identifier. + + + + + Gets or sets a value indicating whether instances are considered equal + based solely on their string reprsentations. + + + This property serves as a test hook, so that MockIdentifier instances can be considered "equal" + to UriIdentifier instances. + + + + + Gets a value indicating whether this Identifier will ensure SSL is + used throughout the discovery phase and initial redirect of authentication. + + + If this is false, a value of true may be obtained by calling + . + + + + + Gets a value indicating whether this instance was initialized from + deserializing a message. + + + This is interesting because when an Identifier comes from the network, + we can't normalize it and then expect signatures to still verify. + But if the Identifier is initialized locally, we can and should normalize it + before serializing it. + + + + + Code Contract for the class. + + + + + Prevents a default instance of the IdentifierContract class from being created. + + + + + Returns an that has no URI fragment. + Quietly returns the original if it is not + a or no fragment exists. + + + A new instance if there was a + fragment to remove, otherwise this same instance.. + + + + + Converts a given identifier to its secure equivalent. + UriIdentifiers originally created with an implied HTTP scheme change to HTTPS. + Discovery is made to require SSL for the entire resolution process. + + The newly created secure identifier. + If the conversion fails, retains + this identifiers identity, but will never discover any endpoints. + + True if the secure conversion was successful. + False if the Identifier was originally created with an explicit HTTP scheme. + + + + + A set of methods designed to assist in improving interop across different + OpenID implementations and their extensions. + + + + + The gender decoder to translate AX genders to Sreg. + + + + + Splits the AX attribute format flags into individual values for processing. + + The formats to split up into individual flags. + A sequence of individual flags. + + + + Transforms an AX attribute type URI from the axschema.org format into a given format. + + The ax schema org format type URI. + The target format. Only one flag should be set. + The AX attribute type URI in the target format. + + + + Detects the AX attribute type URI format from a given sample. + + The type URIs to scan for recognized formats. + The first AX type URI format recognized in the list. + + + + Adds an attribute fetch request if it is not already present in the AX request. + + The AX request to add the attribute request to. + The format of the attribute's Type URI to use. + The attribute in axschema.org format. + The demand level. + + + + Gets the gender decoder to translate AX genders to Sreg. + + + + + Information published about an OpenId Provider by the + OpenId discovery documents found at a user's Claimed Identifier. + + + Because information provided by this interface is suppplied by a + user's individually published documents, it may be incomplete or inaccurate. + + + + + Checks whether the OpenId Identifier claims support for a given extension. + + The extension whose support is being queried. + True if support for the extension is advertised. False otherwise. + + Note that a true or false return value is no guarantee of a Provider's + support for or lack of support for an extension. The return value is + determined by how the authenticating user filled out his/her XRDS document only. + The only way to be sure of support for a given extension is to include + the extension in the request and see if a response comes back for that extension. + + + + + Checks whether the OpenId Identifier claims support for a given extension. + + The extension whose support is being queried. + True if support for the extension is advertised. False otherwise. + + Note that a true or false return value is no guarantee of a Provider's + support for or lack of support for an extension. The return value is + determined by how the authenticating user filled out his/her XRDS document only. + The only way to be sure of support for a given extension is to include + the extension in the request and see if a response comes back for that extension. + + + + + Gets the detected version of OpenID implemented by the Provider. + + + + + Gets the URL that the OpenID Provider receives authentication requests at. + + + This value MUST be an absolute HTTP or HTTPS URL. + + + + + Represents a single OP endpoint from discovery on some OpenID Identifier. + + + + + Backing field for the property. + + + + + Backing field for the property. + + + + + Backing field for the property. + + + + + Initializes a new instance of the class. + + The provider endpoint. + The Claimed Identifier. + The User-supplied Identifier. + The Provider Local Identifier. + The service priority. + The URI priority. + + + + Implements the operator ==. + + The first service endpoint. + The second service endpoint. + The result of the operator. + + + + Implements the operator !=. + + The first service endpoint. + The second service endpoint. + The result of the operator. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents the current . + + + A that represents the current . + + + + + Checks whether the OpenId Identifier claims support for a given extension. + + The extension whose support is being queried. + + True if support for the extension is advertised. False otherwise. + + + Note that a true or false return value is no guarantee of a Provider's + support for or lack of support for an extension. The return value is + determined by how the authenticating user filled out his/her XRDS document only. + The only way to be sure of support for a given extension is to include + the extension in the request and see if a response comes back for that extension. + + + + + Checks whether the OpenId Identifier claims support for a given extension. + + The extension whose support is being queried. + + True if support for the extension is advertised. False otherwise. + + + Note that a true or false return value is no guarantee of a Provider's + support for or lack of support for an extension. The return value is + determined by how the authenticating user filled out his/her XRDS document only. + The only way to be sure of support for a given extension is to include + the extension in the request and see if a response comes back for that extension. + + + + + Determines whether a given extension is supported by this endpoint. + + An instance of the extension to check support for. + + true if the extension is supported by this endpoint; otherwise, false. + + + + + Creates a instance to represent some OP Identifier. + + The provider identifier (actually the user-supplied identifier). + The provider endpoint. + The service priority. + The URI priority. + The created instance + + + + Creates a instance to represent some Claimed Identifier. + + The claimed identifier. + The provider local identifier. + The provider endpoint. + The service priority. + The URI priority. + The created instance + + + + Creates a instance to represent some Claimed Identifier. + + The claimed identifier. + The user supplied identifier. + The provider local identifier. + The provider endpoint. + The service priority. + The URI priority. + The created instance + + + + Determines whether a given type URI is present on the specified provider endpoint. + + The type URI. + + true if the type URI is present on the specified provider endpoint; otherwise, false. + + + + + Sets the Capabilities property (this method is a test hook.) + + The value. + The publicize.exe tool should work for the unit tests, but for some reason it fails on the build server. + + + + Gets the priority rating for a given type of endpoint, allowing a + priority sorting of endpoints. + + The endpoint to prioritize. + An arbitary integer, which may be used for sorting against other returned values from this method. + + + + Gets the detected version of OpenID implemented by the Provider. + + + + + Gets the Identifier that was presented by the end user to the Relying Party, + or selected by the user at the OpenID Provider. + During the initiation phase of the protocol, an end user may enter + either their own Identifier or an OP Identifier. If an OP Identifier + is used, the OP may then assist the end user in selecting an Identifier + to share with the Relying Party. + + + + + Gets the Identifier that the end user claims to control. + + + + + Gets an alternate Identifier for an end user that is local to a + particular OP and thus not necessarily under the end user's + control. + + + + + Gets a more user-friendly (but NON-secure!) string to display to the user as his identifier. + + A human-readable, abbreviated (but not secure) identifier the user MAY recognize as his own. + + + + Gets the provider endpoint. + + + + + Gets the @priority given in the XRDS document for this specific OP endpoint. + + + + + Gets the @priority given in the XRDS document for this service + (which may consist of several endpoints). + + + + + Gets the collection of service type URIs found in the XRDS document describing this Provider. + + Should never be null, but may be empty. + + + + Gets an XRDS sorting routine that uses the XRDS Service/@Priority + attribute to determine order. + + + Endpoints lacking any priority value are sorted to the end of the list. + + + + + Gets the protocol used by the OpenID Provider. + + + + + A module that provides discovery services for OpenID identifiers. + + + + + Performs discovery on the specified identifier. + + The identifier to perform discovery on. + The means to place outgoing HTTP requests. + if set to true, no further discovery services will be called for this identifier. + + A sequence of service endpoints yielded by discovery. Must not be null, but may be empty. + + + + + Code contract for the interface. + + + + + Prevents a default instance of the class from being created. + + + + + A service that can perform discovery on OpenID identifiers. + + + + + The RP or OP that is hosting these services. + + + + + Backing field for the property. + + + + + Initializes a new instance of the class. + + The RP or OP that creates this instance. + + + + Performs discovery on the specified identifier. + + The identifier to discover services for. + A non-null sequence of services discovered for the identifier. + + + + Gets the list of services that can perform discovery on identifiers given. + + + + + An interface implemented by both providers and relying parties. + + + + + Gets the security settings. + + + + + Gets the web request handler. + + + + + Code contract for the type. + + + + + Prevents a default instance of the class from being created. + + + + + Represents an incoming OpenId authentication request. + + + Requests may be infrastructural to OpenID and allow auto-responses, or they may + be authentication requests where the Provider site has to make decisions based + on its own user database and policies. + + + + + Adds an extension to the response to send to the relying party. + + The extension to add to the response message. + + + + Removes any response extensions previously added using . + + + This should be called before sending a negative response back to the relying party + if extensions were already added, since negative responses cannot carry extensions. + + + + + Gets an extension sent from the relying party. + + The type of the extension. + An instance of the extension initialized with values passed in with the request. + + + + Gets an extension sent from the relying party. + + The type of the extension. + An instance of the extension initialized with values passed in with the request. + + + + Gets a value indicating whether the response is ready to be sent to the user agent. + + + This property returns false if there are properties that must be set on this + request instance before the response can be sent. + + + + + Gets or sets the security settings that apply to this request. + + Defaults to the OpenIdProvider.SecuritySettings on the OpenIdProvider. + + + + Interface exposing incoming messages to the OpenID Provider that + require interaction with the host site. + + + + + Attempts to perform relying party discovery of the return URL claimed by the Relying Party. + + The web request handler. + + The details of how successful the relying party discovery was. + + + Return URL verification is only attempted if this method is called. + See OpenID Authentication 2.0 spec section 9.2.1. + + + + + Gets the version of OpenID being used by the relying party that sent the request. + + + + + Gets the URL the consumer site claims to use as its 'base' address. + + + + + Gets a value indicating whether the consumer demands an immediate response. + If false, the consumer is willing to wait for the identity provider + to authenticate the user. + + + + + Gets or sets the provider endpoint claimed in the positive assertion. + + + The default value is the URL that the request came in on from the relying party. + This value MUST match the value for the OP Endpoint in the discovery results for the + claimed identifier being asserted in a positive response. + + + + + Instances of this interface represent incoming authentication requests. + This interface provides the details of the request and allows setting + the response. + + + + + Adds an optional fragment (#fragment) portion to the ClaimedIdentifier. + Useful for identifier recycling. + + + Should not include the # prefix character as that will be added internally. + May be null or the empty string to clear a previously set fragment. + + + Unlike the property, which can only be set if + using directed identity, this method can be called on any URI claimed identifier. + Because XRI claimed identifiers (the canonical IDs) are never recycled, + this method shouldnot be called for XRIs. + + + Thrown when this method is called on an XRI, or on a directed identity + request before the property is set. + + + + + Gets a value indicating whether the Provider should help the user + select a Claimed Identifier to send back to the relying party. + + + + + Gets a value indicating whether the requesting Relying Party is using a delegated URL. + + + When delegated identifiers are used, the should not + be changed at the Provider during authentication. + Delegation is only detectable on requests originating from OpenID 2.0 relying parties. + A relying party implementing only OpenID 1.x may use delegation and this property will + return false anyway. + + + + + Gets or sets the Local Identifier to this OpenID Provider of the user attempting + to authenticate. Check to see if + this value is valid. + + + This may or may not be the same as the Claimed Identifier that the user agent + originally supplied to the relying party. The Claimed Identifier + endpoint may be delegating authentication to this provider using + this provider's local id, which is what this property contains. + Use this identifier when looking up this user in the provider's user account + list. + + + + + Gets or sets the identifier that the user agent is claiming at the relying party site. + Check to see if this value is valid. + + + This property can only be set if is + false, to prevent breaking URL delegation. + This will not be the same as this provider's local identifier for the user + if the user has set up his/her own identity page that points to this + provider for authentication. + The provider may use this identifier for displaying to the user when + asking for the user's permission to authenticate to the relying party. + + Thrown from the setter + if is true. + + + + Gets or sets a value indicating whether the provider has determined that the + belongs to the currently logged in user + and wishes to share this information with the consumer. + + + + + Code contract class for the type. + + + + + Initializes a new instance of the class. + + + + + Code contract for the type. + + + + + Initializes a new instance of the class. + + + + + Applies a custom security policy to certain OpenID security settings and behaviors. + + + + + Applies a well known set of security requirements to a default set of security settings. + + The security settings to enhance with the requirements of this profile. + + Care should be taken to never decrease security when applying a profile. + Profiles should only enhance security requirements to avoid being + incompatible with each other. + + + + + Called when a request is received by the Provider. + + The incoming request. + + true if this behavior owns this request and wants to stop other behaviors + from handling it; false to allow other behaviors to process this request. + + + Implementations may set a new value to but + should not change the properties on the instance of + itself as that instance may be shared across many requests. + + + + + Called when the Provider is preparing to send a response to an authentication request. + + The request that is configured to generate the outgoing response. + + true if this behavior owns this request and wants to stop other behaviors + from handling it; false to allow other behaviors to process this request. + + + + + Code contract for the type. + + + + + Initializes a new instance of the class. + + + + + Code contract for the interface. + + + + + Prevents a default instance of the class from being created. + + + + + Security settings that may be applicable to both relying parties and providers. + + + + + Gets the default minimum hash bit length. + + + + + Gets the maximum hash bit length default for relying parties. + + + + + Gets the maximum hash bit length default for providers. + + + + + Initializes a new instance of the class. + + A value indicating whether this class is being instantiated for a Provider. + + + + Determines whether a named association fits the security requirements. + + The protocol carrying the association. + The value of the openid.assoc_type parameter. + + true if the association is permitted given the security requirements; otherwise, false. + + + + + Determines whether a given association fits the security requirements. + + The association to check. + + true if the association is permitted given the security requirements; otherwise, false. + + + + + Gets or sets the minimum hash length (in bits) allowed to be used in an + with the remote party. The default is 160. + + + SHA-1 (160 bits) has been broken. The minimum secure hash length is now 256 bits. + The default is still a 160 bit minimum to allow interop with common remote parties, + such as Yahoo! that only supports 160 bits. + For sites that require high security such as to store bank account information and + health records, 256 is the recommended value. + + + + + Gets or sets the maximum hash length (in bits) allowed to be used in an + with the remote party. The default is 256 for relying parties and 512 for providers. + + + The longer the bit length, the more secure the identities of your visitors are. + Setting a value higher than 256 on a relying party site may reduce performance + as many association requests will be denied, causing secondary requests or even + authentication failures. + Setting a value higher than 256 on a provider increases security where possible + without these side-effects. + + + + + Gets or sets a value indicating whether identifiers that are both OP Identifiers and Claimed Identifiers + should ever be recognized as claimed identifiers. + + + The default value is false, per the OpenID 2.0 spec. + + + OpenID 2.0 sections 7.3.2.2 and 11.2 specify that OP Identifiers never be recognized as Claimed Identifiers. + However, for some scenarios it may be desirable for an RP to override this behavior and allow this. + The security ramifications of setting this property to true have not been fully explored and + therefore this setting should only be changed with caution. + + + + + Security settings that are applicable to providers. + + + + + The behavior a Provider takes when verifying that it is authoritative for an + identifier it is about to send an unsolicited assertion for. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The subset of association types and their customized lifetimes. + + + + + Initializes a new instance of the class. + + + + + Creates a deep clone of this instance. + + A new instance that is a deep clone of this instance. + + + + Gets a subset of the available association types and their + customized maximum lifetimes. + + + + + Gets or sets a value indicating whether Relying Party discovery will only + succeed if done over a secure HTTPS channel. + + Default is false. + + + + Gets or sets the level of verification a Provider performs on an identifier before + sending an unsolicited assertion for it. + + The default value is . + + + + Gets or sets a value indicating whether the Provider should ease the burden of storing associations + by encoding them in signed, encrypted form into the association handles themselves, storing only + a few rotating, private symmetric keys in the Provider's store instead. + + The default value for this property is true. + + + + Gets or sets a value indicating whether OpenID 1.x relying parties that may not be + protecting their users from replay attacks are protected from + replay attacks by this provider. + + The default value is true. + + Nonces for protection against replay attacks were not mandated + by OpenID 1.x, which leaves users open to replay attacks. + This feature works by preventing associations from being used + with OpenID 1.x relying parties, thereby forcing them into + "dumb" mode and verifying every claim with this provider. + This gives the provider an opportunity to verify its own nonce + to protect against replay attacks. + + + + + Gets or sets a value indicating whether outgoing extensions are always signed. + + + true if outgoing extensions should be signed; otherwise, false. + The default is true. + + + This property is internal because Providers should never turn it off, but it is + needed for testing the RP's rejection of unsigned extensions. + + + + + The result codes that may be returned from an attempt at relying party discovery. + + + + + Relying Party discovery failed to find an XRDS document or the document was invalid. + + + This can happen either when a relying party does not offer a service document at all, + or when a man-in-the-middle attack is in progress that prevents the Provider from being + able to discover that document. + + + + + Relying Party discovery yielded a valid XRDS document, but no matching return_to URI was found. + + + This is perhaps the most dangerous rating for a relying party, since it suggests that + they are implementing OpenID 2.0 securely, but that a hijack operation may be in progress. + + + + + Relying Party discovery succeeded, and a matching return_to URI was found. + + + + + An enumeration of the possible results of an authentication attempt. + + + + + The authentication was canceled by the user agent while at the provider. + + + + + The authentication failed because an error was detected in the OpenId communication. + + + + + The Provider responded to a request for immediate authentication approval + with a message stating that additional user agent interaction is required + before authentication can be completed. + Casting the to a + ISetupRequiredAuthenticationResponse in this case can help + you retry the authentication using setup (non-immediate) mode. + + + + + Authentication is completed successfully. + + + + + The Provider sent a message that did not contain an identity assertion, + but may carry OpenID extensions. + + + + + Instances of this interface represent relying party authentication + requests that may be queried/modified in specific ways before being + routed to the OpenID Provider. + + + + + Makes a dictionary of key/value pairs available when the authentication is completed. + + The arguments to add to the request's return_to URI. Values must not be null. + + Note that these values are NOT protected against eavesdropping in transit. No + privacy-sensitive data should be stored using this method. + The values stored here can be retrieved using + , which will only return the value + if it can be verified as untampered with in transit. + Since the data set here is sent in the querystring of the request and some + servers place limits on the size of a request URL, this data should be kept relatively + small to ensure successful authentication. About 1.5KB is about all that should be stored. + + + + + Makes a key/value pair available when the authentication is completed. + + The parameter name. + The value of the argument. Must not be null. + + Note that these values are NOT protected against eavesdropping in transit. No + privacy-sensitive data should be stored using this method. + The value stored here can be retrieved using + , which will only return the value + if it can be verified as untampered with in transit. + Since the data set here is sent in the querystring of the request and some + servers place limits on the size of a request URL, this data should be kept relatively + small to ensure successful authentication. About 1.5KB is about all that should be stored. + + + + + Makes a key/value pair available when the authentication is completed. + + The parameter name. + The value of the argument. Must not be null. + + Note that these values are NOT protected against eavesdropping in transit. No + security-sensitive data should be stored using this method. + The value stored here can be retrieved using + . + Since the data set here is sent in the querystring of the request and some + servers place limits on the size of a request URL, this data should be kept relatively + small to ensure successful authentication. About 1.5KB is about all that should be stored. + + + + + Makes a key/value pair available when the authentication is completed without + requiring a return_to signature to protect against tampering of the callback argument. + + The parameter name. + The value of the argument. Must not be null. + + Note that these values are NOT protected against eavesdropping or tampering in transit. No + security-sensitive data should be stored using this method. + The value stored here can be retrieved using + . + Since the data set here is sent in the querystring of the request and some + servers place limits on the size of a request URL, this data should be kept relatively + small to ensure successful authentication. About 1.5KB is about all that should be stored. + + + + + Adds an OpenID extension to the request directed at the OpenID provider. + + The initialized extension to add to the request. + + + + Redirects the user agent to the provider for authentication. + Execution of the current page terminates after this call. + + + This method requires an ASP.NET HttpContext. + + + + + Gets or sets the mode the Provider should use during authentication. + + + + + Gets the HTTP response the relying party should send to the user agent + to redirect it to the OpenID Provider to start the OpenID authentication process. + + + + + Gets the URL that the user agent will return to after authentication + completes or fails at the Provider. + + + + + Gets the URL that identifies this consumer web application that + the Provider will display to the end user. + + + + + Gets the Claimed Identifier that the User Supplied Identifier + resolved to. Null if the user provided an OP Identifier + (directed identity). + + + Null is returned if the user is using the directed identity feature + of OpenID 2.0 to make it nearly impossible for a relying party site + to improperly store the reserved OpenID URL used for directed identity + as a user's own Identifier. + However, to test for the Directed Identity feature, please test the + property rather than testing this + property for a null value. + + + + + Gets a value indicating whether the authenticating user has chosen to let the Provider + determine and send the ClaimedIdentifier after authentication. + + + + + Gets or sets a value indicating whether this request only carries extensions + and is not a request to verify that the user controls some identifier. + + + true if this request is merely a carrier of extensions and is not + about an OpenID identifier; otherwise, false. + + + Although OpenID is first and primarily an authentication protocol, its extensions + can be interesting all by themselves. For instance, a relying party might want + to know that its user is over 21 years old, or perhaps a member of some organization. + OpenID extensions can provide this, without any need for asserting the identity of the user. + Constructing an OpenID request for only extensions can be done by calling + OpenIdRelyingParty.CreateRequest with any valid OpenID identifier + (claimed identifier or OP identifier). But once this property is set to true, + the claimed identifier value in the request is not included in the transmitted message. + It is anticipated that an RP would only issue these types of requests to OPs that + trusts to make assertions regarding the individual holding an account at that OP, so it + is not likely that the RP would allow the user to type in an arbitrary claimed identifier + without checking that it resolved to an OP endpoint the RP has on a trust whitelist. + + + + + Gets information about the OpenId Provider, as advertised by the + OpenID discovery documents found at the + location. + + + + + Gets the discovery result leading to the formulation of this request. + + The discovery result. + + + + An instance of this interface represents an identity assertion + from an OpenID Provider. It may be in response to an authentication + request previously put to it by a Relying Party site or it may be an + unsolicited assertion. + + + Relying party web sites should handle both solicited and unsolicited + assertions. This interface does not offer a way to discern between + solicited and unsolicited assertions as they should be treated equally. + + + + + Gets a callback argument's value that was previously added using + . + + The name of the parameter whose value is sought. + + The value of the argument, or null if the named parameter could not be found. + + + Callback parameters are only available if they are complete and untampered with + since the original request message (as proven by a signature). + If the relying party is operating in stateless mode null is always + returned since the callback arguments could not be signed to protect against + tampering. + + + + + Gets a callback argument's value that was previously added using + . + + The name of the parameter whose value is sought. + + The value of the argument, or null if the named parameter could not be found. + + + Callback parameters are only available even if the RP is in stateless mode, + or the callback parameters are otherwise unverifiable as untampered with. + Therefore, use this method only when the callback argument is not to be + used to make a security-sensitive decision. + + + + + Gets all the callback arguments that were previously added using + or as a natural part + of the return_to URL. + + A name-value dictionary. Never null. + + Callback parameters are only available if they are complete and untampered with + since the original request message (as proven by a signature). + If the relying party is operating in stateless mode an empty dictionary is always + returned since the callback arguments could not be signed to protect against + tampering. + + + + + Gets all the callback arguments that were previously added using + or as a natural part + of the return_to URL. + + A name-value dictionary. Never null. + + Callback parameters are only available even if the RP is in stateless mode, + or the callback parameters are otherwise unverifiable as untampered with. + Therefore, use this method only when the callback argument is not to be + used to make a security-sensitive decision. + + + + + Tries to get an OpenID extension that may be present in the response. + + The type of extension to look for in the response message. + + The extension, if it is found. Null otherwise. + + + Extensions are returned only if the Provider signed them. + Relying parties that do not care if the values were modified in + transit should use the method + in order to allow the Provider to not sign the extension. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Tries to get an OpenID extension that may be present in the response. + + Type of the extension to look for in the response. + + The extension, if it is found. Null otherwise. + + + Extensions are returned only if the Provider signed them. + Relying parties that do not care if the values were modified in + transit should use the method + in order to allow the Provider to not sign the extension. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Tries to get an OpenID extension that may be present in the response, without + requiring it to be signed by the Provider. + + The type of extension to look for in the response message. + + The extension, if it is found. Null otherwise. + + + Extensions are returned whether they are signed or not. + Use the method to retrieve + extension responses only if they are signed by the Provider to + protect against tampering. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Tries to get an OpenID extension that may be present in the response, without + requiring it to be signed by the Provider. + + Type of the extension to look for in the response. + + The extension, if it is found. Null otherwise. + + + Extensions are returned whether they are signed or not. + Use the method to retrieve + extension responses only if they are signed by the Provider to + protect against tampering. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Gets the Identifier that the end user claims to own. For use with user database storage and lookup. + May be null for some failed authentications (i.e. failed directed identity authentications). + + + + This is the secure identifier that should be used for database storage and lookup. + It is not always friendly (i.e. =Arnott becomes =!9B72.7DD1.50A9.5CCD), but it protects + user identities against spoofing and other attacks. + + + For user-friendly identifiers to display, use the + property. + + + + + + Gets a user-friendly OpenID Identifier for display purposes ONLY. + + + + This should be put through before + sending to a browser to secure against javascript injection attacks. + + + This property retains some aspects of the user-supplied identifier that get lost + in the . For example, XRIs used as user-supplied + identifiers (i.e. =Arnott) become unfriendly unique strings (i.e. =!9B72.7DD1.50A9.5CCD). + For display purposes, such as text on a web page that says "You're logged in as ...", + this property serves to provide the =Arnott string, or whatever else is the most friendly + string close to what the user originally typed in. + + + If the user-supplied identifier is a URI, this property will be the URI after all + redirects, and with the protocol and fragment trimmed off. + If the user-supplied identifier is an XRI, this property will be the original XRI. + If the user-supplied identifier is an OpenID Provider identifier (i.e. yahoo.com), + this property will be the Claimed Identifier, with the protocol stripped if it is a URI. + + + It is very important that this property never be used for database storage + or lookup to avoid identity spoofing and other security risks. For database storage + and lookup please use the property. + + + + + + Gets the detailed success or failure status of the authentication attempt. + + + + + Gets information about the OpenId Provider, as advertised by the + OpenID discovery documents found at the + location, if available. + + + The Provider endpoint that issued the positive assertion; + or null if information about the Provider is unavailable. + + + + + Gets the details regarding a failed authentication attempt, if available. + This will be set if and only if is . + + + + + Code contract for the type. + + + + + Initializes a new instance of the class. + + + + + Applies a custom security policy to certain OpenID security settings and behaviors. + + + + + Applies a well known set of security requirements to a default set of security settings. + + The security settings to enhance with the requirements of this profile. + + Care should be taken to never decrease security when applying a profile. + Profiles should only enhance security requirements to avoid being + incompatible with each other. + + + + + Called when an authentication request is about to be sent. + + The request. + + Implementations should be prepared to be called multiple times on the same outgoing message + without malfunctioning. + + + + + Called when an incoming positive assertion is received. + + The positive assertion. + + + + Contract class for the interface. + + + + + Prevents a default instance of the class from being created. + + + + + A common base class for OpenID request messages and indirect responses (since they are ultimately requests). + + + + + The openid.ns parameter in the message. + + "http://specs.openid.net/auth/2.0" + + This particular value MUST be present for the request to be a valid OpenID Authentication 2.0 request. Future versions of the specification may define different values in order to allow message recipients to properly interpret the request. + + + + + Backing store for the property. + + + + + Backing store for the property. + + + + + Initializes a new instance of the class. + + The OpenID version this message must comply with. + The OpenID Provider endpoint. + The value for the openid.mode parameter. + A value indicating whether the message will be transmitted directly or indirectly. + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Sets a flag indicating that this message is received (as opposed to sent). + + + + + Gets some string from a given version of the OpenID protocol. + + The protocol version to use for lookup. + A function that can retrieve the desired protocol constant. + The value of the constant. + + This method can be used by a constructor to throw an + instead of a . + + + + + Gets the value of the openid.mode parameter. + + + + + Gets the recipient of the message. + + The OP endpoint, or the RP return_to. + + + + Gets the version of the protocol this message is prepared to implement. + + Version 2.0 + + + + Gets the level of protection this message requires. + + + + + + + + Gets a value indicating whether this is a direct or indirect message. + + + + + + + + Gets the extra parameters included in the message. + + An empty dictionary. + + + + Gets a value indicating whether this message was deserialized as an incoming message. + + + + + Gets the protocol used by this message. + + + + + A message a Relying Party sends to a Provider to confirm the validity + of a positive assertion that was signed by a Provider-only secret. + + + The significant payload of this message depends entirely upon the + assertion message, and therefore is all in the + property bag. + + + + + Initializes a new instance of the class. + + The OpenID version this message must comply with. + The OpenID Provider endpoint. + + + + Initializes a new instance of the class + based on the contents of some signed message whose signature must be verified. + + The message whose signature should be verified. + The channel. This is used only within the constructor and is not stored in a field. + + + + Gets or sets a value indicating whether the signature being verified by this request + is in fact valid. + + + true if the signature is valid; otherwise, false. + + This property is automatically set as the message is received by the channel's + signing binding element. + + + + + Gets or sets the ReturnTo that existed in the original signed message. + + + This exists strictly for convenience in recreating the + message. + + + + + A common base class for OpenID direct message responses. + + + + + The openid.ns parameter in the message. + + "http://specs.openid.net/auth/2.0" + + OpenID 2.0 Section 5.1.2: + This particular value MUST be present for the response to be a valid OpenID 2.0 response. + Future versions of the specification may define different values in order to allow message + recipients to properly interpret the request. + + + + + Backing store for the properties. + + + + + Backing store for the properties. + + + + + The dictionary of parameters that are not part of the OpenID specification. + + + + + Initializes a new instance of the class. + + The OpenID version of the response message. + The originating request. May be null in case the request is unrecognizable and this is an error response. + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Sets a flag indicating that this message is received (as opposed to sent). + + + + + Gets the version of the protocol this message is prepared to implement. + + Version 2.0 + + + + Gets the level of protection this message requires. + + + + + + + + Gets a value indicating whether this is a direct or indirect message. + + + + + + + + Gets the extra, non-OAuth parameters included in the message. + + + + + Gets a value indicating whether this message was deserialized as an incoming message. + + + + + Gets the protocol used by this message. + + + + + Gets the originating request message that caused this response to be formed. + + + + + The message sent from the Provider to the Relying Party to confirm/deny + the validity of an assertion that was signed by a private Provider secret. + + + + + Initializes a new instance of the class + for use by the Relying Party. + + The OpenID version of the response message. + The request that this message is responding to. + + + + Gets or sets a value indicating whether the signature of the verification request is valid. + + + + + Gets or sets the handle the relying party should invalidate if is true. + + The "invalidate_handle" value sent in the verification request, if the OP confirms it is invalid. + + If present in a verification response with "is_valid" set to "true", + the Relying Party SHOULD remove the corresponding association from + its store and SHOULD NOT send further authentication requests with + this handle. + This two-step process for invalidating associations is necessary + to prevent an attacker from invalidating an association at will by + adding "invalidate_handle" parameters to an authentication response. + For OpenID 1.1, we allow this to be present but empty to put up with poor implementations such as Blogger. + + + + + An indirect request from a Relying Party to a Provider where the response + is expected to be signed. + + + + + Backing store for the property. + + + + + Initializes a new instance of the class. + + The OpenID version to use. + The Provider endpoint that receives this message. + + for asynchronous javascript clients; + to allow the Provider to interact with the user in order to complete authentication. + + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Adds parameters to the return_to querystring. + + The keys=value pairs to add to the return_to query string. + + This method is useful if the Relying Party wants to recall some value + when and if a positive assertion comes back from the Provider. + + + + + Adds a parameter to the return_to querystring. + + The name of the parameter. + The value of the argument. + + This method is useful if the Relying Party wants to recall some value + when and if a positive assertion comes back from the Provider. + + + + + Gets the value of the openid.mode parameter based on the protocol version and immediate flag. + + The OpenID version to use. + + for asynchronous javascript clients; + to allow the Provider to interact with the user in order to complete authentication. + + checkid_immediate or checkid_setup + + + + Gets the list of extensions that are included with this message. + + + + + Implementations of this interface should ensure that this property never returns null. + + + + + Gets a value indicating whether the Provider is allowed to interact with the user + as part of authentication. + + + true if using OpenID immediate mode; otherwise, false. + + + + Gets or sets the handle of the association the RP would like the Provider + to use for signing a positive assertion in the response message. + + A handle for an association between the Relying Party and the OP + that SHOULD be used to sign the response. + + If no association handle is sent, the transaction will take place in Stateless Mode + (Verifying Directly with the OpenID Provider). + + + + + Gets or sets the URL the Provider should redirect the user agent to following + the authentication attempt. + + URL to which the OP SHOULD return the User-Agent with the response + indicating the status of the request. + + If this value is not sent in the request it signifies that the Relying Party + does not wish for the end user to be returned. + The return_to URL MAY be used as a mechanism for the Relying Party to attach + context about the authentication request to the authentication response. + This document does not define a mechanism by which the RP can ensure that query + parameters are not modified by outside parties; such a mechanism can be defined + by the RP itself. + + + + + Gets or sets the Relying Party discovery URL the Provider may use to verify the + source of the authentication request. + + + URL pattern the OP SHOULD ask the end user to trust. See Section 9.2 (Realms). + This value MUST be sent if openid.return_to is omitted. + Default: The URL. + + + + + Gets or sets a value indicating whether the return_to value should be signed. + + + + + An authentication request from a Relying Party to a Provider. + + + This message type satisfies OpenID 2.0 section 9.1. + + + + + Initializes a new instance of the class. + + The OpenID version to use. + The Provider endpoint that receives this message. + + for asynchronous javascript clients; + to allow the Provider to interact with the user in order to complete authentication. + + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Gets or sets the Claimed Identifier. + + + "openid.claimed_id" and "openid.identity" SHALL be either both present or both absent. + If neither value is present, the assertion is not about an identifier, + and will contain other information in its payload, using extensions (Extensions). + It is RECOMMENDED that OPs accept XRI identifiers with or without the "xri://" prefix, as specified in the Normalization (Normalization) section. + + + + + Gets or sets the OP Local Identifier. + + The OP-Local Identifier. + + If a different OP-Local Identifier is not specified, the claimed + identifier MUST be used as the value for openid.identity. + Note: If this is set to the special value + "http://specs.openid.net/auth/2.0/identifier_select" then the OP SHOULD + choose an Identifier that belongs to the end user. This parameter MAY + be omitted if the request is not about an identifier (for instance if + an extension is in use that makes the request meaningful without it; + see openid.claimed_id above). + + + + + The base class that all successful association response messages derive from. + + + Association response messages are described in OpenID 2.0 section 8.2. This type covers section 8.2.1. + + + + + Initializes a new instance of the class. + + The OpenID version of the response message. + The originating request. + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Gets or sets the association handle is used as a key to refer to this association in subsequent messages. + + A string 255 characters or less in length. It MUST consist only of ASCII characters in the range 33-126 inclusive (printable non-whitespace characters). + + + + Gets or sets the preferred association type. The association type defines the algorithm to be used to sign subsequent messages. + + Value: A valid association type from Section 8.3. + + + + Gets or sets the value of the "openid.session_type" parameter from the request. + If the OP is unwilling or unable to support this association type, it MUST return an + unsuccessful response (Unsuccessful Response Parameters). + + Value: A valid association session type from Section 8.4 (Association Session Types). + Note: Unless using transport layer encryption, "no-encryption" MUST NOT be used. + + + + Gets or sets the lifetime, in seconds, of this association. The Relying Party MUST NOT use the association after this time has passed. + + An integer, represented in base 10 ASCII. + + + + Members found on error response messages sent from a Provider + to a Relying Party in response to direct and indirect message + requests that result in an error. + + + + + Gets or sets a human-readable message indicating why the request failed. + + + + + Gets or sets the contact address for the administrator of the server. + + The contact address may take any form, as it is intended to be displayed to a person. + + + + Gets or sets a reference token, such as a support ticket number or a URL to a news blog, etc. + + + + + A common base class from which indirect response messages should derive. + + + + + Backing store for the property. + + + + + Initializes a new instance of the class. + + The request that caused this response message to be constructed. + The value of the openid.mode parameter. + + + + Initializes a new instance of the class + for unsolicited assertion scenarios. + + The OpenID version supported at the Relying Party. + + The URI at which the Relying Party receives OpenID indirect messages. + + The value to use for the openid.mode parameter. + + + + Gets the property of a message. + + The message to fetch the protocol version from. + The value of the property. + + This method can be used by a constructor to throw an + instead of a . + + + + + Gets the property of a message. + + The message to fetch the ReturnTo from. + The value of the property. + + This method can be used by a constructor to throw an + instead of a . + + + + + Gets the list of extensions that are included with this message. + + + + + Implementations of this interface should ensure that this property never returns null. + + + + + Gets the signed extensions on this message. + + + + + Gets the unsigned extensions on this message. + + + + + Gets the originating request message, if applicable. + + + + + An indirect message from a Provider to a Relying Party where at least part of the + payload is signed so the Relying Party can verify it has not been tampered with. + + + + + The allowed date/time formats for the response_nonce parameter. + + + This array of formats is not yet a complete list. + + + + + Backing field for the property. + + + The field initializer being DateTime.UtcNow allows for OpenID 1.x messages + to pass through the StandardExpirationBindingElement. + + + + + Backing store for the property. + + + + + Initializes a new instance of the class. + + + The authentication request that caused this assertion to be generated. + + + + + Initializes a new instance of the class + in order to perform signature verification at the Provider. + + The previously signed message. + The channel. This is used only within the constructor and is not stored in a field. + + + + Initializes a new instance of the class + for unsolicited assertions. + + The OpenID version to use. + The return_to URL of the Relying Party. + This value will commonly be from , + but for unsolicited assertions may come from the Provider performing RP discovery + to find the appropriate return_to URL to use. + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Gets the value of a named parameter in the return_to URL without signature protection. + + The full name of the parameter whose value is being sought. + The value of the parameter if it is present and unaltered from when + the Relying Party signed it; null otherwise. + + This method will always return null on the Provider-side, since Providers + cannot verify the private signature made by the relying party. + + + + + Gets the names of the callback parameters added to the original authentication request + without signature protection. + + A sequence of the callback parameter names. + + + + Gets a dictionary of all the message part names and values + that are included in the message signature. + + The channel. + + A dictionary of the signed message parts. + + + + + Determines whether one querystring contains every key=value pair that + another querystring contains. + + The querystring that should contain at least all the key=value pairs of the other. + The querystring containing the set of key=value pairs to test for in the other. + + true if contains all the query parameters that does; false otherwise. + + + + + Verifies that the openid.return_to field matches the URL of the actual HTTP request. + + + From OpenId Authentication 2.0 section 11.1: + To verify that the "openid.return_to" URL matches the URL that is processing this assertion: + * The URL scheme, authority, and path MUST be the same between the two URLs. + * Any query parameters that are present in the "openid.return_to" URL MUST + also be present with the same values in the URL of the HTTP request the RP received. + + + + + Gets the level of protection this message requires. + + + for OpenID 2.0 messages. + for OpenID 1.x messages. + + + Although the required protection is reduced for OpenID 1.x, + this library will provide Relying Party hosts with all protections + by adding its own specially-crafted nonce to the authentication request + messages except for stateless RPs in OpenID 1.x messages. + + + + + Gets or sets the Provider Endpoint URI. + + + + + Gets or sets the return_to parameter as the relying party provided + it in . + + Verbatim copy of the return_to URL parameter sent in the + request, before the Provider modified it. + + + + Gets or sets a value indicating whether the + URI's query string is unaltered between when the Relying Party + sent the original request and when the response was received. + + + This property is not persisted in the transmitted message, and + has no effect on the Provider-side of the communication. + + + + + Gets or sets the nonce that will protect the message from replay attacks. + + + A string 255 characters or less in length, that MUST be unique to + this particular successful authentication response. The nonce MUST start + with the current time on the server, and MAY contain additional ASCII + characters in the range 33-126 inclusive (printable non-whitespace characters), + as necessary to make each response unique. The date and time MUST be + formatted as specified in section 5.6 of [RFC3339] + (Klyne, G. and C. Newman, “Date and Time on the Internet: Timestamps,” .), + with the following restrictions: + + All times must be in the UTC timezone, indicated with a "Z". + No fractional seconds are allowed + + + 2005-05-15T17:11:51ZUNIQUE + + + + Gets or sets the nonce that will protect the message from replay attacks. + + + A string 255 characters or less in length, that MUST be unique to + this particular successful authentication response. The nonce MUST start + with the current time on the server, and MAY contain additional ASCII + characters in the range 33-126 inclusive (printable non-whitespace characters), + as necessary to make each response unique. The date and time MUST be + formatted as specified in section 5.6 of [RFC3339] + (Klyne, G. and C. Newman, “Date and Time on the Internet: Timestamps,” .), + with the following restrictions: + + All times must be in the UTC timezone, indicated with a "Z". + No fractional seconds are allowed + + + 2005-05-15T17:11:51ZUNIQUE + + + + Gets the querystring key=value pairs in the return_to URL. + + + + + Code contract class for the IOpenIdMessageExtension interface. + + + + + Prevents a default instance of the class from being created. + + + + + The message OpenID Providers send back to Relying Parties to refuse + to assert the identity of a user. + + + + + Initializes a new instance of the class. + + The request that the relying party sent. + + + + Initializes a new instance of the class. + + The request that the relying party sent. + The channel to use to simulate construction of the user_setup_url, if applicable. May be null, but the user_setup_url will not be constructed. + + + + Initializes a new instance of the class. + + The version. + The relying party return to. + The value of the openid.mode parameter. + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Constructs the value for the user_setup_url parameter to be sent back + in negative assertions in response to OpenID 1.x RP's checkid_immediate requests. + + The immediate request. + The channel to use to simulate construction of the message. + The value to use for the user_setup_url parameter. + + + + Gets the value for the openid.mode that is appropriate for this response. + + The request that we're responding to. + The value of the openid.mode parameter to use. + + + + Gets or sets the URL the relying party can use to upgrade their authentication + request from an immediate to a setup message. + + URL to redirect User-Agent to so the End User can do whatever's necessary to fulfill the assertion. + + This part is only included in OpenID 1.x responses. + + + + + Gets a value indicating whether this + is in response to an authentication request made in immediate mode. + + + true if the request was in immediate mode; otherwise, false. + + + + An identity assertion from a Provider to a Relying Party, stating that the + user operating the user agent is in fact some specific user known to the Provider. + + + + + Initializes a new instance of the class. + + + The authentication request that caused this assertion to be generated. + + + + + Initializes a new instance of the class + for unsolicited assertions. + + The OpenID version to use. + The return_to URL of the Relying Party. + This value will commonly be from , + but for unsolicited assertions may come from the Provider performing RP discovery + to find the appropriate return_to URL to use. + + + + Initializes a new instance of the class. + + The relying party return_to endpoint that will receive this positive assertion. + + + + Gets or sets the Claimed Identifier. + + + "openid.claimed_id" and "openid.identity" SHALL be either both present or both absent. + If neither value is present, the assertion is not about an identifier, + and will contain other information in its payload, using extensions (Extensions). + + + + + Gets or sets the OP Local Identifier. + + The OP-Local Identifier. + + OpenID Providers MAY assist the end user in selecting the Claimed + and OP-Local Identifiers about which the assertion is made. + The openid.identity field MAY be omitted if an extension is in use that + makes the response meaningful without it (see openid.claimed_id above). + + + + + Wraps an existing Identifier and prevents it from performing discovery. + + + + + The wrapped identifier. + + + + + Initializes a new instance of the class. + + The ordinary Identifier whose discovery is being masked. + Whether this Identifier should claim to be SSL-secure, although no discovery will never generate service endpoints anyway. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + Tests equality between two s. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Gets the hash code for an for storage in a hashtable. + + + A hash code for the current . + + + + + Returns an that has no URI fragment. + Quietly returns the original if it is not + a or no fragment exists. + + + A new instance if there was a + fragment to remove, otherwise this same instance.. + + + + + Converts a given identifier to its secure equivalent. + UriIdentifiers originally created with an implied HTTP scheme change to HTTPS. + Discovery is made to require SSL for the entire resolution process. + + The newly created secure identifier. + If the conversion fails, retains + this identifiers identity, but will never discover any endpoints. + + True if the secure conversion was successful. + False if the Identifier was originally created with an explicit HTTP scheme. + + + + + A set of utilities especially useful to OpenID. + + + + + The prefix to designate this library's proprietary parameters added to the protocol. + + + + + A static variable that carries the results of a check for the presence of + assemblies that are required for the Diffie-Hellman algorithm. + + + + + Creates a random association handle. + + The association handle. + + + + Gets the OpenID protocol instance for the version in a message. + + The message. + The OpenID protocol instance. + + + + Changes the position of some element in a list. + + The type of elements stored in the list. + The list to be modified. + The new position for the given element. + The element to move within the list. + Thrown if the element does not already exist in the list. + + + + Corrects any URI decoding the Provider may have inappropriately done + to our return_to URL, resulting in an otherwise corrupted base64 encoded value. + + The base64 encoded value. May be null. + + The value; corrected if corruption had occurred. + + + AOL may have incorrectly URI-decoded the token for us in the return_to, + resulting in a token URI-decoded twice by the time we see it, and no + longer being a valid base64 string. + It turns out that the only symbols from base64 that is also encoded + in URI encoding rules are the + and / characters. + AOL decodes the %2b sequence to the + character + and the %2f sequence to the / character (it shouldn't decode at all). + When we do our own URI decoding, the + character becomes a space (corrupting base64) + but the / character remains a /, so no further corruption happens to this character. + So to correct this we just need to change any spaces we find in the token + back to + characters. + + + + + Rounds the given downward to the whole second. + + The DateTime object to adjust. + The new value. + + + + Gets the fully qualified Realm URL, given a Realm that may be relative to a particular page. + + The hosting page that has the realm value to resolve. + The realm, which may begin with "*." or "~/". + The request context. + The fully-qualified realm. + + + + Gets the extension factories from the extension aggregator on an OpenID channel. + + The channel. + The list of factories that will be used to generate extension instances. + + This is an extension method on rather than an instance + method on because the OpenIdRelyingParty + and OpenIdProvider classes don't strong-type to + to allow flexibility in the specific type of channel the user (or tests) + can plug in. + + + + + Loads the Diffie-Hellman assemblies. + + Thrown if the DH assemblies are missing. + + + + Gets a value indicating whether Diffie Hellman is available in this installation. + + + true if Diffie-Hellman functionality is present; otherwise, false. + + + + + Utility methods for working with XRDS documents. + + + + + Finds the Relying Party return_to receiving endpoints. + + The XrdsDocument instance to use in this process. + A sequence of Relying Party descriptors for the return_to endpoints. + + This is useful for Providers to send unsolicited assertions to Relying Parties, + or for Provider's to perform RP discovery/verification as part of authentication. + + + + + Finds the icons the relying party wants an OP to display as part of authentication, + per the UI extension spec. + + The XrdsDocument to search. + A sequence of the icon URLs in preferred order. + + + + Enumerates the XRDS service elements that describe OpenID Relying Party return_to URLs + that can receive authentication assertions. + + The XrdsDocument instance to use in this process. + A sequence of service elements. + + + + Describes some OpenID Provider endpoint and its capabilities. + + + This is an immutable type. + + + + + Initializes a new instance of the class. + + The OpenID Provider endpoint URL. + The OpenID version supported by this particular endpoint. + + + + Initializes a new instance of the class. + + The URI the provider listens on for OpenID requests. + The set of services offered by this endpoint. + + + + Gets the URL that the OpenID Provider listens for incoming OpenID messages on. + + + + + Gets the OpenID protocol version this endpoint supports. + + + If an endpoint supports multiple versions, each version must be represented + by its own object. + + + + + Gets the collection of service type URIs found in the XRDS document describing this Provider. + + + + + A trust root to validate requests and match return URLs against. + + + This fills the OpenID Authentication 2.0 specification for realms. + See http://openid.net/specs/openid-authentication-2_0.html#realms + + + + + Provides conversions to and from strings for messages that include members of this type. + + + + + Encodes the specified value. + + The value. Guaranteed to never be null. + The in string form, ready for message transport. + + + + Decodes the specified value. + + The string value carried by the transport. Guaranteed to never be null, although it may be empty. + The deserialized form of the given string. + Thrown when the string value given cannot be decoded into the required object type. + + + + Encodes the specified value as the original value that was formerly decoded. + + The value. Guaranteed to never be null. + The in string form, ready for message transport. + + + + A regex used to detect a wildcard that is being used in the realm. + + + + + A (more or less) comprehensive list of top-level (i.e. ".com") domains, + for use by in order to disallow overly-broad realms + that allow all web sites ending with '.com', for example. + + + + + The Uri of the realm, with the wildcard (if any) removed. + + + + + Initializes a new instance of the class. + + The realm URL to use in the new instance. + + + + Initializes a new instance of the class. + + The realm URL of the Relying Party. + + + + Initializes a new instance of the class. + + The realm URI builder. + + This is useful because UriBuilder can construct a host with a wildcard + in the Host property, but once there it can't be converted to a Uri. + + + + + Implicitly converts the string-form of a URI to a object. + + The URI that the new Realm instance will represent. + The result of the conversion. + + + + Implicitly converts a to a object. + + The URI to convert to a realm. + The result of the conversion. + + + + Implicitly converts a object to its form. + + The realm to convert to a string value. + The result of the conversion. + + + + Checks whether one is equal to another. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Returns the hash code used for storing this object in a hash table. + + + A hash code for the current . + + + + + Returns the string form of this . + + + A that represents the current . + + + + + Validates a URL against this trust root. + + A string specifying URL to check. + Whether the given URL is within this trust root. + + + + Validates a URL against this trust root. + + The URL to check. + Whether the given URL is within this trust root. + + + + Searches for an XRDS document at the realm URL, and if found, searches + for a description of a relying party endpoints (OpenId login pages). + + The mechanism to use for sending HTTP requests. + Whether redirects may be followed when discovering the Realm. + This may be true when creating an unsolicited assertion, but must be + false when performing return URL verification per 2.0 spec section 9.2.1. + + The details of the endpoints if found; or null if no service document was discovered. + + + + + Searches for an XRDS document at the realm URL. + + The mechanism to use for sending HTTP requests. + Whether redirects may be followed when discovering the Realm. + This may be true when creating an unsolicited assertion, but must be + false when performing return URL verification per 2.0 spec section 9.2.1. + + The XRDS document if found; or null if no service document was discovered. + + + + + Calls if the argument is non-null. + Otherwise throws . + + The realm URI builder. + The result of UriBuilder.ToString() + + This simple method is worthwhile because it checks for null + before dereferencing the UriBuilder. Since this is called from + within a constructor's base(...) call, this avoids a + when we should be throwing an . + + + + + Gets the suggested realm to use for the calling web application. + + A realm that matches this applications root URL. + + For most circumstances the Realm generated by this property is sufficient. + However a wildcard Realm, such as "http://*.microsoft.com/" may at times be more + desirable than "http://www.microsoft.com/" in order to allow identifier + correlation across related web sites for directed identity Providers. + Requires an HttpContext.Current context. + + + + + Gets a value indicating whether a '*.' prefix to the hostname is + used in the realm to allow subdomains or hosts to be added to the URL. + + + + + Gets the host component of this instance. + + + + + Gets the scheme name for this URI. + + + + + Gets the port number of this URI. + + + + + Gets the absolute path of the URI. + + + + + Gets the System.Uri.AbsolutePath and System.Uri.Query properties separated + by a question mark (?). + + + + + Gets the original string. + + The original string. + + + + Gets the realm URL. If the realm includes a wildcard, it is not included here. + + + + + Gets the Realm discovery URL, where the wildcard (if present) is replaced with "www.". + + + See OpenID 2.0 spec section 9.2.1 for the explanation on the addition of + the "www" prefix. + + + + + Gets a value indicating whether this realm represents a reasonable (sane) set of URLs. + + + 'http://*.com/', for example is not a reasonable pattern, as it cannot meaningfully + specify the site claiming it. This function attempts to find many related examples, + but it can only work via heuristics. Negative responses from this method should be + treated as advisory, used only to alert the user to examine the trust root carefully. + + + + + A description of some OpenID Relying Party endpoint. + + + This is an immutable type. + + + + + Initializes a new instance of the class. + + The return to. + + The Type URIs of supported services advertised on a relying party's XRDS document. + + + + + Derives the highest OpenID protocol that this library and the OpenID Provider have + in common. + + The supported service type URIs. + The best OpenID protocol version to use when communicating with this Provider. + + + + Gets the URL to the login page on the discovered relying party web site. + + + + + Gets the OpenId protocol that the discovered relying party supports. + + + + + Diffie-Hellman encryption methods used by both the relying party and provider. + + + + + Provides access to a Diffie-Hellman session algorithm and its name. + + + + + Initializes a new instance of the class. + + The hashing algorithm used in this particular Diffie-Hellman session type. + A function that will return the value of the openid.session_type parameter for a given version of OpenID. + + + + Gets the function that will return the value of the openid.session_type parameter for a given version of OpenID. + + + + + Gets the hashing algorithm used in this particular Diffie-Hellman session type + + + + + An array of known Diffie Hellman sessions, sorted by decreasing hash size. + + + + + Finds the hashing algorithm to use given an openid.session_type value. + + The protocol version of the message that named the session_type to be used. + The value of the openid.session_type parameter. + The hashing algorithm to use. + Thrown if no match could be found for the given . + + + + Looks up the value to be used for the openid.session_type parameter. + + The protocol version that is to be used. + The hash size (in bits) that the DH session must have. + The value to be used for the openid.session_type parameter, or null if no match was found. + + + + Encrypts/decrypts a shared secret. + + The hashing algorithm that is agreed by both parties to use as part of the secret exchange. + + If the secret is being encrypted, this is the new Diffie Hellman object to use. + If the secret is being decrypted, this must be the same Diffie Hellman object used to send the original request message. + + The public key of the remote party. + The secret to encode, or the encoded secret. Whichever one is given will generate the opposite in the return value. + + The encrypted version of the secret if the secret itself was given in . + The secret itself if the encrypted version of the secret was given in . + + + + + Ensures that the big integer represented by a given series of bytes + is a positive integer. + + The bytes that make up the big integer. + + A byte array (possibly new if a change was required) whose + integer is guaranteed to be positive. + + + This is to be consistent with OpenID spec section 4.2. + + + + + Returns the value used to initialize the static field storing DH session types. + + A non-null, non-empty array. + > + This is a method rather than being inlined to the field initializer to try to avoid + the CLR bug that crops up sometimes if we initialize arrays using object initializer syntax. + + + + + An association that uses the HMAC-SHA family of algorithms for message signing. + + + + + Provides information about some HMAC-SHA hashing algorithm that OpenID supports. + + + + + Creates the using a given shared secret for the mac. + + The HMAC secret. + The algorithm. + + + + Gets or sets the function that takes a particular OpenID version and returns the value of the openid.assoc_type parameter in that protocol. + + + + + Gets or sets the name of the HMAC-SHA algorithm. (e.g. "HMAC-SHA256") + + + + + Gets or sets the base hash algorithm. + + + + + Gets the size of the hash (in bytes). + + + + + A list of HMAC-SHA algorithms in order of decreasing bit lengths. + + + + + The specific variety of HMAC-SHA this association is based on (whether it be HMAC-SHA1, HMAC-SHA256, etc.) + + + + + Initializes a new instance of the class. + + The specific variety of HMAC-SHA this association is based on (whether it be HMAC-SHA1, HMAC-SHA256, etc.) + The association handle. + The association secret. + The time duration the association will be good for. + + + + Creates an HMAC-SHA association. + + The OpenID protocol version that the request for an association came in on. + The value of the openid.assoc_type parameter. + The association handle. + The association secret. + How long the association will be good for. + The newly created association. + + + + Creates an association with the specified handle, secret, and lifetime. + + The handle. + The secret. + Total lifetime. + The newly created association. + + + + Returns the length of the shared secret (in bytes). + + The protocol version being used that will be used to lookup the text in + The value of the protocol argument specifying the type of association. For example: "HMAC-SHA1". + The length (in bytes) of the association secret. + Thrown if no association can be found by the given name. + + + + Looks for the first association type in a preferred-order list that is + likely to be supported given a specific OpenID version and the security settings, + and perhaps a matching Diffie-Hellman session type. + + The OpenID version that dictates which associations are available. + A value indicating whether to consider higher strength security to be better. Use true for initial association requests from the Relying Party; use false from Providers when the Relying Party asks for an unrecognized association in order to pick a suggested alternative that is likely to be supported on both sides. + The set of requirements the selected association type must comply to. + Use true for HTTP associations, false for HTTPS associations. + The resulting association type's well known protocol name. (i.e. HMAC-SHA256) + The resulting session type's well known protocol name, if a matching one is available. (i.e. DH-SHA256) + + True if a qualifying association could be found; false otherwise. + + + + + Determines whether a named Diffie-Hellman session type and association type can be used together. + + The protocol carrying the names of the session and association types. + The value of the openid.assoc_type parameter. + The value of the openid.session_type parameter. + + true if the named association and session types are compatible; otherwise, false. + + + + + Gets the string to pass as the assoc_type value in the OpenID protocol. + + The protocol version of the message that the assoc_type value will be included in. + + The value that should be used for the openid.assoc_type parameter. + + + + + Returns the specific hash algorithm used for message signing. + + + The hash algorithm used for message signing. + + + + + Returns the value used to initialize the static field storing association types. + + A non-null, non-empty array. + > + This is a method rather than being inlined to the field initializer to try to avoid + the CLR bug that crops up sometimes if we initialize arrays using object initializer syntax. + + + + + Gets the length (in bits) of the hash this association creates when signing. + + + + + An OpenID direct request from Relying Party to Provider to initiate an association. + + + + + Initializes a new instance of the class. + + The OpenID version this message must comply with. + The OpenID Provider endpoint. + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Gets or sets the preferred association type. The association type defines the algorithm to be used to sign subsequent messages. + + Value: A valid association type from Section 8.3. + + + + Gets or sets the preferred association session type. This defines the method used to encrypt the association's MAC key in transit. + + Value: A valid association session type from Section 8.4 (Association Session Types). + Note: Unless using transport layer encryption, "no-encryption" MUST NOT be used. + + + + Represents an association request that is sent using HTTPS and otherwise communicates the shared secret in plain text. + + + + + Initializes a new instance of the class. + + The OpenID version this message must comply with. + The OpenID Provider endpoint. + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + An OpenID direct request from Relying Party to Provider to initiate an association that uses Diffie-Hellman encryption. + + + + + The (only) value we use for the X variable in the Diffie-Hellman algorithm. + + + + + The default gen value for the Diffie-Hellman algorithm. + + + + + The default modulus value for the Diffie-Hellman algorithm. + + + + + Initializes a new instance of the class. + + The OpenID version this message must comply with. + The OpenID Provider endpoint. + + + + Called by the Relying Party to initialize the Diffie-Hellman algorithm and consumer public key properties. + + + + + Gets or sets the openid.dh_modulus value. + + May be null if the default value given in the OpenID spec is to be used. + + + + Gets or sets the openid.dh_gen value. + + May be null if the default value given in the OpenID spec is to be used. + + + + Gets or sets the openid.dh_consumer_public value. + + + This property is initialized with a call to . + + + + + Gets the Diffie-Hellman algorithm. + + + This property is initialized with a call to . + + + + + The successful Diffie-Hellman association response message. + + + Association response messages are described in OpenID 2.0 section 8.2. This type covers section 8.2.3. + + + + + Initializes a new instance of the class. + + The OpenID version of the response message. + The originating request. + + + + Gets or sets the Provider's Diffie-Hellman public key. + + btwoc(g ^ xb mod p) + + + + Gets or sets the MAC key (shared secret), encrypted with the secret Diffie-Hellman value. + + H(btwoc(g ^ (xa * xb) mod p)) XOR MAC key. H is either "SHA1" or "SHA256" depending on the session type. + + + + The successful unencrypted association response message. + + + Association response messages are described in OpenID 2.0 section 8.2. This type covers section 8.2.2. + + + + + Initializes a new instance of the class. + + The OpenID version of the response message. + The originating request. + + + + Gets or sets the MAC key (shared secret) for this association, Base 64 (Josefsson, S., “The Base16, Base32, and Base64 Data Encodings,” .) [RFC3548] encoded. + + + + + A message sent from a Provider to a Relying Party in response to a direct message request that resulted in an error. + + + This message must be sent with an HTTP status code of 400. + This class satisfies OpenID 2.0 section 5.1.2.2. + + + + + Initializes a new instance of the class. + + The OpenID version of the response message. + The originating request. + + + + Gets or sets a human-readable message indicating why the request failed. + + + + + Gets or sets the contact address for the administrator of the server. + + The contact address may take any form, as it is intended to be displayed to a person. + + + + Gets or sets a reference token, such as a support ticket number or a URL to a news blog, etc. + + + + + The Provider's response to a Relying Party that requested an association that the Provider does not support. + + + This message type described in OpenID 2.0 section 8.2.4. + + + + + A hard-coded string indicating an error occurred. + + "unsupported-type" + + + + Initializes a new instance of the class. + + The OpenID version of the response message. + The originating request. + + + + Gets or sets an association type supported by the OP from Section 8.3 (Association Types). + + + + + Gets or sets a valid association session type from Section 8.4 (Association Session Types) that the OP supports. + + + + + A message sent from a Provider to a Relying Party in response to an indirect message request that resulted in an error. + + + This class satisfies OpenID 2.0 section 5.2.3. + + + + + Initializes a new instance of the class. + + The request that resulted in this error on the Provider. + + + + Initializes a new instance of the class. + + The OpenID version this message should comply with. + The recipient of this message. + + + + Gets or sets a human-readable message indicating why the request failed. + + + + + Gets or sets the contact address for the administrator of the server. + + The contact address may take any form, as it is intended to be displayed to a person. + + + + Gets or sets a reference token, such as a support ticket number or a URL to a news blog, etc. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to An absolute URI is required for this value.. + + + + + Looks up a localized string similar to This is already a PPID Identifier.. + + + + + Looks up a localized string similar to The requested association type '{0}' with session type '{1}' is unrecognized or not supported by this Provider due to security requirements.. + + + + + Looks up a localized string similar to The length of the shared secret ({0}) does not match the length required by the association type ('{1}').. + + + + + Looks up a localized string similar to The length of the encrypted shared secret ({0}) does not match the length of the hashing algorithm ({1}).. + + + + + Looks up a localized string similar to No association store has been given but is required for the current configuration.. + + + + + Looks up a localized string similar to If an association store is given, a nonce store must also be provided.. + + + + + Looks up a localized string similar to An attribute with type URI '{0}' has already been added.. + + + + + Looks up a localized string similar to Only {0} values for attribute '{1}' were requested, but {2} were supplied.. + + + + + Looks up a localized string similar to The private data supplied does not meet the requirements of any known Association type. Its length may be too short, or it may have been corrupted.. + + + + + Looks up a localized string similar to The {0} extension failed to deserialize and will be skipped. {1}. + + + + + Looks up a localized string similar to Callback arguments are only supported when a {0} is provided to the {1}.. + + + + + Looks up a localized string similar to A Simple Registration request can only generate a response on the receiving end.. + + + + + Looks up a localized string similar to The openid.claimed_id and openid.identity parameters must both be present or both be absent.. + + + + + Looks up a localized string similar to The ClaimedIdentifier property cannot be set when IsDelegatedIdentifier is true to avoid breaking OpenID URL delegation.. + + + + + Looks up a localized string similar to This OpenID exploits features that this relying party cannot reliably verify. Please try logging in with a human-readable OpenID or from a different OpenID Provider.. + + + + + Looks up a localized string similar to The ClaimedIdentifier property must be set first.. + + + + + Looks up a localized string similar to An extension with this property name ('{0}') has already been registered.. + + + + + Looks up a localized string similar to The extension '{0}' has already been registered.. + + + + + Looks up a localized string similar to An authentication request has already been created using CreateRequest().. + + + + + Looks up a localized string similar to Only OpenIDs issued directly by their OpenID Provider are allowed here.. + + + + + Looks up a localized string similar to The associate request instance must be a Diffie-Hellman instance.. + + + + + Looks up a localized string similar to The following properties must be set before the Diffie-Hellman algorithm can generate a public key: {0}. + + + + + Looks up a localized string similar to URI is not SSL yet requireSslDiscovery is set to true.. + + + + + Looks up a localized string similar to An extension sharing namespace '{0}' has already been added. Only one extension per namespace is allowed in a given request.. + + + + + Looks up a localized string similar to Cannot lookup extension support on a rehydrated ServiceEndpoint.. + + + + + Looks up a localized string similar to Fragment segments do not apply to XRI identifiers.. + + + + + Looks up a localized string similar to The HTML head tag must include runat="server".. + + + + + Looks up a localized string similar to ClaimedIdentifier and LocalIdentifier must be the same when IsIdentifierSelect is true.. + + + + + Looks up a localized string similar to The openid.identity and openid.claimed_id parameters must either be both present or both absent from the message.. + + + + + Looks up a localized string similar to The Provider requested association type '{0}' and session type '{1}', which are not compatible with each other.. + + + + + Looks up a localized string similar to {0} (Contact: {1}, Reference: {2}). + + + + + Looks up a localized string similar to Cannot encode '{0}' because it contains an illegal character for Key-Value Form encoding. (line {1}: '{2}'). + + + + + Looks up a localized string similar to Invalid XmlDSig signature on XRDS document.. + + + + + Looks up a localized string similar to Cannot decode Key-Value Form because a line was found without a '{0}' character. (line {1}: '{2}'). + + + + + Looks up a localized string similar to The scheme must be http or https but was '{0}'.. + + + + + Looks up a localized string similar to The value '{0}' is not a valid URI.. + + + + + Looks up a localized string similar to Not a recognized XRI format.. + + + + + Looks up a localized string similar to The OpenID Provider issued an assertion for an Identifier whose discovery information did not match. + Assertion endpoint info: + {0} + Discovered endpoint info: + {1}. + + + + + Looks up a localized string similar to The list of keys do not match the provided dictionary.. + + + + + Looks up a localized string similar to The '{0}' and '{1}' parameters must both be or not be '{2}'.. + + + + + Looks up a localized string similar to The maximum time allowed to complete authentication has been exceeded. Please try again.. + + + + + Looks up a localized string similar to X.509 signing certificate issued to {0}, but a certificate for {1} was expected.. + + + + + Looks up a localized string similar to Missing {0} element.. + + + + + Looks up a localized string similar to No recognized association type matches the requested length of {0}.. + + + + + Looks up a localized string similar to No recognized association type matches the requested name of '{0}'.. + + + + + Looks up a localized string similar to Unless using transport layer encryption, "no-encryption" MUST NOT be used.. + + + + + Looks up a localized string similar to No identifier has been set.. + + + + + Looks up a localized string similar to No XRDS document containing OpenID relying party endpoint information could be found at {0}.. + + + + + Looks up a localized string similar to Diffie-Hellman session type '{0}' not found for OpenID {1}.. + + + + + Looks up a localized string similar to This operation is not supported by serialized authentication responses. Try this operation from the LoggedIn event handler.. + + + + + Looks up a localized string similar to No OpenID endpoint found.. + + + + + Looks up a localized string similar to No OpenID url is provided.. + + + + + Looks up a localized string similar to This operation is only allowed when IAuthenticationResponse.State == AuthenticationStatus.SetupRequired.. + + + + + Looks up a localized string similar to OpenID popup window or iframe did not recognize an OpenID response in the request.. + + + + + Looks up a localized string similar to An positive OpenID assertion was received from OP endpoint {0} and was rejected based on this site's security settings.. + + + + + Looks up a localized string similar to Unable to find the signing secret by the handle '{0}'.. + + + + + Looks up a localized string similar to The {0} property must be set first.. + + + + + Looks up a localized string similar to This property value is not supported by this control.. + + + + + Looks up a localized string similar to Unable to determine the version of the OpenID protocol implemented by the Provider at endpoint '{0}'.. + + + + + Looks up a localized string similar to An HTTP request to the realm URL ({0}) resulted in a redirect, which is not allowed during relying party discovery.. + + + + + Looks up a localized string similar to Sorry. This site only accepts OpenIDs that are HTTPS-secured, but {0} is not a secure Identifier.. + + + + + Looks up a localized string similar to The response is not ready. Use IsResponseReady to check whether a response is ready first.. + + + + + Looks up a localized string similar to return_to '{0}' not under realm '{1}'.. + + + + + Looks up a localized string similar to The {0} parameter ({1}) does not match the actual URL ({2}) the request was made with.. + + + + + Looks up a localized string similar to The ReturnTo property must not be null to support this operation.. + + + + + Looks up a localized string similar to The openid.return_to parameter is required in the request message in order to construct a response, but that parameter was missing.. + + + + + Looks up a localized string similar to The following parameter(s) are not included in the signature but must be: {0}. + + + + + Looks up a localized string similar to Invalid birthdate value. Must be in the form yyyy-MM-dd.. + + + + + Looks up a localized string similar to The type must implement {0}.. + + + + + Looks up a localized string similar to The property {0} had unexpected value {1}.. + + + + + Looks up a localized string similar to Unexpected HTTP status code {0} {1} received in direct response.. + + + + + Looks up a localized string similar to An unsolicited assertion cannot be sent for the claimed identifier {0} because this is not an authorized Provider for that identifier.. + + + + + Looks up a localized string similar to Rejecting unsolicited assertions requires a nonce store and an association store.. + + + + + Looks up a localized string similar to Unsolicited assertions are not allowed at this relying party.. + + + + + Looks up a localized string similar to Unsolicited assertions are not allowed from 1.0 OpenID Providers.. + + + + + Looks up a localized string similar to Providing a DateTime whose Kind is Unspecified is not allowed.. + + + + + Looks up a localized string similar to Unrecognized or missing canonicalization method.. + + + + + Looks up a localized string similar to This feature is unavailable due to an unrecognized channel configuration.. + + + + + Looks up a localized string similar to Unrecognized or missing signature method.. + + + + + Looks up a localized string similar to The openid.user_setup_url parameter is required when sending negative assertion messages in response to immediate mode requests.. + + + + + Looks up a localized string similar to The X.509 certificate used to sign this document is not trusted.. + + + + + Looks up a localized string similar to XRI support has been disabled at this site.. + + + + + Looks up a localized string similar to XRI resolution failed.. + + + + + An enumeration of the OpenID protocol versions supported by this library. + + + + + OpenID Authentication 1.0 + + + + + OpenID Authentication 1.1 + + + + + OpenID Authentication 2.0 + + + + + Tracks the several versions of OpenID this library supports and the unique + constants to each version used in the protocol. + + + + + A preference order list of all supported session types. + + + + + A preference order list of signature algorithms we support. + + + + + The value of the openid.ns parameter in the OpenID 2.0 specification. + + + + + The parameter of the callback parameter we tack onto the return_to URL + to store the replay-detection nonce. + + + + + A list of all supported OpenID versions, in order starting from newest version. + + + + + A list of all supported OpenID versions, in order starting from newest version. + V1.1 and V1.0 are considered the same and only V1.1 is in the list. + + + + + The default (or most recent) supported version of the OpenID protocol. + + + + + The OpenID version that this instance describes. + + + + + The namespace of OpenId 1.x elements in XRDS documents. + + + + + The value of the openid.ns parameter that appears on the query string + whenever data is passed between relying party and provider for OpenID 2.0 + and later. + + + + + The XRD/Service/Type value discovered in an XRDS document when + "discovering" on a Claimed Identifier (http://andrewarnott.yahoo.com) + + + + + The XRD/Service/Type value discovered in an XRDS document when + "discovering" on an OP Identifier rather than a Claimed Identifier. + (http://yahoo.com) + + + + + The XRD/Service/Type value discovered in an XRDS document when + "discovering" on a Realm URL and looking for the endpoint URL + that can receive authentication assertions. + + + + + Used as the Claimed Identifier and the OP Local Identifier when + the User Supplied Identifier is an OP Identifier. + + + + + The value of the 'rel' attribute in an HTML document's LINK tag + when the same LINK tag's HREF attribute value contains the URL to an + OP Endpoint URL. + + + + + The value of the 'rel' attribute in an HTML document's LINK tag + when the same LINK tag's HREF attribute value contains the URL to use + as the OP Local Identifier. + + + + + Parts of the protocol that define parameter names that appear in the + query string. Each parameter name is prefixed with 'openid.'. + + + + + Parts of the protocol that define parameter names that appear in the + query string. Each parameter name is NOT prefixed with 'openid.'. + + + + + The various 'constants' that appear as parameter arguments (values). + + + + + The maximum time a user can be allowed to take to complete authentication. + + + This is used to calculate the length of time that nonces are stored. + This is internal until we can decide whether to leave this static, or make + it an instance member, or put it inside the IConsumerApplicationStore interface. + + + + + The maximum permissible difference in clocks between relying party and + provider web servers, discounting time zone differences. + + + This is used when storing/validating nonces from the provider. + If it is conceivable that a server's clock could be up to five minutes + off from true UTC time, then the maximum time skew should be set to + ten minutes to allow one server to be five minutes ahead and the remote + server to be five minutes behind and still be able to communicate. + + + + + Scans a list for matches with some element of the OpenID protocol, + searching from newest to oldest protocol for the first and best match. + + The type of element retrieved from the instance. + Takes a instance and returns an element of it. + The list to scan for matches. + The protocol with the element that matches some item in the list. + + + + Attempts to detect the right OpenID protocol version based on the contents + of an incoming OpenID indirect message or direct request. + + + + + Attempts to detect the right OpenID protocol version based on the contents + of an incoming OpenID direct response message. + + + + + Attemps to detect the highest OpenID protocol version supported given a set + of XRDS Service Type URIs included for some service. + + + + + Checks whether a given Protocol version practically equals this one + for purposes of verifying a match for assertion verification. + + The other version to check against this one. + + true if this and the given Protocol versions are essentially the same. + + OpenID v1.0 never had a spec, and 1.0 and 1.1 are indistinguishable because of that. + Therefore for assertion verification, 1.0 and 1.1 are considered equivalent. + + + + + Returns the enum value for the instance. + + + + + A hybrid of the store interfaces that an OpenID Provider must implement, and + an OpenID Relying Party may implement to operate in stateful (smart) mode. + + + + + Security settings that are applicable to relying parties. + + + + + The default value for the property. + + + + + Initializes a new instance of the class. + + + + + Filters out any disallowed endpoints. + + The endpoints discovered on an Identifier. + A sequence of endpoints that satisfy all security requirements. + + + + Gets or sets a value indicating whether the entire pipeline from Identifier discovery to + Provider redirect is guaranteed to be encrypted using HTTPS for authentication to succeed. + + + Setting this property to true is appropriate for RPs with highly sensitive + personal information behind the authentication (money management, health records, etc.) + When set to true, some behavioral changes and additional restrictions are placed: + + User-supplied identifiers lacking a scheme are prepended with + HTTPS:// rather than the standard HTTP:// automatically. + User-supplied identifiers are not allowed to use HTTP for the scheme. + All redirects during discovery on the user-supplied identifier must be HTTPS. + Any XRDS file found by discovery on the User-supplied identifier must be protected using HTTPS. + Only Provider endpoints found at HTTPS URLs will be considered. + If the discovered identifier is an OP Identifier (directed identity), the + Claimed Identifier eventually asserted by the Provider must be an HTTPS identifier. + In the case of an unsolicited assertion, the asserted Identifier, discovery on it and + the asserting provider endpoint must all be secured by HTTPS. + + Although the first redirect from this relying party to the Provider is required + to use HTTPS, any additional redirects within the Provider cannot be protected and MAY + revert the user's connection to HTTP, based on individual Provider implementation. + There is nothing that the RP can do to detect or prevent this. + + A is thrown during discovery or authentication when a secure pipeline cannot be established. + + + + + + Gets or sets a value indicating whether only OP Identifiers will be discoverable + when creating authentication requests. + + + + + Gets or sets the oldest version of OpenID the remote party is allowed to implement. + + Defaults to + + + + Gets or sets the maximum allowable age of the secret a Relying Party + uses to its return_to URLs and nonces with 1.0 Providers. + + The default value is 7 days. + + + + Gets or sets a value indicating whether all unsolicited assertions should be ignored. + + The default value is false. + + + + Gets or sets a value indicating whether delegating identifiers are refused for authentication. + + The default value is false. + + When set to true, login attempts that start at the RP or arrive via unsolicited + assertions will be rejected if discovery on the identifier shows that OpenID delegation + is used for the identifier. This is useful for an RP that should only accept identifiers + directly issued by the Provider that is sending the assertion. + + + + + Gets or sets a value indicating whether unsigned extensions in authentication responses should be ignored. + + The default value is false. + + When set to true, the methods + will not return any extension that was not signed by the Provider. + + + + + Gets or sets a value indicating whether authentication requests will only be + sent to Providers with whom we can create a shared association. + + + true to immediately fail authentication if an association with the Provider cannot be established; otherwise, false. + The default value is false. + + + + + Gets or sets a value indicating whether certain Claimed Identifiers that exploit + features that .NET does not have the ability to send exact HTTP requests for will + still be allowed by using an approximate HTTP request. + + + The default value is true. + + + + + Gets the set of trusted OpenID Provider Endpoint URIs. + + + + + Gets or sets a value indicating whether any login attempt coming from an OpenID Provider Endpoint that is not on this + whitelist of trusted OP Endpoints will be rejected. If the trusted providers list is empty and this value + is true, all assertions are rejected. + + Default is false. + + + + Gets or sets a value indicating whether special measures are taken to + protect users from replay attacks when those users' identities are hosted + by OpenID 1.x Providers. + + The default value is true. + + Nonces for protection against replay attacks were not mandated + by OpenID 1.x, which leaves users open to replay attacks. + This feature works by adding a signed nonce to the authentication request. + This might increase the request size beyond what some OpenID 1.1 Providers + (such as Blogger) are capable of handling. + + + + + The discovery service for URI identifiers. + + + + + Initializes a new instance of the class. + + + + + Performs discovery on the specified identifier. + + The identifier to perform discovery on. + The means to place outgoing HTTP requests. + if set to true, no further discovery services will be called for this identifier. + + A sequence of service endpoints yielded by discovery. Must not be null, but may be empty. + + + + + Searches HTML for the HEAD META tags that describe OpenID provider services. + + The final URL that provided this HTML document. + This may not be the same as (this) userSuppliedIdentifier if the + userSuppliedIdentifier pointed to a 301 Redirect. + The user supplied identifier. + The HTML that was downloaded and should be searched. + + A sequence of any discovered ServiceEndpoints. + + + + + The discovery service for XRI identifiers that uses an XRI proxy resolver for discovery. + + + + + The magic URL that will provide us an XRDS document for a given XRI identifier. + + + We use application/xrd+xml instead of application/xrds+xml because it gets + xri.net to automatically give us exactly the right XRD element for community i-names + automatically, saving us having to choose which one to use out of the result. + The ssl=true parameter tells the proxy resolver to accept only SSL connections + when resolving community i-names. + + + + + Initializes a new instance of the class. + + + + + Performs discovery on the specified identifier. + + The identifier to perform discovery on. + The means to place outgoing HTTP requests. + if set to true, no further discovery services will be called for this identifier. + + A sequence of service endpoints yielded by discovery. Must not be null, but may be empty. + + + + + Downloads the XRDS document for this XRI. + + The identifier. + The request handler. + The XRDS document. + + + + Gets the URL from which this XRI's XRDS document may be downloaded. + + The identifier. + The URI to HTTP GET from to get the services. + + + + A URI style of OpenID Identifier. + + + + + A simple URI class that doesn't suffer from the parsing problems of the class. + + + + + Initializes a new instance of the class. + + The value. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + The parameter is null. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Normalizes the characters that are escaped in the given URI path. + + The path to normalize. + The given path, with exactly those characters escaped which should be. + + + + Gets the scheme. + + The scheme. + + + + Gets the authority. + + The authority. + + + + Gets the path of the URI. + + The path from the URI. + + + + Gets the query. + + The query. + + + + Gets the fragment. + + The fragment. + + + + A URI parser that does not compress paths, such as trimming trailing periods from path segments. + + + + + Initializes a new instance of the class. + + The standard scheme that this parser will be subverting. + + + + Initializes this parser with the actual scheme it should appear to be. + + if set to true Uris using this scheme will look like they're using the original standard scheme. + + + + Gets the scheme this parser is registered under. + + The registered scheme. + + + + The allowed protocol schemes in a URI Identifier. + + + + + The special scheme to use for HTTP URLs that should not have their paths compressed. + + + + + The special scheme to use for HTTPS URLs that should not have their paths compressed. + + + + + The special scheme to use for HTTP URLs that should not have their paths compressed. + + + + + The special scheme to use for HTTPS URLs that should not have their paths compressed. + + + + + A value indicating whether scheme substitution is being used to workaround + .NET path compression that invalidates some OpenIDs that have trailing periods + in one of their path segments. + + + + + Initializes a new instance of the class. + + The value this identifier will represent. + + + + Initializes a new instance of the class. + + The value this identifier will represent. + if set to true [require SSL discovery]. + + + + Initializes a new instance of the class. + + The value this identifier will represent. + + + + Initializes a new instance of the class. + + The value this identifier will represent. + if set to true [require SSL discovery]. + + + + Converts a instance to a instance. + + The identifier to convert to an ordinary instance. + The result of the conversion. + + + + Converts a instance to a instance. + + The instance to turn into a . + The result of the conversion. + + + + Tests equality between this URI and another URI. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Returns the hash code of this XRI. + + + A hash code for the current . + + + + + Returns the string form of the URI. + + + A that represents the current . + + + + + Determines whether a URI is a valid OpenID Identifier (of any kind). + + The URI to test for OpenID validity. + + true if the identifier is valid; otherwise, false. + + + A valid URI is absolute (not relative) and uses an http(s) scheme. + + + + + Determines whether a URI is a valid OpenID Identifier (of any kind). + + The URI to test for OpenID validity. + + true if the identifier is valid; otherwise, false. + + + A valid URI is absolute (not relative) and uses an http(s) scheme. + + + + + Returns an that has no URI fragment. + Quietly returns the original if it is not + a or no fragment exists. + + + A new instance if there was a + fragment to remove, otherwise this same instance.. + + + + + Converts a given identifier to its secure equivalent. + UriIdentifiers originally created with an implied HTTP scheme change to HTTPS. + Discovery is made to require SSL for the entire resolution process. + + The newly created secure identifier. + If the conversion fails, retains + this identifiers identity, but will never discover any endpoints. + + True if the secure conversion was successful. + False if the Identifier was originally created with an explicit HTTP scheme. + + + + + Determines whether the given URI is using a scheme in the list of allowed schemes. + + The URI whose scheme is to be checked. + + true if the scheme is allowed; otherwise, false. + false is also returned if is null. + + + + + Determines whether the given URI is using a scheme in the list of allowed schemes. + + The URI whose scheme is to be checked. + + true if the scheme is allowed; otherwise, false. + false is also returned if is null. + + + + + Tries to canonicalize a user-supplied identifier. + This does NOT convert a user-supplied identifier to a Claimed Identifier! + + The user-supplied identifier. + The resulting canonical URI. + If set to true and the user-supplied identifier lacks a scheme, the "https://" scheme will be prepended instead of the standard "http://" one. + if set to true [scheme prepended]. + + true if the identifier was valid and could be canonicalized. + false if the identifier is outside the scope of allowed inputs and should be rejected. + + + Canonicalization is done by adding a scheme in front of an + identifier if it isn't already present. Other trivial changes that do not + require network access are also done, such as lower-casing the hostname in the URI. + + + + + Fixes up the scheme if appropriate. + + The URI, already in legal form (with http(s):// prepended if necessary). + The resulting canonical URI. + + true if the canonicalization was successful; false otherwise. + + This does NOT standardize an OpenID URL for storage in a database, as + it does nothing to convert the URL to a Claimed Identifier, besides the fact + that it only deals with URLs whereas OpenID 2.0 supports XRIs. + For this, you should lookup the value stored in IAuthenticationResponse.ClaimedIdentifier. + + + + + Gets the special non-compressing scheme or URL for a standard scheme or URL. + + The ordinary URL or scheme name. + The non-compressing equivalent scheme or URL for the given value. + + + + Performs the minimal URL normalization to allow a string to be passed to the constructor. + + The user-supplied identifier URI to normalize. + if set to true, a missing scheme should result in HTTPS being prepended instead of HTTP. + if set to true, the scheme was prepended during normalization. + The somewhat normalized URL. + + + + Gets or sets a value indicating whether scheme substitution is being used to workaround + .NET path compression that invalidates some OpenIDs that have trailing periods + in one of their path segments. + + + + + Gets the URI this instance represents. + + + + + Gets a value indicating whether the scheme was missing when this + Identifier was created and added automatically as part of the + normalization process. + + + + + Gets a value indicating whether this Identifier has characters or patterns that + the class normalizes away and invalidating the Identifier. + + + + + An XRI style of OpenID Identifier. + + + + + The scheme and separator "xri://" + + + + + An XRI always starts with one of these symbols. + + + + + Backing store for the property. + + + + + Initializes a new instance of the class. + + The string value of the XRI. + + + + Initializes a new instance of the class. + + The XRI that this Identifier will represent. + + If set to true, discovery and the initial authentication redirect will + only succeed if it can be done entirely using SSL. + + + + + Tests equality between this XRI and another XRI. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Returns the hash code of this XRI. + + + A hash code for the current . + + + + + Returns the canonical string form of the XRI. + + + A that represents the current . + + + + + Tests whether a given string represents a valid XRI format. + + The value to test for XRI validity. + + true if the given string constitutes a valid XRI; otherwise, false. + + + + + Returns an that has no URI fragment. + Quietly returns the original if it is not + a or no fragment exists. + + + A new instance if there was a + fragment to remove, otherwise this same instance.. + + + XRI Identifiers never have a fragment part, and thus this method + always returns this same instance. + + + + + Converts a given identifier to its secure equivalent. + UriIdentifiers originally created with an implied HTTP scheme change to HTTPS. + Discovery is made to require SSL for the entire resolution process. + + The newly created secure identifier. + If the conversion fails, retains + this identifiers identity, but will never discover any endpoints. + + True if the secure conversion was successful. + False if the Identifier was originally created with an explicit HTTP scheme. + + + + + Takes any valid form of XRI string and returns the canonical form of the same XRI. + + The xri to canonicalize. + The canonicalized form of the XRI. + The canonical form, per the OpenID spec, is no scheme and no whitespace on either end. + + + + Gets the original XRI supplied to the constructor. + + + + + Gets the canonical form of the XRI string. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to XRI CanonicalID verification failed.. + + + + + Looks up a localized string similar to Failure parsing XRDS document.. + + + + + Looks up a localized string similar to The XRDS document for XRI {0} is missing the required CanonicalID element.. + + + + + Looks up a localized string similar to Could not find XRI resolution Status tag or code attribute was invalid.. + + + + + String constants for various content-type header values used in YADIS discovery. + + + + + The text/html content-type + + + + + The application/xhtml+xml content-type + + + + + The application/xrds+xml content-type + + + + + The text/xml content type + + + + + Contains the result of YADIS discovery. + + + + + The original web response, backed up here if the final web response is the preferred response to use + in case it turns out to not work out. + + + + + Initializes a new instance of the class. + + The user-supplied identifier. + The initial response. + The final response. + + + + Reverts to the HTML response after the XRDS response didn't work out. + + + + + Applies the HTML response to the object. + + The initial response. + + + + Gets the URI of the original YADIS discovery request. + This is the user supplied Identifier as given in the original + YADIS discovery request. + + + + + Gets the fully resolved (after redirects) URL of the user supplied Identifier. + This becomes the ClaimedIdentifier. + + + + + Gets the location the XRDS document was downloaded from, if different + from the user supplied Identifier. + + + + + Gets the Content-Type associated with the . + + + + + Gets the text in the final response. + This may be an XRDS document or it may be an HTML document, + as determined by the property. + + + + + Gets a value indicating whether the + represents an XRDS document. False if the response is an HTML document. + + + + + An HTML HEAD tag parser. + + + + + Common flags to use on regex tests. + + + + + A regular expression designed to select tags (?) + + + + + A regular expression designed to select start tags (?) + + + + + A regular expression designed to select attributes within a tag. + + + + + A regular expression designed to select the HEAD tag. + + + + + A regular expression designed to select the HTML tag. + + + + + A regular expression designed to remove all comments and scripts from a string. + + + + + Finds all the HTML HEAD tag child elements that match the tag name of a given type. + + The HTML tag of interest. + The HTML to scan. + A sequence of the matching elements. + + + + Filters a list of controls based on presence of an attribute. + + The type of HTML controls being filtered. + The sequence. + The attribute. + A filtered sequence of attributes. + + + + Generates a regular expression that will find a given HTML tag. + + Name of the tag. + The close tags (?). + The created regular expression. + + + + Generates a regular expression designed to find a given tag. + + The tag to find. + The created regular expression. + + + + A node in an XRDS document. + + + + + The XRD namespace xri://$xrd*($v*2.0) + + + + + The XRDS namespace xri://$xrds + + + + + Initializes a new instance of the class. + + The node represented by this instance. + The parent node. + + + + Initializes a new instance of the class. + + The document's root node, which this instance represents. + + + + Gets the node. + + + + + Gets the parent node, or null if this is the root node. + + + + + Gets the XML namespace resolver to use in XPath expressions. + + + + + The Service element in an XRDS document. + + + + + Initializes a new instance of the class. + + The service element. + The parent. + + + + Compares the current object with another object of the same type. + + An object to compare with this object. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings: + Value + Meaning + Less than zero + This object is less than the parameter. + Zero + This object is equal to . + Greater than zero + This object is greater than . + + + + + Gets the XRD parent element. + + + + + Gets the priority. + + + + + Gets the URI child elements. + + + + + Gets the type child elements. + + The type elements. + + + + Gets the type child element's URIs. + + + + + Gets the OP Local Identifier. + + + + + The Type element in an XRDS document. + + + + + Initializes a new instance of the class. + + The type element. + The parent. + + + + Gets the URI. + + + + + The Uri element in an XRDS document. + + + + + Initializes a new instance of the class. + + The URI element. + The service. + + + + Compares the current object with another object of the same type. + + An object to compare with this object. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings: + Value + Meaning + Less than zero + This object is less than the parameter. + Zero + This object is equal to . + Greater than zero + This object is greater than . + + + + + Gets the priority. + + + + + Gets the URI. + + + + + Gets the parent service. + + + + + The Xrd element in an XRDS document. + + + + + Initializes a new instance of the class. + + The XRD element. + The parent. + + + + Searches for service sub-elements that have Type URI sub-elements that match + one that we have for a known OpenID protocol version. + + A function that selects what element of the OpenID Protocol we're interested in finding. + A sequence of service elements that match the search criteria, sorted in XRDS @priority attribute order. + + + + Gets the child service elements. + + The services. + + + + Gets a value indicating whether this XRD element's resolution at the XRI resolver was successful. + + + true if this XRD's resolution was successful; otherwise, false. + + + + + Gets the canonical ID (i-number) for this element. + + + + + Gets a value indicating whether the was verified. + + + + + Gets the services for OP Identifiers. + + + + + Gets the services for Claimed Identifiers. + + + + + Gets the services that would be discoverable at an RP for return_to verification. + + + + + Gets the services that would be discoverable at an RP for the UI extension icon. + + + + + Gets an enumeration of all Service/URI elements, sorted in priority order. + + + + + Gets the XRI resolution status code. + + + + + An XRDS document. + + + + + The namespace used by XML digital signatures. + + + + + The namespace used by Google Apps for Domains for OpenID URI templates. + + + + + Initializes a new instance of the class. + + The root node of the XRDS document. + + + + Initializes a new instance of the class. + + The Xml reader positioned at the root node of the XRDS document. + + + + Initializes a new instance of the class. + + The text that is the XRDS document. + + + + Gets the XRD child elements of the document. + + + + + Gets a value indicating whether all child XRD elements were resolved successfully. + + + + + YADIS discovery manager. + + + + + The HTTP header to look for in responses to declare where the XRDS document should be found. + + + + + The maximum number of bytes to read from an HTTP response + in searching for a link to a YADIS document. + + + + + Gets or sets the cache that can be used for HTTP requests made during identifier discovery. + + + + + Performs YADIS discovery on some identifier. + + The mechanism to use for sending HTTP requests. + The URI to perform discovery on. + Whether discovery should fail if any step of it is not encrypted. + + The result of discovery on the given URL. + Null may be returned if an error occurs, + or if is true but part of discovery + is not protected by SSL. + + + + + Searches an HTML document for a + <meta http-equiv="X-XRDS-Location" content="{YadisURL}"> + tag and returns the content of YadisURL. + + The HTML to search. + The URI of the XRDS document if found; otherwise null. + + + + Sends a YADIS HTTP request as part of identifier discovery. + + The request handler to use to actually submit the request. + The URI to GET. + Whether only HTTPS URLs should ever be retrieved. + The value of the Accept HTTP header to include in the request. + The HTTP response retrieved from the request. + + + + Determines whether a given HTTP response constitutes an XRDS document. + + The response to test. + + true if the response constains an XRDS document; otherwise, false. + + + + + An Attribute Exchange and Simple Registration filter to make all incoming attribute + requests look like Simple Registration requests, and to convert the response + to the originally requested extension and format. + + + + + Initializes a new instance of the class. + + + + + Implements the Identity, Credential, & Access Management (ICAM) OpenID 2.0 Profile + for the General Services Administration (GSA). + + + Relying parties that include this profile are always held to the terms required by the profile, + but Providers are only affected by the special behaviors of the profile when the RP specifically + indicates that they want to use this profile. + + + + + The maximum time a shared association can live. + + + + + Initializes a new instance of the class. + + + + + Ensures the maximum association lifetime does not exceed a given limit. + + Type of the association. + The maximum lifetime. + The security settings to adjust. + + + + Gets or sets the provider for generating PPID identifiers. + + + + + Offers OpenID Providers automatic PPID Claimed Identifier generation when requested + by a PAPE request. + + + PPIDs are set on positive authentication responses when the PAPE request includes + the authentication policy. + The static member MUST + be set prior to any PPID requests come in. Typically this should be set in the + Application_Start method in the global.asax.cs file. + + + + + Gets or sets the provider for generating PPID identifiers. + + + + + The openid.mode=associate message as it is received at the OpenID Provider. + + + + + Creates a Provider's response to an incoming association request. + + + The appropriate association response message. + + + If an association can be successfully created, the + AssociateSuccessfulResponse.CreateAssociation method must not be + called by this method. + Successful association response messages will derive from . + Failed association response messages will derive from . + + + + + Represents an association request received by the OpenID Provider that is sent using HTTPS and + otherwise communicates the shared secret in plain text. + + + + + Initializes a new instance of the class. + + The OpenID version this message must comply with. + The OpenID Provider endpoint. + + + + Creates a Provider's response to an incoming association request. + + + The appropriate association response message. + + + + + The messaging channel for OpenID Providers. + + + + + Initializes a new instance of the class. + + The OpenID Provider's association store or handle encoder. + The nonce store to use. + The security settings. + + + + Initializes a new instance of the class. + + The association store to use. + The nonce store to use. + An object that knows how to distinguish the various OpenID message types for deserialization purposes. + The security settings. + + + + Initializes the binding elements. + + The OpenID Provider's crypto key store. + The nonce store to use. + The security settings to apply. Must be an instance of either RelyingPartySecuritySettings or ProviderSecuritySettings. + + An array of binding elements which may be used to construct the channel. + + + + + OpenID Provider message factory. + + + + + Analyzes an incoming request message payload to discover what kind of + message is embedded in it and returns the type, or null if no match is found. + + The intended or actual recipient of the request message. + The name/value pairs that make up the message payload. + + A newly instantiated -derived object that this message can + deserialize to. Null if the request isn't recognized as a valid protocol message. + + + + + Analyzes an incoming request message payload to discover what kind of + message is embedded in it and returns the type, or null if no match is found. + + The message that was sent as a request that resulted in the response. + The name/value pairs that make up the message payload. + + A newly instantiated -derived object that this message can + deserialize to. Null if the request isn't recognized as a valid protocol message. + + + + + The signing binding element for OpenID Providers. + + + + + The association store used by Providers to look up the secrets needed for signing. + + + + + The security settings at the Provider. + Only defined when this element is instantiated to service a Provider. + + + + + Initializes a new instance of the class. + + The association store used to look up the secrets needed for signing. + The security settings. + + + + Prepares a message for sending based on the rules of this channel binding element. + + The message to prepare for sending. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + + + Gets the association to use to sign or verify a message. + + The message to sign or verify. + + The association to use to sign or verify the message. + + + + + Gets a specific association referenced in a given message's association handle. + + The signed message whose association handle should be used to lookup the association to return. + + The referenced association; or null if such an association cannot be found. + + + + + Gets a private Provider association used for signing messages in "dumb" mode. + + An existing or newly created association. + + + + Verifies the signature by unrecognized handle. + + The message. + The signed message. + The protections applied. + + The applied protections. + + + + + Determines whether the relying party sending an authentication request is + vulnerable to replay attacks. + + The request message from the Relying Party. Useful, but may be null for conservative estimate results. + The response message to be signed. + + true if the relying party is vulnerable; otherwise, false. + + + + + Gets the value to use for the openid.signed parameter. + + The signable message. + + A comma-delimited list of parameter names, omitting the 'openid.' prefix, that determines + the inclusion and order of message parts that will be signed. + + + + + Gets a value indicating whether this binding element is on a Provider channel. + + + + + A set of methods designed to assist in improving interop across different + OpenID implementations and their extensions. + + + + + Transforms an AX attribute type URI from the axschema.org format into a given format. + + The ax schema org format type URI. + The target format. Only one flag should be set. + The AX attribute type URI in the target format. + + + + Looks for Simple Registration and Attribute Exchange (all known formats) + request extensions and returns them as a Simple Registration extension, + and adds the new extension to the original request message if it was absent. + + The authentication request. + + The Simple Registration request if found, + or a fabricated one based on the Attribute Exchange extension if found, + or null if no attribute extension request is found. + + + + Converts the Simple Registration extension response to whatever format the original + attribute request extension came in. + + The authentication request with the response extensions already added. + + If the original attribute request came in as AX, the Simple Registration extension is converted + to an AX response and then the Simple Registration extension is removed from the response. + + + + + Adds the AX attribute value to the response if it is non-empty. + + The AX Fetch response to add the attribute value to. + The attribute type URI in axschema.org format. + The target format of the actual attribute to write out. + The value of the attribute. + + + + Gets the demand level for an AX attribute. + + The AX fetch request to search for the attribute. + The type URI of the attribute in axschema.org format. + The demand level for the attribute. + + + + OpenID User Interface extension 1.0 request message. + + + Implements the extension described by: http://wiki.openid.net/f/openid_ui_extension_draft01.html + This extension only applies to checkid_setup requests, since checkid_immediate requests display + no UI to the user. + For rules about how the popup window should be displayed, please see the documentation of + . + An RP may determine whether an arbitrary OP supports this extension (and thereby determine + whether to use a standard full window redirect or a popup) via the + method. + + + + + Gets the URL of the RP icon for the OP to display. + + The realm of the RP where the authentication request originated. + The web request handler to use for discovery. + Usually available via OpenIdProvider.Channel.WebRequestHandler. + + A sequence of the RP's icons it has available for the Provider to display, in decreasing preferred order. + + The icon URL. + + This property is automatically set for the OP with the result of RP discovery. + RPs should set this value by including an entry such as this in their XRDS document. + + <Service xmlns="xri://$xrd*($v*2.0)"> + <Type>http://specs.openid.net/extensions/ui/icon</Type> + <URI>http://consumer.example.com/images/image.jpg</URI> + </Service> + + + + + OpenID Provider utility methods for HMAC-SHA* associations. + + + + + The default lifetime of a shared association when no lifetime is given + for a specific association type. + + + + + Creates a new association of a given type at an OpenID Provider. + + The protocol. + Type of the association (i.e. HMAC-SHA1 or HMAC-SHA256) + A value indicating whether the new association will be used privately by the Provider for "dumb mode" authentication + or shared with the Relying Party for "smart mode" authentication. + The Provider's association store. + The security settings of the Provider. + + The newly created association. + + + The new association is NOT automatically put into an association store. This must be done by the caller. + + + + + An OpenID direct request from Relying Party to Provider to initiate an association that uses Diffie-Hellman encryption. + + + + + Initializes a new instance of the class. + + The OpenID version this message must comply with. + The OpenID Provider endpoint. + + + + Creates a Provider's response to an incoming association request. + + + The appropriate association response message. + + + + + An outgoing successful association response from the OpenID Provider. + + + + + Called to create the Association based on a request previously given by the Relying Party. + + The prior request for an association. + The Provider's association store. + The security settings of the Provider. + + The created association. + + + The caller will update this message's and + properties based on the returned by this method, but any other + association type specific properties must be set by this method. + The response message is updated to include the details of the created association by this method, + but the resulting association is not added to the association store and must be done by the caller. + + + + + Gets or sets the expires in. + + + The expires in. + + + + + Gets or sets the association handle. + + + The association handle. + + + + + The successful Diffie-Hellman association response message. + + + Association response messages are described in OpenID 2.0 section 8.2. This type covers section 8.2.3. + + + + + Initializes a new instance of the class. + + The OpenID version of the response message. + The originating request. + + + + Creates the association at the provider side after the association request has been received. + + The association request. + The OpenID Provider's association store or handle encoder. + The security settings of the Provider. + + The newly created association. + + + The response message is updated to include the details of the created association by this method, + but the resulting association is not added to the association store and must be done by the caller. + + + + + OpenID Provider tools for receiving association requests. + + + + + Creates a Provider's response to an incoming association request. + + The request message. + The association store. + The security settings on the Provider. + + The appropriate association response that is ready to be sent back to the Relying Party. + + + If an association is created, it will be automatically be added to the provided + association store. + Successful association response messages will derive from . + Failed association response messages will derive from . + + + + + Creates a response that notifies the Relying Party that the requested + association type is not supported by this Provider, and offers + an alternative association type, if possible. + + The request message. + The security settings that apply to this Provider. + + The response to send to the Relying Party. + + + + + Code contract for the interface. + + + + + An unencrypted association response as it is sent by the Provider. + + + + + Initializes a new instance of the class. + + The version. + The request. + + + + Called to create the Association based on a request previously given by the Relying Party. + + The prior request for an association. + The Provider's association store. + The security settings of the Provider. + + The created association. + + + The caller will update this message's + and + + properties based on the returned by this method, but any other + association type specific properties must be set by this method. + The response message is updated to include the details of the created association by this method, + but the resulting association is not added to the association store and must be done by the caller. + + + + + The check_auth response message, as it is seen by the OpenID Provider. + + + + + Initializes a new instance of the class. + + The request that this message is responding to. + The OpenID Provider that is preparing to send this response. + + + + Utility methods for OpenID Providers. + + + + + Called to create the Association based on a request previously given by the Relying Party. + + The prior request for an association. + The response. + The Provider's association store. + The security settings for the Provider. Should be null for Relying Parties. + + The created association. + + + The response message is updated to include the details of the created association by this method. + This method is called by both the Provider and the Relying Party, but actually performs + quite different operations in either scenario. + + + + + Determines whether the association with the specified handle is (still) valid. + + The association store. + The OpenID message that referenced this association handle. + A value indicating whether a private association is expected. + The association handle. + + true if the specified containing message is valid; otherwise, false. + + + + + A signed and encrypted serialization of an association. + + + + + Initializes a new instance of the class. + + + + + Serializes the instance to the specified stream. + + The stream. + + + + Initializes the fields on this instance from the specified stream. + + The stream. + + + + Creates the formatter used for serialization of this type. + + The crypto key store used when signing or encrypting. + The bucket in which symmetric keys are stored for signing/encrypting data. + The minimum age. + + A formatter for serialization. + + + + + Gets or sets the association secret. + + + + + Gets or sets the UTC time that this association expires. + + + + + Gets or sets a value indicating whether this instance is for "dumb" mode RPs. + + + true if this instance is private association; otherwise, false. + + + + + Gets or sets the type of the association (shared or private, a.k.a. smart or dumb). + + + + + Provides association serialization and deserialization. + + + Implementations may choose to store the association details in memory or a database table and simply return a + short, randomly generated string that is the key to that data. Alternatively, an implementation may + sign and encrypt the association details and then encode the results as a base64 string and return that value + as the association handle, thereby avoiding any association persistence at the OpenID Provider. + When taking the latter approach however, it is of course imperative that the association be encrypted + to avoid disclosing the secret to anyone who sees the association handle, which itself isn't considered to + be confidential. + + + + + Stores an association and returns a handle for it. + + The association secret. + The UTC time that the association should expire. + A value indicating whether this is a private association. + + The association handle that represents this association. + + + + + Retrieves an association given an association handle. + + The OpenID message that referenced this association handle. + A value indicating whether a private association is expected. + The association handle. + + An association instance, or null if the association has expired or the signature is incorrect (which may be because the OP's symmetric key has changed). + + Thrown if the association is not of the expected type. + + + + Code contract for the interface. + + + + + Provides association storage in the association handle itself, but embedding signed and encrypted association + details in the handle. + + + + + The name of the bucket in which to store keys that encrypt association data into association handles. + + + + + The crypto key store used to persist encryption keys. + + + + + Initializes a new instance of the class. + + The crypto key store. + + + + Encodes the specified association data bag. + + The symmetric secret. + The UTC time that the association should expire. + A value indicating whether this is a private association. + + The association handle that represents this association. + + + + + Retrieves an association given an association handle. + + The OpenID message that referenced this association handle. + A value indicating whether a private association is expected. + The association handle. + + An association instance, or null if the association has expired or the signature is incorrect (which may be because the OP's symmetric key has changed). + + Thrown if the association is not of the expected type. + + + + An association storage mechanism that stores the association secrets in a private store, + and returns randomly generated association handles to refer to these secrets. + + + + + The bucket to use when recording shared associations. + + + + + The bucket to use when recording private associations. + + + + + The backing crypto key store. + + + + + Initializes a new instance of the class. + + The store where association secrets will be recorded. + + + + Stores an association and returns a handle for it. + + The association secret. + The UTC time that the association should expire. + A value indicating whether this is a private association. + + The association handle that represents this association. + + + + + Retrieves an association given an association handle. + + The OpenID message that referenced this association handle. + A value indicating whether a private association is expected. + The association handle. + + An association instance, or null if the association has expired or the signature is incorrect (which may be because the OP's symmetric key has changed). + + Thrown if the association is not of the expected type. + + + + An enumeration that can specify how a given is used. + + + + + The manages a shared secret between + Provider and Relying Party sites that allows the RP to verify + the signature on a message from an OP. + + + + + The manages a secret known alone by + a Provider that allows the Provider to verify its own signatures + for "dumb" (stateless) relying parties. + + + + + An interface to provide custom identifiers for users logging into specific relying parties. + + + This interface would allow, for example, the Provider to offer PPIDs to their users, + allowing the users to log into RPs without leaving any clue as to their true identity, + and preventing multiple RPs from colluding to track user activity across realms. + + + + + Gets the Identifier to use for the Claimed Identifier and Local Identifier of + an outgoing positive assertion. + + The OP local identifier for the authenticating user. + The realm of the relying party receiving the assertion. + + A valid, discoverable OpenID Identifier that should be used as the value for the + openid.claimed_id and openid.local_id parameters. Must not be null. + + + + + Determines whether a given identifier is the primary (non-PPID) local identifier for some user. + + The identifier in question. + + true if the given identifier is the valid, unique identifier for some uesr (and NOT a PPID); otherwise, false. + + + + + Provides standard PPID Identifiers to users to protect their identity from individual relying parties + and from colluding groups of relying parties. + + + + + A granularity description for who wide of an audience sees the same generated PPID. + + + + + The type of hash function to use for the property. + + + + + The length of the salt to generate for first time PPID-users. + + + + + Initializes a new instance of the class. + + The base URI on which to append the anonymous part. + + + + Gets the Identifier to use for the Claimed Identifier and Local Identifier of + an outgoing positive assertion. + + The OP local identifier for the authenticating user. + The realm of the relying party receiving the assertion. + + A valid, discoverable OpenID Identifier that should be used as the value for the + openid.claimed_id and openid.local_id parameters. Must not be null. + + + + + Determines whether a given identifier is the primary (non-PPID) local identifier for some user. + + The identifier in question. + + true if the given identifier is the valid, unique identifier for some uesr (and NOT a PPID); otherwise, false. + + + + + Creates a new salt to assign to a user. + + A non-null buffer of length filled with a random salt. + + + + Creates a new PPID Identifier by appending a pseudonymous identifier suffix to + the . + + The unique part of the Identifier to append to the common first part. + The full PPID Identifier. + + + + Gets the salt to use for generating an anonymous identifier for a given OP local identifier. + + The OP local identifier. + The salt to use in the hash. + + It is important that this method always return the same value for a given + . + New salts can be generated for local identifiers without previously assigned salt + values by calling or by a custom method. + + + + + Gets the base URI on which to append the anonymous part. + + + + + Gets or sets a value indicating whether each Realm will get its own private identifier + for the authenticating uesr. + + The default value is . + + + + Gets the hash function to use to perform the one-way transform of a personal identifier + to an "anonymous" looking one. + + + + + Gets the encoder to use for transforming the personal identifier into bytes for hashing. + + + + + Gets or sets the new length of the salt. + + The new length of the salt. + + + + Implements the interface for all incoming + request messages to an OpenID Provider. + + + + + The incoming request message. + + + + + The incoming request message cast to its extensible form. + Or null if the message does not support extensions. + + + + + The version of the OpenID protocol to use. + + + + + Backing store for the property. + + + + + The list of extensions to add to the response message. + + + + + Initializes a new instance of the class. + + The incoming request message. + The security settings from the channel. + + + + Initializes a new instance of the class. + + The version. + The security settings. + + + + Adds an extension to the response to send to the relying party. + + The extension to add to the response message. + + + + Removes any response extensions previously added using . + + + This should be called before sending a negative response back to the relying party + if extensions were already added, since negative responses cannot carry extensions. + + + + + Gets an extension sent from the relying party. + + The type of the extension. + + An instance of the extension initialized with values passed in with the request. + + + + + Gets an extension sent from the relying party. + + The type of the extension. + + An instance of the extension initialized with values passed in with the request. + + + + + Gets a value indicating whether the response is ready to be sent to the user agent. + + + This property returns false if there are properties that must be set on this + request instance before the response can be sent. + + + + + Gets or sets the security settings that apply to this request. + + Defaults to the on the . + + + + Gets the response to send to the user agent. + + Thrown if is false. + + + + Gets the original request message. + + This may be null in the case of an unrecognizable message. + + + + Gets the response message, once is true. + + + + + Gets the protocol version used in the request. + + + + + A base class from which identity and non-identity RP requests can derive. + + + + + The negative assertion to send, if the host site chooses to send it. + + + + + A cache of the result from discovery of the Realm URL. + + + + + Initializes a new instance of the class. + + The provider that received the request. + The incoming request message. + + + + Gets a value indicating whether verification of the return URL claimed by the Relying Party + succeeded. + + The request handler. + + Result of realm discovery. + + + Return URL verification is only attempted if this property is queried. + The result of the verification is cached per request so calling this + property getter multiple times in one request is not a performance hit. + See OpenID Authentication 2.0 spec section 9.2.1. + + + + + Gets a value indicating whether verification of the return URL claimed by the Relying Party + succeeded. + + The request handler. + + Result of realm discovery. + + + + + Gets the version of OpenID being used by the relying party that sent the request. + + + + + Gets a value indicating whether the consumer demands an immediate response. + If false, the consumer is willing to wait for the identity provider + to authenticate the user. + + + + + Gets the URL the consumer site claims to use as its 'base' address. + + + + + Gets or sets the provider endpoint. + + + The default value is the URL that the request came in on from the relying party. + + + + + Gets a value indicating whether realm discovery been performed. + + + + + Gets the negative response. + + + + + Gets the original request message. + + This may be null in the case of an unrecognizable message. + + + + Instances of this interface represent incoming extension-only requests. + This interface provides the details of the request and allows setting + the response. + + + + + Gets or sets a value indicating whether the user approved sending any data to the relying party. + + + true if approved; otherwise, false. + + + + Provides access to a host Provider to read an incoming extension-only checkid request message, + and supply extension responses or a cancellation message to the RP. + + + + + The extension-response message to send, if the host site chooses to send it. + + + + + Initializes a new instance of the class. + + The provider that received the request. + The incoming authentication request message. + + + + Gets or sets the provider endpoint. + + + The default value is the URL that the request came in on from the relying party. + + + + + Gets or sets a value indicating whether the user approved sending any data to the relying party. + + + true if approved; otherwise, false. + + + + Gets a value indicating whether the response is ready to be sent to the user agent. + + + This property returns false if there are properties that must be set on this + request instance before the response can be sent. + + + + + Gets the response message, once is true. + + + + + Implements the interface + so that OpenID Provider sites can easily respond to authentication + requests. + + + + + The positive assertion to send, if the host site chooses to send it. + + + + + Initializes a new instance of the class. + + The provider that received the request. + The incoming authentication request message. + + + + Adds an optional fragment (#fragment) portion to the ClaimedIdentifier. + Useful for identifier recycling. + + Should not include the # prefix character as that will be added internally. + May be null or the empty string to clear a previously set fragment. + + Unlike the property, which can only be set if + using directed identity, this method can be called on any URI claimed identifier. + Because XRI claimed identifiers (the canonical IDs) are never recycled, + this method shouldnot be called for XRIs. + + + Thrown when this method is called on an XRI, or on a directed identity + request before the property is set. + + + + + Sets the Claimed and Local identifiers even after they have been initially set. + + The value to set to the and properties. + + + + Gets or sets the provider endpoint. + + + The default value is the URL that the request came in on from the relying party. + + + + + Gets a value indicating whether the response is ready to be created and sent. + + + + + Gets a value indicating whether the Provider should help the user + select a Claimed Identifier to send back to the relying party. + + + + + Gets a value indicating whether the requesting Relying Party is using a delegated URL. + + + When delegated identifiers are used, the should not + be changed at the Provider during authentication. + Delegation is only detectable on requests originating from OpenID 2.0 relying parties. + A relying party implementing only OpenID 1.x may use delegation and this property will + return false anyway. + + + + + Gets or sets the Local Identifier to this OpenID Provider of the user attempting + to authenticate. Check to see if + this value is valid. + + + This may or may not be the same as the Claimed Identifier that the user agent + originally supplied to the relying party. The Claimed Identifier + endpoint may be delegating authentication to this provider using + this provider's local id, which is what this property contains. + Use this identifier when looking up this user in the provider's user account + list. + + + + + Gets or sets the identifier that the user agent is claiming at the relying party site. + Check to see if this value is valid. + + + This property can only be set if is + false, to prevent breaking URL delegation. + This will not be the same as this provider's local identifier for the user + if the user has set up his/her own identity page that points to this + provider for authentication. + The provider may use this identifier for displaying to the user when + asking for the user's permission to authenticate to the relying party. + + Thrown from the setter + if is true. + + + + Gets or sets a value indicating whether the provider has determined that the + belongs to the currently logged in user + and wishes to share this information with the consumer. + + + + + Gets the original request message. + + + + + Gets the response message, once is true. + + + + + Handles messages coming into an OpenID Provider for which the entire + response message can be automatically determined without help from + the hosting web site. + + + + + The response message to send. + + + + + Initializes a new instance of the class. + + The request message. + The response that is ready for transmittal. + The security settings. + + + + Initializes a new instance of the class + for a response to an unrecognizable request. + + The response that is ready for transmittal. + The security settings. + + + + Gets a value indicating whether the response is ready to be sent to the user agent. + + + This property returns false if there are properties that must be set on this + request instance before the response can be sent. + + + + + Gets the response message, once is true. + + + + + Gets the response message, once is true. + + + + + Contract class for the type. + + + + + An interface that a Provider site may implement in order to better + control error reporting. + + + + + Logs the details of an exception for later reference in diagnosing the problem. + + The exception that was generated from the error. + + A unique identifier for this particular error that the remote party can + reference when contacting for help with this error. + May be null. + + + The implementation of this method should never throw an unhandled exception + as that would preclude the ability to send the error response to the remote + party. When this method is not implemented, it should return null rather + than throwing . + + + + + Gets the message that can be sent in an error response + with information on who the remote party can contact + for help resolving the error. + + + The contact address may take any form, as it is intended to be displayed to a person. + + + + + Code contract for the class. + + + + + Prevents a default instance of the class from being created. + + + + + Gets a value indicating whether the response is ready to be sent to the user agent. + + + This property returns false if there are properties that must be set on this + request instance before the response can be sent. + + + + + Gets the response message, once is true. + + + + + An in-memory store for Providers, suitable for single server, single process + ASP.NET web sites. + + + This class provides only a basic implementation that is likely to work + out of the box on most single-server web sites. It is highly recommended + that high traffic web sites consider using a database to store the information + used by an OpenID Provider and write a custom implementation of the + interface to use instead of this + class. + + + + + The nonce store to use. + + + + + The crypto key store where symmetric keys are persisted. + + + + + Initializes a new instance of the class. + + + + + Stores a given nonce and timestamp. + + The context, or namespace, within which the must be unique. + A series of random characters. + The timestamp that together with the nonce string make it unique. + The timestamp may also be used by the data store to clear out old nonces. + + True if the nonce+timestamp (combination) was not previously in the database. + False if the nonce was stored previously with the same timestamp. + + + The nonce must be stored for no less than the maximum time window a message may + be processed within before being discarded as an expired message. + If the binding element is applicable to your channel, this expiration window + is retrieved or set using the + property. + + + + + Gets the key in a given bucket and handle. + + The bucket name. Case sensitive. + The key handle. Case sensitive. + + The cryptographic key, or null if no matching key was found. + + + + + Gets a sequence of existing keys within a given bucket. + + The bucket name. Case sensitive. + + A sequence of handles and keys, ordered by descending . + + + + + Stores a cryptographic key. + + The name of the bucket to store the key in. Case sensitive. + The handle to the key, unique within the bucket. Case sensitive. + The key to store. + Thrown in the event of a conflict with an existing key in the same bucket and with the same handle. + + + + Removes the key. + + The bucket name. Case sensitive. + The key handle. Case sensitive. + + + + Offers services for a web page that is acting as an OpenID identity server. + + + + + Provides a single OP association store instance that can handle switching between + association handle encoding modes. + + + + + Initializes a new instance of the class. + + The crypto key store. + The security settings. + + + + Stores an association and returns a handle for it. + + The association secret. + The UTC time that the association should expire. + A value indicating whether this is a private association. + + The association handle that represents this association. + + + + + Retrieves an association given an association handle. + + The OpenID message that referenced this association handle. + A value indicating whether a private association is expected. + The association handle. + + An association instance, or null if the association has expired or the signature is incorrect (which may be because the OP's symmetric key has changed). + + Thrown if the association is not of the expected type. + + + + Gets the association store that applies given the Provider's current security settings. + + + + + The name of the key to use in the HttpApplication cache to store the + instance of to use. + + + + + Backing store for the property. + + + + + The discovery service used to perform discovery on identifiers being sent in + unsolicited positive assertions. + + + + + Backing field for the property. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The application store to use. Cannot be null. + + + + Initializes a new instance of the class. + + The nonce store to use. Cannot be null. + The crypto key store. Cannot be null. + + + + Gets the incoming OpenID request if there is one, or null if none was detected. + + The request that the hosting Provider should possibly process and then transmit the response for. + + Requests may be infrastructural to OpenID and allow auto-responses, or they may + be authentication requests where the Provider site has to make decisions based + on its own user database and policies. + Requires an HttpContext.Current context. + + Thrown if HttpContext.Current == null. + Thrown if the incoming message is recognized but deviates from the protocol specification irrecoverably. + + + + Gets the incoming OpenID request if there is one, or null if none was detected. + + The incoming HTTP request to extract the message from. + + The request that the hosting Provider should process and then transmit the response for. + Null if no valid OpenID request was detected in the given HTTP request. + + + Requests may be infrastructural to OpenID and allow auto-responses, or they may + be authentication requests where the Provider site has to make decisions based + on its own user database and policies. + + Thrown if the incoming message is recognized + but deviates from the protocol specification irrecoverably. + + + + Sends the response to a received request. + + The incoming OpenID request whose response is to be sent. + Thrown by ASP.NET in order to prevent additional data from the page being sent to the client and corrupting the response. + + Requires an HttpContext.Current context. If one is not available, the caller should use + instead and manually send the + to the client. + + Thrown if is false. + + + + Sends the response to a received request. + + The incoming OpenID request whose response is to be sent. + + Requires an HttpContext.Current context. If one is not available, the caller should use + instead and manually send the + to the client. + + Thrown if is false. + + + + Gets the response to a received request. + + The request. + The response that should be sent to the client. + Thrown if is false. + + + + Sends an identity assertion on behalf of one of this Provider's + members in order to redirect the user agent to a relying party + web site and log him/her in immediately in one uninterrupted step. + + The absolute URL on the Provider site that receives OpenID messages. + The URL of the Relying Party web site. + This will typically be the home page, but may be a longer URL if + that Relying Party considers the scope of its realm to be more specific. + The URL provided here must allow discovery of the Relying Party's + XRDS document that advertises its OpenID RP endpoint. + The Identifier you are asserting your member controls. + The Identifier you know your user by internally. This will typically + be the same as . + The extensions. + + + + Prepares an identity assertion on behalf of one of this Provider's + members in order to redirect the user agent to a relying party + web site and log him/her in immediately in one uninterrupted step. + + The absolute URL on the Provider site that receives OpenID messages. + The URL of the Relying Party web site. + This will typically be the home page, but may be a longer URL if + that Relying Party considers the scope of its realm to be more specific. + The URL provided here must allow discovery of the Relying Party's + XRDS document that advertises its OpenID RP endpoint. + The Identifier you are asserting your member controls. + The Identifier you know your user by internally. This will typically + be the same as . + The extensions. + + A object describing the HTTP response to send + the user agent to allow the redirect with assertion to happen. + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Releases unmanaged and - optionally - managed resources + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Applies all behaviors to the response message. + + The request. + + + + Prepares the return value for the GetRequest method in the event of an exception. + + The exception that forms the basis of the error response. Must not be null. + The incoming HTTP request. Must not be null. + The incoming message. May be null in the case that it was malformed. + + Either the to return to the host site or null to indicate no response could be reasonably created and that the caller should rethrow the exception. + + + + + Called by derived classes when behaviors are added or removed. + + The collection being modified. + The instance containing the event data. + + + + Gets the standard state storage mechanism that uses ASP.NET's + HttpApplication state dictionary to store associations and nonces. + + + + + Gets the channel to use for sending/receiving messages. + + + + + Gets the security settings used by this Provider. + + + + + Gets the extension factories. + + + + + Gets or sets the mechanism a host site can use to receive + notifications of errors when communicating with remote parties. + + + + + Gets a list of custom behaviors to apply to OpenID actions. + + + Adding behaviors can impact the security settings of the + in ways that subsequently removing the behaviors will not reverse. + + + + + Gets the crypto key store. + + + + + Gets the association store. + + + + + Gets the channel. + + + + + Gets the list of services that can perform discovery on identifiers given. + + + + + Gets the web request handler to use for discovery and the part of + authentication where direct messages are sent to an untrusted remote party. + + + + + The event arguments that include details of the incoming request. + + + + + Initializes a new instance of the class. + + The incoming OpenID request. + + + + Gets the incoming OpenID request. + + + + + The event arguments that include details of the incoming request. + + + + + Initializes a new instance of the class. + + The incoming authentication request. + + + + Gets the incoming authentication request. + + + + + An ASP.NET control that manages the OpenID identity advertising tags + of a user's Identity Page that allow a relying party web site to discover + how to authenticate a user. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The default value for the property. + + + + + Initializes a new instance of the class. + + + + + Checks the incoming request and invokes a browser redirect if the URL has not been normalized. + + + + + + Checks the incoming request and invokes a browser redirect if the URL has not been normalized. + + The object that contains the event data. + + + + Renders OpenID identity tags. + + The object that receives the server control content. + + + + Normalizes the URL by making the path and query lowercase, and trimming trailing slashes. + + The URI to normalize. + The normalized URI. + + + + Gets or sets the OpenID version supported by the provider. + If multiple versions are supported, this should be set to the latest + version that this library and the Provider both support. + + + + + Gets or sets the Provider URL that processes OpenID requests. + + + + + Gets or sets the Identifier that is controlled by the Provider. + + + + + Gets or sets a value indicating whether every incoming request + will be checked for normalized form and redirected if it is not. + + + If set to true (and it should be), you should also handle the + event and apply your own policy for normalizing the URI. + If multiple controls are on a single page (to support + multiple versions of OpenID for example) then only one of them should have this + property set to true. + + + + + Gets the protocol to use for advertising OpenID on the identity page. + + + + + Fired at each page request so the host web site can return the normalized + version of the request URI. + + + + + The event arguments passed to the event handler. + + + + + Initializes a new instance of the class. + + The user supplied identifier. + + + + Gets or sets the portion of the incoming page request URI that is relevant to normalization. + + + This identifier should be used to look up the user whose identity page is being queried. + It MAY be set in case some clever web server URL rewriting is taking place that ASP.NET + does not know about but your site does. If this is the case this property should be set + to whatever the original request URL was. + + + + + Gets or sets the normalized form of the user's identifier, according to the host site's policy. + + + This should be set to some constant value for an individual user. + For example, if indicates that identity page + for "BOB" is being called up, then the following things should be considered: + + Normalize the capitalization of the URL: for example, change http://provider/BOB to + http://provider/bob. + Switch to HTTPS is it is offered: change http://provider/bob to https://provider/bob. + Strip off the query string if it is not part of the canonical identity: + https://provider/bob?timeofday=now becomes https://provider/bob + Ensure that any trailing slash is either present or absent consistently. For example, + change https://provider/bob/ to https://provider/bob. + + When this property is set, the control compares it to + the request that actually came in, and redirects the browser to use the normalized identifier + if necessary. + Using the normalized identifier in the request is very important as it + helps the user maintain a consistent identity across sites and across site visits to an individual site. + For example, without normalizing the URL, Bob might sign into a relying party site as + http://provider/bob one day and https://provider/bob the next day, and the relying party + site should interpret Bob as two different people because the URLs are different. + By normalizing the URL at the Provider's identity page for Bob, whichever URL Bob types in + from day-to-day gets redirected to a normalized form, so Bob is seen as the same person + all the time, which is of course what Bob wants. + + + + + + An OpenID Provider control that automatically responds to certain + automated OpenID messages, and routes authentication requests to + custom code via an event handler. + + + + + The key used to store the pending authentication request in the ASP.NET session. + + + + + The default value for the property. + + + + + The view state key in which to store the value of the property. + + + + + Backing field for the property. + + + + + The lock that must be obtained when initializing the provider field. + + + + + Sends the response for the and clears the property. + + + + + Checks for incoming OpenID requests, responds to ones it can + respond to without policy checks, and fires events for custom + handling of the ones it cannot decide on automatically. + + The object that contains the event data. + + + + Fires the event. + + The request to include in the event args. + + + + Fires the event. + + The request to include in the event args. + + true if there were any anonymous request handlers. + + + + Creates the default OpenIdProvider to use. + + The new instance of OpenIdProvider. + + + + Gets or sets the instance to use for all instances of this control. + + The default value is an instance initialized according to the web.config file. + + + + Gets or sets an incoming OpenID authentication request that has not yet been responded to. + + + This request is stored in the ASP.NET Session state, so it will survive across + redirects, postbacks, and transfers. This allows you to authenticate the user + yourself, and confirm his/her desire to authenticate to the relying party site + before responding to the relying party's authentication request. + + + + + Gets or sets an incoming OpenID anonymous request that has not yet been responded to. + + + This request is stored in the ASP.NET Session state, so it will survive across + redirects, postbacks, and transfers. This allows you to authenticate the user + yourself, and confirm his/her desire to provide data to the relying party site + before responding to the relying party's request. + + + + + Gets or sets an incoming OpenID request that has not yet been responded to. + + + This request is stored in the ASP.NET Session state, so it will survive across + redirects, postbacks, and transfers. This allows you to authenticate the user + yourself, and confirm his/her desire to provide data to the relying party site + before responding to the relying party's request. + + + + + Gets or sets a value indicating whether or not this control should + be listening for and responding to incoming OpenID requests. + + + + + Fired when an incoming OpenID request is an authentication challenge + that must be responded to by the Provider web site according to its + own user database and policies. + + + + + Fired when an incoming OpenID message carries extension requests + but is not regarding any OpenID identifier. + + + + + The COM interface describing the DotNetOpenAuth functionality available to + COM client OpenID relying parties. + + + + + Creates an authentication request to verify that a user controls + some given Identifier. + + + The Identifier supplied by the user. This may be a URL, an XRI or i-name. + + + The shorest URL that describes this relying party web site's address. + For example, if your login page is found at https://www.example.com/login.aspx, + your realm would typically be https://www.example.com/. + + + The URL of the login page, or the page prepared to receive authentication + responses from the OpenID Provider. + + + An authentication request object that describes the HTTP response to + send to the user agent to initiate the authentication. + + Thrown if no OpenID endpoint could be found. + + + + Creates an authentication request to verify that a user controls + some given Identifier. + + The Identifier supplied by the user. This may be a URL, an XRI or i-name. + The shorest URL that describes this relying party web site's address. + For example, if your login page is found at https://www.example.com/login.aspx, + your realm would typically be https://www.example.com/. + The URL of the login page, or the page prepared to receive authentication + responses from the OpenID Provider. + A comma-delimited list of simple registration fields to request as optional. + A comma-delimited list of simple registration fields to request as required. + + An authentication request object that describes the HTTP response to + send to the user agent to initiate the authentication. + + Thrown if no OpenID endpoint could be found. + + + + Gets the result of a user agent's visit to his OpenId provider in an + authentication attempt. Null if no response is available. + + The incoming request URL . + The form data that may have been included in the case of a POST request. + The Provider's response to a previous authentication request, or null if no response is present. + + + + An Attribute Exchange and Simple Registration filter to make all incoming attribute + requests look like Simple Registration requests, and to convert the response + to the originally requested extension and format. + + + + + Initializes a new instance of the class. + + + + + Implements the Identity, Credential, & Access Management (ICAM) OpenID 2.0 Profile + for the General Services Administration (GSA). + + + Relying parties that include this profile are always held to the terms required by the profile, + but Providers are only affected by the special behaviors of the profile when the RP specifically + indicates that they want to use this profile. + + + + + Initializes a new instance of the class. + + + + + The OpenID binding element responsible for reading/writing OpenID extensions + at the Relying Party. + + + + + The security settings that apply to this relying party, if it is a relying party. + + + + + Initializes a new instance of the class. + + The extension factory. + The security settings. + + + + The messaging channel for OpenID relying parties. + + + + + Initializes a new instance of the class. + + The association store to use. + The nonce store to use. + The security settings to apply. + + + + Initializes a new instance of the class. + + The association store to use. + The nonce store to use. + An object that knows how to distinguish the various OpenID message types for deserialization purposes. + The security settings to apply. + A value indicating whether the channel is set up with no functional security binding elements. + + + + A value indicating whether the channel is set up + with no functional security binding elements. + + A new instance that will not perform verification on incoming messages or apply any security to outgoing messages. + + A value of true allows the relying party to preview incoming + messages without invalidating nonces or checking signatures. + Setting this to true poses a great security risk and is only + present to support the OpenIdAjaxTextBox which needs to preview + messages, and will validate them later. + + + + + Initializes the binding elements. + + The crypto key store. + The nonce store to use. + The security settings to apply. Must be an instance of either or ProviderSecuritySettings. + A value indicating whether the channel is set up with no functional security binding elements. + + An array of binding elements which may be used to construct the channel. + + + + + Message factory for OpenID Relying Parties. + + + + + Analyzes an incoming request message payload to discover what kind of + message is embedded in it and returns the type, or null if no match is found. + + The intended or actual recipient of the request message. + The name/value pairs that make up the message payload. + + A newly instantiated -derived object that this message can + deserialize to. Null if the request isn't recognized as a valid protocol message. + + + + + Analyzes an incoming request message payload to discover what kind of + message is embedded in it and returns the type, or null if no match is found. + + The message that was sent as a request that resulted in the response. + The name/value pairs that make up the message payload. + + A newly instantiated -derived object that this message can + deserialize to. Null if the request isn't recognized as a valid protocol message. + + + + + Helps ensure compliance to some properties in the . + + + + + The security settings that are active on the relying party. + + + + + Initializes a new instance of the class. + + The security settings. + + + + Prepares a message for sending based on the rules of this channel binding element. + + The message to prepare for sending. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Performs any transformation on an incoming message that may be necessary and/or + validates an incoming message based on the rules of this channel binding element. + + The incoming message to process. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Thrown when the binding element rules indicate that this message is invalid and should + NOT be processed. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Gets or sets the channel that this binding element belongs to. + + + This property is set by the channel when it is first constructed. + + + + + Gets the protection commonly offered (if any) by this binding element. + + + This value is used to assist in sorting binding elements in the channel stack. + + + + + The signing binding element for OpenID Relying Parties. + + + + + The association store used by Relying Parties to look up the secrets needed for signing. + + + + + Initializes a new instance of the class. + + The association store used to look up the secrets needed for signing. May be null for dumb Relying Parties. + + + + Gets a specific association referenced in a given message's association handle. + + The signed message whose association handle should be used to lookup the association to return. + + The referenced association; or null if such an association cannot be found. + + + + + Gets the association to use to sign or verify a message. + + The message to sign or verify. + + The association to use to sign or verify the message. + + + + + Verifies the signature by unrecognized handle. + + The message. + The signed message. + The protections applied. + + The applied protections. + + + + + This binding element adds a nonce to a Relying Party's outgoing + authentication request when working against an OpenID 1.0 Provider + in order to protect against replay attacks or on all authentication + requests to distinguish solicited from unsolicited assertions. + + + This nonce goes beyond the OpenID 1.x spec, but adds to security. + Since this library's Provider implementation also provides special nonce + protection for 1.0 messages, this security feature overlaps with that one. + This means that if an RP from this library were talking to an OP from this + library, but the Identifier being authenticated advertised the OP as a 1.x + OP, then both RP and OP might try to use a nonce for protecting the assertion. + There's no problem with that--it will still all work out. And it would be a + very rare combination of elements anyway. + + + This binding element deactivates itself for OpenID 2.0 (or later) messages + since they are automatically protected in the protocol by the Provider's + openid.response_nonce parameter. The exception to this is when + is + set to true, which will not only add a request nonce to every outgoing + authentication request but also require that it be present in positive + assertions, effectively disabling unsolicited assertions. + + In the messaging stack, this binding element looks like an ordinary + transform-type of binding element rather than a protection element, + due to its required order in the channel stack and that it exists + only on the RP side and only on some messages. + + + + + A special DotNetOpenAuth-only nonce used by the RP when talking to 1.0 OPs in order + to protect against replay attacks. + + + + + Initializes a new instance of the class. + + The creation date of the nonce. + The random bits that help make the nonce unique. + + + + Creates a new nonce. + + The newly instantiated instance. + + + + Deserializes a nonce from the return_to parameter. + + The base64-encoded value of the nonce. + The instantiated and initialized nonce. + + + + Serializes the entire nonce for adding to the return_to URL. + + The base64-encoded string representing the nonce. + + + + Gets the creation date. + + + + + Gets the random part of the nonce as a base64 encoded string. + + + + + The context within which return_to nonces must be unique -- they all go into the same bucket. + + + + + The length of the generated nonce's random part. + + + + + The nonce store that will allow us to recall which nonces we've seen before. + + + + + The security settings at the RP. + + + + + Backing field for the property. + + + + + Initializes a new instance of the class. + + The nonce store to use. + The security settings of the RP. + + + + Prepares a message for sending based on the rules of this channel binding element. + + The message to prepare for sending. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Performs any transformation on an incoming message that may be necessary and/or + validates an incoming message based on the rules of this channel binding element. + + The incoming message to process. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Thrown when the binding element rules indicate that this message is invalid and should + NOT be processed. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Determines whether a request nonce should be applied the request + or should be expected in the response. + + The authentication request or the positive assertion response. + + true if the message exchanged with an OpenID 1.x provider + or if unsolicited assertions should be rejected at the RP; otherwise false. + + + + + Gets or sets the channel that this binding element belongs to. + + + This property is set by the channel when it is first constructed. + + + + + Gets the protection offered (if any) by this binding element. + + + + + Gets the maximum message age from the standard expiration binding element. + + + + + A set of methods designed to assist in improving interop across different + OpenID implementations and their extensions. + + + + + Adds an Attribute Exchange (AX) extension to the authentication request + that asks for the same attributes as the Simple Registration (sreg) extension + that is already applied. + + The authentication request. + The attribute formats to use in the AX request. + + If discovery on the user-supplied identifier yields hints regarding which + extensions and attribute formats the Provider supports, this method MAY ignore the + argument and accomodate the Provider to minimize + the size of the request. + If the request does not carry an sreg extension, the method logs a warning but + otherwise quietly returns doing nothing. + + + + + Looks for Simple Registration and Attribute Exchange (all known formats) + response extensions and returns them as a Simple Registration extension. + + The authentication response. + if set to true unsigned extensions will be included in the search. + + The Simple Registration response if found, + or a fabricated one based on the Attribute Exchange extension if found, + or just an empty if there was no data. + Never null. + + + + Gets the attribute value if available. + + The AX fetch response extension to look for the attribute value. + The type URI of the attribute, using the axschema.org format of . + The AX type URI formats to search. + + The first value of the attribute, if available. + + + + + Tries to find the exact format of AX attribute Type URI supported by the Provider. + + The authentication request. + The attribute formats the RP will try if this discovery fails. + The AX format(s) to use based on the Provider's advertised AX support. + + + + The discovery service to support host-meta based discovery, such as Google Apps for Domains. + + + The spec for this discovery mechanism can be found at: + http://groups.google.com/group/google-federated-login-api/web/openid-discovery-for-hosted-domains + and the XMLDSig spec referenced in that spec can be found at: + http://wiki.oasis-open.org/xri/XrdOne/XmlDsigProfile + + + + + A description of a web server that hosts host-meta documents. + + + + + Initializes a new instance of the class. + + The proxy formatting string. + The signing host formatting string. + + + + Gets the absolute proxy URI. + + The identifier being discovered. + The an absolute URI. + + + + Gets the signing host URI. + + The identifier being discovered. + A host name. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Gets the URL of the host-meta proxy. + + The absolute proxy URL, which may include {0} to be replaced with the host of the identifier to be discovered. + + + + Gets the formatting string to determine the expected host name on the certificate + that is expected to be used to sign the XRDS document. + + + Either a string literal, or a formatting string where these placeholders may exist: + {0} the host on the identifier discovery was originally performed on; + {1} the host on this proxy. + + + + + Path to the well-known location of the host-meta document at a domain. + + + + + The URI template for discovery host-meta on domains hosted by + Google Apps for Domains. + + + + + The pattern within a host-meta file to look for to obtain the URI to the XRDS document. + + + + + A set of certificate thumbprints that have been verified. + + + + + Initializes a new instance of the class. + + + + + Performs discovery on the specified identifier. + + The identifier to perform discovery on. + The means to place outgoing HTTP requests. + if set to true, no further discovery services will be called for this identifier. + + A sequence of service endpoints yielded by discovery. Must not be null, but may be empty. + + + + + Gets the XRD elements that have a given CanonicalID. + + The XRDS document. + The CanonicalID to match on. + A sequence of XRD elements. + + + + Gets the described-by services in XRD elements. + + The XRDs to search. + A sequence of services. + + + + Gets the services for an identifier that are described by an external XRDS document. + + The XRD elements to search for described-by services. + The identifier under discovery. + The request handler. + The discovered services. + + + + Validates the XML digital signature on an XRDS document. + + The XRDS document whose signature should be validated. + The identifier under discovery. + The response. + The host name on the certificate that should be used to verify the signature in the XRDS. + Thrown if the XRDS document has an invalid or a missing signature. + + + + Verifies the cert chain. + + The certs. + + This must be in a method of its own because there is a LinkDemand on the + method. By being in a method of its own, the caller of this method may catch a + that is thrown if we're not running with full trust and execute + an alternative plan. + + Thrown if the certificate chain is invalid or unverifiable. + + + + Gets the XRDS HTTP response for a given identifier. + + The identifier. + The request handler. + The location of the XRDS document to retrieve. + + A HTTP response carrying an XRDS document. + + Thrown if the XRDS document could not be obtained. + + + + Verifies that a certificate chain is trusted. + + The chain of certificates to verify. + + + + Gets the XRDS HTTP response for a given identifier. + + The identifier. + The request handler. + The host name on the certificate that should be used to verify the signature in the XRDS. + A HTTP response carrying an XRDS document, or null if one could not be obtained. + Thrown if the XRDS document could not be obtained. + + + + Gets the location of the XRDS document that describes a given identifier. + + The identifier under discovery. + The request handler. + The host name on the certificate that should be used to verify the signature in the XRDS. + An absolute URI, or null if one could not be determined. + + + + Gets the host-meta for a given identifier. + + The identifier. + The request handler. + The host name on the certificate that should be used to verify the signature in the XRDS. + + The host-meta response, or null if no host-meta document could be obtained. + + + + + Gets the URIs authorized to host host-meta documents on behalf of a given domain. + + The identifier. + A sequence of URIs that MAY provide the host-meta for a given identifier. + + + + Gets the set of URI templates to use to contact host-meta hosting proxies + for domain discovery. + + + + + Gets or sets a value indicating whether to trust Google to host domains' host-meta documents. + + + This property is just a convenient mechanism for checking or changing the set of + trusted host-meta proxies in the property. + + + + + The COM type used to provide details of an authentication result to a relying party COM client. + + + + + The response read in by the Relying Party. + + + + + Initializes a new instance of the class. + + The response. + + + + Gets an Identifier that the end user claims to own. For use with user database storage and lookup. + May be null for some failed authentications (i.e. failed directed identity authentications). + + + + This is the secure identifier that should be used for database storage and lookup. + It is not always friendly (i.e. =Arnott becomes =!9B72.7DD1.50A9.5CCD), but it protects + user identities against spoofing and other attacks. + + + For user-friendly identifiers to display, use the + property. + + + + + + Gets a user-friendly OpenID Identifier for display purposes ONLY. + + + + This should be put through before + sending to a browser to secure against javascript injection attacks. + + + This property retains some aspects of the user-supplied identifier that get lost + in the . For example, XRIs used as user-supplied + identifiers (i.e. =Arnott) become unfriendly unique strings (i.e. =!9B72.7DD1.50A9.5CCD). + For display purposes, such as text on a web page that says "You're logged in as ...", + this property serves to provide the =Arnott string, or whatever else is the most friendly + string close to what the user originally typed in. + + + If the user-supplied identifier is a URI, this property will be the URI after all + redirects, and with the protocol and fragment trimmed off. + If the user-supplied identifier is an XRI, this property will be the original XRI. + If the user-supplied identifier is an OpenID Provider identifier (i.e. yahoo.com), + this property will be the Claimed Identifier, with the protocol stripped if it is a URI. + + + It is very important that this property never be used for database storage + or lookup to avoid identity spoofing and other security risks. For database storage + and lookup please use the property. + + + + + + Gets the provider endpoint that sent the assertion. + + + + + Gets a value indicating whether the authentication attempt succeeded. + + + + + Gets the Simple Registration response. + + + + + Gets details regarding a failed authentication attempt, if available. + + + + + A struct storing Simple Registration field values describing an + authenticating user. + + + + + The Simple Registration claims response message that this shim wraps. + + + + + Initializes a new instance of the class. + + The Simple Registration response to wrap. + + + + Gets the nickname the user goes by. + + + + + Gets the user's email address. + + + + + Gets the full name of a user as a single string. + + + + + Gets the raw birth date string given by the extension. + + A string in the format yyyy-MM-dd. + + + + Gets the gender of the user. + + + + + Gets the zip code / postal code of the user. + + + + + Gets the country of the user. + + + + + Gets the primary/preferred language of the user. + + + + + Gets the user's timezone. + + + + + Implementation of , providing a subset of the + functionality available to .NET clients. + + + + + The OpenIdRelyingParty instance to use for requests. + + + + + Initializes a new instance of the class. + + + + + Creates an authentication request to verify that a user controls + some given Identifier. + + + The Identifier supplied by the user. This may be a URL, an XRI or i-name. + + + The shorest URL that describes this relying party web site's address. + For example, if your login page is found at https://www.example.com/login.aspx, + your realm would typically be https://www.example.com/. + + + The URL of the login page, or the page prepared to receive authentication + responses from the OpenID Provider. + + + An authentication request object that describes the HTTP response to + send to the user agent to initiate the authentication. + + Thrown if no OpenID endpoint could be found. + + + + Creates an authentication request to verify that a user controls + some given Identifier. + + The Identifier supplied by the user. This may be a URL, an XRI or i-name. + The shorest URL that describes this relying party web site's address. + For example, if your login page is found at https://www.example.com/login.aspx, + your realm would typically be https://www.example.com/. + The URL of the login page, or the page prepared to receive authentication + responses from the OpenID Provider. + A comma-delimited list of simple registration fields to request as optional. + A comma-delimited list of simple registration fields to request as required. + + An authentication request object that describes the HTTP response to + send to the user agent to initiate the authentication. + + Thrown if no OpenID endpoint could be found. + + + + Gets the result of a user agent's visit to his OpenId provider in an + authentication attempt. Null if no response is available. + + The incoming request URL. + The form data that may have been included in the case of a POST request. + The Provider's response to a previous authentication request, or null if no response is present. + + + + A successful association response as it is received by the relying party. + + + + + Called to create the Association based on a request previously given by the Relying Party. + + The prior request for an association. + The created association. + + + + The successful Diffie-Hellman association response message. + + + Association response messages are described in OpenID 2.0 section 8.2. This type covers section 8.2.3. + + + + + Initializes a new instance of the class. + + The OpenID version of the response message. + The originating request. + + + + Creates the association at relying party side after the association response has been received. + + The original association request that was already sent and responded to. + The newly created association. + + The resulting association is not added to the association store and must be done by the caller. + + + + + Utility methods for requesting associations from the relying party. + + + + + Creates an association request message that is appropriate for a given Provider. + + The set of requirements the selected association type must comply to. + The provider to create an association with. + + The message to send to the Provider to request an association. + Null if no association could be created that meet the security requirements + and the provider OpenID version. + + + + + Creates an association request message that is appropriate for a given Provider. + + The set of requirements the selected association type must comply to. + The provider to create an association with. + Type of the association. + Type of the session. + + The message to send to the Provider to request an association. + Null if no association could be created that meet the security requirements + and the provider OpenID version. + + + + + Code contract for the interface. + + + + + A response to an unencrypted assocation request, as it is received by the relying party. + + + + + Initializes a new instance of the class. + + The version. + The request. + + + + Called to create the Association based on a request previously given by the Relying Party. + + The prior request for an association. + The created association. + + + + Stores s for lookup by their handle, keeping + associations separated by a given OP Endpoint. + + + Expired associations should be periodically cleared out of an association store. + This should be done frequently enough to avoid a memory leak, but sparingly enough + to not be a performance drain. Because this balance can vary by host, it is the + responsibility of the host to initiate this cleaning. + + + + + Saves an for later recall. + + The OP Endpoint with which the association is established. + The association to store. + + If the new association conflicts (in OP endpoint and association handle) with an existing association, + (which should never happen by the way) implementations may overwrite the previously saved association. + + + + + Gets the best association (the one with the longest remaining life) for a given key. + + The OP Endpoint with which the association is established. + The security requirements that the returned association must meet. + + The requested association, or null if no unexpired s exist for the given key. + + + In the event that multiple associations exist for the given + , it is important for the + implementation for this method to use the + to pick the best (highest grade or longest living as the host's policy may dictate) + association that fits the security requirements. + Associations that are returned that do not meet the security requirements will be + ignored and a new association created. + + + + + Gets the association for a given key and handle. + + The OP Endpoint with which the association is established. + The handle of the specific association that must be recalled. + The requested association, or null if no unexpired s exist for the given key and handle. + + + Removes a specified handle that may exist in the store. + The OP Endpoint with which the association is established. + The handle of the specific association that must be deleted. + + Deprecated. The return value is insignificant. + Previously: True if the association existed in this store previous to this call. + + + No exception should be thrown if the association does not exist in the store + before this call. + + + + + Wraps a standard so that it behaves as an association store. + + + + + The underlying key store. + + + + + Initializes a new instance of the class. + + The key store. + + + + Saves an for later recall. + + The OP Endpoint with which the association is established. + The association to store. + + + + Gets the best association (the one with the longest remaining life) for a given key. + + The OP Endpoint with which the association is established. + The security requirements that the returned association must meet. + + The requested association, or null if no unexpired s exist for the given key. + + + + + Gets the association for a given key and handle. + + The OP Endpoint with which the association is established. + The handle of the specific association that must be recalled. + + The requested association, or null if no unexpired s exist for the given key and handle. + + + + + Removes a specified handle that may exist in the store. + + The OP Endpoint with which the association is established. + The handle of the specific association that must be deleted. + + True if the association existed in this store previous to this call. + + + + + Constants used in implementing support for the UI extension. + + + + + Gets the window.open javascript snippet to use to open a popup window + compliant with the UI extension. + + The relying party. + The authentication request to place in the window. + The name to assign to the popup window. + A string starting with 'window.open' and forming just that one method call. + + + + Code Contract for the class. + + + + + A dictionary of handle/Association pairs. + + + Each method is locked, even if it is only one line, so that they are thread safe + against each other, particularly the ones that enumerate over the list, since they + can break if the collection is changed by another thread during enumeration. + + + + + The lookup table where keys are the association handles and values are the associations themselves. + + + + + Initializes a new instance of the class. + + + + + Stores an in the collection. + + The association to add to the collection. + + + + Returns the with the given handle. Null if not found. + + The handle to the required association. + The desired association, or null if none with the given handle could be found. + + + + Removes the with the given handle. + + The handle to the required association. + Whether an with the given handle was in the collection for removal. + + + + Removes all expired associations from the collection. + + + + + Gets the s ordered in order of descending issue date + (most recently issued comes first). An empty sequence if no valid associations exist. + + + This property is used by relying parties that are initiating authentication requests. + It does not apply to Providers, which always need a specific association by handle. + + + + + Manages the establishment, storage and retrieval of associations at the relying party. + + + + + The storage to use for saving and retrieving associations. May be null. + + + + + Backing field for the property. + + + + + Backing field for the property. + + + + + Initializes a new instance of the class. + + The channel the relying party is using. + The association store. May be null for dumb mode relying parties. + The security settings. + + + + Gets an association between this Relying Party and a given Provider + if it already exists in the association store. + + The provider to create an association with. + The association if one exists and has useful life remaining. Otherwise null. + + + + Gets an existing association with the specified Provider, or attempts to create + a new association of one does not already exist. + + The provider to get an association for. + The existing or new association; null if none existed and one could not be created. + + + + Creates a new association with a given Provider. + + The provider to create an association with. + + The newly created association, or null if no association can be created with + the given Provider given the current security settings. + + + A new association is created and returned even if one already exists in the + association store. + Any new association is automatically added to the . + + + + + Creates a new association with a given Provider. + + The provider to create an association with. + The associate request. May be null, which will always result in a null return value.. + The number of times to try the associate request again if the Provider suggests it. + + The newly created association, or null if no association can be created with + the given Provider given the current security settings. + + + + + Gets or sets the channel to use for establishing associations. + + The channel. + + + + Gets or sets the security settings to apply in choosing association types to support. + + + + + Gets a value indicating whether this instance has an association store. + + + true if the relying party can act in 'smart' mode; + false if the relying party must always act in 'dumb' mode. + + + + + Gets the storage to use for saving and retrieving associations. May be null. + + + + + Preferences regarding creation and use of an association between a relying party + and provider for authentication. + + + + + Indicates that an association should be created for use in authentication + if one has not already been established between the relying party and the + selected provider. + + + Even with this value, if an association attempt fails or the relying party + has no application store to recall associations, the authentication may + proceed without an association. + + + + + Indicates that an association should be used for authentication only if + it happens to already exist. + + + + + Indicates that an authentication attempt should NOT use an OpenID association + between the relying party and the provider, even if an association was previously + created. + + + + + Facilitates customization and creation and an authentication request + that a Relying Party is preparing to send. + + + + + The name of the internal callback parameter to use to store the user-supplied identifier. + + + + + The relying party that created this request object. + + + + + How an association may or should be created or used in the formulation of the + authentication request. + + + + + The extensions that have been added to this authentication request. + + + + + Arguments to add to the return_to part of the query string, so that + these values come back to the consumer when the user agent returns. + + + + + A value indicating whether the return_to callback arguments must be signed. + + + This field defaults to false, but is set to true as soon as the first callback argument + is added that indicates it must be signed. At which point, all arguments are signed + even if individual ones did not need to be. + + + + + Initializes a new instance of the class. + + The endpoint that describes the OpenID Identifier and Provider that will complete the authentication. + The realm, or root URL, of the host web site. + The base return_to URL that the Provider should return the user to to complete authentication. This should not include callback parameters as these should be added using the method. + The relying party that created this instance. + + + + Makes a dictionary of key/value pairs available when the authentication is completed. + + The arguments to add to the request's return_to URI. + + Note that these values are NOT protected against eavesdropping in transit. No + privacy-sensitive data should be stored using this method. + The values stored here can be retrieved using + , which will only return the value + if it hasn't been tampered with in transit. + Since the data set here is sent in the querystring of the request and some + servers place limits on the size of a request URL, this data should be kept relatively + small to ensure successful authentication. About 1.5KB is about all that should be stored. + + + + + Makes a key/value pair available when the authentication is completed. + + The parameter name. + The value of the argument. + + Note that these values are NOT protected against eavesdropping in transit. No + privacy-sensitive data should be stored using this method. + The value stored here can be retrieved using + , which will only return the value + if it hasn't been tampered with in transit. + Since the data set here is sent in the querystring of the request and some + servers place limits on the size of a request URL, this data should be kept relatively + small to ensure successful authentication. About 1.5KB is about all that should be stored. + + + + + Makes a key/value pair available when the authentication is completed. + + The parameter name. + The value of the argument. Must not be null. + + Note that these values are NOT protected against tampering in transit. No + security-sensitive data should be stored using this method. + The value stored here can be retrieved using + . + Since the data set here is sent in the querystring of the request and some + servers place limits on the size of a request URL, this data should be kept relatively + small to ensure successful authentication. About 1.5KB is about all that should be stored. + + + + + Makes a key/value pair available when the authentication is completed without + requiring a return_to signature to protect against tampering of the callback argument. + + The parameter name. + The value of the argument. Must not be null. + + Note that these values are NOT protected against eavesdropping or tampering in transit. No + security-sensitive data should be stored using this method. + The value stored here can be retrieved using + . + Since the data set here is sent in the querystring of the request and some + servers place limits on the size of a request URL, this data should be kept relatively + small to ensure successful authentication. About 1.5KB is about all that should be stored. + + + + + Adds an OpenID extension to the request directed at the OpenID provider. + + The initialized extension to add to the request. + + + + Redirects the user agent to the provider for authentication. + + + This method requires an ASP.NET HttpContext. + + + + + Performs identifier discovery, creates associations and generates authentication requests + on-demand for as long as new ones can be generated based on the results of Identifier discovery. + + The user supplied identifier. + The relying party. + The realm. + The return_to base URL. + if set to true, associations that do not exist between this Relying Party and the asserting Providers are created before the authentication request is created. + + A sequence of authentication requests, any of which constitutes a valid identity assertion on the Claimed Identifier. + Never null, but may be empty. + + + + + Creates an instance of FOR TESTING PURPOSES ONLY. + + The discovery result. + The realm. + The return to. + The relying party. + The instantiated . + + + + Creates the request message to send to the Provider, + based on the properties in this instance. + + The message to send to the Provider. + + + + Performs deferred request generation for the method. + + The user supplied identifier. + The relying party. + The realm. + The return_to base URL. + The discovered service endpoints on the Claimed Identifier. + if set to true, associations that do not exist between this Relying Party and the asserting Providers are created before the authentication request is created. + + A sequence of authentication requests, any of which constitutes a valid identity assertion on the Claimed Identifier. + Never null, but may be empty. + + + All data validation and cleansing steps must have ALREADY taken place + before calling this method. + + + + + Returns a filtered and sorted list of the available OP endpoints for a discovered Identifier. + + The endpoints. + The relying party. + A filtered and sorted list of endpoints; may be empty if the input was empty or the filter removed all endpoints. + + + + Creates the request message to send to the Provider, + based on the properties in this instance. + + The message to send to the Provider. + + + + Gets the association to use for this authentication request. + + The association to use; null to use 'dumb mode'. + + + + Gets or sets the mode the Provider should use during authentication. + + + + + + + Gets the HTTP response the relying party should send to the user agent + to redirect it to the OpenID Provider to start the OpenID authentication process. + + + + + + + Gets the URL that the user agent will return to after authentication + completes or fails at the Provider. + + + + + + + Gets the URL that identifies this consumer web application that + the Provider will display to the end user. + + + + + Gets the Claimed Identifier that the User Supplied Identifier + resolved to. Null if the user provided an OP Identifier + (directed identity). + + + + + Null is returned if the user is using the directed identity feature + of OpenID 2.0 to make it nearly impossible for a relying party site + to improperly store the reserved OpenID URL used for directed identity + as a user's own Identifier. + However, to test for the Directed Identity feature, please test the + property rather than testing this + property for a null value. + + + + + Gets a value indicating whether the authenticating user has chosen to let the Provider + determine and send the ClaimedIdentifier after authentication. + + + + + Gets or sets a value indicating whether this request only carries extensions + and is not a request to verify that the user controls some identifier. + + + true if this request is merely a carrier of extensions and is not + about an OpenID identifier; otherwise, false. + + + + + Gets information about the OpenId Provider, as advertised by the + OpenId discovery documents found at the + location. + + + + + Gets the discovery result leading to the formulation of this request. + + The discovery result. + + + + Gets or sets how an association may or should be created or used + in the formulation of the authentication request. + + + + + Gets the extensions that have been added to the request. + + + + + Gets the list of extensions for this request. + + + + + An authentication request comparer that judges equality solely on the OP endpoint hostname. + + + + + The singleton instance of this comparer. + + + + + Prevents a default instance of the class from being created. + + + + + Determines whether the specified objects are equal. + + The first object to compare. + The second object to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + + The type of is a reference type and is null. + + + + + Gets the singleton instance of this comparer. + + + + + An interface to expose useful properties and functionality for handling + authentication responses that are returned from Immediate authentication + requests that require a subsequent request to be made in non-immediate mode. + + + + + Gets the to pass to + in a subsequent authentication attempt. + + + + + Wraps a negative assertion response in an instance + for public consumption by the host web site. + + + + + The negative assertion message that was received by the RP that was used + to create this instance. + + + + + Initializes a new instance of the class. + + The negative assertion response received by the Relying Party. + + + + Gets a callback argument's value that was previously added using + . + + The name of the parameter whose value is sought. + + The value of the argument, or null if the named parameter could not be found. + + + This may return any argument on the querystring that came with the authentication response, + which may include parameters not explicitly added using + . + Note that these values are NOT protected against tampering in transit. + + + + + Gets a callback argument's value that was previously added using + . + + The name of the parameter whose value is sought. + + The value of the argument, or null if the named parameter could not be found. + + + Callback parameters are only available even if the RP is in stateless mode, + or the callback parameters are otherwise unverifiable as untampered with. + Therefore, use this method only when the callback argument is not to be + used to make a security-sensitive decision. + + + + + Gets all the callback arguments that were previously added using + or as a natural part + of the return_to URL. + + A name-value dictionary. Never null. + + This MAY return any argument on the querystring that came with the authentication response, + which may include parameters not explicitly added using + . + Note that these values are NOT protected against tampering in transit. + + + + + Gets all the callback arguments that were previously added using + or as a natural part + of the return_to URL. + + A name-value dictionary. Never null. + + Callback parameters are only available even if the RP is in stateless mode, + or the callback parameters are otherwise unverifiable as untampered with. + Therefore, use this method only when the callback argument is not to be + used to make a security-sensitive decision. + + + + + Tries to get an OpenID extension that may be present in the response. + + The type of extension to look for in the response message. + + The extension, if it is found. Null otherwise. + + + Extensions are returned only if the Provider signed them. + Relying parties that do not care if the values were modified in + transit should use the method + in order to allow the Provider to not sign the extension. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Tries to get an OpenID extension that may be present in the response. + + Type of the extension to look for in the response. + + The extension, if it is found. Null otherwise. + + + Extensions are returned only if the Provider signed them. + Relying parties that do not care if the values were modified in + transit should use the method + in order to allow the Provider to not sign the extension. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Tries to get an OpenID extension that may be present in the response, without + requiring it to be signed by the Provider. + + The type of extension to look for in the response message. + + The extension, if it is found. Null otherwise. + + + Extensions are returned whether they are signed or not. + Use the method to retrieve + extension responses only if they are signed by the Provider to + protect against tampering. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Tries to get an OpenID extension that may be present in the response. + + Type of the extension to look for in the response. + + The extension, if it is found. Null otherwise. + + + Extensions are returned whether they are signed or not. + Use the method to retrieve + extension responses only if they are signed by the Provider to + protect against tampering. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Gets the Identifier that the end user claims to own. For use with user database storage and lookup. + May be null for some failed authentications (i.e. failed directed identity authentications). + + + + + + This is the secure identifier that should be used for database storage and lookup. + It is not always friendly (i.e. =Arnott becomes =!9B72.7DD1.50A9.5CCD), but it protects + user identities against spoofing and other attacks. + + + For user-friendly identifiers to display, use the + property. + + + + + + Gets a user-friendly OpenID Identifier for display purposes ONLY. + + + + + + This should be put through before + sending to a browser to secure against javascript injection attacks. + + + This property retains some aspects of the user-supplied identifier that get lost + in the . For example, XRIs used as user-supplied + identifiers (i.e. =Arnott) become unfriendly unique strings (i.e. =!9B72.7DD1.50A9.5CCD). + For display purposes, such as text on a web page that says "You're logged in as ...", + this property serves to provide the =Arnott string, or whatever else is the most friendly + string close to what the user originally typed in. + + + If the user-supplied identifier is a URI, this property will be the URI after all + redirects, and with the protocol and fragment trimmed off. + If the user-supplied identifier is an XRI, this property will be the original XRI. + If the user-supplied identifier is an OpenID Provider identifier (i.e. yahoo.com), + this property will be the Claimed Identifier, with the protocol stripped if it is a URI. + + + It is very important that this property never be used for database storage + or lookup to avoid identity spoofing and other security risks. For database storage + and lookup please use the property. + + + + + + Gets the detailed success or failure status of the authentication attempt. + + + + + + + Gets information about the OpenId Provider, as advertised by the + OpenID discovery documents found at the + location. + + + The Provider endpoint that issued the positive assertion; + or null if information about the Provider is unavailable. + + + + + Gets the details regarding a failed authentication attempt, if available. + This will be set if and only if is . + + + + + + + Gets the to pass to + in a subsequent authentication attempt. + + + + + + + Wraps an extension-only response from the OP in an instance + for public consumption by the host web site. + + + + + Backin field for the property. + + + + + Information about the OP endpoint that issued this assertion. + + + + + Initializes a new instance of the class. + + The response message. + + + + Gets a callback argument's value that was previously added using + . + + The name of the parameter whose value is sought. + + The value of the argument, or null if the named parameter could not be found. + + + Callback parameters are only available if they are complete and untampered with + since the original request message (as proven by a signature). + If the relying party is operating in stateless mode null is always + returned since the callback arguments could not be signed to protect against + tampering. + + + + + Gets a callback argument's value that was previously added using + . + + The name of the parameter whose value is sought. + + The value of the argument, or null if the named parameter could not be found. + + + Callback parameters are only available even if the RP is in stateless mode, + or the callback parameters are otherwise unverifiable as untampered with. + Therefore, use this method only when the callback argument is not to be + used to make a security-sensitive decision. + + + + + Gets all the callback arguments that were previously added using + or as a natural part + of the return_to URL. + + A name-value dictionary. Never null. + + Callback parameters are only available if they are complete and untampered with + since the original request message (as proven by a signature). + If the relying party is operating in stateless mode an empty dictionary is always + returned since the callback arguments could not be signed to protect against + tampering. + + + + + Gets all the callback arguments that were previously added using + or as a natural part + of the return_to URL. + + A name-value dictionary. Never null. + + Callback parameters are only available if they are complete and untampered with + since the original request message (as proven by a signature). + If the relying party is operating in stateless mode an empty dictionary is always + returned since the callback arguments could not be signed to protect against + tampering. + + + + + Tries to get an OpenID extension that may be present in the response. + + The type of extension to look for in the response message. + + The extension, if it is found. Null otherwise. + + + Extensions are returned only if the Provider signed them. + Relying parties that do not care if the values were modified in + transit should use the method + in order to allow the Provider to not sign the extension. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Tries to get an OpenID extension that may be present in the response. + + Type of the extension to look for in the response. + + The extension, if it is found. Null otherwise. + + + Extensions are returned only if the Provider signed them. + Relying parties that do not care if the values were modified in + transit should use the method + in order to allow the Provider to not sign the extension. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Tries to get an OpenID extension that may be present in the response, without + requiring it to be signed by the Provider. + + The type of extension to look for in the response message. + + The extension, if it is found. Null otherwise. + + + Extensions are returned whether they are signed or not. + Use the method to retrieve + extension responses only if they are signed by the Provider to + protect against tampering. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Tries to get an OpenID extension that may be present in the response. + + Type of the extension to look for in the response. + + The extension, if it is found. Null otherwise. + + + Extensions are returned whether they are signed or not. + Use the method to retrieve + extension responses only if they are signed by the Provider to + protect against tampering. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Gets the Identifier that the end user claims to own. For use with user database storage and lookup. + May be null for some failed authentications (i.e. failed directed identity authentications). + + + + This is the secure identifier that should be used for database storage and lookup. + It is not always friendly (i.e. =Arnott becomes =!9B72.7DD1.50A9.5CCD), but it protects + user identities against spoofing and other attacks. + + + For user-friendly identifiers to display, use the + property. + + + + + + Gets a user-friendly OpenID Identifier for display purposes ONLY. + + + + + + This should be put through before + sending to a browser to secure against javascript injection attacks. + + + This property retains some aspects of the user-supplied identifier that get lost + in the . For example, XRIs used as user-supplied + identifiers (i.e. =Arnott) become unfriendly unique strings (i.e. =!9B72.7DD1.50A9.5CCD). + For display purposes, such as text on a web page that says "You're logged in as ...", + this property serves to provide the =Arnott string, or whatever else is the most friendly + string close to what the user originally typed in. + + + If the user-supplied identifier is a URI, this property will be the URI after all + redirects, and with the protocol and fragment trimmed off. + If the user-supplied identifier is an XRI, this property will be the original XRI. + If the user-supplied identifier is an OpenID Provider identifier (i.e. yahoo.com), + this property will be the Claimed Identifier, with the protocol stripped if it is a URI. + + + It is very important that this property never be used for database storage + or lookup to avoid identity spoofing and other security risks. For database storage + and lookup please use the property. + + + + + + Gets the detailed success or failure status of the authentication attempt. + + + + + Gets information about the OpenId Provider, as advertised by the + OpenID discovery documents found at the + location. + + + The Provider endpoint that issued the positive assertion; + or null if information about the Provider is unavailable. + + + + + Gets the details regarding a failed authentication attempt, if available. + This will be set if and only if is . + + + + + + + Gets a value indicating whether trusted callback arguments are available. + + + We use this internally to avoid logging a warning during a standard snapshot creation. + + + + + Gets the positive extension-only message the Relying Party received that this instance wraps. + + + + + Wraps a positive assertion response in an instance + for public consumption by the host web site. + + + + + Initializes a new instance of the class. + + The positive assertion response that was just received by the Relying Party. + The relying party. + + + + Verifies that the positive assertion data matches the results of + discovery on the Claimed Identifier. + + The relying party. + + Thrown when the Provider is asserting that a user controls an Identifier + when discovery on that Identifier contradicts what the Provider says. + This would be an indication of either a misconfigured Provider or + an attempt by someone to spoof another user's identity with a rogue Provider. + + + + + Gets the Identifier that the end user claims to own. For use with user database storage and lookup. + May be null for some failed authentications (i.e. failed directed identity authentications). + + + + + + This is the secure identifier that should be used for database storage and lookup. + It is not always friendly (i.e. =Arnott becomes =!9B72.7DD1.50A9.5CCD), but it protects + user identities against spoofing and other attacks. + + + For user-friendly identifiers to display, use the + property. + + + + + + Gets a user-friendly OpenID Identifier for display purposes ONLY. + + + + This should be put through before + sending to a browser to secure against javascript injection attacks. + + + This property retains some aspects of the user-supplied identifier that get lost + in the . For example, XRIs used as user-supplied + identifiers (i.e. =Arnott) become unfriendly unique strings (i.e. =!9B72.7DD1.50A9.5CCD). + For display purposes, such as text on a web page that says "You're logged in as ...", + this property serves to provide the =Arnott string, or whatever else is the most friendly + string close to what the user originally typed in. + + + If the user-supplied identifier is a URI, this property will be the URI after all + redirects, and with the protocol and fragment trimmed off. + If the user-supplied identifier is an XRI, this property will be the original XRI. + If the user-supplied identifier is an OpenID Provider identifier (i.e. yahoo.com), + this property will be the Claimed Identifier, with the protocol stripped if it is a URI. + + + It is very important that this property never be used for database storage + or lookup to avoid identity spoofing and other security risks. For database storage + and lookup please use the property. + + + + + + Gets the detailed success or failure status of the authentication attempt. + + + + + Gets the OpenID service endpoint reconstructed from the assertion message. + + + This information is straight from the Provider, and therefore must not + be trusted until verified as matching the discovery information for + the claimed identifier to avoid a Provider asserting an Identifier + for which it has no authority. + + + + + Gets the positive assertion response message. + + + + + Wraps a failed authentication response in an instance + for public consumption by the host web site. + + + + + Initializes a new instance of the class. + + The exception that resulted in the failed authentication. + + + + Gets all the callback arguments that were previously added using + or as a natural part + of the return_to URL. + + A name-value dictionary. Never null. + + This MAY return any argument on the querystring that came with the authentication response, + which may include parameters not explicitly added using + . + Note that these values are NOT protected against tampering in transit. + + + + + Gets all the callback arguments that were previously added using + or as a natural part + of the return_to URL. + + A name-value dictionary. Never null. + + Callback parameters are only available even if the RP is in stateless mode, + or the callback parameters are otherwise unverifiable as untampered with. + Therefore, use this method only when the callback argument is not to be + used to make a security-sensitive decision. + + + + + Gets a callback argument's value that was previously added using + . + + The name of the parameter whose value is sought. + + The value of the argument, or null if the named parameter could not be found. + + + This may return any argument on the querystring that came with the authentication response, + which may include parameters not explicitly added using + . + Note that these values are NOT protected against tampering in transit. + + + + + Gets a callback argument's value that was previously added using + . + + The name of the parameter whose value is sought. + + The value of the argument, or null if the named parameter could not be found. + + + Callback parameters are only available even if the RP is in stateless mode, + or the callback parameters are otherwise unverifiable as untampered with. + Therefore, use this method only when the callback argument is not to be + used to make a security-sensitive decision. + + + + + Tries to get an OpenID extension that may be present in the response. + + The type of extension to look for in the response message. + + The extension, if it is found. Null otherwise. + + + Extensions are returned only if the Provider signed them. + Relying parties that do not care if the values were modified in + transit should use the method + in order to allow the Provider to not sign the extension. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Tries to get an OpenID extension that may be present in the response. + + Type of the extension to look for in the response. + + The extension, if it is found. Null otherwise. + + + Extensions are returned only if the Provider signed them. + Relying parties that do not care if the values were modified in + transit should use the method + in order to allow the Provider to not sign the extension. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Tries to get an OpenID extension that may be present in the response, without + requiring it to be signed by the Provider. + + The type of extension to look for in the response message. + + The extension, if it is found. Null otherwise. + + + Extensions are returned whether they are signed or not. + Use the method to retrieve + extension responses only if they are signed by the Provider to + protect against tampering. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Tries to get an OpenID extension that may be present in the response. + + Type of the extension to look for in the response. + + The extension, if it is found. Null otherwise. + + + Extensions are returned whether they are signed or not. + Use the method to retrieve + extension responses only if they are signed by the Provider to + protect against tampering. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Gets the Identifier that the end user claims to own. For use with user database storage and lookup. + May be null for some failed authentications (i.e. failed directed identity authentications). + + + + + + This is the secure identifier that should be used for database storage and lookup. + It is not always friendly (i.e. =Arnott becomes =!9B72.7DD1.50A9.5CCD), but it protects + user identities against spoofing and other attacks. + + + For user-friendly identifiers to display, use the + property. + + + + + + Gets a user-friendly OpenID Identifier for display purposes ONLY. + + + + + + This should be put through before + sending to a browser to secure against javascript injection attacks. + + + This property retains some aspects of the user-supplied identifier that get lost + in the . For example, XRIs used as user-supplied + identifiers (i.e. =Arnott) become unfriendly unique strings (i.e. =!9B72.7DD1.50A9.5CCD). + For display purposes, such as text on a web page that says "You're logged in as ...", + this property serves to provide the =Arnott string, or whatever else is the most friendly + string close to what the user originally typed in. + + + If the user-supplied identifier is a URI, this property will be the URI after all + redirects, and with the protocol and fragment trimmed off. + If the user-supplied identifier is an XRI, this property will be the original XRI. + If the user-supplied identifier is an OpenID Provider identifier (i.e. yahoo.com), + this property will be the Claimed Identifier, with the protocol stripped if it is a URI. + + + It is very important that this property never be used for database storage + or lookup to avoid identity spoofing and other security risks. For database storage + and lookup please use the property. + + + + + + Gets the detailed success or failure status of the authentication attempt. + + + + + + + Gets information about the OpenId Provider, as advertised by the + OpenID discovery documents found at the + location. + + + The Provider endpoint that issued the positive assertion; + or null if information about the Provider is unavailable. + + + + + Gets the details regarding a failed authentication attempt, if available. + This will be set if and only if is . + + + + + Code contract class for the type. + + + + + Initializes a new instance of the class. + + + + + A delegate that decides whether a given OpenID Provider endpoint may be + considered for authenticating a user. + + The endpoint for consideration. + + True if the endpoint should be considered. + False to remove it from the pool of acceptable providers. + + + + + Provides the programmatic facilities to act as an OpenID relying party. + + + + + The name of the key to use in the HttpApplication cache to store the + instance of to use. + + + + + Backing store for the property. + + + + + The discovery services to use for identifiers. + + + + + Backing field for the property. + + + + + The lock to obtain when initializing the member. + + + + + A dictionary of extension response types and the javascript member + name to map them to on the user agent. + + + + + Backing field for the property. + + + + + Backing store for the property. + + + + + Backing field for the property. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The application store. If null, the relying party will always operate in "stateless/dumb mode". + + + + Initializes a new instance of the class. + + The association store. If null, the relying party will always operate in "stateless/dumb mode". + The nonce store to use. If null, the relying party will always operate in "stateless/dumb mode". + + + + Creates an authentication request to verify that a user controls + some given Identifier. + + + The Identifier supplied by the user. This may be a URL, an XRI or i-name. + + + The shorest URL that describes this relying party web site's address. + For example, if your login page is found at https://www.example.com/login.aspx, + your realm would typically be https://www.example.com/. + + + The URL of the login page, or the page prepared to receive authentication + responses from the OpenID Provider. + + + An authentication request object to customize the request and generate + an object to send to the user agent to initiate the authentication. + + Thrown if no OpenID endpoint could be found. + + + + Creates an authentication request to verify that a user controls + some given Identifier. + + + The Identifier supplied by the user. This may be a URL, an XRI or i-name. + + + The shorest URL that describes this relying party web site's address. + For example, if your login page is found at https://www.example.com/login.aspx, + your realm would typically be https://www.example.com/. + + + An authentication request object that describes the HTTP response to + send to the user agent to initiate the authentication. + + + Requires an HttpContext.Current context. + + Thrown if no OpenID endpoint could be found. + Thrown if HttpContext.Current == null. + + + + Creates an authentication request to verify that a user controls + some given Identifier. + + + The Identifier supplied by the user. This may be a URL, an XRI or i-name. + + + An authentication request object that describes the HTTP response to + send to the user agent to initiate the authentication. + + + Requires an HttpContext.Current context. + + Thrown if no OpenID endpoint could be found. + Thrown if HttpContext.Current == null. + + + + Generates the authentication requests that can satisfy the requirements of some OpenID Identifier. + + + The Identifier supplied by the user. This may be a URL, an XRI or i-name. + + + The shorest URL that describes this relying party web site's address. + For example, if your login page is found at https://www.example.com/login.aspx, + your realm would typically be https://www.example.com/. + + + The URL of the login page, or the page prepared to receive authentication + responses from the OpenID Provider. + + + A sequence of authentication requests, any of which constitutes a valid identity assertion on the Claimed Identifier. + Never null, but may be empty. + + + Any individual generated request can satisfy the authentication. + The generated requests are sorted in preferred order. + Each request is generated as it is enumerated to. Associations are created only as + is called. + No exception is thrown if no OpenID endpoints were discovered. + An empty enumerable is returned instead. + + + + + Generates the authentication requests that can satisfy the requirements of some OpenID Identifier. + + + The Identifier supplied by the user. This may be a URL, an XRI or i-name. + + + The shorest URL that describes this relying party web site's address. + For example, if your login page is found at https://www.example.com/login.aspx, + your realm would typically be https://www.example.com/. + + + A sequence of authentication requests, any of which constitutes a valid identity assertion on the Claimed Identifier. + Never null, but may be empty. + + + Any individual generated request can satisfy the authentication. + The generated requests are sorted in preferred order. + Each request is generated as it is enumerated to. Associations are created only as + is called. + No exception is thrown if no OpenID endpoints were discovered. + An empty enumerable is returned instead. + Requires an HttpContext.Current context. + + Thrown if HttpContext.Current == null. + + + + Generates the authentication requests that can satisfy the requirements of some OpenID Identifier. + + + The Identifier supplied by the user. This may be a URL, an XRI or i-name. + + + A sequence of authentication requests, any of which constitutes a valid identity assertion on the Claimed Identifier. + Never null, but may be empty. + + + Any individual generated request can satisfy the authentication. + The generated requests are sorted in preferred order. + Each request is generated as it is enumerated to. Associations are created only as + is called. + No exception is thrown if no OpenID endpoints were discovered. + An empty enumerable is returned instead. + Requires an HttpContext.Current context. + + Thrown if HttpContext.Current == null. + + + + Gets an authentication response from a Provider. + + The processed authentication response if there is any; null otherwise. + + Requires an HttpContext.Current context. + + + + + Gets an authentication response from a Provider. + + The HTTP request that may be carrying an authentication response from the Provider. + The processed authentication response if there is any; null otherwise. + + + + Processes the response received in a popup window or iframe to an AJAX-directed OpenID authentication. + + The HTTP response to send to this HTTP request. + + Requires an HttpContext.Current context. + + + + + Processes the response received in a popup window or iframe to an AJAX-directed OpenID authentication. + + The incoming HTTP request that is expected to carry an OpenID authentication response. + The HTTP response to send to this HTTP request. + + + + Allows an OpenID extension to read data out of an unverified positive authentication assertion + and send it down to the client browser so that Javascript running on the page can perform + some preprocessing on the extension data. + + The extension response type that will read data from the assertion. + The property name on the openid_identifier input box object that will be used to store the extension data. For example: sreg + + This method should be called before . + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Determines whether some parameter name belongs to OpenID or this library + as a protocol or internal parameter name. + + Name of the parameter. + + true if the named parameter is a library- or protocol-specific parameter; otherwise, false. + + + + + Creates a relying party that does not verify incoming messages against + nonce or association stores. + + The instantiated . + + Useful for previewing messages while + allowing them to be fully processed and verified later. + + + + + Processes the response received in a popup window or iframe to an AJAX-directed OpenID authentication. + + The incoming HTTP request that is expected to carry an OpenID authentication response. + The callback fired after the response status has been determined but before the Javascript response is formulated. + + The HTTP response to send to this HTTP request. + + + + + Performs discovery on the specified identifier. + + The identifier to discover services for. + A non-null sequence of services discovered for the identifier. + + + + Checks whether a given OP Endpoint is permitted by the host relying party. + + The OP endpoint. + + true if the OP Endpoint is allowed; false otherwise. + + + + Releases unmanaged and - optionally - managed resources + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Invokes a method on a parent frame or window and closes the calling popup window if applicable. + + The method to call on the parent window, including + parameters. (i.e. "callback('arg1', 2)"). No escaping is done by this method. + The entire HTTP response to send to the popup window or iframe to perform the invocation. + + + + Called by derived classes when behaviors are added or removed. + + The collection being modified. + The instance containing the event data. + + + + Gets an XRDS sorting routine that uses the XRDS Service/@Priority + attribute to determine order. + + + Endpoints lacking any priority value are sorted to the end of the list. + + + + + Gets the standard state storage mechanism that uses ASP.NET's + HttpApplication state dictionary to store associations and nonces. + + + + + Gets or sets the channel to use for sending/receiving messages. + + + + + Gets the security settings used by this Relying Party. + + + + + Gets or sets the optional Provider Endpoint filter to use. + + + Provides a way to optionally filter the providers that may be used in authenticating a user. + If provided, the delegate should return true to accept an endpoint, and false to reject it. + If null, all identity providers will be accepted. This is the default. + + + + + Gets or sets the ordering routine that will determine which XRDS + Service element to try first + + Default is . + + This may never be null. To reset to default behavior this property + can be set to the value of . + + + + + Gets the extension factories. + + + + + Gets a list of custom behaviors to apply to OpenID actions. + + + Adding behaviors can impact the security settings of this + instance in ways that subsequently removing the behaviors will not reverse. + + + + + Gets the list of services that can perform discovery on identifiers given to this relying party. + + + + + Gets a value indicating whether this Relying Party can sign its return_to + parameter in outgoing authentication requests. + + + + + Gets the web request handler to use for discovery and the part of + authentication where direct messages are sent to an untrusted remote party. + + + + + Gets the association manager. + + + + + Gets the instance used to process authentication responses + without verifying the assertion or consuming nonces. + + + + + A serializable snapshot of a verified authentication message. + + + + + The callback arguments that came with the authentication response. + + + + + The untrusted callback arguments that came with the authentication response. + + + + + Initializes a new instance of the class. + + The authentication response to copy from. + + + + Tries to get an OpenID extension that may be present in the response. + + The type of extension to look for in the response message. + + The extension, if it is found. Null otherwise. + + + Extensions are returned only if the Provider signed them. + Relying parties that do not care if the values were modified in + transit should use the method + in order to allow the Provider to not sign the extension. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Tries to get an OpenID extension that may be present in the response. + + Type of the extension to look for in the response. + + The extension, if it is found. Null otherwise. + + + Extensions are returned only if the Provider signed them. + Relying parties that do not care if the values were modified in + transit should use the method + in order to allow the Provider to not sign the extension. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Tries to get an OpenID extension that may be present in the response, without + requiring it to be signed by the Provider. + + The type of extension to look for in the response message. + + The extension, if it is found. Null otherwise. + + + Extensions are returned whether they are signed or not. + Use the method to retrieve + extension responses only if they are signed by the Provider to + protect against tampering. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Tries to get an OpenID extension that may be present in the response. + + Type of the extension to look for in the response. + + The extension, if it is found. Null otherwise. + + + Extensions are returned whether they are signed or not. + Use the method to retrieve + extension responses only if they are signed by the Provider to + protect against tampering. + Unsigned extensions are completely unreliable and should be + used only to prefill user forms since the user or any other third + party may have tampered with the data carried by the extension. + Signed extensions are only reliable if the relying party + trusts the OpenID Provider that signed them. Signing does not mean + the relying party can trust the values -- it only means that the values + have not been tampered with since the Provider sent the message. + + + + + Gets all the callback arguments that were previously added using + or as a natural part + of the return_to URL. + + A name-value dictionary. Never null. + + This MAY return any argument on the querystring that came with the authentication response, + which may include parameters not explicitly added using + . + Note that these values are NOT protected against tampering in transit. + + + + + Gets all the callback arguments that were previously added using + or as a natural part + of the return_to URL. + + A name-value dictionary. Never null. + + Callback parameters are only available even if the RP is in stateless mode, + or the callback parameters are otherwise unverifiable as untampered with. + Therefore, use this method only when the callback argument is not to be + used to make a security-sensitive decision. + + + + + Gets a callback argument's value that was previously added using + . + + The name of the parameter whose value is sought. + + The value of the argument, or null if the named parameter could not be found. + + + This may return any argument on the querystring that came with the authentication response, + which may include parameters not explicitly added using + . + Note that these values are NOT protected against tampering in transit. + + + + + Gets a callback argument's value that was previously added using + . + + The name of the parameter whose value is sought. + + The value of the argument, or null if the named parameter could not be found. + + + Callback parameters are only available even if the RP is in stateless mode, + or the callback parameters are otherwise unverifiable as untampered with. + Therefore, use this method only when the callback argument is not to be + used to make a security-sensitive decision. + + + + + Gets the Identifier that the end user claims to own. For use with user database storage and lookup. + May be null for some failed authentications (i.e. failed directed identity authentications). + + + + + + This is the secure identifier that should be used for database storage and lookup. + It is not always friendly (i.e. =Arnott becomes =!9B72.7DD1.50A9.5CCD), but it protects + user identities against spoofing and other attacks. + + + For user-friendly identifiers to display, use the + property. + + + + + + Gets a user-friendly OpenID Identifier for display purposes ONLY. + + + + + + This should be put through before + sending to a browser to secure against javascript injection attacks. + + + This property retains some aspects of the user-supplied identifier that get lost + in the . For example, XRIs used as user-supplied + identifiers (i.e. =Arnott) become unfriendly unique strings (i.e. =!9B72.7DD1.50A9.5CCD). + For display purposes, such as text on a web page that says "You're logged in as ...", + this property serves to provide the =Arnott string, or whatever else is the most friendly + string close to what the user originally typed in. + + + If the user-supplied identifier is a URI, this property will be the URI after all + redirects, and with the protocol and fragment trimmed off. + If the user-supplied identifier is an XRI, this property will be the original XRI. + If the user-supplied identifier is an OpenID Provider identifier (i.e. yahoo.com), + this property will be the Claimed Identifier, with the protocol stripped if it is a URI. + + + It is very important that this property never be used for database storage + or lookup to avoid identity spoofing and other security risks. For database storage + and lookup please use the property. + + + + + + Gets the detailed success or failure status of the authentication attempt. + + + + + + + Gets information about the OpenId Provider, as advertised by the + OpenID discovery documents found at the + location. + + + The Provider endpoint that issued the positive assertion; + or null if information about the Provider is unavailable. + + + + + Gets the details regarding a failed authentication attempt, if available. + This will be set if and only if is . + + + + + + + A very simple IXrdsProviderEndpoint implementation for verifying that all positive + assertions (particularly unsolicited ones) are received from OP endpoints that + are deemed permissible by the host RP. + + + + + Initializes a new instance of the class. + + The positive assertion. + + + + Gets the detected version of OpenID implemented by the Provider. + + + + + Gets the URL that the OpenID Provider receives authentication requests at. + + + + + An in-memory store for Relying Parties, suitable for single server, single process + ASP.NET web sites. + + + + + The nonce store to use. + + + + + The association store to use. + + + + + Initializes a new instance of the class. + + + + + Gets the key in a given bucket and handle. + + The bucket name. Case sensitive. + The key handle. Case sensitive. + + The cryptographic key, or null if no matching key was found. + + + + + Gets a sequence of existing keys within a given bucket. + + The bucket name. Case sensitive. + + A sequence of handles and keys, ordered by descending . + + + + + Stores a cryptographic key. + + The name of the bucket to store the key in. Case sensitive. + The handle to the key, unique within the bucket. Case sensitive. + The key to store. + Thrown in the event of a conflict with an existing key in the same bucket and with the same handle. + + + + Removes the key. + + The bucket name. Case sensitive. + The key handle. Case sensitive. + + + + Stores a given nonce and timestamp. + + The context, or namespace, within which the must be unique. + A series of random characters. + The timestamp that together with the nonce string make it unique. + The timestamp may also be used by the data store to clear out old nonces. + + True if the nonce+timestamp (combination) was not previously in the database. + False if the nonce was stored previously with the same timestamp. + + + The nonce must be stored for no less than the maximum time window a message may + be processed within before being discarded as an expired message. + If the binding element is applicable to your channel, this expiration window + is retrieved or set using the + property. + + + + + Common OpenID Provider Identifiers. + + + + + The Yahoo OP Identifier. + + + + + The Google OP Identifier. + + + + + The MyOpenID OP Identifier. + + + + + The Verisign OP Identifier. + + + + + The MyVidoop OP Identifier. + + + + + Prevents a default instance of the class from being created. + + + + + A design-time helper to give an OpenID Identifier property an auto-complete functionality + listing the OP Identifiers in the class. + + + + + Initializes a new instance of the class. + + + + + Converts a value from its string representation to its strongly-typed object. + + The value. + The strongly-typed object. + + + + Creates the reflection instructions for recreating an instance later. + + The value to recreate later. + + The description of how to recreate an instance. + + + + + Converts the strongly-typed value to a string. + + The value to convert. + The string representation of the object. + + + + Gets the standard values to suggest with Intellisense in the designer. + + A collection of the standard values. + + + + A set of customizations available for the scripts sent to the browser in AJAX OpenID scenarios. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the ID of the hidden field that should carry the positive assertion + until it is posted to the RP. + + + + + Gets or sets the ID of the hidden field that should be set with the parent window/frame's URL + prior to posting the form with the positive assertion. Useful for jQuery popup dialogs. + + + + + Gets or sets the index of the form in the document.forms array on the browser that should + be submitted when the user is ready to send the positive assertion to the RP. + + + + + Gets or sets the id of the form in the document.forms array on the browser that should + be submitted when the user is ready to send the positive assertion to the RP. A value + in this property takes precedence over any value in the property. + + The form id. + + + + Gets or sets the preloaded discovery results. + + + + + Gets or sets a value indicating whether to print diagnostic trace messages in the browser. + + + + + Gets or sets a value indicating whether to show all the "hidden" iframes that facilitate + asynchronous authentication of the user for diagnostic purposes. + + + + + Gets the form key to use when accessing the relevant form. + + + + + Methods that generate HTML or Javascript for hosting AJAX OpenID "controls" on + ASP.NET MVC web sites. + + + + + Emits a series of stylesheet import tags to support the AJAX OpenID Selector. + + The on the view. + HTML that should be sent directly to the browser. + + + + Emits a series of script import tags and some inline script to support the AJAX OpenID Selector. + + The on the view. + HTML that should be sent directly to the browser. + + + + Emits a series of script import tags and some inline script to support the AJAX OpenID Selector. + + The on the view. + An optional instance of an control, whose properties have been customized to express how this MVC control should be rendered. + An optional set of additional script customizations. + + HTML that should be sent directly to the browser. + + + + + Emits the HTML to render an OpenID Provider button as a part of the overall OpenID Selector UI. + + The on the view. + The OP Identifier. + The URL of the image to display on the button. + + HTML that should be sent directly to the browser. + + + + + Emits the HTML to render a generic OpenID button as a part of the overall OpenID Selector UI, + allowing the user to enter their own OpenID. + + The on the view. + The URL of the image to display on the button. + + HTML that should be sent directly to the browser. + + + + + Emits the HTML to render the entire OpenID Selector UI. + + The on the view. + The buttons to include on the selector. + + HTML that should be sent directly to the browser. + + + + + Emits the HTML to render the control as a part of the overall + OpenID Selector UI. + + The on the view. + + HTML that should be sent directly to the browser. + + + + + Emits the HTML to render a button as a part of the overall OpenID Selector UI. + + The on the view. + The value to assign to the HTML id attribute. + The value to assign to the HTML class attribute. + The URL of the image to draw on the button. + + HTML that should be sent directly to the browser. + + + + + Emits <script> tags that import a given set of scripts given their URLs. + + The writer to emit the tags to. + The locations of the scripts to import. + + + + Writes out script tags that import a script from resources embedded in this assembly. + + The writer to emit the tags to. + Name of the resource. + + + + Writes out script tags that import scripts from resources embedded in this assembly. + + The writer to emit the tags to. + The resource names. + + + + Writes a given script block, surrounding it with <script> and CDATA tags. + + The writer to emit the tags to. + The script to inline on the page. + + + + Writes a given CSS link. + + The writer to emit the tags to. + Name of the resource containing the CSS content. + + + + Writes a given CSS link. + + The writer to emit the tags to. + The stylesheet to link in. + + + + Provides the programmatic facilities to act as an AJAX-enabled OpenID relying party. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The application store. If null, the relying party will always operate in "dumb mode". + + + + Generates AJAX-ready authentication requests that can satisfy the requirements of some OpenID Identifier. + + The Identifier supplied by the user. This may be a URL, an XRI or i-name. + The shorest URL that describes this relying party web site's address. + For example, if your login page is found at https://www.example.com/login.aspx, + your realm would typically be https://www.example.com/. + The URL of the login page, or the page prepared to receive authentication + responses from the OpenID Provider. + + A sequence of authentication requests, any of which constitutes a valid identity assertion on the Claimed Identifier. + Never null, but may be empty. + + + Any individual generated request can satisfy the authentication. + The generated requests are sorted in preferred order. + Each request is generated as it is enumerated to. Associations are created only as + is called. + No exception is thrown if no OpenID endpoints were discovered. + An empty enumerable is returned instead. + + + + + Serializes discovery results on some single identifier on behalf of Javascript running on the browser. + + The discovery results from just one identifier to serialize as a JSON response. + + The JSON result to return to the user agent. + + + We prepare a JSON object with this interface: + + class jsonResponse { + string claimedIdentifier; + Array requests; // never null + string error; // null if no error + } + + Each element in the requests array looks like this: + + class jsonAuthRequest { + string endpoint; // URL to the OP endpoint + string immediate; // URL to initiate an immediate request + string setup; // URL to initiate a setup request. + } + + + + + Serializes discovery on a set of identifiers for preloading into an HTML page that carries + an AJAX-aware OpenID control. + + The discovery results to serialize as a JSON response. + + The JSON result to return to the user agent. + + + + + Converts a sequence of authentication requests to a JSON object for seeding an AJAX-enabled login page. + + The discovery results from just one identifier to serialize as a JSON response. + A JSON object, not yet serialized. + + + + Serializes discovery on a set of identifiers for preloading into an HTML page that carries + an AJAX-aware OpenID control. + + The discovery results to serialize as a JSON response. + + A JSON object, not yet serialized to a string. + + + + + Gets the full URL that carries an OpenID message, even if it exceeds the normal maximum size of a URL, + for purposes of sending to an AJAX component running in the browser. + + The authentication request. + + trueto create a checkid_immediate request; + false to create a checkid_setup request. + The absolute URL that carries the entire OpenID message. + + + + A common base class for OpenID Relying Party controls. + + + + + The manifest resource name of the javascript file to include on the hosting page. + + + + + The cookie used to persist the Identifier the user logged in with. + + + + + The callback parameter name to use to store which control initiated the auth request. + + + + + The callback parameter to use for recognizing when the callback is in a popup window or hidden iframe. + + + + + The parameter name to include in the formulated auth request so that javascript can know whether + the OP advertises support for the UI extension. + + + + + The "Appearance" category for properties. + + + + + The "Behavior" category for properties. + + + + + The "OpenID" category for properties and events. + + + + + The callback parameter for use with persisting the property. + + + + + The callback parameter to use for recognizing when the callback is in the parent window. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + Default value of . + + + + + Default value of . + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The key under which the value for the property will be stored. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The lifetime of the cookie used to persist the Identifier the user logged in with. + + + + + Backing field for the property. + + + + + A value indicating whether the field contains + an instance that we own and should Dispose. + + + + + Initializes a new instance of the class. + + + + + Clears any cookie set by this control to help the user on a returning visit next time. + + + + + Immediately redirects to the OpenID Provider to verify the Identifier + provided in the text box. + + + + + Immediately redirects to the OpenID Provider to verify the Identifier + provided in the text box. + + The request. + + + + Enables a server control to perform final clean up before it is released from memory. + + + + + Creates the authentication requests for a given user-supplied Identifier. + + The identifier to create a request for. + + A sequence of authentication requests, any one of which may be + used to determine the user's control of the . + + + + + Releases unmanaged and - optionally - managed resources + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + When implemented by a class, enables a server control to process an event raised when a form is posted to the server. + + A that represents an optional event argument to be passed to the event handler. + + + + Creates the authentication requests for the value set in the property. + + + A sequence of authentication requests, any one of which may be + used to determine the user's control of the . + + + + + Raises the event. + + The instance containing the event data. + + + + Notifies the user agent via an AJAX response of a completed authentication attempt. + + + + + Called when the property is changed. + + + + + Processes the response. + + The response. + + + + Raises the event. + + An object that contains the event data. + + + + Fires the event. + + The response. + + + + Fires the event. + + The request. + + Returns whether the login should proceed. False if some event handler canceled the request. + + + + + Fires the event. + + The response. + + + + Fires the event. + + The response. + + + + Creates the relying party instance used to generate authentication requests. + + The instantiated relying party. + + + + Creates the relying party instance used to generate authentication requests. + + The store to pass to the relying party constructor. + The instantiated relying party. + + + + Configures the relying party. + + The relying party. + + + + Detects whether a popup window should be used to show the Provider's UI. + + The request. + + true if a popup should be used; false otherwise. + + + + + Adds attributes to an HTML <A> tag that will be written by the caller using + after this method. + + The HTML writer. + The outgoing authentication request. + The text to try to display in the status bar on mouse hover. + + + + Creates the identifier-persisting cookie, either for saving or deleting. + + The positive authentication response; or null to clear the cookie. + An persistent cookie. + + + + Creates the authentication requests for a given user-supplied Identifier. + + The identifier to create a request for. + + A sequence of authentication requests, any one of which may be + used to determine the user's control of the . + + + + + Gets the javascript to executee to redirect or POST an OpenID message to a remote party. + + The authentication request to send. + The javascript that should execute. + + + + Wires the return page to immediately display a popup window with the Provider in it. + + The request. + + + + Tries to preset the property based on a persistent + cookie on the browser. + + + A value indicating whether the property was + successfully preset to some non-empty value. + + + + + Gets or sets the instance to use. + + The default value is an instance initialized according to the web.config file. + + A performance optimization would be to store off the + instance as a static member in your web site and set it + to this property in your Page.Load + event since instantiating these instances can be expensive on + heavily trafficked web pages. + + + + + Gets the collection of extension requests this selector should include in generated requests. + + + + + Gets or sets a value indicating whether stateless mode is used. + + + + + Gets or sets the OpenID of the relying party web site. + + + + + Gets or sets the OpenID ReturnTo of the relying party web site. + + + + + Gets or sets a value indicating whether to send a persistent cookie upon successful + login so the user does not have to log in upon returning to this site. + + + + + Gets or sets the way a completed login is communicated to the rest of the web site. + + + + + Gets or sets a value indicating when to use a popup window to complete the login experience. + + The default value is . + + + + Gets or sets a value indicating whether to enforce on high security mode, + which requires the full authentication pipeline to be protected by SSL. + + + + + Gets or sets the Identifier that will be used to initiate login. + + + + + Gets or sets the default association preference to set on authentication requests. + + + + + Gets ancestor controls, starting with the immediate parent, and progressing to more distant ancestors. + + + + + Gets a value indicating whether this control is a child control of a composite OpenID control. + + + true if this instance is embedded in parent OpenID control; otherwise, false. + + + + + Fired when the user has typed in their identifier, discovery was successful + and a login attempt is about to begin. + + + + + Fired upon completion of a successful login. + + + + + Fired when a login attempt fails. + + + + + Fired when an authentication attempt is canceled at the OpenID Provider. + + + + + Occurs when the property is changed. + + + + + A common base class for OpenID Relying Party controls. + + + + + The manifest resource name of the javascript file to include on the hosting page. + + + + + The "dnoa.op_endpoint" string. + + + + + The "dnoa.claimed_id" string. + + + + + The name of the javascript field that stores the maximum time a positive assertion is + good for before it must be refreshed. + + + + + The name of the javascript function that will initiate an asynchronous callback. + + + + + The name of the javascript function that will initiate a synchronous callback. + + + + + The viewstate key to use for storing the value of a successful authentication. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + Default value of the property. + + + + + Default value of property.. + + + + + The authentication response that just came in. + + + + + Stores the result of an AJAX discovery request while it is waiting + to be picked up by ASP.NET on the way down to the user agent. + + + + + Initializes a new instance of the class. + + + + + Allows an OpenID extension to read data out of an unverified positive authentication assertion + and send it down to the client browser so that Javascript running on the page can perform + some preprocessing on the extension data. + + The extension response type that will read data from the assertion. + The property name on the openid_identifier input box object that will be used to store the extension data. For example: sreg + + This method should be called from the event handler. + + + + + Returns the results of a callback event that targets a control. + + The result of the callback. + + + + Processes a callback event that targets a control. + + A string that represents an event argument to pass to the event handler. + + + + Creates the relying party instance used to generate authentication requests. + + The store to pass to the relying party constructor. + The instantiated relying party. + + + + Pre-discovers an identifier and makes the results available to the + user agent for javascript as soon as the page loads. + + The identifier. + + + + Pre-discovers a given set of identifiers and makes the results available to the + user agent for javascript as soon as the page loads. + + The identifiers to perform discovery on. + + + + Fires the event. + + + + + Raises the event. + + The instance containing the event data. + + + + Called when the property is changed. + + + + + Raises the event. + + An object that contains the event data. + + + + Sends server control content to a provided object, which writes the content to be rendered on the client. + + The object that receives the server control content. + + + + Notifies the user agent via an AJAX response of a completed authentication attempt. + + + + + Constructs a function that will initiate an AJAX callback. + + if set to true causes the AJAX callback to be a little more asynchronous. Note that false does not mean the call is absolutely synchronous. + The string defining a javascript anonymous function that initiates a callback. + + + + Sets the window.aspnetapppath variable on the user agent so that cookies can be set with the proper path. + + + + + Gets or sets a value indicating when to use a popup window to complete the login experience. + + The default value is . + + + + Gets or sets the way a completed login is communicated to the rest of the web site. + + + + + Gets or sets the instance to use. + + + The default value is an instance initialized according to the web.config file. + + + A performance optimization would be to store off the + instance as a static member in your web site and set it + to this property in your Page.Load + event since instantiating these instances can be expensive on + heavily trafficked web pages. + + + + + Gets the completed authentication response. + + + + + Gets the relying party as its AJAX type. + + + + + Gets the name of the open id auth data form key (for the value as stored at the user agent as a FORM field). + + Usually a concatenation of the control's name and "_openidAuthData". + + + + Gets or sets a value indicating whether an authentication in the page's view state + has already been processed and appropriate events fired. + + + + + Fired when a Provider sends back a positive assertion to this control, + but the authentication has not yet been verified. + + + No security critical decisions should be made within event handlers + for this event as the authenticity of the assertion has not been + verified yet. All security related code should go in the event handler + for the event. + + + + + An ASP.NET control that provides a minimal text box that is OpenID-aware and uses AJAX for + a premium login experience. + + + + + The name of the manifest stream containing the OpenIdAjaxTextBox.js file. + + + + + The name of the manifest stream containing the OpenIdAjaxTextBox.css file. + + + + + The name of the manifest stream containing the spinner.gif file. + + + + + The name of the manifest stream containing the login_success.png file. + + + + + The name of the manifest stream containing the login_failure.png file. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + Default value for property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The path where the YUI control library should be downloaded from for HTTP pages. + + + + + The path where the YUI control library should be downloaded from for HTTPS pages. + + + + + Initializes a new instance of the class. + + + + + Raises the event. + + The instance containing the event data. + + + + Called when the property is changed. + + + + + Prepares to render the control. + + An object that contains the event data. + + + + Renders the control. + + The object that receives the control content. + + + + When implemented by a class, processes postback data for an ASP.NET server control. + + The key identifier for the control. + The collection of all incoming name values. + + true if the server control's state changes as a result of the postback; otherwise, false. + + + + + When implemented by a class, signals the server control to notify the ASP.NET application that the state of the control has changed. + + + + + Called on a postback when the Text property has changed. + + + + + Assembles the javascript to send to the client and registers it with ASP.NET for transmission. + + + + + Gets or sets the client-side script that executes when an authentication + assertion is received (but before it is verified). + + + In the context of the executing javascript set in this property, the + local variable sender is set to the openid_identifier input box + that is executing this code. + This variable has a getClaimedIdentifier() method that may be used to + identify the user who is being authenticated. + It is very important to note that when this code executes, + the authentication has not been verified and may have been spoofed. + No security-sensitive operations should take place in this javascript code. + The authentication is verified on the server by the time the + server-side event fires. + + + + + Gets or sets the value in the text field, completely unprocessed or normalized. + + + + + Gets or sets a value indicating whether a postback is made to fire the + event as soon as authentication has completed + successfully. + + + true if a postback should be made automatically upon authentication; + otherwise, false to delay the + event from firing at the server until a postback is made by some other control. + + + + + Gets or sets the width of the text box in characters. + + + + + Gets or sets the CSS class assigned to the text box. + + + + + Gets or sets the tab index of the text box control. Use 0 to omit an explicit tabindex. + + + + + Gets or sets a value indicating whether this is enabled + in the browser for editing and will respond to incoming OpenID messages. + + + true if enabled; otherwise, false. + + + + Gets or sets the HTML name to assign to the text field. + + + + + Gets or sets the time duration for the AJAX control to wait for an OP to respond before reporting failure to the user. + + + + + Gets or sets the maximum number of OpenID Providers to simultaneously try to authenticate with. + + + + + Gets or sets the text that appears on the LOG IN button in cases where immediate (invisible) authentication fails. + + + + + Gets or sets the rool tip text that appears on the LOG IN button in cases where immediate (invisible) authentication fails. + + + + + Gets or sets the rool tip text that appears on the LOG IN button when clicking the button will result in an immediate postback. + + + + + Gets or sets the text that appears on the RETRY button in cases where authentication times out. + + + + + Gets or sets the tool tip text that appears on the RETRY button in cases where authentication times out. + + + + + Gets or sets the tool tip text that appears when authentication succeeds. + + + + + Gets or sets the tool tip text that appears on the green checkmark when authentication succeeds. + + + + + Gets or sets the tool tip text that appears when authentication fails. + + + + + Gets or sets the tool tip text that appears over the text box when it is discovering and authenticating. + + + + + Gets or sets the message that is displayed if a postback is about to occur before the identifier has been supplied. + + + + + Gets or sets the message that is displayed if a postback is attempted while login is in process. + + + + + Gets or sets a value indicating whether the Yahoo! User Interface Library (YUI) + will be downloaded in order to provide a login split button. + + + true to use a split button; otherwise, false to use a standard HTML button + or a split button by downloading the YUI library yourself on the hosting web page. + + + The split button brings in about 180KB of YUI javascript dependencies. + + + + + Gets or sets a value indicating whether the "Log in" button will be shown + to initiate a postback containing the positive assertion. + + + + + Gets or sets a value indicating whether the ajax text box should hook the form's submit event for special behavior. + + + + + Gets the name of the open id auth data form key. + + + A concatenation of and "_openidAuthData". + + + + + Gets the default value for the property. + + 8 seconds; or eternity if the debugger is attached. + + + + Fired when the content of the text changes between posts to the server. + + + + + An ASP.NET control that renders a button that initiates an + authentication when clicked. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The key under which the value for the property will be stored. + + + + + The key under which the value for the property will be stored. + + + + + The key under which the value for the property will be stored. + + + + + Initializes a new instance of the class. + + + + + When implemented by a class, enables a server control to process an event raised when a form is posted to the server. + + A that represents an optional event argument to be passed to the event handler. + + + + Raises the event. + + An object that contains the event data. + + + + Sends server control content to a provided object, which writes the content to be rendered on the client. + + The object that receives the server control content. + + + + Gets or sets the text to display for the link. + + + + + Gets or sets the image to display. + + + + + Gets or sets a value indicating whether to pre-discover the identifier so + the user agent has an immediate redirect. + + + + + Gets or sets a value indicating when to use a popup window to complete the login experience. + + The default value is . + + + + The event details passed to event handlers. + + + + + Initializes a new instance of the class + with minimal information of an incomplete or failed authentication attempt. + + The outgoing authentication request. + + + + Initializes a new instance of the class + with information on a completed authentication attempt + (whether that attempt was successful or not). + + The incoming authentication response. + + + + Gets or sets a value indicating whether to cancel + the OpenID authentication and/or login process. + + + + + Gets the Identifier the user is claiming to own. Or null if the user + is using Directed Identity. + + + + + Gets a value indicating whether the user has selected to let his Provider determine + the ClaimedIdentifier to use as part of successful authentication. + + + + + Gets the details of the OpenID authentication request, + and allows for adding extensions. + + + + + Gets the details of the OpenID authentication response. + + + + + An ASP.NET control that provides a minimal text box that is OpenID-aware. + + + This control offers greater UI flexibility than the + control, but requires more work to be done by the hosting web site to + assemble a complete login experience. + + + + + The name of the manifest stream containing the + OpenID logo that is placed inside the text box. + + + + + Default value for property. + + + + + The "Simple Registration" category for properties. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + An empty sreg request, used to compare with others to see if they too are empty. + + + + + Initializes a new instance of the class. + + + + + Creates the authentication requests for a given user-supplied Identifier. + + The identifier to create a request for. + + A sequence of authentication requests, any one of which may be + used to determine the user's control of the . + + + + + Checks for incoming OpenID authentication responses and fires appropriate events. + + The object that contains the event data. + + + + Called when the property is changed. + + + + + Sends server control content to a provided object, which writes the content to be rendered on the client. + + The object that receives the server control content. + + + + When implemented by a class, processes postback data for an ASP.NET server control. + + The key identifier for the control. + The collection of all incoming name values. + + true if the server control's state changes as a result of the postback; otherwise, false. + + + + + When implemented by a class, signals the server control to notify the ASP.NET application that the state of the control has changed. + + + + + Called on a postback when the Text property has changed. + + + + + Creates the authentication requests for a given user-supplied Identifier. + + The authentication requests to prepare. + + A sequence of authentication requests, any one of which may be + used to determine the user's control of the . + + + + + Adds extensions to a given authentication request to ask the Provider + for user profile data. + + The authentication request to add the extensions to. + + + + Gets or sets the content of the text box. + + + + + Gets or sets the form name to use for this input field. + + + + + Gets or sets the CSS class assigned to the text box. + + + + + Gets or sets a value indicating whether to show the OpenID logo in the text box. + + + + + Gets or sets a value indicating whether to use inline styling to force a solid gray border. + + + + + Gets or sets the width of the text box in characters. + + + + + Gets or sets the maximum number of characters the browser should allow + + + + + Gets or sets the tab index of the Web server control. + + + + + The tab index of the Web server control. The default is 0, which indicates that this property is not set. + + + The specified tab index is not between -32768 and 32767. + + + + + Gets or sets a value indicating whether this is enabled + in the browser for editing and will respond to incoming OpenID messages. + + + true if enabled; otherwise, false. + + + + Gets or sets your level of interest in receiving the user's nickname from the Provider. + + + + + Gets or sets your level of interest in receiving the user's email address from the Provider. + + + + + Gets or sets your level of interest in receiving the user's full name from the Provider. + + + + + Gets or sets your level of interest in receiving the user's birthdate from the Provider. + + + + + Gets or sets your level of interest in receiving the user's gender from the Provider. + + + + + Gets or sets your level of interest in receiving the user's postal code from the Provider. + + + + + Gets or sets your level of interest in receiving the user's country from the Provider. + + + + + Gets or sets your level of interest in receiving the user's preferred language from the Provider. + + + + + Gets or sets your level of interest in receiving the user's time zone from the Provider. + + + + + Gets or sets the URL to your privacy policy page that describes how + claims will be used and/or shared. + + + + + Gets or sets a value indicating whether to use OpenID extensions + to retrieve profile data of the authenticating user. + + + + + Occurs when the content of the text changes between posts to the server. + + + + + An ASP.NET control providing a complete OpenID login experience. + + + + + A control that acts as a placeholder to indicate where + the OpenIdLogin control should render its OpenIdTextBox parent. + + + + + Initializes a new instance of the class. + + The render control. + + + + Sends server control content to a provided object, which writes the content to be rendered on the client. + + The object that receives the server control content. + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The default value for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The viewstate key to use for the property. + + + + + The HTML to append to the property value when rendering. + + + + + The number to add to to get the tab index of the textbox control. + + + + + The number to add to to get the tab index of the login button control. + + + + + The number to add to to get the tab index of the remember me checkbox control. + + + + + The number to add to to get the tab index of the register link control. + + + + + The control into which all other controls are added. + + + + + The Login button. + + + + + The label that presents the text box. + + + + + The validator that flags an empty text box. + + + + + The validator that flags invalid formats of OpenID identifiers. + + + + + The label that precedes an example OpenID identifier. + + + + + The label that contains the example OpenID identifier. + + + + + A link to allow the user to create an account with a popular OpenID Provider. + + + + + The Remember Me checkbox. + + + + + The javascript snippet that activates the ID Selector javascript control. + + + + + The label that will display login failure messages. + + + + + Initializes a new instance of the class. + + + + + Outputs server control content to a provided object and stores tracing information about the control if tracing is enabled. + + The object that receives the control content. + + + + Creates the child controls. + + + + + Raises the event. + + An object that contains the event data. + + + + Initializes the child controls. + + + + + Raises the event. + + An object that contains the event data. + + + + Renders the child controls. + + The object that receives the rendered content. + + + + Adds failure handling to display an error message to the user. + + The response. + + + + Adds authentication cancellation behavior to display a message to the user. + + The response. + + + + Fires the event. + + + + + Handles the ServerValidate event of the identifierFormatValidator control. + + The source of the event. + The instance containing the event data. + + + + Handles the CheckedChanged event of the rememberMeCheckBox control. + + The source of the event. + The instance containing the event data. + + + + Handles the Click event of the loginButton control. + + The source of the event. + The instance containing the event data. + + + + Renders the control inner. + + The writer. + + + + Sets child control properties that depend on this control's ID. + + + + + Gets a object that represents the child controls for a specified server control in the UI hierarchy. + + + The collection of child controls for the specified server control. + + + + + Gets or sets the caption that appears before the text box. + + + + + Gets or sets the text that introduces the example OpenID url. + + + + + Gets or sets the example OpenID Identifier to display to the user. + + + + + Gets or sets the text to display if the user attempts to login + without providing an Identifier. + + + + + Gets or sets the text to display if the user provides an invalid form for an Identifier. + + + + + Gets or sets a value indicating whether to perform Identifier + format validation prior to an authentication attempt. + + + + + Gets or sets the text of the link users can click on to obtain an OpenID. + + + + + Gets or sets the URL to link users to who click the link to obtain a new OpenID. + + + + + Gets or sets the text of the tooltip to display when the user hovers + over the link to obtain a new OpenID. + + + + + Gets or sets a value indicating whether to display a link to + allow users to easily obtain a new OpenID. + + + + + Gets or sets the text that appears on the button that initiates login. + + + + + Gets or sets the text of the "Remember Me" checkbox. + + + + + Gets or sets the message display in the event of a failed + authentication. {0} may be used to insert the actual error. + + + + + Gets or sets the text to display in the event of an authentication canceled at the Provider. + + + + + Gets or sets a value indicating whether the "Remember Me" checkbox should be displayed. + + + + + Gets or sets a value indicating whether a successful authentication should result in a persistent + cookie being saved to the browser. + + + + + Gets or sets the starting tab index to distribute across the controls. + + + + + Gets or sets the tooltip to display when the user hovers over the login button. + + + + + Gets or sets the validation group that the login button and text box validator belong to. + + + + + Gets or sets the unique hash string that ends your idselector.com account. + + + + + Gets or sets a value indicating whether a FormsAuthentication + cookie should persist across user sessions. + + + + + Fired when the Remember Me checkbox is changed by the user. + + + + + Methods of indicating to the rest of the web site that the user has logged in. + + + + + The rest of the web site is unaware that the user just completed an OpenID login. + + + + + After the event is fired + the control automatically calls + with the as the username + unless the event handler sets + property to true. + + + + + How an OpenID user session should be persisted across visits. + + + + + The user should only be logged in as long as the browser window remains open. + Nothing is persisted to help the user on a return visit. Public kiosk mode. + + + + + The user should only be logged in as long as the browser window remains open. + The OpenID Identifier is persisted to help expedite re-authentication when + the user visits the next time. + + + + + The user is issued a persistent authentication ticket so that no login is + necessary on their return visit. + + + + + An ASP.NET control that provides a user-friendly way of logging into a web site using OpenID. + + + + + The name of the manifest stream containing the OpenIdButtonPanel.js file. + + + + + The name of the manifest stream containing the OpenIdButtonPanel.css file. + + + + + The substring to append to the end of the id or name of this control to form the + unique name of the hidden field that will carry the positive assertion on postback. + + + + + The viewstate key to use for storing the value of the property. + + + + + The viewstate key to use for storing the value of the property. + + + + + The default value for the property. + + + + + The OpenIdAjaxTextBox that remains hidden until the user clicks the OpenID button. + + + + + The hidden field that will transmit the positive assertion to the RP. + + + + + Initializes a new instance of the class. + + + + + Releases unmanaged and - optionally - managed resources + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Called by the ASP.NET page framework to notify server controls that use composition-based implementation to create any child controls they contain in preparation for posting back or rendering. + + + + + Ensures that the child controls have been built, but doesn't set control + properties that require executing in order to avoid + certain initialization order problems. + + + We don't just call EnsureChildControls() and then set the property on + this.textBox itself because (apparently) setting this property in the ASPX + page and thus calling this EnsureID() via EnsureChildControls() this early + results in no ID. + + + + + Raises the event. + + An object that contains the event data. + + + + Raises the event. + + An object that contains the event data. + + + + Sends server control content to a provided object, which writes the content to be rendered on the client. + + The object that receives the server control content. + + + + Ensures the collection has a valid set of buttons. + + + + + Gets the text box where applicable. + + + + + Gets or sets the maximum number of OpenID Providers to simultaneously try to authenticate with. + + + + + Gets or sets the time duration for the AJAX control to wait for an OP to respond before reporting failure to the user. + + + + + Gets or sets the tool tip text that appears on the green checkmark when authentication succeeds. + + + + + Gets or sets a value indicating whether the Yahoo! User Interface Library (YUI) + will be downloaded in order to provide a login split button. + + + true to use a split button; otherwise, false to use a standard HTML button + or a split button by downloading the YUI library yourself on the hosting web page. + + + The split button brings in about 180KB of YUI javascript dependencies. + + + + + Gets the collection of buttons this selector should render to the browser. + + + + + Gets a object that represents the child controls for a specified server control in the UI hierarchy. + + + The collection of child controls for the specified server control. + + + + + Gets the name of the open id auth data form key (for the value as stored at the user agent as a FORM field). + + + Usually a concatenation of the control's name and "_openidAuthData". + + + + + Gets a value indicating whether some button in the selector will want + to display the control. + + + + + Several ways that the relying party can direct the user to the Provider + to complete authentication. + + + + + A full browser window redirect will be used to send the + user to the Provider. + + + + + A popup window will be used to send the user to the Provider. + + + + + A popup window will be used to send the user to the Provider + if the Provider advertises support for the popup UI extension; + otherwise a standard redirect is used. + + + + + A button that would appear in the control via its collection. + + + + + Initializes a new instance of the class. + + + + + Ensures that this button has been initialized to a valid state. + + + This is "internal" -- NOT "protected internal" deliberately. It makes it impossible + to derive from this class outside the assembly, which suits our purposes since the + control is not designed for an extensible set of button types. + + + + + Renders the leading attributes for the LI tag. + + The writer. + + + + Renders the content of the button. + + The writer. + The containing selector control. + + + + The contract class for the class. + + + + + Ensures that this button has been initialized to a valid state. + + + This is "internal" -- NOT "protected internal" deliberately. It makes it impossible + to derive from this class outside the assembly, which suits our purposes since the + control is not designed for an extensible set of button types. + + + + + Renders the leading attributes for the LI tag. + + The writer. + + + + Renders the content of the button. + + The writer. + The containing selector control. + + + + A button that appears in the control that + allows the user to type in a user-supplied identifier. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The image to display on the button. + + + + Ensures that this button has been initialized to a valid state. + + + + + Renders the leading attributes for the LI tag. + + The writer. + + + + Renders the content of the button. + + The writer. + The containing selector control. + + + + Gets or sets the path to the image to display on the button's surface. + + The virtual path to the image. + + + + A button that appears in the control that + provides one-click access to a popular OpenID Provider. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The OP Identifier. + The image to display on the button. + + + + Ensures that this button has been initialized to a valid state. + + + + + Renders the leading attributes for the LI tag. + + The writer. + + + + Renders the content of the button. + + The writer. + The containing selector control. + + + + Gets or sets the path to the image to display on the button's surface. + + The virtual path to the image. + + + + Gets or sets the OP Identifier represented by the button. + + + The OP identifier, which may be provided in the easiest "user-supplied identifier" form, + but for security should be provided with a leading https:// if possible. + For example: "yahoo.com" or "https://me.yahoo.com/". + + + + + Gets or sets a value indicating whether this Provider doesn't handle + checkid_immediate messages correctly and background authentication + should not be attempted. + + + + + The locations the YADIS protocol describes can contain a reference + to an XRDS document. + + + + + The XRDS document should not be advertised anywhere. + + + When the XRDS document is not referenced from anywhere, + the XRDS content is only available when + is true + and the discovering client includes an + "Accept: application/xrds+xml" HTTP header. + + + + + Indicates XRDS document referencing from an HTTP protocol header (outside the HTML). + + + + + Indicates XRDS document referencing from within an HTML page's <HEAD> tag. + + + + + Indicates XRDS document referencing in both HTTP headers and HTML HEAD tags. + + + + + An ASP.NET control that advertises an XRDS document and even responds to specially + crafted requests to retrieve it. + + + + + The view state key to ues for storing the value of the property. + + + + + The default value for the property. + + + + + The view state key to ues for storing the value of the property. + + + + + The default value for the property. + + + + + The view state key to ues for storing the value of the property. + + + + + The default value for the property. + + + + + The view state key to ues for storing the value of the property. + + + + + Initializes a new instance of the class. + + + + + Detects YADIS requests for the XRDS document and responds immediately + if is true. + + The object that contains the event data. + + + + Renders the HTTP Header and/or HTML HEAD tags. + + The object that receives the server control content. + + + + Gets or sets the location of the XRDS document. + + + + + Gets or sets where the XRDS document URL is advertised in the web response. + + + + + Gets or sets a value indicating whether a specially crafted YADIS + search for an XRDS document is immediately answered by this control. + + + + + Gets or sets a value indicating whether the XRDS document is advertised. + + + + + An ASP.NET control that provides a user-friendly way of logging into a web site using OpenID. + + + + + The InfoCard selector button. + + + + + Ensures that the child controls have been built, but doesn't set control + properties that require executing in order to avoid + certain initialization order problems. + + + We don't just call EnsureChildControls() and then set the property on + this.textBox itself because (apparently) setting this property in the ASPX + page and thus calling this EnsureID() via EnsureChildControls() this early + results in no ID. + + + + + Fires the event. + + The token, if it was decrypted. + + + + Raises the event. + + The instance containing the event data. + + + + Handles the ReceivedToken event of the infoCardSelector control. + + The source of the event. + The instance containing the event data. + + + + Handles the TokenProcessingError event of the infoCardSelector control. + + The source of the event. + The instance containing the event data. + + + + Occurs when an InfoCard has been submitted and decoded. + + + + + Occurs when [token processing error]. + + + + + A button that appears in the control that + activates the Information Card selector on the browser, if one is available. + + + + + The backing field for the property. + + + + + Initializes a new instance of the class. + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Ensures that this button has been initialized to a valid state. + + + + + Renders the leading attributes for the LI tag. + + The writer. + + + + Renders the content of the button. + + The writer. + The containing selector control. + + + + Releases unmanaged and - optionally - managed resources + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Gets or sets the InfoCard selector which may be displayed alongside the OP buttons. + + + + + Additional methods an implementing class + may implement to support the OpenID+OAuth extension. + + + + + Stores a new request token obtained over an OpenID request. + + The consumer key. + The authorization message carrying the request token and authorized access scope. + + The token secret is the empty string. + Tokens stored by this method should be short-lived to mitigate + possible security threats. Their lifetime should be sufficient for the + relying party to receive the positive authentication assertion and immediately + send a follow-up request for the access token. + + + + + An interface that providers that play a dual role as OpenID Provider + and OAuth Service Provider should implement on their token manager classes. + + + This interface should be implemented by the same class that implements + in order to enable the OpenID+OAuth extension. + + + + + Gets the OAuth consumer key for a given OpenID relying party realm. + + The relying party's OpenID realm. + The OAuth consumer key for a given OpenID realm. + This is a security-critical function. Since OpenID requests + and OAuth extensions for those requests can be formulated by ANYONE + (no signing is required by the relying party), and since the response to + the authentication will include access the user is granted to the + relying party who CLAIMS to be from some realm, it is of paramount + importance that the realm is recognized as belonging to the consumer + key by the host service provider in order to protect against phishers. + + + + A web application that allows access via OAuth and can respond to OpenID+OAuth requests. + + + The Service Provider’s documentation should include: + + The URLs (Request URLs) the Consumer will use when making OAuth requests, and the HTTP methods (i.e. GET, POST, etc.) used in the Request Token URL and Access Token URL. + Signature methods supported by the Service Provider. + Any additional request parameters that the Service Provider requires in order to obtain a Token. Service Provider specific parameters MUST NOT begin with oauth_. + + + + + + Initializes a new instance of the class. + + The endpoints and behavior on the Service Provider. + The host's method of storing and recalling tokens and secrets. + + + + Initializes a new instance of the class. + + The service description. + The token manager. + The message type provider. + + + + Initializes a new instance of the class. + + The service description. + The token manager. + The nonce store. + + + + Initializes a new instance of the class. + + The service description. + The token manager. + The nonce store. + The message type provider. + + + + Gets the OAuth authorization request included with an OpenID authentication + request, if there is one. + + The OpenID authentication request. + + The scope of access the relying party is requesting, or null if no OAuth request + is present. + + + Call this method rather than simply extracting the OAuth extension + out from the authentication request directly to ensure that the additional + security measures that are required are taken. + + + + + Attaches the authorization response to an OpenID authentication response. + + The OpenID authentication request. + The consumer key. Must be null if and only if is null. + The approved access scope. Use null to indicate no access was granted. The empty string will be interpreted as some default level of access is granted. + + + + Attaches the authorization response to an OpenID authentication response. + + The OpenID authentication request. + The approved access scope. Use null to indicate no access was granted. The empty string will be interpreted as some default level of access is granted. + + + + A website or application that uses OAuth to access the Service Provider on behalf of the User + and can attach OAuth requests to outbound OpenID authentication requests. + + + The methods on this class are thread-safe. Provided the properties are set and not changed + afterward, a single instance of this class may be used by an entire web application safely. + + + + + Initializes a new instance of the class. + + The endpoints and behavior of the Service Provider. + The host's method of storing and recalling tokens and secrets. + + + + Attaches an OAuth authorization request to an outgoing OpenID authentication request. + + The OpenID authentication request. + The scope of access that is requested of the service provider. + + + + Processes an incoming authorization-granted message from an SP and obtains an access token. + + The OpenID authentication response that may be carrying an authorized request token. + + The access token, or null if OAuth authorization was denied by the user or service provider. + + + The access token, if granted, is automatically stored in the . + The token manager instance must implement . + + + + + Low level functions for the BigInteger + + + + + Adds two numbers with the same sign. + + A BigInteger + A BigInteger + bi1 + bi2 + + + + Compares two BigInteger + + A BigInteger + A BigInteger + The sign of bi1 - bi2 + + + + Performs n / d and n % d in one operation. + + A BigInteger, upon exit this will hold n / d + The divisor + n % d + + + + Multiplies the data in x [xOffset:xOffset+xLen] by + y [yOffset:yOffset+yLen] and puts it into + d [dOffset:dOffset+xLen+yLen]. + + + + + Multiplies the data in x [xOffset:xOffset+xLen] by + y [yOffset:yOffset+yLen] and puts the low mod words into + d [dOffset:dOffset+mod]. + + + + + Default length of a BigInteger in bytes + + + + + The Length of this BigInteger + + + + + The data for this BigInteger + + + + + Table of primes below 2000. + + + + This table was generated using Mathematica 4.1 using the following function: + + + + PrimeTable [x_] := Prime [Range [1, PrimePi [x]]] + PrimeTable [6000] + + + + + + + Generates a new, random BigInteger of the specified length. + + The number of bits for the new number. + A random number generator to use to obtain the bits. + A random number of the specified length. + + + + Generates a new, random BigInteger of the specified length using the default RNG crypto service provider. + + The number of bits for the new number. + A random number of the specified length. + + + + Randomizes the bits in "this" from the specified RNG. + + A RNG. + + + + Randomizes the bits in "this" from the default RNG. + + + + + Tests if the specified bit is 1. + + The bit to test. The least significant bit is 0. + True if bitNum is set to 1, else false. + + + + Normalizes this by setting the length to the actual number of + uints used in data and by setting the sign to Sign.Zero if the + value of this is 0. + + + + + Generates the smallest prime >= bi + + A BigInteger + The smallest prime >= bi. More mathematically, if bi is prime: bi, else Prime [PrimePi [bi] + 1]. + + + + Increments this by two + + + + + A factor of confidence. + + + + + Only suitable for development use, probability of failure may be greater than 1/2^20. + + + + + Suitable only for transactions which do not require forward secrecy. Probability of failure about 1/2^40 + + + + + Designed for production use. Probability of failure about 1/2^80. + + + + + Suitable for sensitive data. Probability of failure about 1/2^160. + + + + + Use only if you have lots of time! Probability of failure about 1/2^320. + + + + + Only use methods which generate provable primes. Not yet implemented. + + + + + Performs primality tests on bi, assumes trial division has been done. + + A BigInteger that has been subjected to and passed trial division + False if bi is composite, true if it may be prime. + The speed of this method is dependent on Confidence + + + + Finds the next prime after a given number. + + + + + Probabilistic prime test based on Rabin-Miller's test + + + + The number to test. + + + + + The number of chosen bases. The test has at least a + 1/4^confidence chance of falsely returning True. + + + + + True if "this" is a strong pseudoprime to randomly chosen bases. + + + False if "this" is definitely NOT prime. + + + + + + Defines the different Diffie-Hellman key generation methods. + + + + + Returns dynamically generated values for P and G. Unlike the Sophie Germain or DSA key generation methods, + this method does not ensure that the selected prime offers an adequate security level. + + + + + Returns values for P and G that are hard coded in this library. Contrary to what your intuition may tell you, + using these hard coded values is perfectly safe. + The values of the P and G parameters are taken from 'The OAKLEY Key Determination Protocol' [RFC2412]. + This is the prefered key generation method, because it is very fast and very safe. + Because this method uses fixed values for the P and G parameters, not all bit sizes are supported. + The current implementation supports bit sizes of 768, 1024 and 1536. + + + + + Represents the parameters of the Diffie-Hellman algorithm. + + + + + Represents the public P parameter of the Diffie-Hellman algorithm. + + + + + Represents the public G parameter of the Diffie-Hellman algorithm. + + + + + Represents the private X parameter of the Diffie-Hellman algorithm. + + + + + Defines a base class from which all Diffie-Hellman implementations inherit. + + + + + Creates an instance of the default implementation of the algorithm. + + A new instance of the default implementation of DiffieHellman. + + + + Creates an instance of the specified implementation of . + + The name of the implementation of DiffieHellman to use. + A new instance of the specified implementation of DiffieHellman. + + + + Initializes a new instance. + + + + + When overridden in a derived class, creates the key exchange data. + + The key exchange data to be sent to the intended recipient. + + + + When overridden in a derived class, extracts secret information from the key exchange data. + + The key exchange data within which the secret information is hidden. + The secret information derived from the key exchange data. + + + + When overridden in a derived class, exports the . + + + true to include private parameters; otherwise, false. + The parameters for Diffie-Hellman. + + + + When overridden in a derived class, imports the specified . + + The parameters for Diffie-Hellman. + + + + Reconstructs a object from an XML string. + + The XML string to use to reconstruct the DiffieHellman object. + One of the values in the XML string is invalid. + + + + Creates and returns an XML string representation of the current object. + + + true to include private parameters; otherwise, false. + An XML string encoding of the current DiffieHellman object. + + + + Implements the Diffie-Hellman algorithm. + + + + + Initializes a new instance. + + The default length of the shared secret is 1024 bits. + + + + Initializes a new instance. + + The length, in bits, of the public P parameter. + The length, in bits, of the secret value X. This parameter can be set to 0 to use the default size. + One of the values. + The larger the bit length, the more secure the algorithm is. The default is 1024 bits. The minimum bit length is 128 bits.
The size of the private value will be one fourth of the bit length specified.
+ The specified bit length is invalid. +
+ + + Initializes a new instance. + + The P parameter of the Diffie-Hellman algorithm. This is a public parameter. + The G parameter of the Diffie-Hellman algorithm. This is a public parameter. + The X parameter of the Diffie-Hellman algorithm. This is a private parameter. If this parameters is a null reference (Nothing in Visual Basic), a secret value of the default size will be generated. + + or is a null reference (Nothing in Visual Basic). + + or is invalid. + + + + Initializes a new instance. + + The P parameter of the Diffie-Hellman algorithm. + The G parameter of the Diffie-Hellman algorithm. + The length, in bits, of the private value. If 0 is specified, the default value will be used. + + or is a null reference (Nothing in Visual Basic). + + is invalid. + + or is invalid. + + + + Creates the key exchange data. + + The key exchange data to be sent to the intended recipient. + + + + Extracts secret information from the key exchange data. + + The key exchange data within which the shared key is hidden. + The shared key derived from the key exchange data. + + + + Releases the unmanaged resources used by the SymmetricAlgorithm and optionally releases the managed resources. + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Exports the . + + + true to include private parameters; otherwise, false. + The parameters for . + + + + Imports the specified . + + The parameters for . + + parameters.P or parameters.G is a null reference (Nothing in Visual Basic) -or- parameters.P is not a prime number. + + + + Releases the unmanaged resources used by the SymmetricAlgorithm. + + + + + Gets the name of the key exchange algorithm. + + The name of the key exchange algorithm. + + + + Gets the name of the signature algorithm. + + The name of the signature algorithm. + + + + Internal state consistency checks that throw an internal error exception when they fail. + + + + + An internal error exception that should never be caught. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Validates some expression describing the acceptable condition evaluates to true. + + The expression that must evaluate to true to avoid an internal error exception. + The message to include with the exception. + + + + Validates some expression describing the acceptable condition evaluates to true. + + The expression that must evaluate to true to avoid an internal error exception. + The unformatted message. + Formatting arguments. + + + + Throws an internal error exception. + + The message. + + + + Throws an internal error exception. + + Nothing. This method always throws. + + + + An interface describing how various objects can be serialized and deserialized between their object and string forms. + + + Implementations of this interface must include a default constructor and must be thread-safe. + + + + + Encodes the specified value. + + The value. Guaranteed to never be null. + The in string form, ready for message transport. + + + + Decodes the specified value. + + The string value carried by the transport. Guaranteed to never be null, although it may be empty. + The deserialized form of the given string. + Thrown when the string value given cannot be decoded into the required object type. + + + + A message part encoder that translates between byte[] and base64web encoded strings. + + + + + Encodes the specified value. + + The value. Guaranteed to never be null. + The in string form, ready for message transport. + + + + Decodes the specified value. + + The string value carried by the transport. Guaranteed to never be null, although it may be empty. + The deserialized form of the given string. + Thrown when the string value given cannot be decoded into the required object type. + + + + A persistent store for rotating symmetric cryptographic keys. + + + Implementations should persist it in such a way that the keys are shared across all servers + on a web farm, where applicable. + The store should consider protecting the persistent store against theft resulting in the loss + of the confidentiality of the keys. One possible mitigation is to asymmetrically encrypt + each key using a certificate installed in the server's certificate store. + + + + + Gets the key in a given bucket and handle. + + The bucket name. Case sensitive. + The key handle. Case sensitive. + The cryptographic key, or null if no matching key was found. + + + + Gets a sequence of existing keys within a given bucket. + + The bucket name. Case sensitive. + A sequence of handles and keys, ordered by descending . + + + + Stores a cryptographic key. + + The name of the bucket to store the key in. Case sensitive. + The handle to the key, unique within the bucket. Case sensitive. + The key to store. + Thrown in the event of a conflict with an existing key in the same bucket and with the same handle. + + + + Removes the key. + + The bucket name. Case sensitive. + The key handle. Case sensitive. + + + + Provides RSA encryption of symmetric keys to protect them from a theft of + the persistent store. + + + + + An encrypted key and its decrypted equivalent. + + + + + Initializes a new instance of the class. + + The encrypted key. + The decrypted key. + + + + Invariant conditions. + + + + + Gets the encrypted key. + + + + + The persistent store for asymmetrically encrypted symmetric keys. + + + + + The memory cache of decrypted keys. + + + + + The asymmetric algorithm to use encrypting/decrypting the symmetric keys. + + + + + Initializes a new instance of the class. + + The data store. + The asymmetric protection to apply to symmetric keys. Must include the private key. + + + + Gets the key in a given bucket and handle. + + The bucket name. Case sensitive. + The key handle. Case sensitive. + + The cryptographic key, or null if no matching key was found. + + + + + Gets a sequence of existing keys within a given bucket. + + The bucket name. Case sensitive. + + A sequence of handles and keys, ordered by descending . + + + + + Stores a cryptographic key. + + The name of the bucket to store the key in. Case sensitive. + The handle to the key, unique within the bucket. Case sensitive. + The key to store. + + + + Removes the key. + + The bucket name. Case sensitive. + The key handle. Case sensitive. + + + + Decrypts the specified key. + + The bucket. + The handle. + The encrypted key. + + The decrypted key. + + + + + A cryptographic key and metadata concerning it. + + + + + Backing field for the property. + + + + + Backing field for the property. + + + + + Initializes a new instance of the class. + + The cryptographic key. + The expires UTC. + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + The parameter is null. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Gets the key. + + + + + Gets the expiration date of this key (UTC time). + + + + + Thrown by a hosting application or web site when a cryptographic key is created with a + bucket and handle that conflicts with a previously stored and unexpired key. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The inner exception to include. + + + + Initializes a new instance of the class. + + The + that holds the serialized object data about the exception being thrown. + The System.Runtime.Serialization.StreamingContext + that contains contextual information about the source or destination. + + + + Code contract for the interface. + + + + + A in-memory store of crypto keys. + + + + + How frequently to check for and remove expired secrets. + + + + + An in-memory cache of decrypted symmetric keys. + + + The key is the bucket name. The value is a dictionary whose key is the handle and whose value is the cached key. + + + + + The last time the cache had expired keys removed from it. + + + + + Gets the key in a given bucket and handle. + + The bucket name. Case sensitive. + The key handle. Case sensitive. + + The cryptographic key, or null if no matching key was found. + + + + + Gets a sequence of existing keys within a given bucket. + + The bucket name. Case sensitive. + + A sequence of handles and keys, ordered by descending . + + + + + Stores a cryptographic key. + + The name of the bucket to store the key in. Case sensitive. + The handle to the key, unique within the bucket. Case sensitive. + The key to store. + Thrown in the event of a conflict with an existing key in the same bucket and with the same handle. + + + + Removes the key. + + The bucket name. Case sensitive. + The key handle. Case sensitive. + + + + Cleans the expired keys from memory cache if the cleaning interval has passed. + + + + + Weeds out expired keys from the in-memory cache. + + + + + A serializer for -derived types + + The DataBag-derived type that is to be serialized/deserialized. + + + + Serializes the specified message. + + The message to serialize. Must not be null. + A non-null, non-empty value. + + + + Deserializes a . + + The instance to deserialize into + The serialized form of the to deserialize. Must not be null or empty. + The message that contains the serialized value. May be null if no carrying message is applicable. + The name of the parameter whose value is to be deserialized. Used for error message generation, but may be null. + + + + A serializer for -derived types + + The DataBag-derived type that is to be serialized/deserialized. + + + + The length of the nonce to include in tokens that can be decoded once only. + + + + + The message description cache to use for data bag types. + + + + + The minimum allowable lifetime for the key used to encrypt/decrypt or sign this databag. + + + + + The symmetric key store with the secret used for signing/encryption of verification codes and refresh tokens. + + + + + The bucket for symmetric keys. + + + + + The crypto to use for signing access tokens. + + + + + The crypto to use for encrypting access tokens. + + + + + A value indicating whether the data in this instance will be protected against tampering. + + + + + The nonce store to use to ensure that this instance is only decoded once. + + + + + The maximum age of a token that can be decoded; useful only when is true. + + + + + A value indicating whether the data in this instance will be protected against eavesdropping. + + + + + A value indicating whether the data in this instance will be GZip'd. + + + + + Initializes a new instance of the class. + + The crypto service provider with the asymmetric key to use for signing or verifying the token. + The crypto service provider with the asymmetric key to use for encrypting or decrypting the token. + A value indicating whether the data in this instance will be GZip'd. + The maximum age of a token that can be decoded; useful only when is true. + The nonce store to use to ensure that this instance is only decoded once. + + + + Initializes a new instance of the class. + + The crypto key store used when signing or encrypting. + The bucket in which symmetric keys are stored for signing/encrypting data. + A value indicating whether the data in this instance will be protected against tampering. + A value indicating whether the data in this instance will be protected against eavesdropping. + A value indicating whether the data in this instance will be GZip'd. + The required minimum lifespan within which this token must be decodable and verifiable; useful only when and/or is true. + The maximum age of a token that can be decoded; useful only when is true. + The nonce store to use to ensure that this instance is only decoded once. + + + + Initializes a new instance of the class. + + A value indicating whether the data in this instance will be protected against tampering. + A value indicating whether the data in this instance will be protected against eavesdropping. + A value indicating whether the data in this instance will be GZip'd. + The maximum age of a token that can be decoded; useful only when is true. + The nonce store to use to ensure that this instance is only decoded once. + + + + Serializes the specified message, including compression, encryption, signing, and nonce handling where applicable. + + The message to serialize. Must not be null. + A non-null, non-empty value. + + + + Deserializes a , including decompression, decryption, signature and nonce validation where applicable. + + The instance to initialize with deserialized data. + The serialized form of the to deserialize. Must not be null or empty. + The message that contains the serialized value. May be null if no carrying message is applicable. + The name of the parameter whose value is to be deserialized. Used for error message generation, but may be null. + + + + Serializes the instance to a buffer. + + The message. + The buffer containing the serialized data. + + + + Deserializes the instance from a buffer. + + The message instance to initialize with data from the buffer. + The data buffer. + + + + Determines whether the signature on this instance is valid. + + The signed data. + The signature. + The symmetric secret handle. null when using an asymmetric algorithm. + + true if the signature is valid; otherwise, false. + + + + + Calculates the signature for the data in this verification code. + + The bytes to sign. + The symmetric secret handle. null when using an asymmetric algorithm. + + The calculated signature. + + + + + Encrypts the specified value using either the symmetric or asymmetric encryption algorithm as appropriate. + + The value. + Receives the symmetric secret handle. null when using an asymmetric algorithm. + + The encrypted value. + + + + + Decrypts the specified value using either the symmetric or asymmetric encryption algorithm as appropriate. + + The value. + The symmetric secret handle. null when using an asymmetric algorithm. + + The decrypted value. + + + + + A compact binary serialization class. + + The -derived type to serialize/deserialize. + + + + Initializes a new instance of the class. + + The crypto service provider with the asymmetric key to use for signing or verifying the token. + The crypto service provider with the asymmetric key to use for encrypting or decrypting the token. + A value indicating whether the data in this instance will be GZip'd. + The maximum age of a token that can be decoded; useful only when is true. + The nonce store to use to ensure that this instance is only decoded once. + + + + Initializes a new instance of the class. + + The crypto key store used when signing or encrypting. + The bucket in which symmetric keys are stored for signing/encrypting data. + A value indicating whether the data in this instance will be protected against tampering. + A value indicating whether the data in this instance will be protected against eavesdropping. + A value indicating whether the data in this instance will be GZip'd. + The minimum age. + The maximum age of a token that can be decoded; useful only when is true. + The nonce store to use to ensure that this instance is only decoded once. + + + + Serializes the instance to a buffer. + + The message. + The buffer containing the serialized data. + + + + Deserializes the instance from a buffer. + + The message instance to initialize with data from the buffer. + The data buffer. + + + + Details on the incoming response from a direct web request to a remote party. + + + + + The encoding to use in reading a response that does not declare its own content encoding. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The original request URI. + The response to initialize from. The network stream is used by this class directly. + + + + Initializes a new instance of the class. + + The request URI. + The final URI to respond to the request. + The headers. + The status code. + Type of the content. + The content encoding. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Creates a text reader for the response stream. + + The text reader, initialized for the proper encoding. + + + + Gets an offline snapshot version of this instance. + + The maximum bytes from the response stream to cache. + A snapshot version of this instance. + + If this instance is a creating a snapshot + will automatically close and dispose of the underlying response stream. + If this instance is a , the result will + be the self same instance. + + + + + Releases unmanaged and - optionally - managed resources + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Gets the type of the content. + + + + + Gets the content encoding. + + + + + Gets the URI of the initial request. + + + + + Gets the URI that finally responded to the request. + + + This can be different from the in cases of + redirection during the request. + + + + + Gets the headers that must be included in the response to the user agent. + + + The headers in this collection are not meant to be a comprehensive list + of exactly what should be sent, but are meant to augment whatever headers + are generally included in a typical response. + + + + + Gets the HTTP status code to use in the HTTP response. + + + + + Gets the body of the HTTP response. + + + + + Cached details on the response from a direct web request to a remote party. + + + + + A seekable, repeatable response stream. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The request URI. + The response. + The maximum bytes to read. + + + + Initializes a new instance of the class. + + The request URI. + The final URI to respond to the request. + The headers. + The status code. + Type of the content. + The content encoding. + The response stream. + + + + Creates a text reader for the response stream. + + The text reader, initialized for the proper encoding. + + + + Gets the body of the response as a string. + + The entire body of the response. + + + + Gets an offline snapshot version of this instance. + + The maximum bytes from the response stream to cache. + A snapshot version of this instance. + + If this instance is a creating a snapshot + will automatically close and dispose of the underlying response stream. + If this instance is a , the result will + be the self same instance. + + + + + Sets the response to some string, encoded as UTF-8. + + The string to set the response to. + + + + Caches the network stream and closes it if it is open. + + The response whose stream is to be cloned. + The maximum bytes to cache. + The seekable Stream instance that contains a copy of what was returned in the HTTP response. + + + + Gets a value indicating whether the cached response stream was + truncated to a maximum allowable length. + + + + + Gets the body of the HTTP response. + + + + + Gets or sets the cached response stream. + + + + + Manages sending direct messages to a remote party and receiving responses. + + + + + The content-type used on HTTP POST requests where the POST entity is a + URL-encoded series of key=value pairs. + + + + + The content-type used for JSON serialized objects. + + + + + The "text/javascript" content-type that some servers return instead of the standard one. + + + + + The content-type for plain text. + + + + + The HTML that should be returned to the user agent as part of a 301 Redirect. + + A string that should be used as the first argument to string.Format, where the {0} should be replaced with the URL to redirect to. + + + + The template for indirect messages that require form POST to forward through the user agent. + + + We are intentionally using " instead of the html single quote ' below because + the HtmlEncode'd values that we inject will only escape the double quote, so + only the double-quote used around these values is safe. + + + + + The encoding to use when writing out POST entity strings. + + + + + A default set of XML dictionary reader quotas that are relatively safe from causing unbounded memory consumption. + + + + + The content-type used on HTTP POST requests where the POST entity is a + URL-encoded series of key=value pairs. + This includes the character encoding. + + + + + A list of binding elements in the order they must be applied to outgoing messages. + + + + + A list of binding elements in the order they must be applied to incoming messages. + + + + + The default cache of message descriptions to use unless they are customized. + + + This is a perf optimization, so that we don't reflect over every message type + every time a channel is constructed. + + + + + A cache of reflected message types that may be sent or received on this channel. + + + + + A tool that can figure out what kind of message is being received + so it can be deserialized. + + + + + Backing store for the property. + + + + + Backing field for the property. + + + + + Initializes a new instance of the class. + + + A class prepared to analyze incoming messages and indicate what concrete + message types can deserialize from it. + + + The binding elements to use in sending and receiving messages. + The order they are provided is used for outgoing messgaes, and reversed for incoming messages. + + + + + Sends an indirect message (either a request or response) + or direct message response for transmission to a remote party + and ends execution on the current page or handler. + + The one-way message to send + Thrown by ASP.NET in order to prevent additional data from the page being sent to the client and corrupting the response. + + Requires an HttpContext.Current context. + + + + + Sends an indirect message (either a request or response) + or direct message response for transmission to a remote party + and skips most of the remaining ASP.NET request handling pipeline. + Not safe to call from ASP.NET web forms. + + The one-way message to send + + Requires an HttpContext.Current context. + This call is not safe to make from an ASP.NET web form (.aspx file or code-behind) because + ASP.NET will render HTML after the protocol message has been sent, which will corrupt the response. + Use the method instead for web forms. + + + + + Prepares an indirect message (either a request or response) + or direct message response for transmission to a remote party. + + The one-way message to send + The pending user agent redirect based message to be sent as an HttpResponse. + + + + Gets the protocol message embedded in the given HTTP request, if present. + + The deserialized message, if one is found. Null otherwise. + + Requires an HttpContext.Current context. + + Thrown when is null. + + + + Gets the protocol message embedded in the given HTTP request, if present. + + The expected type of the message to be received. + The deserialized message, if one is found. Null otherwise. + True if the expected message was recognized and deserialized. False otherwise. + + Requires an HttpContext.Current context. + + Thrown when is null. + Thrown when a request message of an unexpected type is received. + + + + Gets the protocol message embedded in the given HTTP request, if present. + + The expected type of the message to be received. + The request to search for an embedded message. + The deserialized message, if one is found. Null otherwise. + True if the expected message was recognized and deserialized. False otherwise. + Thrown when is null. + Thrown when a request message of an unexpected type is received. + + + + Gets the protocol message embedded in the current HTTP request. + + The expected type of the message to be received. + The deserialized message. Never null. + + Requires an HttpContext.Current context. + + Thrown when is null. + Thrown if the expected message was not recognized in the response. + + + + Gets the protocol message embedded in the given HTTP request. + + The expected type of the message to be received. + The request to search for an embedded message. + The deserialized message. Never null. + Thrown if the expected message was not recognized in the response. + + + + Gets the protocol message that may be embedded in the given HTTP request. + + The request to search for an embedded message. + The deserialized message, if one is found. Null otherwise. + + + + Sends a direct message to a remote party and waits for the response. + + The expected type of the message to be received. + The message to send. + The remote party's response. + + Thrown if no message is recognized in the response + or an unexpected type of message is received. + + + + + Sends a direct message to a remote party and waits for the response. + + The message to send. + The remote party's response. Guaranteed to never be null. + Thrown if the response does not include a protocol message. + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Verifies the integrity and applicability of an incoming message. + + The message just received. + + Thrown when the message is somehow invalid. + This can be due to tampering, replay attack or expiration, among other things. + + + + + Prepares an HTTP request that carries a given message. + + The message to send. + The prepared to send the request. + + This method must be overridden by a derived class, unless the method + is overridden and does not require this method. + + + + + Queues a message for sending in the response stream where the fields + are sent in the response stream in querystring style. + + The message to send as a response. + The pending user agent redirect based message to be sent as an HttpResponse. + + This method implements spec OAuth V1.0 section 5.3. + + + + + Gets the protocol message that may be in the given HTTP response. + + The response that is anticipated to contain an protocol message. + The deserialized message parts, if found. Null otherwise. + Thrown when the response is not valid. + + + + This method should NOT be called by derived types + except when sending ONE WAY request messages. + + + Prepares a message for transmit by applying signatures, nonces, etc. + + The message to prepare for sending. + + + + Gets the HTTP context for the current HTTP request. + + An HttpContextBase instance. + + + + Gets the current HTTP request being processed. + + The HttpRequestInfo for the current request. + + Requires an context. + + Thrown if HttpContext.Current == null. + + + + Checks whether a given HTTP method is expected to include an entity body in its request. + + The HTTP method. + + true if the HTTP method is supposed to have an entity; false otherwise. + + + + Applies message prescribed HTTP response headers to an outgoing web response. + + The message. + The HTTP response. + + + + Releases unmanaged and - optionally - managed resources + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Fires the event. + + The message about to be encoded and sent. + + + + Gets the direct response of a direct HTTP request. + + The web request. + The response to the web request. + Thrown on network or protocol errors. + + + + Submits a direct request message to some remote party and blocks waiting for an immediately reply. + + The request message. + The response message, or null if the response did not carry a message. + + Typically a deriving channel will override to customize this method's + behavior. However in non-HTTP frameworks, such as unit test mocks, it may be appropriate to override + this method to eliminate all use of an HTTP transport. + + + + + Called when receiving a direct response message, before deserialization begins. + + The HTTP direct response. + The newly instantiated message, prior to deserialization. + + + + Gets the protocol message that may be embedded in the given HTTP request. + + The request to search for an embedded message. + The deserialized message, if one is found. Null otherwise. + + + + Deserializes a dictionary of values into a message. + + The dictionary of values that were read from an HTTP request or response. + Information about where the message was directed. Null for direct response messages. + The deserialized message, or null if no message could be recognized in the provided data. + + + + Queues an indirect message for transmittal via the user agent. + + The message to send. + The pending user agent redirect based message to be sent as an HttpResponse. + + + + Encodes an HTTP response that will instruct the user agent to forward a message to + some remote third party using a 301 Redirect GET method. + + The message to forward. + The pre-serialized fields from the message. + if set to true the redirect will contain the message payload in the #fragment portion of the URL rather than the ?querystring. + The encoded HTTP response. + + + + Encodes an HTTP response that will instruct the user agent to forward a message to + some remote third party using a form POST method. + + The message to forward. + The pre-serialized fields from the message. + The encoded HTTP response. + + + + Gets the protocol message that may be in the given HTTP response. + + The response that is anticipated to contain an protocol message. + The deserialized message parts, if found. Null otherwise. + Thrown when the response is not valid. + + + + Prepares an HTTP request that carries a given message. + + The message to send. + The prepared to send the request. + + This method must be overridden by a derived class, unless the method + is overridden and does not require this method. + + + + + Queues a message for sending in the response stream where the fields + are sent in the response stream in querystring style. + + The message to send as a response. + The pending user agent redirect based message to be sent as an HttpResponse. + + This method implements spec OAuth V1.0 section 5.3. + + + + + Serializes the given message as a JSON string. + + The message to serialize. + A JSON string. + + + + Deserializes from flat data from a JSON object. + + A JSON string. + The simple "key":"value" pairs from a JSON-encoded object. + + + + Prepares a message for transmit by applying signatures, nonces, etc. + + The message to prepare for sending. + + This method should NOT be called by derived types + except when sending ONE WAY request messages. + + + + + Prepares to send a request to the Service Provider as the query string in a GET request. + + The message to be transmitted to the ServiceProvider. + The web request ready to send. + + This method is simply a standard HTTP Get request with the message parts serialized to the query string. + This method satisfies OAuth 1.0 section 5.2, item #3. + + + + + Prepares to send a request to the Service Provider as the query string in a HEAD request. + + The message to be transmitted to the ServiceProvider. + The web request ready to send. + + This method is simply a standard HTTP HEAD request with the message parts serialized to the query string. + This method satisfies OAuth 1.0 section 5.2, item #3. + + + + + Prepares to send a request to the Service Provider as the payload of a POST request. + + The message to be transmitted to the ServiceProvider. + The web request ready to send. + + This method is simply a standard HTTP POST request with the message parts serialized to the POST entity + with the application/x-www-form-urlencoded content type + This method satisfies OAuth 1.0 section 5.2, item #2 and OpenID 2.0 section 4.1.2. + + + + + Prepares to send a request to the Service Provider as the query string in a PUT request. + + The message to be transmitted to the ServiceProvider. + The web request ready to send. + + This method is simply a standard HTTP PUT request with the message parts serialized to the query string. + + + + + Prepares to send a request to the Service Provider as the query string in a DELETE request. + + The message to be transmitted to the ServiceProvider. + The web request ready to send. + + This method is simply a standard HTTP DELETE request with the message parts serialized to the query string. + + + + + Sends the given parameters in the entity stream of an HTTP request. + + The HTTP request. + The parameters to send. + + This method calls and closes + the request stream, but does not call . + + + + + Sends the given parameters in the entity stream of an HTTP request in multi-part format. + + The HTTP request. + The parameters to send. + + This method calls and closes + the request stream, but does not call . + + + + + Verifies the integrity and applicability of an incoming message. + + The message just received. + + Thrown when the message is somehow invalid. + This can be due to tampering, replay attack or expiration, among other things. + + + + + Allows preprocessing and validation of message data before an appropriate message type is + selected or deserialized. + + The received message data. + + + + Performs additional processing on an outgoing web request before it is sent to the remote server. + + The request. + + + + Customizes the binding element order for outgoing and incoming messages. + + The outgoing order. + The incoming order. + + No binding elements can be added or removed from the channel using this method. + Only a customized order is allowed. + + Thrown if a binding element is new or missing in one of the ordered lists. + + + + Ensures a consistent and secure set of binding elements and + sorts them as necessary for a valid sequence of operations. + + The binding elements provided to the channel. + The properly ordered list of elements. + Thrown when the binding elements are incomplete or inconsistent with each other. + + + + Puts binding elements in their correct outgoing message processing order. + + The first protection type to compare. + The second protection type to compare. + + -1 if should be applied to an outgoing message before . + 1 if should be applied to an outgoing message before . + 0 if it doesn't matter. + + + + + Verifies that all required message parts are initialized to values + prior to sending the message to a remote party. + + The message to verify. + + Thrown when any required message part does not have a value. + + + + + Determines whether a given ordered list of binding elements includes every + binding element in this channel exactly once. + + The list of binding elements to test. + + true if the given list is a valid description of a binding element ordering; otherwise, false. + + + + + Gets or sets an instance to a that will be used when + submitting HTTP requests and waiting for responses. + + + This defaults to a straightforward implementation, but can be set + to a mock object for testing purposes. + + + + + Gets or sets the maximum allowable size for a 301 Redirect response before we send + a 200 OK response with a scripted form POST with the parameters instead + in order to ensure successfully sending a large payload to another server + that might have a maximum allowable size restriction on its GET request. + + The default value is 2048. + + + + Gets or sets the message descriptions. + + + + + Gets a tool that can figure out what kind of message is being received + so it can be deserialized. + + + + + Gets the binding elements used by this channel, in no particular guaranteed order. + + + + + Gets the binding elements used by this channel, in the order applied to outgoing messages. + + + + + Gets the binding elements used by this channel, in the order applied to incoming messages. + + + + + Gets or sets a value indicating whether this instance is disposed. + + + true if this instance is disposed; otherwise, false. + + + + + Gets or sets a tool that can figure out what kind of message is being received + so it can be deserialized. + + + + + Gets or sets the cache policy to use for direct message requests. + + Default is . + + + + Gets or sets the XML dictionary reader quotas. + + The XML dictionary reader quotas. + + + + An event fired whenever a message is about to be encoded and sent. + + + + + Code contract for the class. + + + + + Prevents a default instance of the ChannelContract class from being created. + + + + + Gets the protocol message that may be in the given HTTP response. + + The response that is anticipated to contain an protocol message. + + The deserialized message parts, if found. Null otherwise. + + Thrown when the response is not valid. + + + + Queues a message for sending in the response stream where the fields + are sent in the response stream in querystring style. + + The message to send as a response. + + The pending user agent redirect based message to be sent as an HttpResponse. + + + This method implements spec V1.0 section 5.3. + + + + + HMAC-SHA algorithm names that can be passed to the method. + + + + + The name of the HMAC-SHA1 algorithm. + + + + + The name of the HMAC-SHA256 algorithm. + + + + + The name of the HMAC-SHA384 algorithm. + + + + + The name of the HMAC-SHA512 algorithm. + + + + + Creates an HMAC-SHA algorithm with the specified name and key. + + A name from the available choices in the static const members of this class. + The secret key used as the HMAC. + The HMAC algorithm instance. + + + + Well known HTTP headers. + + + + + The Authorization header, which specifies the credentials that the client presents in order to authenticate itself to the server. + + + + + The WWW-Authenticate header, which is included in HTTP 401 Unauthorized responses to help the client know which authorization schemes are supported. + + + + + The Content-Type header, which specifies the MIME type of the accompanying body data. + + + + + The interface that classes must implement to be serialized/deserialized + as protocol or extension messages. + + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Gets the version of the protocol or extension this message is prepared to implement. + + + Implementations of this interface should ensure that this property never returns null. + + + + + Gets the extra, non-standard Protocol parameters included in the message. + + + Implementations of this interface should ensure that this property never returns null. + + + + + An interface that allows direct request messages to capture the details of the HTTP request they arrived on. + + + + + Gets the HTTP headers of the request. + + May be an empty collection, but must not be null. + + + + Contract class for the interface. + + + + + An interface that allows indirect response messages to specify + HTTP transport specific properties. + + + + + Gets a value indicating whether the payload for the message should be included + in the redirect fragment instead of the query string or POST entity. + + + + + An interface that appears on messages that need to retain a description of + what their literal payload was when they were deserialized. + + + + + Gets or sets the original message parts, before any normalization or default values were assigned. + + + + + Code contract for the interface. + + + + + A set of flags that can control the behavior of an individual web request. + + + + + Indicates that default behavior is required. + + + + + Indicates that any response from the remote server, even those + with HTTP status codes that indicate errors, should not result + in a thrown exception. + + + Even with this flag set, should + be thrown when an HTTP protocol error occurs (i.e. timeouts). + + + + + Indicates that the HTTP request must be completed entirely + using SSL (including any redirects). + + + + + Extension methods for types. + + + + + A wrapper for types and returns a caching + from its method. + + The type of element in the sequence. + + + + An enumerator that uses cached enumeration results whenever they are available, + and caches whatever results it has to pull from the original object. + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Advances the enumerator to the next element of the collection. + + + true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, which is before the first element in the collection. + + + The collection was modified after the enumerator was created. + + + + + Releases unmanaged and - optionally - managed resources + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Gets the element in the collection at the current position of the enumerator. + + + The element in the collection at the current position of the enumerator. + + + + + Initializes a new instance of the EnumerableCache class. + + The generator. + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + + + + Caches the results of enumerating over a given object so that subsequence enumerations + don't require interacting with the object a second time. + + The type of element found in the enumeration. + The enumerable object. + + Either a new enumerable object that caches enumerated results, or the original, + object if no caching is necessary to avoid additional CPU work. + + + This is designed for use on the results of generator methods (the ones with yield return in them) + so that only those elements in the sequence that are needed are ever generated, while not requiring + regeneration of elements that are enumerated over multiple times. + This can be a huge performance gain if enumerating multiple times over an expensive generator method. + Some enumerable types such as collections, lists, and already-cached generators do not require + any (additional) caching, and this method will simply return those objects rather than caching them + to avoid double-caching. + + + + + An exception to call out a configuration or runtime failure on the part of the + (web) application that is hosting this library. + + + This exception is used rather than for those errors + that should never be caught because they indicate a major error in the app itself + or its configuration. + It is an internal exception to assist in making it uncatchable. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message. + + + + Initializes a new instance of the class. + + The message. + The inner exception. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + The parameter is null. + + + The class name is null or is zero (0). + + + + + An interface that allows direct response messages to specify + HTTP transport specific properties. + + + + + Gets the HTTP status code that the direct response should be sent with. + + + + + Gets the HTTP headers to add to the response. + + May be an empty collection, but must not be null. + + + + An interface that extension messages must implement. + + + + + Contract class for the interface. + + + + + Code contract for the interface. + + + + + Prevents a default instance of the class from being created. + + + + + The interface that classes must implement to be serialized/deserialized + as protocol messages. + + + + + Gets the level of protection this message requires. + + + + + Gets a value indicating whether this is a direct or indirect message. + + + + + Undirected messages that serve as direct responses to direct requests. + + + + + Gets the originating request message that caused this response to be formed. + + + + + An empty dictionary. Useful for avoiding memory allocations in creating new dictionaries to represent empty ones. + + The type of the key. + The type of the value. + + + + The singleton instance of the empty dictionary. + + + + + Prevents a default instance of the EmptyDictionary class from being created. + + + + + Adds an element with the provided key and value to the . + + The object to use as the key of the element to add. + The object to use as the value of the element to add. + + is null. + + + An element with the same key already exists in the . + + + The is read-only. + + + + + Determines whether the contains an element with the specified key. + + The key to locate in the . + + true if the contains an element with the key; otherwise, false. + + + is null. + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the original . + + + is null. + + + The is read-only. + + + + + Gets the value associated with the specified key. + + The key whose value to get. + When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. + + true if the object that implements contains an element with the specified key; otherwise, false. + + + is null. + + + + + Adds an item to the . + + The object to add to the . + + The is read-only. + + + + + Removes all items from the . + + + The is read-only. + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in at which copying begins. + + is null. + + + is less than 0. + + + is multidimensional. + -or- + is equal to or greater than the length of . + -or- + The number of elements in the source is greater than the available space from to the end of the destination . + -or- + Type cannot be cast automatically to the type of the destination . + + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + The is read-only. + + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets an containing the values in the . + + + + + An containing the values in the object that implements . + + + + + Gets the number of elements contained in the . + + + + + The number of elements contained in the . + + + + + Gets a value indicating whether the is read-only. + + + + true if the is read-only; otherwise, false. + + + + + Gets an containing the keys of the . + + + + + An containing the keys of the object that implements . + + + + + Gets or sets the value with the specified key. + + The key being read or written. + Nothing. It always throws. + + + + An enumerator that always generates zero elements. + + + + + The singleton instance of this empty enumerator. + + + + + Prevents a default instance of the class from being created. + + + + + Advances the enumerator to the next element of the collection. + + + true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, which is before the first element in the collection. + + + The collection was modified after the enumerator was created. + + + + + Gets the current element in the collection. + + + + + The current element in the collection. + + + The enumerator is positioned before the first element of the collection or after the last element. + + + + + An empty, read-only list. + + The type the list claims to include. + + + + The singleton instance of the empty list. + + + + + Prevents a default instance of the EmptyList class from being created. + + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + + + The is read-only. + + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + + + The is read-only. + + + + + Adds an item to the . + + The object to add to the . + + The is read-only. + + + + + Removes all items from the . + + + The is read-only. + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in at which copying begins. + + is null. + + + is less than 0. + + + is multidimensional. + -or- + is equal to or greater than the length of . + -or- + The number of elements in the source is greater than the available space from to the end of the destination . + -or- + Type cannot be cast automatically to the type of the destination . + + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + The is read-only. + + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets the number of elements contained in the . + + + + + The number of elements contained in the . + + + + + Gets a value indicating whether the is read-only. + + + + true if the is read-only; otherwise, false. + + + + + Gets or sets the at the specified index. + + The index of the element in the list to change. + Nothing. It always throws. + + + + A collection of error checking and reporting methods. + + + + + Wraps an exception in a new . + + The inner exception to wrap. + The error message for the outer exception. + The string formatting arguments, if any. + The newly constructed (unthrown) exception. + + + + Throws an internal error exception. + + The error message. + Nothing. But included here so callers can "throw" this method for C# safety. + Always thrown. + + + + Checks a condition and throws an internal error exception if it evaluates to false. + + The condition to check. + The message to include in the exception, if created. + Thrown if evaluates to false. + + + + Checks a condition and throws an internal error exception if it evaluates to false. + + The condition to check. + The message to include in the exception, if created. + The formatting arguments. + Thrown if evaluates to false. + + + + Checks a condition and throws an if it evaluates to false. + + The condition to check. + The message to include in the exception, if created. + Thrown if evaluates to false. + + + + Checks a condition and throws a if it evaluates to false. + + The condition to check. + The message to include in the exception, if created. + Thrown if evaluates to false. + + + + Checks a condition and throws a if it evaluates to false. + + The condition to check. + The message to include in the exception, if created. + The string formatting arguments for . + Thrown if evaluates to false. + + + + Checks a condition and throws an if it evaluates to false. + + The condition to check. + The message to include in the exception, if created. + The formatting arguments. + Thrown if evaluates to false. + + + + Throws a if some evaluates to false. + + True to do nothing; false to throw the exception. + The error message for the exception. + The string formatting arguments, if any. + Thrown if evaluates to false. + + + + Throws a if some evaluates to false. + + True to do nothing; false to throw the exception. + The message being processed that would be responsible for the exception if thrown. + The error message for the exception. + The string formatting arguments, if any. + Thrown if evaluates to false. + + + + Throws a if some evaluates to false. + + True to do nothing; false to throw the exception. + The error message for the exception. + The string formatting arguments, if any. + Thrown if evaluates to false. + + + + Throws a . + + The message to set in the exception. + The formatting arguments of the message. + + An InternalErrorException, which may be "thrown" by the caller in order + to satisfy C# rules to show that code will never be reached, but no value + actually is ever returned because this method guarantees to throw. + + Always thrown. + + + + Throws a . + + The message for the exception. + The string formatting arguments for . + Nothing. It's just here so the caller can throw this method for C# compilation check. + + + + Throws a if some condition is false. + + The expression to evaluate. A value of false will cause the exception to be thrown. + The message for the exception. + The string formatting arguments for . + Thrown when is false. + + + + Verifies something about the argument supplied to a method. + + The condition that must evaluate to true to avoid an exception. + The message to use in the exception if the condition is false. + The string formatting arguments, if any. + Thrown if evaluates to false. + + + + Throws an . + + Name of the parameter. + The message to use in the exception if the condition is false. + The string formatting arguments, if any. + Never returns anything. It always throws. + + + + Verifies something about the argument supplied to a method. + + The condition that must evaluate to true to avoid an exception. + Name of the parameter. + The message to use in the exception if the condition is false. + The string formatting arguments, if any. + Thrown if evaluates to false. + + + + Verifies that some given value is not null. + + The value to check. + Name of the parameter, which will be used in the , if thrown. + Thrown if is null. + + + + Verifies that some string is not null and has non-zero length. + + The value to check. + Name of the parameter, which will be used in the , if thrown. + Thrown if is null. + Thrown if has zero length. + + + + Verifies that != null. + + Thrown if == null + + + + Obtains a value from the dictionary if possible, or throws a if it's missing. + + The type of key in the dictionary. + The type of value in the dictionary. + The dictionary. + The key to use to look up the value. + The message to claim is invalid if the key cannot be found. + The value for the given key. + + + + An interface that messages wishing to perform custom serialization/deserialization + may implement to be notified of events. + + + + + Called when the message is about to be transmitted, + before it passes through the channel binding elements. + + + + + Called when the message has been received, + after it passes through the channel binding elements. + + + + + Code contract for the class. + + + + + Creates a text reader for the response stream. + + + The text reader, initialized for the proper encoding. + + + + + Gets an offline snapshot version of this instance. + + The maximum bytes from the response stream to cache. + A snapshot version of this instance. + + If this instance is a creating a snapshot + will automatically close and dispose of the underlying response stream. + If this instance is a , the result will + be the self same instance. + + + + + Gets the body of the HTTP response. + + + + + + + A protocol message that supports adding extensions to the payload for transmission. + + + + + Gets the list of extensions that are included with this message. + + + Implementations of this interface should ensure that this property never returns null. + + + + + Code contract for the interface. + + + + + Prevents a default instance of the class from being created. + + + + + An internal exception to throw if an internal error within the library requires + an abort of the operation. + + + This exception is internal to prevent clients of the library from catching what is + really an unexpected, potentially unrecoverable exception. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message. + + + + Initializes a new instance of the class. + + The message. + The inner exception. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + The parameter is null. + + + The class name is null or is zero (0). + + + + + An interface implemented by -derived types that support binary serialization. + + + + + Serializes the instance to the specified stream. + + The stream. + + + + Initializes the fields on this instance from the specified stream. + + The stream. + + + + Code Contract for the interface. + + + + + A KeyedCollection whose item -> key transform is provided via a delegate + to its constructor, and null items are disallowed. + + The type of the key. + The type of the item. + + + + The delegate that returns a key for the given item. + + + + + Initializes a new instance of the KeyedCollectionDelegate class. + + The delegate that gets the key for a given item. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Represents a single part in a HTTP multipart POST request. + + + + + The "Content-Disposition" string. + + + + + The two-character \r\n newline character sequence to use. + + + + + Initializes a new instance of the class. + + The content disposition of the part. + + + + Creates a part that represents a simple form field. + + The name of the form field. + The value. + The constructed part. + + + + Creates a part that represents a file attachment. + + The name of the form field. + The path to the file to send. + Type of the content in HTTP Content-Type format. + The constructed part. + + + + Creates a part that represents a file attachment. + + The name of the form field. + Name of the file as the server should see it. + Type of the content in HTTP Content-Type format. + The content of the file. + The constructed part. + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Serializes the part to a stream. + + The stream writer. + + + + Releases unmanaged and - optionally - managed resources + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Gets or sets the content disposition. + + The content disposition. + + + + Gets the key=value attributes that appear on the same line as the Content-Disposition. + + The content attributes. + + + + Gets the headers that appear on subsequent lines after the Content-Disposition. + + + + + Gets or sets the content of the part. + + + + + Gets the length of this entire part. + + Useful for calculating the ContentLength HTTP header to send before actually serializing the content. + + + + A live network HTTP response + + + + + The network response object, used to initialize this instance, that still needs + to be closed if applicable. + + + + + The incoming network response stream. + + + + + A value indicating whether a stream reader has already been + created on this instance. + + + + + Initializes a new instance of the class. + + The request URI. + The response. + + + + Creates a text reader for the response stream. + + The text reader, initialized for the proper encoding. + + + + Gets an offline snapshot version of this instance. + + The maximum bytes from the response stream to cache. + A snapshot version of this instance. + + If this instance is a creating a snapshot + will automatically close and dispose of the underlying response stream. + If this instance is a , the result will + be the self same instance. + + + + + Releases unmanaged and - optionally - managed resources + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Gets the body of the HTTP response. + + + + + An ASP.NET MVC structure to represent the response to send + to the user agent when the controller has finished its work. + + + + + The outgoing web response to send when the ActionResult is executed. + + + + + Initializes a new instance of the class. + + The response. + + + + Enables processing of the result of an action method by a custom type that inherits from . + + The context in which to set the response. + + + + An exception to represent errors in the local or remote implementation of the protocol. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + A message describing the specific error the occurred or was detected. + + + + Initializes a new instance of the class. + + A message describing the specific error the occurred or was detected. + The inner exception to include. + + + + Initializes a new instance of the class + such that it can be sent as a protocol message response to a remote caller. + + The human-readable exception message. + The message that was the cause of the exception. May be null. + The inner exception to include. + + + + Initializes a new instance of the class. + + The + that holds the serialized object data about the exception being thrown. + The System.Runtime.Serialization.StreamingContext + that contains contextual information about the source or destination. + + + + Gets the message that caused the exception. + + + + + An exception to represent errors in the local or remote implementation of the protocol + that includes the response message that should be returned to the HTTP client to comply + with the protocol specification. + + + + + The channel that produced the error response message, to be used in constructing the actual HTTP response. + + + + + Initializes a new instance of the class + such that it can be sent as a protocol message response to a remote caller. + + The channel to use when encoding the response message. + The message to send back to the HTTP client. + The message that was the cause of the exception. May be null. + The inner exception. + The message for the exception. + + + + Initializes a new instance of the class. + + The + that holds the serialized object data about the exception being thrown. + The System.Runtime.Serialization.StreamingContext + that contains contextual information about the source or destination. + + + + Creates the HTTP response to forward to the client to report the error. + + The HTTP response. + + + + Gets the protocol message to send back to the client to report the error. + + + + + Code contract for the type. + + + + + Initializes a new instance of the class. + + + + + An interface describing how various objects can be serialized and deserialized between their object and string forms. + + + Implementations of this interface must include a default constructor and must be thread-safe. + + + + + Gets the type of the encoded values produced by this encoder, as they would appear in their preferred form. + + + + + A message part encoder that has a special encoding for a null value. + + + + + Gets the string representation to include in a serialized message + when the message part has a null value. + + + + + An interface describing how various objects can be serialized and deserialized between their object and string forms. + + + Implementations of this interface must include a default constructor and must be thread-safe. + + + + + Encodes the specified value as the original value that was formerly decoded. + + The value. Guaranteed to never be null. + The in string form, ready for message transport. + + + + A cache of instances. + + + + + A struct used as the key to bundle message type and version. + + + + + Initializes a new instance of the struct. + + Type of the message. + The message version. + + + + Implements the operator ==. + + The first object to compare. + The second object to compare. + The result of the operator. + + + + Implements the operator !=. + + The first object to compare. + The second object to compare. + The result of the operator. + + + + Indicates whether this instance and a specified object are equal. + + Another object to compare to. + + true if and this instance are the same type and represent the same value; otherwise, false. + + + + + Returns the hash code for this instance. + + + A 32-bit signed integer that is the hash code for this instance. + + + + + Gets the message type. + + + + + Gets the message version. + + + + + A dictionary of reflected message types and the generated reflection information. + + + + + Initializes a new instance of the class. + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Gets a instance prepared for the + given message type. + + A type that implements . + The protocol version of the message. + A instance. + + + + Gets a instance prepared for the + given message type. + + The message for which a should be obtained. + + A instance. + + + + + Gets the dictionary that provides read/write access to a message. + + The message. + The dictionary. + + + + Gets the dictionary that provides read/write access to a message. + + The message. + A value indicating whether this message dictionary will retrieve original values instead of normalized ones. + The dictionary. + + + + Allows a custom class or struct to be serializable between itself and a string representation. + + + + + Initializes a new instance of the class. + + The implementing type to use for serializing this type. + + + + Gets the default encoder to use for the declaring class. + + + + + A tool to analyze an incoming message to figure out what concrete class + is designed to deserialize it and instantiates that class. + + + + + Analyzes an incoming request message payload to discover what kind of + message is embedded in it and returns the type, or null if no match is found. + + The intended or actual recipient of the request message. + The name/value pairs that make up the message payload. + + A newly instantiated -derived object that this message can + deserialize to. Null if the request isn't recognized as a valid protocol message. + + + + + Analyzes an incoming request message payload to discover what kind of + message is embedded in it and returns the type, or null if no match is found. + + + The message that was sent as a request that resulted in the response. + + The name/value pairs that make up the message payload. + + A newly instantiated -derived object that this message can + deserialize to. Null if the request isn't recognized as a valid protocol message. + + + + + A message factory that automatically selects the message type based on the incoming data. + + + + + The request message types and their constructors to use for instantiating the messages. + + + + + The response message types and their constructors to use for instantiating the messages. + + + The value is a dictionary, whose key is the type of the constructor's lone parameter. + + + + + Initializes a new instance of the class. + + + + + Adds message types to the set that this factory can create. + + The message types that this factory may instantiate. + + + + Analyzes an incoming request message payload to discover what kind of + message is embedded in it and returns the type, or null if no match is found. + + The intended or actual recipient of the request message. + The name/value pairs that make up the message payload. + + A newly instantiated -derived object that this message can + deserialize to. Null if the request isn't recognized as a valid protocol message. + + + + + Analyzes an incoming request message payload to discover what kind of + message is embedded in it and returns the type, or null if no match is found. + + The message that was sent as a request that resulted in the response. + The name/value pairs that make up the message payload. + + A newly instantiated -derived object that this message can + deserialize to. Null if the request isn't recognized as a valid protocol message. + + + + + Gets the message type that best fits the given incoming request data. + + The recipient of the incoming data. Typically not used, but included just in case. + The data of the incoming message. + + The message type that matches the incoming data; or null if no match. + + May be thrown if the incoming data is ambiguous. + + + + Gets the message type that best fits the given incoming direct response data. + + The request message that prompted the response data. + The data of the incoming message. + + The message type that matches the incoming data; or null if no match. + + May be thrown if the incoming data is ambiguous. + + + + Instantiates the given request message type. + + The message description. + The recipient. + The instantiated message. Never null. + + + + Instantiates the given request message type. + + The message description. + The request that resulted in this response. + The instantiated message. Never null. + + + + Gets the hierarchical distance between a type and a type it derives from or implements. + + The base type or interface. + The concrete class that implements the . + The distance between the two types. 0 if the types are equivalent, 1 if the type immediately derives from or implements the base type, or progressively higher integers. + + + + Counts how many strings are in the intersection of two collections. + + The first collection. + The second collection. + The string comparison method to use. + A non-negative integer no greater than the count of elements in the smallest collection. + + + + Finds constructors for response messages that take a given request message type. + + The message description. + Type of the request message. + A sequence of matching constructors. + + + + Contract class for the IDataBagFormatter interface. + + The type of DataBag to serialize. + + + + Prevents a default instance of the class from being created. + + + + + A serializer for -derived types + + The DataBag-derived type that is to be serialized/deserialized. + + + + Initializes a new instance of the class. + + The crypto service provider with the asymmetric key to use for signing or verifying the token. + The crypto service provider with the asymmetric key to use for encrypting or decrypting the token. + A value indicating whether the data in this instance will be GZip'd. + The maximum age of a token that can be decoded; useful only when is true. + The nonce store to use to ensure that this instance is only decoded once. + + + + Initializes a new instance of the class. + + The crypto key store used when signing or encrypting. + The bucket in which symmetric keys are stored for signing/encrypting data. + A value indicating whether the data in this instance will be protected against tampering. + A value indicating whether the data in this instance will be protected against eavesdropping. + A value indicating whether the data in this instance will be GZip'd. + The minimum age. + The maximum age of a token that can be decoded; useful only when is true. + The nonce store to use to ensure that this instance is only decoded once. + + + + Serializes the instance to a buffer. + + The message. + The buffer containing the serialized data. + + + + Deserializes the instance from a buffer. + + The message instance to initialize with data from the buffer. + The data buffer. + + + + A channel that uses the standard message factory. + + + + + The message types receivable by this channel. + + + + + The protocol versions supported by this channel. + + + + + Initializes a new instance of the class. + + The message types that might be encountered. + All the possible message versions that might be encountered. + + The binding elements to use in sending and receiving messages. + The order they are provided is used for outgoing messgaes, and reversed for incoming messages. + + + + + Generates all the message descriptions for a given set of message types and versions. + + The message types. + The message versions. + The cache to use when obtaining the message descriptions. + The generated/retrieved message descriptions. + + + + Gets or sets a tool that can figure out what kind of message is being received + so it can be deserialized. + + + + + Gets or sets the message descriptions. + + + + + Gets or sets a tool that can figure out what kind of message is being received + so it can be deserialized. + + + + + A collection of message parts that will be serialized into a single string, + to be set into a larger message. + + + + + The default version for DataBags. + + + + + The backing field for the property. + + + + + A dictionary to contain extra message data. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The DataBag version. + + + + Checks the message state for conformity to the protocol specification + and throws an exception if the message is invalid. + + + Some messages have required fields, or combinations of fields that must relate to each other + in specialized ways. After deserializing a message, this method checks the state of the + message to see if it conforms to the protocol. + Note that this property should not check signatures or perform any state checks + outside this scope of this particular message. + + Thrown if the message is invalid. + + + + Gets the extra, non-standard Protocol parameters included in the message. + + + + + Implementations of this interface should ensure that this property never returns null. + + + + + Gets or sets the nonce. + + The nonce. + + + + Gets or sets the UTC creation date of this token. + + The UTC creation date. + + + + Gets or sets the signature. + + The signature. + + + + Gets or sets the message that delivered this DataBag instance to this host. + + + + + Gets the type of this instance. + + The type of the bag. + + This ensures that one token cannot be misused as another kind of token. + + + + + Translates between a and the number of seconds between it and 1/1/1970 12 AM + + + + + The reference date and time for calculating time stamps. + + + + + Initializes a new instance of the class. + + + + + Encodes the specified value. + + The value. Guaranteed to never be null. + + The in string form, ready for message transport. + + + + + Decodes the specified value. + + The string value carried by the transport. Guaranteed to never be null, although it may be empty. + + The deserialized form of the given string. + + Thrown when the string value given cannot be decoded into the required object type. + + + + Implemented by messages that have explicit recipients + (direct requests and all indirect messages). + + + + + Gets the preferred method of transport for the message. + + + For indirect messages this will likely be GET+POST, which both can be simulated in the user agent: + the GET with a simple 301 Redirect, and the POST with an HTML form in the response with javascript + to automate submission. + + + + + Gets the URL of the intended receiver of this message. + + + + + The interface that classes must implement to be serialized/deserialized + as protocol or extension messages that uses POST multi-part data for binary content. + + + + + Gets the parts of the message that carry binary data. + + A list of parts. Never null. + + + + Gets a value indicating whether this message should be sent as multi-part POST. + + + + + The contract class for the interface. + + + + + Prevents a default instance of the class from being created. + + + + + The data packet sent with Channel events. + + + + + Initializes a new instance of the class. + + The message behind the fired event.. + + + + Gets the message that caused the event to fire. + + + + + Describes the contract a nonce store must fulfill. + + + + + Stores a given nonce and timestamp. + + The context, or namespace, within which the + must be unique. + The context SHOULD be treated as case-sensitive. + The value will never be null but may be the empty string. + A series of random characters. + The UTC timestamp that together with the nonce string make it unique + within the given . + The timestamp may also be used by the data store to clear out old nonces. + + True if the context+nonce+timestamp (combination) was not previously in the database. + False if the nonce was stored previously with the same timestamp and context. + + + The nonce must be stored for no less than the maximum time window a message may + be processed within before being discarded as an expired message. + This maximum message age can be looked up via the + + property, accessible via the + property. + + + + + An in-memory nonce store. Useful for single-server web applications. + NOT for web farms. + + + + + How frequently we should take time to clear out old nonces. + + + + + The maximum age a message can be before it is discarded. + + + This is useful for knowing how long used nonces must be retained. + + + + + A list of the consumed nonces. + + + + + A lock object used around accesses to the field. + + + + + Where we're currently at in our periodic nonce cleaning cycle. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The maximum age a message can be before it is discarded. + + + + Stores a given nonce and timestamp. + + The context, or namespace, within which the must be unique. + A series of random characters. + The timestamp that together with the nonce string make it unique. + The timestamp may also be used by the data store to clear out old nonces. + + True if the nonce+timestamp (combination) was not previously in the database. + False if the nonce was stored previously with the same timestamp. + + + The nonce must be stored for no less than the maximum time window a message may + be processed within before being discarded as an expired message. + If the binding element is applicable to your channel, this expiration window + is retrieved or set using the + property. + + + + + Clears consumed nonces from the cache that are so old they would be + rejected if replayed because it is expired. + + + + + A contract for handling. + + + Implementations of this interface must be thread safe. + + + + + Determines whether this instance can support the specified options. + + The set of options that might be given in a subsequent web request. + + true if this instance can support the specified options; otherwise, false. + + + + + Prepares an that contains an POST entity for sending the entity. + + The that should contain the entity. + + The stream the caller should write out the entity data to. + + Thrown for any network error. + + The caller should have set the + and any other appropriate properties before calling this method. + Callers must close and dispose of the request stream when they are done + writing to it to avoid taking up the connection too long and causing long waits on + subsequent requests. + Implementations should catch and wrap it in a + to abstract away the transport and provide + a single exception type for hosts to catch. + + + + + Prepares an that contains an POST entity for sending the entity. + + The that should contain the entity. + The options to apply to this web request. + + The stream the caller should write out the entity data to. + + Thrown for any network error. + + The caller should have set the + and any other appropriate properties before calling this method. + Callers must close and dispose of the request stream when they are done + writing to it to avoid taking up the connection too long and causing long waits on + subsequent requests. + Implementations should catch and wrap it in a + to abstract away the transport and provide + a single exception type for hosts to catch. + + + + + Processes an and converts the + to a instance. + + The to handle. + An instance of describing the response. + Thrown for any network error. + + Implementations should catch and wrap it in a + to abstract away the transport and provide + a single exception type for hosts to catch. The + value, if set, should be Closed before throwing. + + + + + Processes an and converts the + to a instance. + + The to handle. + The options to apply to this web request. + An instance of describing the response. + Thrown for any network error. + + Implementations should catch and wrap it in a + to abstract away the transport and provide + a single exception type for hosts to catch. The + value, if set, should be Closed before throwing. + + + + + Code contract for the type. + + + + + An interface that must be implemented by message transforms/validators in order + to be included in the channel stack. + + + + + Prepares a message for sending based on the rules of this channel binding element. + + The message to prepare for sending. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Performs any transformation on an incoming message that may be necessary and/or + validates an incoming message based on the rules of this channel binding element. + + The incoming message to process. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + Thrown when the binding element rules indicate that this message is invalid and should + NOT be processed. + + + Implementations that provide message protection must honor the + properties where applicable. + + + + + Gets or sets the channel that this binding element belongs to. + + + This property is set by the channel when it is first constructed. + + + + + Gets the protection commonly offered (if any) by this binding element. + + + This value is used to assist in sorting binding elements in the channel stack. + + + + + A binding element that checks/verifies a nonce message part. + + + + + These are the characters that may be chosen from when forming a random nonce. + + + + + The persistent store for nonces received. + + + + + The length of generated nonces. + + + + + Initializes a new instance of the class. + + The store where nonces will be persisted and checked. + + + + Initializes a new instance of the class. + + The store where nonces will be persisted and checked. + A value indicating whether zero-length nonces will be allowed. + + + + Applies a nonce to the message. + + The message to apply replay protection to. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + + + Verifies that the nonce in an incoming message has not been seen before. + + The incoming message. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + Thrown when the nonce check revealed a replayed message. + + + + Generates a string of random characters for use as a nonce. + + The nonce string. + + + + Gets the protection that this binding element provides messages. + + + + + Gets or sets the channel that this binding element belongs to. + + + + + Gets or sets the strength of the nonce, which is measured by the number of + nonces that could theoretically be generated. + + + The strength of the nonce is equal to the number of characters that might appear + in the nonce to the power of the length of the nonce. + + + + + Gets or sets a value indicating whether empty nonces are allowed. + + Default is false. + + + + Applied to fields and properties that form a key/value in a protocol message. + + + + + The overridden name to use as the serialized name for the property. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + A special name to give the value of this member in the serialized message. + When null or empty, the name of the member will be used in the serialized message. + + + + + Gets the name of the serialized form of this member in the message. + + + + + Gets or sets the level of protection required by this member in the serialized message. + + + Message part protection must be provided and verified by the channel binding element(s) + that provide security. + + + + + Gets or sets a value indicating whether this member is a required part of the serialized message. + + + + + Gets or sets a value indicating whether the string value is allowed to be empty in the serialized message. + + Default is true. + + + + Gets or sets an IMessagePartEncoder custom encoder to use + to translate the applied member to and from a string. + + + + + Gets or sets the minimum version of the protocol this attribute applies to + and overrides any attributes with lower values for this property. + + Defaults to 0.0. + + + + Gets or sets the maximum version of the protocol this attribute applies to. + + Defaults to int.MaxValue for the major version number. + + Specifying on another attribute on the same member + automatically turns this attribute off. This property should only be set when + a property is totally dropped from a newer version of the protocol. + + + + + Gets or sets a value indicating whether the value contained by this property contains + sensitive information that should generally not be logged. + + + true if this instance is security sensitive; otherwise, false. + + + + + Gets or sets the minimum version of the protocol this attribute applies to + and overrides any attributes with lower values for this property. + + Defaults to 0.0. + + + + Gets or sets the maximum version of the protocol this attribute applies to. + + Defaults to int.MaxValue for the major version number. + + Specifying on another attribute on the same member + automatically turns this attribute off. This property should only be set when + a property is totally dropped from a newer version of the protocol. + + + + + Categorizes the various types of channel binding elements so they can be properly ordered. + + + The order of these enum values is significant. + Each successive value requires the protection offered by all the previous values + in order to be reliable. For example, message expiration is meaningless without + tamper protection to prevent a user from changing the timestamp on a message. + + + + + No protection. + + + + + A binding element that signs a message before sending and validates its signature upon receiving. + + + + + A binding element that enforces a maximum message age between sending and processing on the receiving side. + + + + + A binding element that prepares messages for replay detection and detects replayed messages on the receiving side. + + + + + All forms of protection together. + + + + + Code Contract for the interface. + + + + + Prevents a default instance of the class from being created. + + + + + An exception thrown when a message is received for the second time, signalling a possible + replay attack. + + + + + Initializes a new instance of the class. + + The replayed message. + + + + Initializes a new instance of the class. + + The + that holds the serialized object data about the exception being thrown. + The System.Runtime.Serialization.StreamingContext + that contains contextual information about the source or destination. + + + + An exception thrown when a message is received that exceeds the maximum message age limit. + + + + + Initializes a new instance of the class. + + The date the message expired. + The expired message. + + + + Initializes a new instance of the class. + + The + that holds the serialized object data about the exception being thrown. + The System.Runtime.Serialization.StreamingContext + that contains contextual information about the source or destination. + + + + An exception thrown when a signed message does not pass signature validation. + + + + + Initializes a new instance of the class. + + The message with the invalid signature. + + + + Initializes a new instance of the class. + + The + that holds the serialized object data about the exception being thrown. + The System.Runtime.Serialization.StreamingContext + that contains contextual information about the source or destination. + + + + The contract a message that has an allowable time window for processing must implement. + + + All expiring messages must also be signed to prevent tampering with the creation date. + + + + + Gets or sets the UTC date/time the message was originally sent onto the network. + + + The property setter should ensure a UTC date/time, + and throw an exception if this is not possible. + + + Thrown when a DateTime that cannot be converted to UTC is set. + + + + + The contract a message that has an allowable time window for processing must implement. + + + All replay-protected messages must also be set to expire so the nonces do not have + to be stored indefinitely. + + + + + Gets the context within which the nonce must be unique. + + + The value of this property must be a value assigned by the nonce consumer + to represent the entity that generated the nonce. The value must never be + null but may be the empty string. + This value is treated as case-sensitive. + + + + + Gets or sets the nonce that will protect the message from replay attacks. + + + + + A property store of details of an incoming HTTP request. + + + This serves a very similar purpose to , except that + ASP.NET does not let us fully initialize that class, so we have to write one + of our one. + + + + + The HTTP verb in the request. + + + + + The full request URL. + + + + + The HTTP headers. + + + + + The variables defined in the query part of the URL. + + + + + The POSTed form variables. + + + + + The server variables collection. + + + + + The backing field for the property. + + + + + Initializes a new instance of the class. + + The request. + The request URI. + + + + Initializes a new instance of the class. + + The HTTP method. + The request URI. + The form variables. + The HTTP headers. + The cookies in the request. + + + + Initializes a new instance of the class. + + Details on the incoming HTTP request. + + + + Initializes a new instance of the class. + + The request. + + + + Initializes a new instance of the class. + + The HTTP method. + The request URI. + The headers. + The input stream. + + + + Creates an instance that describes the specified HTTP request. + + The request. + The request URI. + An instance of . + + + + Creates an instance that describes the specified HTTP request. + + The listener request. + An instance of . + + + + Creates an instance that describes the specified HTTP request. + + The HTTP request. + An instance of . + + + + Creates an instance that describes the specified HTTP request. + + The HTTP method. + The request URI. + The form variables. + The HTTP headers. + An instance of . + + + + Creates an instance that describes the specified HTTP request. + + The HTTP method. + The request URI. + The headers. + The input stream. + An instance of . + + + + Reads name=value pairs from the POSTed form entity when the HTTP headers indicate that that is the payload of the entity. + + The HTTP method. + The headers. + A function that returns the input stream. + The non-null collection of form variables. + + + + Adds HTTP headers to a . + + The collection to be modified with added entries. + The collection to read from. + + + + Gets the HTTP method. + + + + + Gets the headers. + + + + + Gets the URL. + + + + + Gets the raw URL. + + + + + Gets the form. + + + + + Gets the query string. + + + + + Gets the server variables. + + + + + Gets the collection of cookies that were sent by the client. + + The client's cookies. + + + + Code contract for the interface. + + + + + Prevents a default instance of the class from being created. + + + + + The contract a message that is signed must implement. + + + This type might have appeared in the DotNetOpenAuth.Messaging.Bindings namespace since + it is only used by types in that namespace, but all those types are internal and this + is the only one that was public. + + + + + Gets or sets the message signature. + + + + + Serializes/deserializes OAuth messages for/from transit. + + + + + The specific -derived type + that will be serialized and deserialized using this class. + + + + + Initializes a new instance of the MessageSerializer class. + + The specific -derived type + that will be serialized and deserialized using this class. + + + + Creates or reuses a message serializer for a given message type. + + The type of message that will be serialized/deserialized. + A message serializer for the given message type. + + + + Reads JSON as a flat dictionary into a message. + + The message dictionary to fill with the JSON-deserialized data. + The JSON reader. + + + + Reads the data from a message instance and writes an XML/JSON encoding of it. + + The message to be serialized. + The writer to use for the serialized form. + + Use + to create the instance capable of emitting JSON. + + + + + Reads XML/JSON into a message dictionary. + + The message to deserialize into. + The XML/JSON to read into the message. + Thrown when protocol rules are broken by the incoming message. + + Use + to create the instance capable of reading JSON. + + + + + Reads the data from a message instance and returns a series of name=value pairs for the fields that must be included in the message. + + The message to be serialized. + The dictionary of values to send for the message. + + + + Reads name=value pairs into a message. + + The name=value pairs that were read in from the transport. + The message to deserialize into. + Thrown when protocol rules are broken by the incoming message. + + + + Determines whether the specified type is numeric. + + The type to test. + + true if the specified type is numeric; otherwise, false. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Argument's {0}.{1} property is required but is empty or null.. + + + + + Looks up a localized string similar to Unable to send all message data because some of it requires multi-part POST, but IMessageWithBinaryData.SendAsMultipart was false.. + + + + + Looks up a localized string similar to HttpContext.Current is null. There must be an ASP.NET request in process for this operation to succeed.. + + + + + Looks up a localized string similar to DataContractSerializer could not be initialized on message type {0}. Is it missing a [DataContract] attribute?. + + + + + Looks up a localized string similar to DataContractSerializer could not be initialized on message type {0} because the DataContractAttribute.Namespace property is not set.. + + + + + Looks up a localized string similar to Decoding failed due to data corruption.. + + + + + Looks up a localized string similar to An instance of type {0} was expected, but received unexpected derived type {1}.. + + + + + Looks up a localized string similar to The directed message's Recipient property must not be null.. + + + + + Looks up a localized string similar to The given set of options is not supported by this web request handler.. + + + + + Looks up a localized string similar to Unable to instantiate the message part encoder/decoder type {0}.. + + + + + Looks up a localized string similar to Error while deserializing message {0}.. + + + + + Looks up a localized string similar to Error occurred while sending a direct message or getting the response.. + + + + + Looks up a localized string similar to This exception was not constructed with a root request message that caused it.. + + + + + Looks up a localized string similar to This exception must be instantiated with a recipient that will receive the error message, or a direct request message instance that this exception will respond to.. + + + + + Looks up a localized string similar to Expected {0} message but received no recognizable message.. + + + + + Looks up a localized string similar to The message part {0} was expected in the {1} message but was not found.. + + + + + Looks up a localized string similar to The message expired at {0} and it is now {1}.. + + + + + Looks up a localized string similar to Failed to add extra parameter '{0}' with value '{1}'.. + + + + + Looks up a localized string similar to At least one of GET or POST flags must be present.. + + + + + Looks up a localized string similar to This method requires a current HttpContext. Alternatively, use an overload of this method that allows you to pass in information without an HttpContext.. + + + + + Looks up a localized string similar to Messages that indicate indirect transport must implement the {0} interface.. + + + + + Looks up a localized string similar to Insecure web request for '{0}' aborted due to security requirements demanding HTTPS.. + + + + + Looks up a localized string similar to The {0} message required protections {{{1}}} but the channel could only apply {{{2}}}.. + + + + + Looks up a localized string similar to The customized binding element ordering is invalid.. + + + + + Looks up a localized string similar to Some part(s) of the message have invalid values: {0}. + + + + + Looks up a localized string similar to The incoming message had an invalid or missing nonce.. + + + + + Looks up a localized string similar to An item with the same key has already been added.. + + + + + Looks up a localized string similar to Message too large for a HTTP GET, and HTTP POST is not allowed for this message type.. + + + + + Looks up a localized string similar to The {0} message does not support extensions.. + + + + + Looks up a localized string similar to The value for {0}.{1} on member {1} was expected to derive from {2} but was {3}.. + + + + + Looks up a localized string similar to Error while reading message '{0}' parameter '{1}' with value '{2}'.. + + + + + Looks up a localized string similar to Message parameter '{0}' with value '{1}' failed to base64 decode.. + + + + + Looks up a localized string similar to Error while preparing message '{0}' parameter '{1}' for sending.. + + + + + Looks up a localized string similar to This message has a timestamp of {0}, which is beyond the allowable clock skew for in the future.. + + + + + Looks up a localized string similar to Missing decryption key for bucket "{0}" handle "{1}". + + + + + Looks up a localized string similar to A non-empty string was expected.. + + + + + Looks up a localized string similar to A message response is already queued for sending in the response stream.. + + + + + Looks up a localized string similar to This message has already been processed. This could indicate a replay attack in progress.. + + + + + Looks up a localized string similar to This channel does not support replay protection.. + + + + + Looks up a localized string similar to The following message parts had constant value requirements that were unsatisfied: {0}. + + + + + Looks up a localized string similar to The following required non-empty parameters were empty in the {0} message: {1}. + + + + + Looks up a localized string similar to The following required parameters were missing from the {0} message: {1}. + + + + + Looks up a localized string similar to The binding element offering the {0} protection requires other protection that is not provided.. + + + + + Looks up a localized string similar to The list is empty.. + + + + + Looks up a localized string similar to The list contains a null element.. + + + + + Looks up a localized string similar to An HttpContext.Current.Session object is required.. + + + + + Looks up a localized string similar to Message signature was incorrect.. + + + + + Looks up a localized string similar to This channel does not support signing messages. To support signing messages, a derived Channel type must override the Sign and IsSignatureValid methods.. + + + + + Looks up a localized string similar to This message factory does not support message type(s): {0}. + + + + + Looks up a localized string similar to The stream must have a known length.. + + + + + Looks up a localized string similar to The stream's CanRead property returned false.. + + + + + Looks up a localized string similar to The stream's CanWrite property returned false.. + + + + + Looks up a localized string similar to Expected at most 1 binding element to apply the {0} protection, but more than one applied.. + + + + + Looks up a localized string similar to The maximum allowable number of redirects were exceeded while requesting '{0}'.. + + + + + Looks up a localized string similar to Unexpected buffer length.. + + + + + Looks up a localized string similar to The array must not be empty.. + + + + + Looks up a localized string similar to The empty string is not allowed.. + + + + + Looks up a localized string similar to Expected direct response to use HTTP status code {0} but was {1} instead.. + + + + + Looks up a localized string similar to Message parameter '{0}' had unexpected value '{1}'.. + + + + + Looks up a localized string similar to Expected message {0} parameter '{1}' to have value '{2}' but had '{3}' instead.. + + + + + Looks up a localized string similar to Expected message {0} but received {1} instead.. + + + + + Looks up a localized string similar to Unexpected message type received.. + + + + + Looks up a localized string similar to A null key was included and is not allowed.. + + + + + Looks up a localized string similar to A null or empty key was included and is not allowed.. + + + + + Looks up a localized string similar to A null value was included for key '{0}' and is not allowed.. + + + + + Looks up a localized string similar to The type {0} or a derived type was expected, but {1} was given.. + + + + + Looks up a localized string similar to {0} property has unrecognized value {1}.. + + + + + Looks up a localized string similar to The URL '{0}' is rated unsafe and cannot be requested this way.. + + + + + Looks up a localized string similar to This blob is not a recognized encryption format.. + + + + + Looks up a localized string similar to The HTTP verb '{0}' is unrecognized and unsupported.. + + + + + Looks up a localized string similar to '{0}' messages cannot be received with HTTP verb '{1}'.. + + + + + Looks up a localized string similar to Redirects on POST requests that are to untrusted servers is not supported.. + + + + + Looks up a localized string similar to Web request to '{0}' failed.. + + + + + A grab-bag of utility methods useful for the channel stack of the protocol. + + + + + The available compression algorithms. + + + + + A thread-safe, non-crypto random number generator. + + + + + Gets a random number generator for use on the current thread only. + + + + + A class to convert a into an . + + The type of objects being compared. + + + + Initializes a new instance of the ComparisonHelper class. + + The comparison method to use. + + + + Compares two instances of . + + The first object to compare. + The second object to compare. + Any of -1, 0, or 1 according to standard comparison rules. + + + + The uppercase alphabet. + + + + + The lowercase alphabet. + + + + + The set of base 10 digits. + + + + + The set of digits and alphabetic letters (upper and lowercase). + + + + + All the characters that are allowed for use as a base64 encoding character. + + + + + All the characters that are allowed for use as a base64 encoding character + in the "web safe" context. + + + + + The set of digits, and alphabetic letters (upper and lowercase) that are clearly + visually distinguishable. + + + + + The length of private symmetric secret handles. + + + This value needn't be high, as we only expect to have a small handful of unexpired secrets at a time, + and handle recycling is permissible. + + + + + The cryptographically strong random data generator used for creating secrets. + + The random number generator is thread-safe. + + + + The default lifetime of a private secret. + + + + + A character array containing just the = character. + + + + + A character array containing just the , character. + + + + + A character array containing just the " character. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + A set of escaping mappings that help secure a string from javscript execution. + + + The characters to escape here are inspired by + http://code.google.com/p/doctype/wiki/ArticleXSSInJavaScript + + + + + Transforms an OutgoingWebResponse to an MVC-friendly ActionResult. + + The response to send to the user agent. + The instance to be returned by the Controller's action method. + + + + Transforms an OutgoingWebResponse to a Web API-friendly HttpResponseMessage. + + The response to send to the user agent. + The instance to be returned by the Web API method. + + + + Gets the original request URL, as seen from the browser before any URL rewrites on the server if any. + Cookieless session directory (if applicable) is also included. + + The URL in the user agent's Location bar. + + + + Strips any and all URI query parameters that start with some prefix. + + The URI that may have a query with parameters to remove. + The prefix for parameters to remove. A period is NOT automatically appended. + Either a new Uri with the parameters removed if there were any to remove, or the same Uri instance if no parameters needed to be removed. + + + + Sends a multipart HTTP POST request (useful for posting files). + + The HTTP request. + The request handler. + The parts to include in the POST entity. + The HTTP response. + + + + Assembles a message comprised of the message on a given exception and all inner exceptions. + + The exception. + The assembled message. + + + + Flattens the specified sequence of sequences. + + The type of element contained in the sequence. + The sequence of sequences to flatten. + A sequence of the contained items. + + + + Cuts off precision beyond a second on a DateTime value. + + The value. + A DateTime with a 0 millisecond component. + + + + Adds a name-value pair to the end of a given URL + as part of the querystring piece. Prefixes a ? or & before + first element as necessary. + + The UriBuilder to add arguments to. + The name of the parameter to add. + The value of the argument. + + If the parameters to add match names of parameters that already are defined + in the query string, the existing ones are not replaced. + + + + + Adds a set of values to a collection. + + The type of value kept in the collection. + The collection to add to. + The values to add to the collection. + + + + Tests whether two timespans are within reasonable approximation of each other. + + One TimeSpan. + The other TimeSpan. + The allowable margin of error. + + true if the two TimeSpans are within of each other. + + + + Compares to string values for ordinal equality in such a way that its execution time does not depend on how much of the value matches. + + The first value. + The second value. + A value indicating whether the two strings share ordinal equality. + + In signature equality checks, a difference in execution time based on how many initial characters match MAY + be used as an attack to figure out the expected signature. It is therefore important to make a signature + equality check's execution time independent of how many characters match the expected value. + See http://codahale.com/a-lesson-in-timing-attacks/ for more information. + + + + + Gets the public facing URL for the given incoming HTTP request. + + The incoming request. Cannot be null. + The server variables to consider part of the request. Cannot be null. + + The URI that the outside world used to create this request. + + + Although the value can be obtained from + , it's useful to be able to pass them + in so we can simulate injected values from our unit tests since the actual property + is a read-only kind of . + + + + + Gets the public facing URL for the given incoming HTTP request. + + The incoming request. Cannot be null. Server variables are read from this request. + The URI that the outside world used to create this request. + + + + Gets the URL to the root of a web site, which may include a virtual directory path. + + An absolute URI. + + + + Creates the XML reader settings to use for reading XML from untrusted sources. + + + The new instance of . + + + The default values set here are based on recommendations from + http://msdn.microsoft.com/en-us/magazine/ee335713.aspx + + + + + Clears any existing elements in a collection and fills the collection with a given set of values. + + The type of value kept in the collection. + The collection to modify. + The new values to fill the collection. + + + + Strips any and all URI query parameters that serve as parts of a message. + + The URI that may contain query parameters to remove. + The message description whose parts should be removed from the URL. + A cleaned URL. + + + + Sends a multipart HTTP POST request (useful for posting files) but doesn't call GetResponse on it. + + The HTTP request. + The request handler. + The parts to include in the POST entity. + + + + Assembles the content of the HTTP Authorization or WWW-Authenticate header. + + The fields to include. + + A value prepared for an HTTP header. + + + + + Assembles the content of the HTTP Authorization or WWW-Authenticate header. + + The scheme. + The fields to include. + A value prepared for an HTTP header. + + + + Parses the authorization header. + + The scheme. Must not be null or empty. + The authorization header. May be null or empty. + A sequence of key=value pairs discovered in the header. Never null, but may be empty. + + + + Encodes a symmetric key handle and the blob that is encrypted/signed with that key into a single string + that can be decoded by . + + The cryptographic key handle. + The encrypted/signed blob. + The combined encoded value. + + + + Extracts the key handle and encrypted blob from a string previously returned from . + + The message part. May be null if not applicable. + The value previously returned from . + The crypto key handle. + The encrypted/signed data. + + + + Gets a buffer of random data (not cryptographically strong). + + The length of the sequence to generate. + The generated values, which may contain zeros. + + + + Gets a cryptographically strong random sequence of values. + + The length of the sequence to generate. + The generated values, which may contain zeros. + + + + Gets a cryptographically strong random string of base64 characters. + + The length of the byte sequence to generate. + A base64 encoding of the generated random data, + whose length in characters will likely be greater than . + + + + Gets a NON-cryptographically strong random string of base64 characters. + + The length of the byte sequence to generate. + A value indicating whether web64 encoding is used to avoid the need to escape characters. + + A base64 encoding of the generated random data, + whose length in characters will likely be greater than . + + + + + Gets a random string made up of a given set of allowable characters. + + The length of the desired random string. + The allowable characters. + A random string. + + + + Computes the hash of a string. + + The hash algorithm to use. + The value to hash. + The encoding to use when converting the string to a byte array. + A base64 encoded string. + + + + Computes the hash of a sequence of key=value pairs. + + The hash algorithm to use. + The data to hash. + The encoding to use when converting the string to a byte array. + A base64 encoded string. + + + + Computes the hash of a sequence of key=value pairs. + + The hash algorithm to use. + The data to hash. + The encoding to use when converting the string to a byte array. + A base64 encoded string. + + + + Encrypts a byte buffer. + + The buffer to encrypt. + The symmetric secret to use to encrypt the buffer. Allowed values are 128, 192, or 256 bytes in length. + The encrypted buffer + + + + Decrypts a byte buffer. + + The buffer to decrypt. + The symmetric secret to use to decrypt the buffer. Allowed values are 128, 192, and 256. + The encrypted buffer + + + + Encrypts a string. + + The text to encrypt. + The symmetric secret to use to encrypt the buffer. Allowed values are 128, 192, and 256. + The encrypted buffer + + + + Decrypts a string previously encrypted with . + + The text to decrypt. + The symmetric secret to use to decrypt the buffer. Allowed values are 128, 192, and 256. + The encrypted buffer + + + + Performs asymmetric encryption of a given buffer. + + The asymmetric encryption provider to use for encryption. + The buffer to encrypt. + The encrypted data. + + + + Performs asymmetric decryption of a given buffer. + + The asymmetric encryption provider to use for decryption. + The buffer to decrypt. + The decrypted data. + + + + Gets a key from a given bucket with the longest remaining life, or creates a new one if necessary. + + The crypto key store. + The bucket where the key should be found or stored. + The minimum remaining life required on the returned key. + The required size of the key, in bits. + + A key-value pair whose key is the secret's handle and whose value is the cryptographic key. + + + + + Compresses a given buffer. + + The buffer to compress. + The compression algorithm to use. + The compressed data. + + + + Decompresses a given buffer. + + The buffer to decompress. + The compression algorithm used. + The decompressed data. + + + + Converts to data buffer to a base64-encoded string, using web safe characters and with the padding removed. + + The data buffer. + A web-safe base64-encoded string without padding. + + + + Decodes a (web-safe) base64-string back to its binary buffer form. + + The base64-encoded string. May be web-safe encoded. + A data buffer. + + + + Adds a set of HTTP headers to an instance, + taking care to set some headers to the appropriate properties of + + The headers to add. + The instance to set the appropriate values to. + + + + Adds a set of HTTP headers to an instance, + taking care to set some headers to the appropriate properties of + + The headers to add. + The instance to set the appropriate values to. + + + + Copies the contents of one stream to another. + + The stream to copy from, at the position where copying should begin. + The stream to copy to, at the position where bytes should be written. + The maximum bytes to copy. + The total number of bytes copied. + + Copying begins at the streams' current positions. + The positions are NOT reset after copying is complete. + + + + + Creates a snapshot of some stream so it is seekable, and the original can be closed. + + The stream to copy bytes from. + A seekable stream with the same contents as the original. + + + + Clones an in order to send it again. + + The request to clone. + The newly created instance. + + + + Clones an in order to send it again. + + The request to clone. + The new recipient of the request. + The newly created instance. + + + + Tests whether two arrays are equal in contents and ordering. + + The type of elements in the arrays. + The first array in the comparison. May be null. + The second array in the comparison. May be null. + True if the arrays equal; false otherwise. + + + + Tests whether two arrays are equal in contents and ordering, + guaranteeing roughly equivalent execution time regardless of where a signature mismatch may exist. + + The first array in the comparison. May not be null. + The second array in the comparison. May not be null. + True if the arrays equal; false otherwise. + + Guaranteeing equal execution time is useful in mitigating against timing attacks on a signature + or other secret. + + + + + Tests two sequences for same contents and ordering. + + The type of elements in the arrays. + The first sequence in the comparison. May not be null. + The second sequence in the comparison. May not be null. + True if the arrays equal; false otherwise. + + + + Tests two unordered collections for same contents. + + The type of elements in the collections. + The first collection in the comparison. May not be null. + The second collection in the comparison. May not be null. + True if the collections have the same contents; false otherwise. + + + + Tests whether two dictionaries are equal in length and contents. + + The type of keys in the dictionaries. + The type of values in the dictionaries. + The first dictionary in the comparison. May not be null. + The second dictionary in the comparison. May not be null. + True if the arrays equal; false otherwise. + + + + Concatenates a list of name-value pairs as key=value&key=value, + taking care to properly encode each key and value for URL + transmission according to RFC 3986. No ? is prefixed to the string. + + The dictionary of key/values to read from. + The formulated querystring style string. + + + + Adds a set of name-value pairs to the end of a given URL + as part of the querystring piece. Prefixes a ? or & before + first element as necessary. + + The UriBuilder to add arguments to. + + The arguments to add to the query. + If null, is not changed. + + + If the parameters to add match names of parameters that already are defined + in the query string, the existing ones are not replaced. + + + + + Adds a set of name-value pairs to the end of a given URL + as part of the fragment piece. Prefixes a # or & before + first element as necessary. + + The UriBuilder to add arguments to. + + The arguments to add to the query. + If null, is not changed. + + + If the parameters to add match names of parameters that already are defined + in the fragment, the existing ones are not replaced. + + + + + Adds parameters to a query string, replacing parameters that + match ones that already exist in the query string. + + The UriBuilder to add arguments to. + + The arguments to add to the query. + If null, is not changed. + + + + + Extracts the recipient from an HttpRequestInfo. + + The request to get recipient information from. + The recipient. + Thrown if the HTTP request is something we can't handle. + + + + Gets the enum value for a given HTTP verb. + + The HTTP verb. + A enum value that is within the . + Thrown if the HTTP request is something we can't handle. + + + + Gets the HTTP verb to use for a given enum value. + + The HTTP method. + An HTTP verb, such as GET, POST, PUT, DELETE, PATCH, or OPTION. + + + + Copies some extra parameters into a message. + + The message to copy the extra data into. + The extra data to copy into the message. May be null to do nothing. + + + + Collects a sequence of key=value pairs into a dictionary. + + The type of the key. + The type of the value. + The sequence. + A dictionary. + + + + Enumerates all members of the collection as key=value pairs. + + The collection to enumerate. + A sequence of pairs. + + + + Converts a to an IDictionary<string, string>. + + The NameValueCollection to convert. May be null. + The generated dictionary, or null if is null. + + If a null key is encountered, its value is ignored since + Dictionary<string, string> does not allow null keys. + + + + + Converts a to an IDictionary<string, string>. + + The NameValueCollection to convert. May be null. + + A value indicating whether a null key in the should be silently skipped since it is not a valid key in a Dictionary. + Use true to throw an exception if a null key is encountered. + Use false to silently continue converting the valid keys. + + The generated dictionary, or null if is null. + Thrown if is true and a null key is encountered. + + + + Converts a dictionary to a + The existing dictionary. + The new collection. + + + + Sorts the elements of a sequence in ascending order by using a specified comparer. + + The type of the elements of source. + The type of the key returned by keySelector. + A sequence of values to order. + A function to extract a key from an element. + A comparison function to compare keys. + An System.Linq.IOrderedEnumerable<TElement> whose elements are sorted according to a key. + + + + Determines whether the specified message is a request (indirect message or direct request). + + The message in question. + + true if the specified message is a request; otherwise, false. + + + Although an may implement the + interface, it may only be doing that for its derived classes. These objects are only requests + if their property is non-null. + + + + + Determines whether the specified message is a direct response. + + The message in question. + + true if the specified message is a direct response; otherwise, false. + + + Although an may implement the + interface, it may only be doing + that for its derived classes. These objects are only requests if their + property is non-null. + + + + + Writes a buffer, prefixed with its own length. + + The binary writer. + The buffer. + + + + Reads a buffer that is prefixed with its own length. + + The binary reader positioned at the buffer length. + + The maximum size of the buffer that should be permitted. + Although the stream will indicate the size of the buffer, this mitigates data corruption + or DoS attacks causing the web server to allocate too much memory for a small data packet. + + The read buffer. + + + + Constructs a Javascript expression that will create an object + on the user agent when assigned to a variable. + + The untrusted names and untrusted values to inject into the JSON object. + if set to true the values will NOT be escaped as if it were a pure string. + The Javascript JSON object as a string. + + + + Serializes the given message as a JSON string. + + The message to serialize. + The cached message descriptions to use for reflection. + A JSON string. + + + + Serializes the given message as a JSON string. + + The message to serialize. + The cached message descriptions to use for reflection. + The encoding to use. Defaults to + A JSON string. + + + + Deserializes a JSON object into a message. + + The buffer containing the JSON string. + The message to deserialize the object into. + The cache of message descriptions. + The encoding that the JSON bytes are in. + + + + Prepares what SHOULD be simply a string value for safe injection into Javascript + by using appropriate character escaping. + + The untrusted string value to be escaped to protected against XSS attacks. May be null. + The escaped string, surrounded by single-quotes. + + + + Escapes a string according to the URI data string rules given in RFC 3986. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + Ensures that UTC times are converted to local times. Unspecified kinds are unchanged. + + The date-time to convert. + The date-time in local time. + + + + Ensures that local times are converted to UTC times. Unspecified kinds are unchanged. + + The date-time to convert. + The date-time in UTC time. + + + + Gets the query data from the original request (before any URL rewriting has occurred.) + + The request. + + A containing all the parameters in the query string. + + + + + Gets a value indicating whether the request's URL was rewritten by ASP.NET + or some other module. + + The request. + A value indicating whether there is evidence that the URL of the request has been changed to some internal server (farm) representation. + + true if this request's URL was rewritten; otherwise, false. + + + + + Gets the query or form data from the original request (before any URL rewriting has occurred.) + + The request. + + A set of name=value pairs. + + + + + Creates a symmetric algorithm for use in encryption/decryption. + + The symmetric key to use for encryption/decryption. + A symmetric algorithm. + + + + Gets a random number generator for use on the current thread only. + + + + + A message expiration enforcing binding element that supports messages + implementing the interface. + + + + + Initializes a new instance of the class. + + + + + Sets the timestamp on an outgoing message. + + The outgoing message. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + + + + Reads the timestamp on a message and throws an exception if the message is too old. + + The incoming message. + + The protections (if any) that this binding element applied to the message. + Null if this binding element did not even apply to this binding element. + + Thrown if the given message has already expired. + + Thrown when the binding element rules indicate that this message is invalid and should + NOT be processed. + + + + + Gets or sets the channel that this binding element belongs to. + + + + + Gets the maximum age a message implementing the + interface can be before + being discarded as too old. + + + + + A pair of conversion functions to map some type to a string and back again. + + + + + The mapping function that converts some custom type to a string. + + + + + The mapping function that converts some custom type to the original string + (possibly non-normalized) that represents it. + + + + + The mapping function that converts a string to some custom type. + + + + + Initializes a new instance of the struct. + + The mapping function that converts some custom value to a string. + The mapping function that converts some custom value to its original (non-normalized) string. May be null if the same as the function. + The mapping function that converts a string to some custom value. + + + + Initializes a new instance of the struct. + + The encoder. + + + + Gets the encoder. + + + + + A mapping between serialized key names and instances describing + those key/values pairs. + + + + + A mapping between the serialized key names and their + describing instances. + + + + + Initializes a new instance of the class. + + Type of the message. + The message version. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets a dictionary that provides read/write access to a message. + + The message the dictionary should provide access to. + The dictionary accessor to the message + + + + Gets a dictionary that provides read/write access to a message. + + The message the dictionary should provide access to. + A value indicating whether this message dictionary will retrieve original values instead of normalized ones. + The dictionary accessor to the message + + + + Ensures the message parts pass basic validation. + + The key/value pairs of the serialized message. + + + + Tests whether all the required message parts pass basic validation for the given data. + + The key/value pairs of the serialized message. + A value indicating whether the provided data fits the message's basic requirements. + + + + Verifies that a given set of keys include all the required parameters + for this message type or throws an exception. + + The names of all parameters included in a message. + if set to true an exception is thrown on failure with details. + A value indicating whether the provided data fits the message's basic requirements. + + Thrown when required parts of a message are not in + if is true. + + + + + Ensures the protocol message parts that must not be empty are in fact not empty. + + A dictionary of key/value pairs that make up the serialized message. + if set to true an exception is thrown on failure with details. + A value indicating whether the provided data fits the message's basic requirements. + + Thrown when required parts of a message are not in + if is true. + + + + + Checks that a bunch of message part values meet the constant value requirements of this message description. + + The part values. + if set to true, this method will throw on failure. + A value indicating whether all the requirements are met. + + + + Reflects over some -implementing type + and prepares to serialize/deserialize instances of that type. + + + + + Gets the mapping between the serialized key names and their describing + instances. + + + + + Gets the message version this instance was generated from. + + + + + Gets the type of message this instance was generated from. + + The type of the described message. + + + + Gets the constructors available on the message type. + + + + + Wraps an instance in a dictionary that + provides access to both well-defined message properties and "extra" + name/value pairs that have no properties associated with them. + + + + + The instance manipulated by this dictionary. + + + + + The instance that describes the message type. + + + + + Whether original string values should be retrieved instead of normalized ones. + + + + + Initializes a new instance of the class. + + The message instance whose values will be manipulated by this dictionary. + The message description. + A value indicating whether this message dictionary will retrieve original values instead of normalized ones. + + + + Adds a named value to the message. + + The serialized form of the name whose value is being set. + The serialized form of the value. + + Thrown if already has a set value in this message. + + + Thrown if is null. + + + + + Checks whether some named parameter has a value set in the message. + + The serialized form of the message part's name. + True if the parameter by the given name has a set value. False otherwise. + + + + Removes a name and value from the message given its name. + + The serialized form of the name to remove. + True if a message part by the given name was found and removed. False otherwise. + + + + Gets some named value if the key has a value. + + The name (in serialized form) of the value being sought. + The variable where the value will be set. + True if the key was found and was set. False otherwise. + + + + Sets a named value in the message. + + The name-value pair to add. The name is the serialized form of the key. + + + + Removes all values in the message. + + + + + Removes all items from the . + + + The is read-only. + + + This method cannot be implemented because keys are not guaranteed to be removed + since some are inherent to the type of message that this dictionary provides + access to. + + + + + Checks whether a named value has been set on the message. + + The name/value pair. + True if the key exists and has the given value. False otherwise. + + + + Removes a named value from the message if it exists. + + The serialized form of the name and value to remove. + True if the name/value was found and removed. False otherwise. + + + + Gets an enumerator that generates KeyValuePair<string, string> instances + for all the key/value pairs that are set in the message. + + The enumerator that can generate the name/value pairs. + + + + Saves the data in a message to a standard dictionary. + + The generated dictionary. + + + + Loads data from a dictionary into the message. + + The data to load into the message. + + + + Gets the message this dictionary provides access to. + + + + + Gets the description of the type of message this dictionary provides access to. + + + + + Gets the number of explicitly set values in the message. + + + + + Gets all the keys that have values associated with them. + + + + + Gets the set of official message part names that have non-null values associated with them. + + + + + Gets the keys that are in the message but not declared as official OAuth properties. + + + + + Gets all the values. + + + + + Gets the serializer for the message this dictionary provides access to. + + + + + Gets or sets a value for some named value. + + The serialized form of a name for the value to read or write. + The named value. + + If the key matches a declared property or field on the message type, + that type member is set. Otherwise the key/value is stored in a + dictionary for extra (weakly typed) strings. + + Thrown when setting a value that is not allowed for a given . + + + + Describes an individual member of a message and assists in its serialization. + + + + + A map of converters that help serialize custom objects to string values and back again. + + + + + A map of instantiated custom encoders used to encode/decode message parts. + + + + + The string-object conversion routines to use for this individual message part. + + + + + The property that this message part is associated with, if aplicable. + + + + + The field that this message part is associated with, if aplicable. + + + + + The type of the message part. (Not the type of the message itself). + + + + + The default (uninitialized) value of the member inherent in its type. + + + + + Initializes a new instance of the class. + + + A property or field of an implementing type + that has a attached to it. + + + The attribute discovered on that describes the + serialization requirements of the message part. + + + + + Sets the member of a given message to some given value. + Used in deserialization. + + The message instance containing the member whose value should be set. + The string representation of the value to set. + + + + Gets the normalized form of a value of a member of a given message. + Used in serialization. + + The message instance to read the value from. + The string representation of the member's value. + + + + Gets the value of a member of a given message. + Used in serialization. + + The message instance to read the value from. + A value indicating whether the original value should be retrieved (as opposed to a normalized form of it). + The string representation of the member's value. + + + + Gets whether the value has been set to something other than its CLR type default value. + + The message instance to check the value on. + True if the value is not the CLR default value. + + + + Adds a pair of type conversion functions to the static conversion map. + + The custom type to convert to and from strings. + The function to convert the custom type to a string. + The mapping function that converts some custom value to its original (non-normalized) string. May be null if the same as the function. + The function to convert a string to the custom type. + + + + Creates a that resorts to and + for the conversion. + + The type to create the mapping for. + The value mapping. + + + + Creates the default encoder for a given type. + + The type to create a for. + A struct. + + + + Figures out the CLR default value for a given type. + + The type whose default value is being sought. + Either null, or some default value like 0 or 0.0. + + + + Checks whether a type is a nullable value type (i.e. int?) + + The type in question. + True if this is a nullable value type. + + + + Retrieves a previously instantiated encoder of a given type, or creates a new one and stores it for later retrieval as well. + + The message part encoder type. + An instance of the desired encoder. + + + + Gets the value of the message part, without converting it to/from a string. + + The message instance to read from. + The value of the member. + + + + Sets the value of a message part directly with a given value. + + The message instance to read from. + The value to set on the this part. + + + + Converts a string representation of the member's value to the appropriate type. + + The string representation of the member's value. + + An instance of the appropriate type for setting the member. + + + + + Converts the member's value to its string representation. + + The value of the member. + A value indicating whether a string matching the originally decoded string should be returned (as opposed to a normalized string). + + The string representation of the member's value. + + + + + Validates that the message part and its attribute have agreeable settings. + + + Thrown when a non-nullable value type is set as optional. + + + + + Gets or sets the name to use when serializing or deserializing this parameter in a message. + + + + + Gets or sets whether this message part must be signed. + + + + + Gets or sets a value indicating whether this message part is required for the + containing message to be valid. + + + + + Gets or sets a value indicating whether the string value is allowed to be empty in the serialized message. + + + + + Gets or sets a value indicating whether the field or property must remain its default value. + + + + + Gets or sets a value indicating whether this part is defined as a constant field and can be read without a message instance. + + + + + Gets or sets a value indicating whether the value contained by this property contains + sensitive information that should generally not be logged. + + + true if this instance is security sensitive; otherwise, false. + + + + + Gets the static constant value for this message part without a message instance. + + + + + Gets the type of the declared member. + + + + + Gets the type of the encoded values produced by this encoder, as they would appear in their preferred form. + + + + + An exception thrown when messages cannot receive all the protections they require. + + + + + Initializes a new instance of the class. + + The message whose protection requirements could not be met. + The protection requirements that were fulfilled. + + + + Initializes a new instance of the class. + + The + that holds the serialized object data about the exception being thrown. + The System.Runtime.Serialization.StreamingContext + that contains contextual information about the source or destination. + + + + A protocol message (request or response) that passes from this + to a remote party via the user agent using a redirect or form + POST submission, OR a direct message response. + + + An instance of this type describes the HTTP response that must be sent + in response to the current HTTP request. + It is important that this response make up the entire HTTP response. + A hosting ASPX page should not be allowed to render its normal HTML output + after this response is sent. The normal rendered output of an ASPX page + can be canceled by calling after this message + is sent on the response stream. + + + + + The encoder to use for serializing the response body. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + based on the contents of an . + + The to clone. + The maximum bytes to read from the response stream. + + + + Creates a text reader for the response stream. + + The text reader, initialized for the proper encoding. + + + + Automatically sends the appropriate response to the user agent + and ends execution on the current page or handler. + + Typically thrown by ASP.NET in order to prevent additional data from the page being sent to the client and corrupting the response. + + Requires a current HttpContext. + + + + + Automatically sends the appropriate response to the user agent + and ends execution on the current page or handler. + + The context of the HTTP request whose response should be set. + Typically this is . + Typically thrown by ASP.NET in order to prevent additional data from the page being sent to the client and corrupting the response. + + + + Automatically sends the appropriate response to the user agent + and ends execution on the current page or handler. + + The context of the HTTP request whose response should be set. + Typically this is . + Typically thrown by ASP.NET in order to prevent additional data from the page being sent to the client and corrupting the response. + + + + Automatically sends the appropriate response to the user agent + and signals ASP.NET to short-circuit the page execution pipeline + now that the response has been completed. + Not safe to call from ASP.NET web forms. + + + Requires a current HttpContext. + This call is not safe to make from an ASP.NET web form (.aspx file or code-behind) because + ASP.NET will render HTML after the protocol message has been sent, which will corrupt the response. + Use the method instead for web forms. + + + + + Automatically sends the appropriate response to the user agent + and signals ASP.NET to short-circuit the page execution pipeline + now that the response has been completed. + Not safe to call from ASP.NET web forms. + + The context of the HTTP request whose response should be set. + Typically this is . + + This call is not safe to make from an ASP.NET web form (.aspx file or code-behind) because + ASP.NET will render HTML after the protocol message has been sent, which will corrupt the response. + Use the method instead for web forms. + + + + + Automatically sends the appropriate response to the user agent + and signals ASP.NET to short-circuit the page execution pipeline + now that the response has been completed. + Not safe to call from ASP.NET web forms. + + The context of the HTTP request whose response should be set. + Typically this is . + + This call is not safe to make from an ASP.NET web form (.aspx file or code-behind) because + ASP.NET will render HTML after the protocol message has been sent, which will corrupt the response. + Use the method instead for web forms. + + + + + Submits this response to a WCF response context. Only available when no response body is included. + + The response context to apply the response to. + + + + Automatically sends the appropriate response to the user agent. + + The response to set to this message. + + + + Gets the URI that, when requested with an HTTP GET request, + would transmit the message that normally would be transmitted via a user agent redirect. + + The channel to use for encoding. + + The URL that would transmit the original message. This URL may exceed the normal 2K limit, + and should therefore be broken up manually and POSTed as form fields when it exceeds this length. + + + This is useful for desktop applications that will spawn a user agent to transmit the message + rather than cause a redirect. + + + + + Sets the response to some string, encoded as UTF-8. + + The string to set the response to. + Type of the content. May be null. + + + + Automatically sends the appropriate response to the user agent + and signals ASP.NET to short-circuit the page execution pipeline + now that the response has been completed. + + The context of the HTTP request whose response should be set. + Typically this is . + If set to false, this method calls + rather than + to avoid a . + + + + Automatically sends the appropriate response to the user agent + and signals ASP.NET to short-circuit the page execution pipeline + now that the response has been completed. + + The context of the HTTP request whose response should be set. + Typically this is . + If set to false, this method calls + rather than + to avoid a . + + + + Gets the headers that must be included in the response to the user agent. + + + The headers in this collection are not meant to be a comprehensive list + of exactly what should be sent, but are meant to augment whatever headers + are generally included in a typical response. + + + + + Gets the body of the HTTP response. + + + + + Gets a value indicating whether the response stream is incomplete due + to a length limitation imposed by the HttpWebRequest or calling method. + + + + + Gets the cookies collection to add as headers to the HTTP response. + + + + + Gets or sets the body of the response as a string. + + + + + Gets the HTTP status code to use in the HTTP response. + + + + + Gets or sets a reference to the actual protocol message that + is being sent via the user agent. + + + + + The methods available for the local party to send messages to a remote party. + + + See OAuth 1.0 spec section 5.2. + + + + + No HTTP methods are allowed. + + + + + In the HTTP Authorization header as defined in OAuth HTTP Authorization Scheme (OAuth HTTP Authorization Scheme). + + + + + As the HTTP POST request body with a content-type of application/x-www-form-urlencoded. + + + + + Added to the URLs in the query part (as defined by [RFC3986] (Berners-Lee, T., “Uniform Resource Identifiers (URI): Generic Syntax,” .) section 3). + + + + + Added to the URLs in the query part (as defined by [RFC3986] (Berners-Lee, T., “Uniform Resource Identifiers (URI): Generic Syntax,” .) section 3). + + + + + Added to the URLs in the query part (as defined by [RFC3986] (Berners-Lee, T., “Uniform Resource Identifiers (URI): Generic Syntax,” .) section 3). + + + + + Added to the URLs in the query part (as defined by [RFC3986] (Berners-Lee, T., “Uniform Resource Identifiers (URI): Generic Syntax,” .) section 3). + + + + + Added to the URLs in the query part (as defined by [RFC3986] (Berners-Lee, T., “Uniform Resource Identifiers (URI): Generic Syntax,” .) section 3). + + + + + Added to the URLs in the query part (as defined by [RFC3986] (Berners-Lee, T., “Uniform Resource Identifiers (URI): Generic Syntax,” .) section 3). + + + + + The flags that control HTTP verbs. + + + + + The type of transport mechanism used for a message: either direct or indirect. + + + + + A message that is sent directly from the Consumer to the Service Provider, or vice versa. + + + + + A message that is sent from one party to another via a redirect in the user agent. + + + + + Encodes and decodes the as an integer of total seconds. + + + + + Initializes a new instance of the class. + + + + + Encodes the specified value. + + The value. Guaranteed to never be null. + + The in string form, ready for message transport. + + + + + Decodes the specified value. + + The string value carried by the transport. Guaranteed to never be null, although it may be empty. + + The deserialized form of the given string. + + Thrown when the string value given cannot be decoded into the required object type. + + + + Gets the type of the encoded values produced by this encoder, as they would appear in their preferred form. + + + + + A paranoid HTTP get/post request engine. It helps to protect against attacks from remote + server leaving dangling connections, sending too much data, causing requests against + internal servers, etc. + + + Protections include: + * Conservative maximum time to receive the complete response. + * Only HTTP and HTTPS schemes are permitted. + * Internal IP address ranges are not permitted: 127.*.*.*, 1::* + * Internal host names are not permitted (periods must be found in the host name) + If a particular host would be permitted but is in the blacklist, it is not allowed. + If a particular host would not be permitted but is in the whitelist, it is allowed. + + + + + The set of URI schemes allowed in untrusted web requests. + + + + + The collection of blacklisted hosts. + + + + + The collection of regular expressions used to identify additional blacklisted hosts. + + + + + The collection of whitelisted hosts. + + + + + The collection of regular expressions used to identify additional whitelisted hosts. + + + + + The maximum redirections to follow in the course of a single request. + + + + + The maximum number of bytes to read from the response of an untrusted server. + + + + + The handler that will actually send the HTTP request and collect + the response once the untrusted server gates have been satisfied. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The chained web request handler. + + + + Determines whether this instance can support the specified options. + + The set of options that might be given in a subsequent web request. + + true if this instance can support the specified options; otherwise, false. + + + + + Prepares an that contains an POST entity for sending the entity. + + The that should contain the entity. + The options to apply to this web request. + + The writer the caller should write out the entity data to. + + Thrown for any network error. + + The caller should have set the + and any other appropriate properties before calling this method. + Implementations should catch and wrap it in a + to abstract away the transport and provide + a single exception type for hosts to catch. + + + + + Processes an and converts the + to a instance. + + The to handle. + The options to apply to this web request. + + An instance of describing the response. + + Thrown for any network error. + + Implementations should catch and wrap it in a + to abstract away the transport and provide + a single exception type for hosts to catch. The + value, if set, should be Closed before throwing. + + + + + Determines whether an IP address is the IPv6 equivalent of "localhost/127.0.0.1". + + The ip address to check. + + true if this is a loopback IP address; false otherwise. + + + + + Determines whether the given host name is in a host list or host name regex list. + + The host name. + The list of host names. + The list of regex patterns of host names. + + true if the specified host falls within at least one of the given lists; otherwise, false. + + + + + Determines whether a given host is whitelisted. + + The host name to test. + + true if the host is whitelisted; otherwise, false. + + + + + Determines whether a given host is blacklisted. + + The host name to test. + + true if the host is blacklisted; otherwise, false. + + + + + Verify that the request qualifies under our security policies + + The request URI. + If set to true, only web requests that can be made entirely over SSL will succeed. + Thrown when the URI is disallowed for security reasons. + + + + Determines whether a URI is allowed based on scheme and host name. + No requireSSL check is done here + + The URI to test for whether it should be allowed. + + true if [is URI allowable] [the specified URI]; otherwise, false. + + + + + Prepares the request by setting timeout and redirect policies. + + The request to prepare. + + true if this is a POST request whose headers have not yet been sent out; false otherwise. + + + + Gets or sets the default maximum bytes to read in any given HTTP request. + + Default is 1MB. Cannot be less than 2KB. + + + + Gets or sets the total number of redirections to allow on any one request. + Default is 10. + + + + + Gets or sets the time allowed to wait for single read or write operation to complete. + Default is 500 milliseconds. + + + + + Gets or sets the time allowed for an entire HTTP request. + Default is 5 seconds. + + + + + Gets a collection of host name literals that should be allowed even if they don't + pass standard security checks. + + + + + Gets a collection of host name regular expressions that indicate hosts that should + be allowed even though they don't pass standard security checks. + + + + + Gets a collection of host name literals that should be rejected even if they + pass standard security checks. + + + + + Gets a collection of host name regular expressions that indicate hosts that should + be rejected even if they pass standard security checks. + + + + + Gets the configuration for this class that is specified in the host's .config file. + + + + + The default handler for transmitting instances + and returning the responses. + + + + + The set of options this web request handler supports. + + + + + The value to use for the User-Agent HTTP header. + + + + + Determines whether this instance can support the specified options. + + The set of options that might be given in a subsequent web request. + + true if this instance can support the specified options; otherwise, false. + + + + + Prepares an that contains an POST entity for sending the entity. + + The that should contain the entity. + + The writer the caller should write out the entity data to. + + Thrown for any network error. + + The caller should have set the + and any other appropriate properties before calling this method. + Implementations should catch and wrap it in a + to abstract away the transport and provide + a single exception type for hosts to catch. + + + + + Prepares an that contains an POST entity for sending the entity. + + The that should contain the entity. + The options to apply to this web request. + + The writer the caller should write out the entity data to. + + Thrown for any network error. + + The caller should have set the + and any other appropriate properties before calling this method. + Implementations should catch and wrap it in a + to abstract away the transport and provide + a single exception type for hosts to catch. + + + + + Processes an and converts the + to a instance. + + The to handle. + + An instance of describing the response. + + Thrown for any network error. + + Implementations should catch and wrap it in a + to abstract away the transport and provide + a single exception type for hosts to catch. The + value, if set, should be Closed before throwing. + + + + + Processes an and converts the + to a instance. + + The to handle. + The options to apply to this web request. + + An instance of describing the response. + + Thrown for any network error. + + Implementations should catch and wrap it in a + to abstract away the transport and provide + a single exception type for hosts to catch. The + value, if set, should be Closed before throwing. + + + + + Determines whether an exception was thrown because of the remote HTTP server returning HTTP 417 Expectation Failed. + + The caught exception. + + true if the failure was originally caused by a 417 Exceptation Failed error; otherwise, false. + + + + + Initiates a POST request and prepares for sending data. + + The HTTP request with information about the remote party to contact. + + The stream where the POST entity can be written. + + + + + Prepares an HTTP request. + + The request. + + true if this is a POST request whose headers have not yet been sent out; false otherwise. + + + + An immutable description of a URL that receives messages. + + + + + Initializes a new instance of the class. + + The URL of this endpoint. + The HTTP method(s) allowed. + + + + Initializes a new instance of the class. + + The URL of this endpoint. + The HTTP method(s) allowed. + + + + Gets the URL of this endpoint. + + + + + Gets the HTTP method(s) allowed. + + + + + Represents the section in the host's .config file that configures + this library's settings. + + + + + The name of the section under which this library's settings must be found. + + + + + The name of the <openid> sub-element. + + + + + The name of the <oauth> sub-element. + + + + + Initializes a new instance of the class. + + + + + Gets a named section in this section group, or null if no such section is defined. + + The name of the section to obtain. + The desired section, or null if it could not be obtained. + + + + Gets the messaging configuration element. + + + + + Gets the reporting configuration element. + + + + + Represents the <messaging> element in the host's .config file. + + + + + The name of the <webResourceUrlProvider> sub-element. + + + + + The name of the <untrustedWebRequest> sub-element. + + + + + The name of the attribute that stores the association's maximum lifetime. + + + + + The name of the attribute that stores the maximum allowable clock skew. + + + + + The name of the attribute that indicates whether to disable SSL requirements across the library. + + + + + The name of the attribute that controls whether messaging rules are strictly followed. + + + + + The default value for the property. + + + 2KB, recommended by OpenID group + + + + + The name of the attribute that controls the maximum length of a URL before it is converted + to a POST payload. + + + + + Gets the name of the @privateSecretMaximumAge attribute. + + + + + The name of the <messaging> sub-element. + + + + + Gets the configuration section from the .config file. + + + + + Gets the actual maximum message lifetime that a program should allow. + + The sum of the and + property values. + + + + Gets or sets the maximum lifetime of a private symmetric secret, + that may be used for signing or encryption. + + The default value is 28 days (twice the age of the longest association). + + + + Gets or sets the time between a message's creation and its receipt + before it is considered expired. + + + The default value value is 3 minutes. + + + Smaller timespans mean lower tolerance for delays in message delivery. + Larger timespans mean more nonces must be stored to provide replay protection. + The maximum age a message implementing the + interface can be before + being discarded as too old. + This time limit should NOT take into account expected + time skew for servers across the Internet. Time skew is added to + this value and is controlled by the property. + + + + + Gets or sets the maximum clock skew. + + The default value is 10 minutes. + + Smaller timespans mean lower tolerance for + time variance due to server clocks not being synchronized. + Larger timespans mean greater chance for replay attacks and + larger nonce caches. + For example, if a server could conceivably have its + clock d = 5 minutes off UTC time, then any two servers could have + their clocks disagree by as much as 2*d = 10 minutes. + + + + + Gets or sets a value indicating whether SSL requirements within the library are disabled/relaxed. + Use for TESTING ONLY. + + + + + Gets or sets a value indicating whether messaging rules are strictly + adhered to. + + + true by default. + + Strict will require that remote parties adhere strictly to the specifications, + even when a loose interpretation would not compromise security. + true is a good default because it shakes out interoperability bugs in remote services + so they can be identified and corrected. But some web sites want things to Just Work + more than they want to file bugs against others, so false is the setting for them. + + + + + Gets or sets the configuration for the class. + + The untrusted web request. + + + + Gets or sets the maximum allowable size for a 301 Redirect response before we send + a 200 OK response with a scripted form POST with the parameters instead + in order to ensure successfully sending a large payload to another server + that might have a maximum allowable size restriction on its GET request. + + The default value is 2048. + + + + Gets or sets the embedded resource retrieval provider. + + + The embedded resource retrieval provider. + + + + + Represents the <reporting> element in the host's .config file. + + + + + The name of the @enabled attribute. + + + + + The name of the @minimumReportingInterval attribute. + + + + + The name of the @minimumFlushInterval attribute. + + + + + The name of the @includeFeatureUsage attribute. + + + + + The name of the @includeEventStatistics attribute. + + + + + The name of the @includeLocalRequestUris attribute. + + + + + The name of the @includeCultures attribute. + + + + + The name of the <reporting> sub-element. + + + + + The default value for the @minimumFlushInterval attribute. + + + + + Initializes a new instance of the class. + + + + + Gets the configuration section from the .config file. + + + + + Gets or sets a value indicating whether this reporting is enabled. + + + true if enabled; otherwise, false. + + + + Gets or sets the maximum frequency that reports will be published. + + + + + Gets or sets the maximum frequency the set can be flushed to disk. + + + + + Gets or sets a value indicating whether to include a list of library features used in the report. + + + true to include a report of features used; otherwise, false. + + + + Gets or sets a value indicating whether to include statistics of certain events such as + authentication success and failure counting, and can include remote endpoint URIs. + + + true to include event counters in the report; otherwise, false. + + + + + Gets or sets a value indicating whether to include a few URLs to pages on the hosting + web site that host DotNetOpenAuth components. + + + + + Gets or sets a value indicating whether to include the cultures requested by the user agent + on pages that host DotNetOpenAuth components. + + + + + A configuration collection of trusted OP Endpoints. + + + + + The name of the "rejectAssertionsFromUntrustedProviders" element. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The elements to initialize the collection with. + + + + When overridden in a derived class, creates a new . + + + A new . + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + The to return the key for. + + An that acts as the key for the specified . + + + + + Gets or sets a value indicating whether any login attempt coming from an OpenID Provider Endpoint that is not on this + whitelist of trusted OP Endpoints will be rejected. If the trusted providers list is empty and this value + is true, all assertions are rejected. + + + + + A configuration element that records a trusted Provider Endpoint. + + + + + The name of the attribute that stores the value. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the OpenID Provider Endpoint (aka "OP Endpoint") that this relying party trusts. + + + + + A collection of . + + The type that all types specified in the elements must derive from. + + + + Initializes a new instance of the TypeConfigurationCollection class. + + + + + Initializes a new instance of the TypeConfigurationCollection class. + + The elements that should be added to the collection initially. + + + + Creates instances of all the types listed in the collection. + + if set to true then internal types may be instantiated. + A sequence of instances generated from types in this collection. May be empty, but never null. + + + + When overridden in a derived class, creates a new . + + + A new . + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + The to return the key for. + + An that acts as the key for the specified . + + + + + Represents an element in a .config file that allows the user to provide a @type attribute specifying + the full type that provides some service used by this library. + + A constraint on the type the user may provide. + + + + The name of the attribute whose value is the full name of the type the user is specifying. + + + + + The name of the attribute whose value is the path to the XAML file to deserialize to obtain the type. + + + + + Initializes a new instance of the TypeConfigurationElement class. + + + + + Creates an instance of the type described in the .config file. + + The value to return if no type is given in the .config file. + The newly instantiated type. + + + + Creates an instance of the type described in the .config file. + + The value to return if no type is given in the .config file. + if set to true then internal types may be instantiated. + The newly instantiated type. + + + + Creates the instance from xaml. + + The stream of xaml to deserialize. + The deserialized object. + + This exists as its own method to prevent the CLR's JIT compiler from failing + to compile the CreateInstance method just because the PresentationFramework.dll + may be missing (which it is on some shared web hosts). This way, if the + XamlSource attribute is never used, the PresentationFramework.dll never need + be present. + + + + + Gets or sets the full name of the type. + + The full name of the type, such as: "ConsumerPortal.Code.CustomStore, ConsumerPortal". + + + + Gets or sets the path to the XAML file to deserialize to obtain the instance. + + + + + Gets the type described in the .config file. + + + + + Gets a value indicating whether this type has no meaningful type to instantiate. + + + + + Represents the section of a .config file where security policies regarding web requests + to user-provided, untrusted servers is controlled. + + + + + Gets the name of the @timeout attribute. + + + + + Gets the name of the @readWriteTimeout attribute. + + + + + Gets the name of the @maximumBytesToRead attribute. + + + + + Gets the name of the @maximumRedirections attribute. + + + + + Gets the name of the @whitelistHosts attribute. + + + + + Gets the name of the @whitelistHostsRegex attribute. + + + + + Gets the name of the @blacklistHosts attribute. + + + + + Gets the name of the @blacklistHostsRegex attribute. + + + + + Gets or sets the read/write timeout after which an HTTP request will fail. + + + + + Gets or sets the timeout after which an HTTP request will fail. + + + + + Gets or sets the maximum bytes to read from an untrusted web server. + + + + + Gets or sets the maximum redirections that will be followed before an HTTP request fails. + + + + + Gets or sets the collection of hosts on the whitelist. + + + + + Gets or sets the collection of hosts on the blacklist. + + + + + Gets or sets the collection of regular expressions that describe hosts on the whitelist. + + + + + Gets or sets the collection of regular expressions that describe hosts on the blacklist. + + + + + Represents a collection of child elements that describe host names either as literal host names or regex patterns. + + + + + Initializes a new instance of the class. + + + + + Creates a new child host name element. + + + A new . + + + + + Gets the element key for a specified configuration element. + + The to return the key for. + + An that acts as the key for the specified . + + + + + Gets all the members of the collection assuming they are all literal host names. + + + + + Gets all the members of the collection assuming they are all host names regex patterns. + + + + + Represents the name of a single host or a regex pattern for host names. + + + + + Gets the name of the @name attribute. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The default value of the property. + + + + Gets or sets the name of the host on the white or black list. + + + + + An interface that provides URLs from which embedded resources can be obtained. + + + + + Gets the URL from which the given manifest resource may be downloaded by the user agent. + + Some type in the assembly containing the desired resource. + Manifest name of the desired resource. + An absolute URL. + + + + A general logger for the entire DotNetOpenAuth library. + + + Because this logger is intended for use with non-localized strings, the + overloads that take have been removed, and + is used implicitly. + + + + + The instance that is to be used + by this static Logger for the duration of the appdomain. + + + + + Backing field for the property. + + + + + Backing field for the property. + + + + + Backing field for the property. + + + + + Backing field for the property. + + + + + Backing field for the property. + + + + + Backing field for the property. + + + + + Backing field for the property. + + + + + Backing field for the property. + + + + + Backing field for the property. + + + + + Backing field for the property. + + + + + Creates an additional logger on demand for a subsection of the application. + + A name that will be included in the log file. + The instance created with the given name. + + + + Creates the main logger for the library, and emits an INFO message + that is the name and version of the library. + + A name that will be included in the log file. + The instance created with the given name. + + + + Creates an additional logger on demand for a subsection of the application. + + A type whose full name that will be included in the log file. + The instance created with the given type name. + + + + Discovers the presence of Log4net.dll and other logging mechanisms + and returns the best available logger. + + The name of the log to initialize. + The instance of the logger to use. + + + + Gets the logger for general library logging. + + + + + Gets the logger for service discovery and selection events. + + + + + Gets the logger for Messaging events. + + + + + Gets the logger for Channel events. + + + + + Gets the logger for binding elements and binding-element related events on the channel. + + + + + Gets the logger specifically used for logging verbose text on everything about the signing process. + + + + + Gets the logger for HTTP-level events. + + + + + Gets the logger for events logged by ASP.NET controls. + + + + + Gets the logger for high-level OpenID events. + + + + + Gets the logger for high-level OAuth events. + + + + + Gets the logger for high-level InfoCard events. + + + + + The ILog interface is use by application to log messages into + the log4net framework. + + + + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. + + + This class contains methods for logging at different levels and also + has properties for determining if those logging levels are + enabled in the current configuration. + + + This interface can be implemented in different ways. This documentation + specifies reasonable behavior that a caller can expect from the actual + implementation, however different implementations reserve the right to + do things differently. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + Nicko Cadell + Gert Driesen + + + Log a message object with the level. + + Log a message object with the level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the string.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + For some ILog interface log, when you write: + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed (who isn't), then you should write: + + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in and once in + the . This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. This is the preferred style of logging. + + Alternatively if your logger is available statically then the is debug + enabled state can be stored in a static variable like this: + + + private static readonly bool isDebugEnabled = log.IsDebugEnabled; + + + Then when you come to log you can write: + + + if (isDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way the debug enabled state is only queried once + when the class is loaded. Using a private static readonly + variable is the most efficient because it is a run time constant + and can be heavily optimized by the JIT compiler. + + + Of course if you use a static readonly variable to + hold the enabled state of the logger then you cannot + change the enabled state at runtime to vary the logging + that is produced. You have to decide if you need absolute + speed or runtime flexibility. + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + Returns a new log4net logger if it exists, or returns null if the assembly cannot be found. + + The created instance. + + + + Creates the log4net.LogManager. Call ONLY after log4net.dll is known to be present. + + The created instance. + + + + Returns a new logger that does nothing when invoked. + + The created instance. + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + Returns a new logger that uses the class + if sufficient CAS permissions are granted to use it, otherwise returns false. + + The created instance. + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + See . + + + + + Represents a read-only dictionary. + + The type of the key. + The type of the value. + + + + Contains base dictionary. + + + + + Initializes a new instance of the class. + + The base dictionary. + + + + Adds an element with the provided key and value to the . + + The object to use as the key of the element to add. + The object to use as the value of the element to add. + + is null. + + + An element with the same key already exists in the . + + + The is read-only. + + + + + Determines whether the contains an element with the specified key. + + The key to locate in the . + + true if the contains an element with the key; otherwise, false. + + + is null. + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the original . + + + is null. + + + The is read-only. + + + + + Gets the value associated with the specified key. + + The key whose value to get. + When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. + + true if the object that implements contains an element with the specified key; otherwise, false. + + + is null. + + + + + Adds an item to the . + + The object to add to the . + + The is read-only. + + + + + Removes all items from the . + + + The is read-only. + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + The is read-only. + + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets an containing the keys of the . + + + An containing the keys of the object that implements . + + + + + Gets an containing the values in the . + + + An containing the values in the object that implements . + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; otherwise, false. + + + + + Gets or sets the element with the specified key. + + The key being read or written. + + The element with the specified key. + + + is null. + + + The property is retrieved and is not found. + + + The property is set and the is read-only. + + + + + The statistical reporting mechanism used so this library's project authors + know what versions and features are in use. + + + + + A set of values that persist the set to disk. + + + + + Initializes a new instance of the class. + + The storage location. + Name of the file. + The maximum number of elements to track. + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Adds a value to the set. + + The value. + + + + Flushes any newly added values to disk. + + + + + Releases unmanaged and - optionally - managed resources + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Gets a value indicating whether the hashset has reached capacity and is not storing more elements. + + + true if this instance is full; otherwise, false. + + + + Gets the name of the file. + + The name of the file. + + + + A feature usage counter. + + + + + Initializes a new instance of the class. + + The storage location. + Name of the file. + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Increments the counter. + + The category within the event. Null and empty strings are allowed, but considered the same. + + + + Flushes any newly added values to disk. + + + + + Resets all counters. + + + + + Releases unmanaged and - optionally - managed resources + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Gets the name of the file. + + The name of the file. + + + + A UTF8 encoder that doesn't emit the preamble. Used for mid-stream writers. + + + + + A value indicating whether reporting is desirable or not. Must be logical-AND'd with !. + + + + + A value indicating whether reporting experienced an error and cannot be enabled. + + + + + A value indicating whether the reporting class has been initialized or not. + + + + + The object to lock during initialization. + + + + + The isolated storage to use for collecting data in between published reports. + + + + + The GUID that shows up at the top of all reports from this user/machine/domain. + + + + + The recipient of collected reports. + + + + + The outgoing HTTP request handler to use for publishing reports. + + + + + A few HTTP request hosts and paths we've seen. + + + + + Cultures that have come in via HTTP requests. + + + + + Features that have been used. + + + + + A collection of all the observations to include in the report. + + + + + The named events that we have counters for. + + + + + The lock acquired while considering whether to publish a report. + + + + + The time that we last published reports. + + + + + Initializes a new instance of the class. + + + + + Records an event occurrence. + + Name of the event. + The category within the event. Null and empty strings are allowed, but considered the same. + + + + Records an event occurence. + + The object whose type name is the event name to record. + The category within the event. Null and empty strings are allowed, but considered the same. + + + + Records the use of a feature by name. + + The feature. + + + + Records the use of a feature by object type. + + The object whose type is the feature to set as used. + + + + Records the use of a feature by object type. + + The object whose type is the feature to set as used. + Some dependency used by . + + + + Records the use of a feature by object type. + + The object whose type is the feature to set as used. + Some dependency used by . + Some dependency used by . + + + + Records statistics collected from incoming requests. + + The request. + + + + Called by every internal/public method on this class to give + periodic operations a chance to run. + + + + + Initializes Reporting if it has not been initialized yet. + + + + + Assembles a report for submission. + + A stream that contains the report. + + + + Sends the usage reports to the library authors. + + A value indicating whether submitting the report was successful. + + + + Interprets the reporting response as a log message if possible. + + The line from the HTTP response to interpret as a log message. + + + + Sends the stats report asynchronously, and careful to not throw any unhandled exceptions. + + + + + Gets the isolated storage to use for reporting. + + An isolated storage location appropriate for our host. + + + + Gets a unique, pseudonymous identifier for this particular web site or application. + + A GUID that will serve as the identifier. + + The identifier is made persistent by storing the identifier in isolated storage. + If an existing identifier is not found, a new one is created, persisted, and returned. + + + + + Sanitizes the name of the file so it only includes valid filename characters. + + The filename to sanitize. + The filename, with any and all invalid filename characters replaced with the hyphen (-) character. + + + + Gets or sets a value indicating whether this reporting is enabled. + + + true if enabled; otherwise, false. + + Setting this property to truemay have no effect + if reporting has already experienced a failure of some kind. + + + + + Gets the observed features. + + + + + Gets the configuration to use for reporting. + + + + + Argument validation checks that throw some kind of ArgumentException when they fail (unless otherwise noted). + + + + + Validates that a given parameter is not null. + + The type of the parameter + The value. + Name of the parameter. + The tested value, guaranteed to not be null. + + + + Validates that a parameter is not null or empty. + + The value. + Name of the parameter. + The validated value. + + + + Validates that an array is not null or empty. + + The type of the elements in the sequence. + The value. + Name of the parameter. + + + + Validates that an argument is either null or is a sequence with no null elements. + + The type of elements in the sequence. + The sequence. + Name of the parameter. + + + + Validates some expression describing the acceptable range for an argument evaluates to true. + + The expression that must evaluate to true to avoid an . + Name of the parameter. + The message to include with the exception. + + + + Validates some expression describing the acceptable condition for an argument evaluates to true. + + The expression that must evaluate to true to avoid an . + Name of the parameter. + The message to include with the exception. + + + + Validates some expression describing the acceptable condition for an argument evaluates to true. + + The expression that must evaluate to true to avoid an . + Name of the parameter. + The unformatted message. + Formatting arguments. + + + + Validates some expression describing the acceptable condition for an argument evaluates to true. + + The expression that must evaluate to true to avoid an . + + + + Validates some expression describing the acceptable condition for an argument evaluates to true. + + The expression that must evaluate to true to avoid an . + The message to include with the exception. + + + + Validates some expression describing the acceptable condition for an argument evaluates to true. + + The expression that must evaluate to true to avoid an . + The unformatted message. + Formatting arguments. + + + + Validates that some argument describes a type that is or derives from a required type. + + The type that the argument must be or derive from. + The type given in the argument. + Name of the parameter. + + + + Validates some expression describing the acceptable condition for an argument evaluates to true. + + The expression that must evaluate to true to avoid an . + The message. + + + + Throws an if a condition does not evaluate to true. + + The expression that must evaluate to true to avoid an . + The message. + + + + Throws an + Name of the parameter. + The message. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to The configuration-specified type {0} must be public, and is not.. + + + + + Looks up a localized string similar to The configuration XAML reference to {0} requires a current HttpContext to resolve.. + + + + + Looks up a localized string similar to The current IHttpHandler is not one of types: {0}. An embedded resource URL provider must be set in your .config file.. + + + + + Looks up a localized string similar to The empty string is not allowed.. + + + + + Looks up a localized string similar to The argument has an unexpected value.. + + + + + Looks up a localized string similar to The property {0} must be set before this operation is allowed.. + + + + + Looks up a localized string similar to This object contains a response body, which is not supported.. + + + + + Looks up a localized string similar to No current HttpContext was detected, so an {0} instance must be explicitly provided or specified in the .config file. Call the constructor overload that takes an {0}.. + + + + + Utility methods for working with URIs. + + + + + Tests a URI for the presence of an OAuth payload. + + The URI to test. + The prefix. + + True if the URI contains an OAuth message. + + + + + Determines whether some is using HTTPS. + + The Uri being tested for security. + + true if the URI represents an encrypted request; otherwise, false. + + + + + Equivalent to UriBuilder.ToString() but omits port # if it may be implied. + Equivalent to UriBuilder.Uri.ToString(), but doesn't throw an exception if the Host has a wildcard. + + The UriBuilder to render as a string. + The string version of the Uri. + + + + Validates that a URL will be resolvable at runtime. + + The page hosting the control that receives this URL as a property. + If set to true the page is in design-time mode rather than runtime mode. + The URI to check. + Thrown if the given URL is not a valid, resolvable URI. + + + + A grab-bag utility class. + + + + + Manages an individual deferred ToString call. + + The type of object to be serialized as a string. + + + + Initializes a new instance of the DelayedToString class. + + The object that may be serialized to string form. + The method that will serialize the object if called upon. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + The base namespace for this library from which all other namespaces derive. + + + + + The web.config file-specified provider of web resource URLs. + + + + + Tests for equality between two objects. Safely handles the case where one or both are null. + + The type of objects been checked for equality. + The first object. + The second object. + + true if the two objects are equal; false otherwise. + + + + Prepares a dictionary for printing as a string. + + The type of the key. + The type of the value. + The dictionary or sequence of name-value pairs. + An object whose ToString method will perform the actual work of generating the string. + + The work isn't done until (and if) the + method is actually called, which makes it great + for logging complex objects without being in a conditional block. + + + + + Offers deferred ToString processing for a list of elements, that are assumed + to generate just a single-line string. + + The type of elements contained in the list. + The list of elements. + An object whose ToString method will perform the actual work of generating the string. + + + + Offers deferred ToString processing for a list of elements. + + The type of elements contained in the list. + The list of elements. + if set to true, special formatting will be applied to the output to make it clear where one element ends and the next begins. + An object whose ToString method will perform the actual work of generating the string. + + + + Gets the web resource URL from a Page or object. + + Some type in resource assembly. + Name of the manifest resource. + An absolute URL + + + + Gets a human-readable description of the library name and version, including + whether the build is an official or private one. + + + + + Gets the assembly file version of the executing assembly, otherwise falls back to the assembly version. + + +
+
\ No newline at end of file diff --git a/lib/Mono.Data.Sqlite.dll b/lib/Mono.Data.Sqlite.dll new file mode 100644 index 0000000..dad79f0 Binary files /dev/null and b/lib/Mono.Data.Sqlite.dll differ diff --git a/lib/Mono.Security.dll b/lib/Mono.Security.dll new file mode 100644 index 0000000..1371f5c Binary files /dev/null and b/lib/Mono.Security.dll differ diff --git a/lib/MySql.Data.dll b/lib/MySql.Data.dll new file mode 100644 index 0000000..d7dc2ab Binary files /dev/null and b/lib/MySql.Data.dll differ diff --git a/lib/Npgsql.dll b/lib/Npgsql.dll new file mode 100644 index 0000000..593e366 Binary files /dev/null and b/lib/Npgsql.dll differ diff --git a/lib/ServiceStack.Api.Swagger.dll b/lib/ServiceStack.Api.Swagger.dll new file mode 100644 index 0000000..2077b51 Binary files /dev/null and b/lib/ServiceStack.Api.Swagger.dll differ diff --git a/lib/ServiceStack.Api.Swagger.xml b/lib/ServiceStack.Api.Swagger.xml new file mode 100644 index 0000000..fcd31ce --- /dev/null +++ b/lib/ServiceStack.Api.Swagger.xml @@ -0,0 +1,386 @@ + + + + ServiceStack.Api.Swagger + + + + + Represents a generic collection of key/value pairs that are ordered independently of the key and value. + + The type of the keys in the dictionary + The type of the values in the dictionary + + + + Adds an entry with the specified key and value into the IOrderedDictionary<TKey,TValue> collection with the lowest available index. + + The key of the entry to add. + The value of the entry to add. + The index of the newly added entry + + You can also use the property to add new elements by setting the value of a key that does not exist in the IOrderedDictionary<TKey,TValue> collection; however, if the specified key already exists in the IOrderedDictionary<TKey,TValue>, setting the property overwrites the old value. In contrast, the method does not modify existing elements. + An element with the same key already exists in the IOrderedDictionary<TKey,TValue> + The IOrderedDictionary<TKey,TValue> is read-only.
+ -or-
+ The IOrderedDictionary<TKey,TValue> has a fized size.
+
+ + + Inserts a new entry into the IOrderedDictionary<TKey,TValue> collection with the specified key and value at the specified index. + + The zero-based index at which the element should be inserted. + The key of the entry to add. + The value of the entry to add. The value can be if the type of the values in the dictionary is a reference type. + is less than 0.
+ -or-
+ is greater than .
+ An element with the same key already exists in the IOrderedDictionary<TKey,TValue>. + The IOrderedDictionary<TKey,TValue> is read-only.
+ -or-
+ The IOrderedDictionary<TKey,TValue> has a fized size.
+
+ + + Gets or sets the value at the specified index. + + The zero-based index of the value to get or set. + The value of the item at the specified index. + is less than 0.
+ -or-
+ is equal to or greater than .
+
+ + + Represents a generic collection of key/value pairs that are ordered independently of the key and value. + + The type of the keys in the dictionary + The type of the values in the dictionary + + + + Initializes a new instance of the OrderedDictionary<TKey,TValue> class. + + + + + Initializes a new instance of the OrderedDictionary<TKey,TValue> class using the specified initial capacity. + + The initial number of elements that the OrderedDictionary<TKey,TValue> can contain. + is less than 0 + + + + Initializes a new instance of the OrderedDictionary<TKey,TValue> class using the specified comparer. + + The IEqualityComparer<TKey> to use when comparing keys, or to use the default EqualityComparer<TKey> for the type of the key. + + + + Initializes a new instance of the OrderedDictionary<TKey,TValue> class using the specified initial capacity and comparer. + + The initial number of elements that the OrderedDictionary<TKey,TValue> collection can contain. + The IEqualityComparer<TKey> to use when comparing keys, or to use the default EqualityComparer<TKey> for the type of the key. + is less than 0 + + + + Converts the object passed as a key to the key type of the dictionary + + The key object to check + The key object, cast as the key type of the dictionary + is . + The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . + + + + Converts the object passed as a value to the value type of the dictionary + + The object to convert to the value type of the dictionary + The value object, converted to the value type of the dictionary + is , and the value type of the OrderedDictionary<TKey,TValue> is a value type. + The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . + + + + Inserts a new entry into the OrderedDictionary<TKey,TValue> collection with the specified key and value at the specified index. + + The zero-based index at which the element should be inserted. + The key of the entry to add. + The value of the entry to add. The value can be if the type of the values in the dictionary is a reference type. + is less than 0.
+ -or-
+ is greater than .
+ is . + An element with the same key already exists in the OrderedDictionary<TKey,TValue>. +
+ + + Inserts a new entry into the OrderedDictionary<TKey,TValue> collection with the specified key and value at the specified index. + + The zero-based index at which the element should be inserted. + The key of the entry to add. + The value of the entry to add. The value can be if the type of the values in the dictionary is a reference type. + is less than 0.
+ -or-
+ is greater than .
+ is .
+ -or-
+ is , and the value type of the OrderedDictionary<TKey,TValue> is a value type.
+ The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
+ -or-
+ The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
+ -or-
+ An element with the same key already exists in the OrderedDictionary<TKey,TValue>.
+
+ + + Removes the entry at the specified index from the OrderedDictionary<TKey,TValue> collection. + + The zero-based index of the entry to remove. + is less than 0.
+ -or-
+ index is equal to or greater than .
+
+ + + Adds an entry with the specified key and value into the OrderedDictionary<TKey,TValue> collection with the lowest available index. + + The key of the entry to add. + The value of the entry to add. This value can be . + A key cannot be , but a value can be. + You can also use the property to add new elements by setting the value of a key that does not exist in the OrderedDictionary<TKey,TValue> collection; however, if the specified key already exists in the OrderedDictionary<TKey,TValue>, setting the property overwrites the old value. In contrast, the method does not modify existing elements. + is + An element with the same key already exists in the OrderedDictionary<TKey,TValue> + + + + Adds an entry with the specified key and value into the OrderedDictionary<TKey,TValue> collection with the lowest available index. + + The key of the entry to add. + The value of the entry to add. This value can be . + The index of the newly added entry + A key cannot be , but a value can be. + You can also use the property to add new elements by setting the value of a key that does not exist in the OrderedDictionary<TKey,TValue> collection; however, if the specified key already exists in the OrderedDictionary<TKey,TValue>, setting the property overwrites the old value. In contrast, the method does not modify existing elements. + is + An element with the same key already exists in the OrderedDictionary<TKey,TValue> + + + + Adds an entry with the specified key and value into the OrderedDictionary<TKey,TValue> collection with the lowest available index. + + The key of the entry to add. + The value of the entry to add. This value can be . + is .
+ -or-
+ is , and the value type of the OrderedDictionary<TKey,TValue> is a value type.
+ The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
+ -or-
+ The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
+
+ + + Removes all elements from the OrderedDictionary<TKey,TValue> collection. + + The capacity is not changed as a result of calling this method. + + + + Determines whether the OrderedDictionary<TKey,TValue> collection contains a specific key. + + The key to locate in the OrderedDictionary<TKey,TValue> collection. + if the OrderedDictionary<TKey,TValue> collection contains an element with the specified key; otherwise, . + is + + + + Determines whether the OrderedDictionary<TKey,TValue> collection contains a specific key. + + The key to locate in the OrderedDictionary<TKey,TValue> collection. + if the OrderedDictionary<TKey,TValue> collection contains an element with the specified key; otherwise, . + is + The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . + + + + Returns the zero-based index of the specified key in the OrderedDictionary<TKey,TValue> + + The key to locate in the OrderedDictionary<TKey,TValue> + The zero-based index of , if is found in the OrderedDictionary<TKey,TValue>; otherwise, -1 + This method performs a linear search; therefore it has a cost of O(n) at worst. + + + + Removes the entry with the specified key from the OrderedDictionary<TKey,TValue> collection. + + The key of the entry to remove + if the key was found and the corresponding element was removed; otherwise, + + + + Removes the entry with the specified key from the OrderedDictionary<TKey,TValue> collection. + + The key of the entry to remove + + + + Copies the elements of the OrderedDictionary<TKey,TValue> elements to a one-dimensional Array object at the specified index. + + The one-dimensional object that is the destination of the objects copied from the OrderedDictionary<TKey,TValue>. The must have zero-based indexing. + The zero-based index in at which copying begins. + The method preserves the order of the elements in the OrderedDictionary<TKey,TValue> + + + + Gets the value associated with the specified key. + + The key of the value to get. + When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of . This parameter can be passed uninitialized. + if the OrderedDictionary<TKey,TValue> contains an element with the specified key; otherwise, . + + + + Adds the specified value to the OrderedDictionary<TKey,TValue> with the specified key. + + The KeyValuePair<TKey,TValue> structure representing the key and value to add to the OrderedDictionary<TKey,TValue>. + + + + Determines whether the OrderedDictionary<TKey,TValue> contains a specific key and value. + + The KeyValuePair<TKey,TValue> structure to locate in the OrderedDictionary<TKey,TValue>. + if is found in the OrderedDictionary<TKey,TValue>; otherwise, . + + + + Copies the elements of the OrderedDictionary<TKey,TValue> to an array of type , starting at the specified index. + + The one-dimensional array of type KeyValuePair<TKey,TValue> that is the destination of the KeyValuePair<TKey,TValue> elements copied from the OrderedDictionary<TKey,TValue>. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + + Removes a key and value from the dictionary. + + The KeyValuePair<TKey,TValue> structure representing the key and value to remove from the OrderedDictionary<TKey,TValue>. + if the key and value represented by is successfully found and removed; otherwise, . This method returns if is not found in the OrderedDictionary<TKey,TValue>. + + + + Gets the dictionary object that stores the keys and values + + The dictionary object that stores the keys and values for the OrderedDictionary<TKey,TValue> + Accessing this property will create the dictionary object if necessary + + + + Gets the list object that stores the key/value pairs. + + The list object that stores the key/value pairs for the OrderedDictionary<TKey,TValue> + Accessing this property will create the list object if necessary. + + + + Gets or sets the value at the specified index. + + The zero-based index of the value to get or set. + The value of the item at the specified index. + is less than 0.
+ -or-
+ index is equal to or greater than .
+
+ + + Gets or sets the value at the specified index. + + The zero-based index of the value to get or set. + The value of the item at the specified index. + is less than 0.
+ -or-
+ index is equal to or greater than .
+ is a null reference, and the value type of the OrderedDictionary<TKey,TValue> is a value type. + The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . +
+ + + Gets a value indicating whether the OrderedDictionary<TKey,TValue> has a fixed size. + + if the OrderedDictionary<TKey,TValue> has a fixed size; otherwise, . The default is . + + + + Gets a value indicating whether the OrderedDictionary<TKey,TValue> collection is read-only. + + if the OrderedDictionary<TKey,TValue> is read-only; otherwise, . The default is . + + A collection that is read-only does not allow the addition, removal, or modification of elements after the collection is created. + A collection that is read-only is simply a collection with a wrapper that prevents modification of the collection; therefore, if changes are made to the underlying collection, the read-only collection reflects those changes. + + + + + Gets an object containing the keys in the OrderedDictionary<TKey,TValue>. + + An object containing the keys in the OrderedDictionary<TKey,TValue>. + The returned object is not a static copy; instead, the collection refers back to the keys in the original OrderedDictionary<TKey,TValue>. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the key collection. + + + + Gets an object containing the values in the OrderedDictionary<TKey,TValue> collection. + + An object containing the values in the OrderedDictionary<TKey,TValue> collection. + The returned object is not a static copy; instead, the refers back to the values in the original OrderedDictionary<TKey,TValue> collection. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the . + + + + Gets or sets the value with the specified key. + + The key of the value to get or set. + The value associated with the specified key. If the specified key is not found, attempting to get it returns , and attempting to set it creates a new element using the specified key. + + + + Gets or sets the value with the specified key. + + The key of the value to get or set. + The value associated with the specified key. If the specified key is not found, attempting to get it returns , and attempting to set it creates a new element using the specified key. + + + + Gets the number of key/values pairs contained in the OrderedDictionary<TKey,TValue> collection. + + The number of key/value pairs contained in the OrderedDictionary<TKey,TValue> collection. + + + + Gets a value indicating whether access to the OrderedDictionary<TKey,TValue> object is synchronized (thread-safe). + + This method always returns false. + + + + Gets an object that can be used to synchronize access to the OrderedDictionary<TKey,TValue> object. + + An object that can be used to synchronize access to the OrderedDictionary<TKey,TValue> object. + + + + Gets an ICollection<TKey> object containing the keys in the OrderedDictionary<TKey,TValue>. + + An ICollection<TKey> object containing the keys in the OrderedDictionary<TKey,TValue>. + The returned ICollection<TKey> object is not a static copy; instead, the collection refers back to the keys in the original OrderedDictionary<TKey,TValue>. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the key collection. + + + + Gets an ICollection<TValue> object containing the values in the OrderedDictionary<TKey,TValue>. + + An ICollection<TValue> object containing the values in the OrderedDictionary<TKey,TValue>. + The returned ICollection<TKey> object is not a static copy; instead, the collection refers back to the values in the original OrderedDictionary<TKey,TValue>. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the value collection. + + + + Gets or sets pattern to filter available resources. + + +
+
diff --git a/lib/ServiceStack.Authentication.OAuth2.dll b/lib/ServiceStack.Authentication.OAuth2.dll new file mode 100644 index 0000000..d15ef99 Binary files /dev/null and b/lib/ServiceStack.Authentication.OAuth2.dll differ diff --git a/lib/ServiceStack.Authentication.OAuth2.xml b/lib/ServiceStack.Authentication.OAuth2.xml new file mode 100644 index 0000000..382999d --- /dev/null +++ b/lib/ServiceStack.Authentication.OAuth2.xml @@ -0,0 +1,13 @@ + + + + ServiceStack.Authentication.OAuth2 + + + + + Create new App at: https://www.linkedin.com/secure/developer + + + + diff --git a/lib/ServiceStack.Client.dll b/lib/ServiceStack.Client.dll new file mode 100644 index 0000000..1c54bd8 Binary files /dev/null and b/lib/ServiceStack.Client.dll differ diff --git a/lib/ServiceStack.Client.xml b/lib/ServiceStack.Client.xml new file mode 100644 index 0000000..fc6d7f8 --- /dev/null +++ b/lib/ServiceStack.Client.xml @@ -0,0 +1,374 @@ + + + + ServiceStack.Client + + + + Need to provide async request options + http://msdn.microsoft.com/en-us/library/86wf6409(VS.71).aspx + + + + The request filter is called before any request. + This request filter is executed globally. + + + + + The response action is called once the server response is available. + It will allow you to access raw response information. + This response action is executed globally. + Note that you should NOT consume the response stream as this is handled by ServiceStack + + + + + Called before request resend, when the initial request required authentication + + + + + The request filter is called before any request. + This request filter only works with the instance where it was set (not global). + + + + + The response action is called once the server response is available. + It will allow you to access raw response information. + Note that you should NOT consume the response stream as this is handled by ServiceStack + + + + + Returns the next message from queueName or null if no message + + + + + + + Generic Proxy for service calls. + + The service Contract + + + + Returns the transparent proxy for the service call + + + + Need to provide async request options + http://msdn.microsoft.com/en-us/library/86wf6409(VS.71).aspx + + + + The request filter is called before any request. + This request filter is executed globally. + + + + + The response action is called once the server response is available. + It will allow you to access raw response information. + This response action is executed globally. + Note that you should NOT consume the response stream as this is handled by ServiceStack + + + + + Sets all baseUri properties, using the Format property for the SyncReplyBaseUri and AsyncOneWayBaseUri + + Base URI of the service + + + + Whether to Accept Gzip,Deflate Content-Encoding and to auto decompress responses + + + + + The user name for basic authentication + + + + + The password for basic authentication + + + + + Sets the username and the password for basic authentication. + + + + + Determines if the basic auth header should be sent with every request. + By default, the basic auth header is only sent when "401 Unauthorized" is returned. + + + + + Specifies if cookies should be stored + + + + + Called by Send method if an exception occurs, for instance a System.Net.WebException because the server + returned an HTTP error code. Override if you want to handle specific exceptions or always want to parse the + response to a custom ErrorResponse DTO type instead of ServiceStack's ErrorResponse class. In case ex is a + System.Net.WebException, do not use + createWebRequest/getResponse/HandleResponse<TResponse> to parse the response + because that will result in the same exception again. Use + ThrowWebServiceException<YourErrorResponseType> to parse the response and to throw a + WebServiceException containing the parsed DTO. Then override Send to handle that exception. + + + + + Gets the collection of headers to be added to outgoing requests. + + + + + Whether to execute async callbacks on the same Synchronization Context it was called from. + + + + + Gets or sets authentication information for the request. + Warning: It's recommened to use and for basic auth. + This property is only used for IIS level authentication. + + + + + Called before request resend, when the initial request required authentication + + + + + The request filter is called before any request. + This request filter only works with the instance where it was set (not global). + + + + + The response action is called once the server response is available. + It will allow you to access raw response information. + Note that you should NOT consume the response stream as this is handled by ServiceStack + + + + + Creates the error response from the values provided. + + If the errorCode is empty it will use the first validation error code, + if there is none it will throw an error. + + The error code. + The error message. + The validation errors. + + + + + Default MaxStringContentLength is 8k, and throws an exception when reached + + + + + Serializer cache of delegates required to create a type from a string map (e.g. for REST urls) + + + + + Gets the namespace from an attribute marked on the type's definition + + + Namespace of type + + + + Specifies if cookies should be stored + + + + + Compresses the specified text using the default compression method: Deflate + + The text. + Type of the compression. + + + + + Decompresses the specified gz buffer using the default compression method: Inflate + + The gz buffer. + Type of the compression. + + + + + Donated by Ivan Korneliuk from his post: + http://korneliuk.blogspot.com/2012/08/servicestack-reusing-dtos.html + + Modified to only allow using routes matching the supplied HTTP Verb + + + + + Generate a url from a Request DTO. Pretty URL generation require Routes to be defined using `[Route]` on the Request DTO + + + + + The exception which is thrown when a validation error occurred. + This validation is serialized in a extra clean and human-readable way by ServiceStack. + + + + + Used if we need to serialize this exception to XML + + + + + + Returns the first error code + + The error code. + + + + Encapsulates a validation result. + + + + + Constructs a new ValidationResult + + + + + Constructs a new ValidationResult + + A list of validation results + + + + Initializes a new instance of the class. + + The errors. + The success code. + The error code. + + + + Merge errors from another + + + + + + Gets or sets the success code. + + The success code. + + + + Gets or sets the error code. + + The error code. + + + + Gets or sets the success message. + + The success message. + + + + Gets or sets the error message. + + The error message. + + + + The errors generated by the validation. + + + + + Returns True if the validation was successful (errors list is empty). + + + + + Adds the singleton instance of to an endpoint on the client. + + + Based on http://megakemp.wordpress.com/2009/02/06/managing-shared-cookies-in-wcf/ + + + + + Adds the singleton of the class to the client endpoint's message inspectors. + + The endpoint that is to be customized. + The client runtime to be customized. + + + + Maintains a copy of the cookies contained in the incoming HTTP response received from any service + and appends it to all outgoing HTTP requests. + + + This class effectively allows to send any received HTTP cookies to different services, + reproducing the same functionality available in ASMX Web Services proxies with the class. + Based on http://megakemp.wordpress.com/2009/02/06/managing-shared-cookies-in-wcf/ + + + + + Initializes a new instance of the class. + + + + + Inspects a message after a reply message is received but prior to passing it back to the client application. + + The message to be transformed into types and handed back to the client application. + Correlation state data. + + + + Inspects a message before a request message is sent to a service. + + The message to be sent to the service. + The client object channel. + + Null since no message correlation is used. + + + + + Gets the singleton instance. + + + + + Naming convention for the request's Response DTO + + + + + Shortcut to get the ResponseStatus whether it's bare or inside a IHttpResult + + + + + + diff --git a/lib/ServiceStack.Common.dll b/lib/ServiceStack.Common.dll new file mode 100644 index 0000000..69e198b Binary files /dev/null and b/lib/ServiceStack.Common.dll differ diff --git a/lib/ServiceStack.Common.xml b/lib/ServiceStack.Common.xml new file mode 100644 index 0000000..dd5c393 --- /dev/null +++ b/lib/ServiceStack.Common.xml @@ -0,0 +1,226 @@ + + + + ServiceStack.Common + + + + + Useful .NET Encryption Utils from: + http://andrewlocatelliwoodcock.com/2011/08/01/implementing-rsa-asymmetric-public-private-key-encryption-in-c-encrypting-under-the-public-key/ + + + + + Encrypt an arbitrary string of data under the supplied public key + + The public key to encrypt under + The data to encrypt + The bit length or strength of the public key: 1024, 2048 or 4096 bits. This must match the + value actually used to create the publicKey + + + + + Create Public and Private Key Pair based on settings already in static class. + + RsaKeyPair + + + + Gets the textual description of the enum if it has one. e.g. + + + enum UserColors + { + [Description("Bright Red")] + BrightRed + } + UserColors.BrightRed.ToDescription(); + + + + + + + + Creates a Console Logger, that logs all messages to: System.Console + + Made public so its testable + + + + + Default logger is to Console.WriteLine + + Made public so its testable + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Logs the specified message. + + + + + Logs the format. + + + + + Logs the specified message. + + + + + Useful IPAddressExtensions from: + http://blogs.msdn.com/knom/archive/2008/12/31/ip-address-calculations-with-c-subnetmasks-networks.aspx + + + + + + Gets the ipv4 addresses from all Network Interfaces that have Subnet masks. + + + + + + Gets the ipv6 addresses from all Network Interfaces. + + + + + + Func to get the Strongly-typed field + + + + + Required to cast the return ValueType to an object for caching + + + + + Func to set the Strongly-typed field + + + + + Required to cast the ValueType to an object for caching + + + + + Required to cast the ValueType to an object for caching + + + + + Func to get the Strongly-typed field + + + + + Required to cast the return ValueType to an object for caching + + + + + Func to set the Strongly-typed field + + + + + Required to cast the ValueType to an object for caching + + + + + Required to cast the ValueType to an object for caching + + + + + Common functionality when creating adapters + + + + + Executes the specified expression. + + + The action. + + + + + Executes the specified action (for void methods). + + The action. + + + + Note: InMemoryLog keeps all logs in memory, so don't use it long running exceptions + + Returns a thread-safe InMemoryLog which you can use while *TESTING* + to provide a detailed analysis of your logs. + + + + + Creates a Unified Resource Name (URN) with the following formats: + + - urn:{TypeName}:{IdFieldValue} e.g. urn:UserSession:1 + - urn:{TypeName}:{IdFieldName}:{IdFieldValue} e.g. urn:UserSession:UserId:1 + + + + + + + Provide the an option for the callee to block until all commands are executed + + + + + + + Invokes the action provided and returns true if no excpetion was thrown. + Otherwise logs the exception and returns false if an exception was thrown. + + The action. + + + + + Runs an action for a minimum of runForMs + + What to run + Minimum ms to run for + time elapsed in micro seconds + + + + Returns average microseconds an action takes when run for the specified runForMs + + What to run + How many times to run for each iteration + Minimum ms to run for + + + + + + + diff --git a/lib/ServiceStack.Interfaces.dll b/lib/ServiceStack.Interfaces.dll new file mode 100644 index 0000000..bffaa81 Binary files /dev/null and b/lib/ServiceStack.Interfaces.dll differ diff --git a/lib/ServiceStack.OrmLite.MySql.dll b/lib/ServiceStack.OrmLite.MySql.dll new file mode 100644 index 0000000..e95fb31 Binary files /dev/null and b/lib/ServiceStack.OrmLite.MySql.dll differ diff --git a/lib/ServiceStack.OrmLite.PostgreSQL.dll b/lib/ServiceStack.OrmLite.PostgreSQL.dll new file mode 100644 index 0000000..862f1ee Binary files /dev/null and b/lib/ServiceStack.OrmLite.PostgreSQL.dll differ diff --git a/lib/ServiceStack.OrmLite.SqlServer.dll b/lib/ServiceStack.OrmLite.SqlServer.dll new file mode 100644 index 0000000..c86f4be Binary files /dev/null and b/lib/ServiceStack.OrmLite.SqlServer.dll differ diff --git a/lib/ServiceStack.OrmLite.Sqlite.dll b/lib/ServiceStack.OrmLite.Sqlite.dll new file mode 100644 index 0000000..0cbce80 Binary files /dev/null and b/lib/ServiceStack.OrmLite.Sqlite.dll differ diff --git a/lib/ServiceStack.OrmLite.dll b/lib/ServiceStack.OrmLite.dll new file mode 100644 index 0000000..d015aa5 Binary files /dev/null and b/lib/ServiceStack.OrmLite.dll differ diff --git a/lib/ServiceStack.OrmLite.xml b/lib/ServiceStack.OrmLite.xml new file mode 100644 index 0000000..4f3cc74 --- /dev/null +++ b/lib/ServiceStack.OrmLite.xml @@ -0,0 +1,1768 @@ + + + + ServiceStack.OrmLite + + + + + Enables the efficient, dynamic composition of query predicates. + + + + + Creates a predicate that evaluates to true. + + + + + Creates a predicate that evaluates to false. + + + + + Creates a predicate expression from the specified lambda expression. + + + + + Combines the first predicate with the second using the logical "and". + + + + + Combines the first predicate with the second using the logical "or". + + + + + Negates the predicate. + + + + + Combines the first expression with the second using the specified merge function. + + + + + Create a new SqlExpression builder allowing typed LINQ-like queries. + + + + + Creates a new SqlExpression builder allowing typed LINQ-like queries. + Alias for SqlExpression. + + + + + Creates a new SqlExpression builder for the specified type using a user-defined FROM sql expression. + + + + + Open a Transaction in OrmLite + + + + + Open a Transaction in OrmLite + + + + + Return the IOrmLiteDialectProvider on this connection. + + + + + Returns results from using a LINQ Expression. E.g: + db.Select<Person>(x => x.Age > 40) + + + + + Returns results from using an SqlExpression lambda. E.g: + db.Select<Person>(q => q.Where(x => x.Age > 40)) + + + + + Returns results from using an SqlExpression lambda. E.g: + db.Select(db.SqlExpression<Person>().Where(x => x.Age > 40)) + + + + + Returns a single result from using a LINQ Expression. E.g: + db.Single<Person>(x => x.Age == 42) + + + + + Returns a single result from using an SqlExpression lambda. E.g: + db.Single<Person>(q => q.Where(x => x.Age == 42)) + + + + + Returns results from using an SqlExpression lambda. E.g: + db.Select<Person>(x => x.Age > 40) + + + + + Returns a scalar result from using an SqlExpression lambda. E.g: + db.Scalar<Person, int>(x => Sql.Max(x.Age)) + + + + + Returns a scalar result from using an SqlExpression lambda. E.g: + db.Scalar<Person, int>(x => Sql.Max(x.Age), , x => x.Age < 50) + + + + + Returns the count of rows that match the LINQ expression, E.g: + db.Count<Person>(x => x.Age < 50) + + + + + Returns the count of rows that match the SqlExpression lambda, E.g: + db.Count<Person>(q => q.Where(x => x.Age < 50)) + + + + + Returns the count of rows that match the supplied SqlExpression, E.g: + db.Count(db.SqlExpression<Person>().Where(x => x.Age < 50)) + + + + + Insert only fields in POCO specified by the SqlExpression lambda. E.g: + db.InsertOnly(new Person { FirstName = "Amy", Age = 27 }, ev => ev.Insert(p => new { p.FirstName, p.Age })) + + + + + Wrapper IDbConnection class to manage db connection events + + + + + Returns results from the active connection. + + + + + Returns results from using sql. E.g: + db.Select<Person>("Age > 40") + db.Select<Person>("SELECT * FROM Person WHERE Age > 40") + + + + + Returns results from using a parameterized query. E.g: + db.Select<Person>("Age > @age", new { age = 40}) + db.Select<Person>("SELECT * FROM Person WHERE Age > @age", new { age = 40}) + + + + + Returns results from using a parameterized query. E.g: + db.Select<Person>("Age > @age", new Dictionary<string, object> { { "age", 40 } }) + db.Select<Person>("SELECT * FROM Person WHERE Age > @age", new Dictionary<string, object> { { "age", 40 } }) + + + + + Returns results from using an SqlFormat query. E.g: + db.SelectFmt<Person>("Age > {0}", 40) + db.SelectFmt<Person>("SELECT * FROM Person WHERE Age > {0}", 40) + + + + + Returns a partial subset of results from the specified tableType. E.g: + db.Select<EntityWithId>(typeof(Person)) + + + + + + Returns a partial subset of results from the specified tableType using a SqlFormat query. E.g: + db.SelectFmt<EntityWithId>(typeof(Person), "Age > {0}", 40) + + + + + Returns results from using a single name, value filter. E.g: + db.Where<Person>("Age", 27) + + + + + Returns results from using an anonymous type filter. E.g: + db.Where<Person>(new { Age = 27 }) + + + + + Returns results using the supplied primary key ids. E.g: + db.SelectByIds<Person>(new[] { 1, 2, 3 }) + + + + + Query results using the non-default values in the supplied partially populated POCO example. E.g: + db.SelectNonDefaults(new Person { Id = 1 }) + + + + + Query results using the non-default values in the supplied partially populated POCO example. E.g: + db.SelectNonDefaults("Age > @Age", new Person { Age = 42 }) + + + + + Returns a lazyily loaded stream of results. E.g: + db.SelectLazy<Person>() + + + + + Returns a lazyily loaded stream of results using a parameterized query. E.g: + db.SelectLazy<Person>("Age > @age", new { age = 40 }) + + + + + Returns a lazyily loaded stream of results using an SqlFilter query. E.g: + db.SelectLazyFmt<Person>("Age > {0}", 40) + + + + + Returns a stream of results that are lazily loaded using a parameterized query. E.g: + db.WhereLazy<Person>(new { Age = 27 }) + + + + + Returns the first result using a parameterized query. E.g: + db.Single<Person>(new { Age = 42 }) + + + + + Returns results from using a single name, value filter. E.g: + db.Single<Person>("Age = @age", new { age = 42 }) + + + + + Returns the first result using a SqlFormat query. E.g: + db.SingleFmt<Person>("Age = {0}", 42) + + + + + Returns the first result using a primary key id. E.g: + db.SingleById<Person>(1) + + + + + Returns the first result using a name, value filter. E.g: + db.SingleWhere<Person>("Age", 42) + + + + + Returns a single scalar value using an SqlExpression. E.g: + db.Column<int>(db.From<Persion>().Select(x => Sql.Count("*")).Where(q => q.Age > 40)) + + + + + Returns a single scalar value using a parameterized query. E.g: + db.Scalar<int>("SELECT COUNT(*) FROM Person WHERE Age > @age", new { age = 40 }) + + + + + Returns a single scalar value using an SqlFormat query. E.g: + db.ScalarFmt<int>("SELECT COUNT(*) FROM Person WHERE Age > {0}", 40) + + + + + Returns the distinct first column values in a HashSet using an SqlExpression. E.g: + db.Column<int>(db.From<Persion>().Select(x => x.LastName).Where(q => q.Age == 27)) + + + + + Returns the first column in a List using a SqlFormat query. E.g: + db.Column<string>("SELECT LastName FROM Person WHERE Age = @age", new { age = 27 }) + + + + + Returns the first column in a List using a SqlFormat query. E.g: + db.ColumnFmt<string>("SELECT LastName FROM Person WHERE Age = {0}", 27) + + + + + + Returns the distinct first column values in a HashSet using an SqlFormat query. E.g: + db.ColumnDistinct<int>("SELECT Age FROM Person WHERE Age < @age", new { age = 50 }) + + + + + Returns the distinct first column values in a HashSet using an SqlFormat query. E.g: + db.ColumnDistinctFmt<int>("SELECT Age FROM Person WHERE Age < {0}", 50) + + + + + + Returns an Dictionary<K, List<V>> grouping made from the first two columns using an parameterized query. E.g: + db.Lookup<int, string>("SELECT Age, LastName FROM Person WHERE Age < @age", new { age = 50 }) + + + + + Returns an Dictionary<K, List<V>> grouping made from the first two columns using an SqlFormat query. E.g: + db.LookupFmt<int, string>("SELECT Age, LastName FROM Person WHERE Age < {0}", 50) + + + + + + Returns a Dictionary from the first 2 columns: Column 1 (Keys), Column 2 (Values) using sql. E.g: + db.Dictionary<int, string>("SELECT Id, LastName FROM Person WHERE Age < @age", new { age = 50 }) + + + + + Returns a Dictionary from the first 2 columns: Column 1 (Keys), Column 2 (Values) using an SqlFormat query. E.g: + db.DictionaryFmt<int, string>("SELECT Id, LastName FROM Person WHERE Age < {0}", 50) + + + + + Returns true if the Query returns any records that match the LINQ expression, E.g: + db.Exists<Person>(x => x.Age < 50) + + + + + Returns true if the Query returns any records that match the SqlExpression lambda, E.g: + db.Exists<Person>(q => q.Where(x => x.Age < 50)) + + + + + Returns true if the Query returns any records that match the supplied SqlExpression, E.g: + db.Exists(db.From<Person>().Where(x => x.Age < 50)) + + + + + Returns true if the Query returns any records, using an SqlFormat query. E.g: + db.Exists<Person>(new { Age = 42 }) + + + + + Returns true if the Query returns any records, using a parameterized query. E.g: + db.Exists<Person>("Age = @age", new { age = 42 }) + db.Exists<Person>("SELECT * FROM Person WHERE Age = @age", new { age = 42 }) + + + + + Returns true if the Query returns any records, using an SqlFormat query. E.g: + db.ExistsFmt<Person>("Age = {0}", 42) + db.ExistsFmt<Person>("SELECT * FROM Person WHERE Age = {0}", 50) + + + + + Returns results from an arbitrary SqlExpression. E.g: + db.SqlList<Person>(db.From<Person>().Select("*").Where(q => q.Age < 50)) + + + + + Returns results from an arbitrary parameterized raw sql query. E.g: + db.SqlList<Person>("EXEC GetRockstarsAged @age", new { age = 50 }) + + + + + Returns results from an arbitrary parameterized raw sql query. E.g: + db.SqlList<Person>("EXEC GetRockstarsAged @age", new Dictionary<string, object> { { "age", 42 } }) + + + + + + Returns the first column in a List using a parameterized query. E.g: + db.SqlColumn<string>("SELECT LastName FROM Person WHERE Age < @age", new { age = 50 }) + + + + + Returns the first column in a List using a parameterized query. E.g: + db.SqlColumn<string>("SELECT LastName FROM Person WHERE Age < @age", new Dictionary<string, object> { { "age", 50 } }) + + + + + Returns a single Scalar value using an SqlExpression. E.g: + db.SqlScalar<int>(db.From<Person>().Select(Sql.Count("*")).Where(q => q.Age < 50)) + + + + + Returns a single Scalar value using a parameterized query. E.g: + db.SqlScalar<int>("SELECT COUNT(*) FROM Person WHERE Age < @age", new { age = 50 }) + + + + + Returns a single Scalar value using a parameterized query. E.g: + db.SqlScalar<int>("SELECT COUNT(*) FROM Person WHERE Age < @age", new Dictionary<string, object> { { "age", 50 } }) + + + + + Returns the last insert Id made from this connection. + + + + + Executes a raw sql non-query using sql. E.g: + var rowsAffected = db.ExecuteNonQuery("UPDATE Person SET LastName={0} WHERE Id={1}".SqlFormat("WaterHouse", 7)) + + number of rows affected + + + + Executes a raw sql non-query using a parameterized query. E.g: + var rowsAffected = db.ExecuteNonQuery("UPDATE Person SET LastName=@name WHERE Id=@id", new { name = "WaterHouse", id = 7 }) + + number of rows affected + + + + Executes a raw sql non-query using a parameterized query. + + number of rows affected + + + + Returns results from a Stored Procedure, using a parameterized query. + + + + + Returns results from a Stored Procedure using an SqlFormat query. E.g: + + + + + + Returns the scalar result as a long. + + + + + Returns the first result with all its references loaded, using a primary key id. E.g: + db.LoadSingleById<Person>(1) + + + + + Populates all related references on the instance with its primary key and saves them. Uses '(T)Id' naming convention. E.g: + db.SaveAllReferences(customer) + + + + + Populates the related references with the instance primary key and saves them. Uses '(T)Id' naming convention. E.g: + db.SaveReference(customer, customer.Orders) + + + + + Populates the related references with the instance primary key and saves them. Uses '(T)Id' naming convention. E.g: + db.SaveReference(customer, customer.Orders) + + + + + Populates the related references with the instance primary key and saves them. Uses '(T)Id' naming convention. E.g: + db.SaveReferences(customer, customer.Orders) + + + + + Loads all the related references onto the instance. E.g: + db.LoadReferences(customer) + + + + + Checks whether a Table Exists. E.g: + db.TableExists("Person") + + + + + Create DB Tables from the schemas of runtime types. E.g: + db.CreateTables(typeof(Table1), typeof(Table2)) + + + + + Create DB Table from the schema of the runtime type. Use overwrite to drop existing Table. E.g: + db.CreateTable(true, typeof(Table)) + + + + + Only Create new DB Tables from the schemas of runtime types if they don't already exist. E.g: + db.CreateTableIfNotExists(typeof(Table1), typeof(Table2)) + + + + + Drop existing DB Tables and re-create them from the schemas of runtime types. E.g: + db.DropAndCreateTables(typeof(Table1), typeof(Table2)) + + + + + Create a DB Table from the generic type. Use overwrite to drop the existing table or not. E.g: + db.CreateTable<Person>(overwrite=false) //default + db.CreateTable<Person>(overwrite=true) + + + + + Only create a DB Table from the generic type if it doesn't already exist. E.g: + db.CreateTableIfNotExists<Person>() + + + + + Only create a DB Table from the runtime type if it doesn't already exist. E.g: + db.CreateTableIfNotExists(typeof(Person)) + + + + + Drop existing table if exists and re-create a DB Table from the generic type. E.g: + db.DropAndCreateTable<Person>() + + + + + Drop existing table if exists and re-create a DB Table from the runtime type. E.g: + db.DropAndCreateTable(typeof(Person)) + + + + + Drop any existing tables from their runtime types. E.g: + db.DropTables(typeof(Table1),typeof(Table2)) + + + + + Drop any existing tables from the runtime type. E.g: + db.DropTable(typeof(Person)) + + + + + Drop any existing tables from the generic type. E.g: + db.DropTable<Person>() + + + + + Get the last SQL statement that was executed. + + + + + Execute any arbitrary raw SQL. + + number of rows affected + + + + Insert 1 POCO, use selectIdentity to retrieve the last insert AutoIncrement id (if any). E.g: + var id = db.Insert(new Person { Id = 1, FirstName = "Jimi }, selectIdentity:true) + + + + + Insert 1 or more POCOs in a transaction. E.g: + db.Insert(new Person { Id = 1, FirstName = "Tupac", LastName = "Shakur", Age = 25 }, + new Person { Id = 2, FirstName = "Biggie", LastName = "Smalls", Age = 24 }) + + + + + Insert a collection of POCOs in a transaction. E.g: + db.InsertAll(new[] { new Person { Id = 9, FirstName = "Biggie", LastName = "Smalls", Age = 24 } }) + + + + + Updates 1 POCO. All fields are updated except for the PrimaryKey which is used as the identity selector. E.g: + db.Update(new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix", Age = 27 }) + + + + + Updates 1 or more POCOs in a transaction. E.g: + db.Update(new Person { Id = 1, FirstName = "Tupac", LastName = "Shakur", Age = 25 }, + new Person { Id = 2, FirstName = "Biggie", LastName = "Smalls", Age = 24 }) + + + + + Updates 1 or more POCOs in a transaction. E.g: + db.UpdateAll(new[] { new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix", Age = 27 } }) + + + + + Delete rows using an anonymous type filter. E.g: + db.Delete<Person>(new { FirstName = "Jimi", Age = 27 }) + + number of rows deleted + + + + Delete 1 or more rows in a transaction using an anonymous type filter. E.g: + db.Delete<Person>(new { FirstName = "Jimi", Age = 27 }, new { FirstName = "Janis", Age = 27 }) + + + + + Delete 1 row using all fields in the filter. E.g: + db.Delete(new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix", Age = 27 }) + + number of rows deleted + + + + Delete 1 or more rows in a transaction using all fields in the filter. E.g: + db.Delete(new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix", Age = 27 }) + + + + + Delete 1 or more rows using only field with non-default values in the filter. E.g: + db.DeleteNonDefaults(new Person { FirstName = "Jimi", Age = 27 }) + + number of rows deleted + + + + Delete 1 or more rows in a transaction using only field with non-default values in the filter. E.g: + db.DeleteNonDefaults(new Person { FirstName = "Jimi", Age = 27 }, + new Person { FirstName = "Janis", Age = 27 }) + + number of rows deleted + + + + Delete 1 row by the PrimaryKey. E.g: + db.DeleteById<Person>(1) + + number of rows deleted + + + + Delete all rows identified by the PrimaryKeys. E.g: + db.DeleteById<Person>(new[] { 1, 2, 3 }) + + number of rows deleted + + + + Delete all rows in the generic table type. E.g: + db.DeleteAll<Person>() + + number of rows deleted + + + + Delete all rows in the runtime table type. E.g: + db.DeleteAll(typeof(Person)) + + number of rows deleted + + + + Delete rows using a SqlFormat filter. E.g: + + number of rows deleted + + + + Delete rows from the runtime table type using a SqlFormat filter. E.g: + + db.DeleteFmt(typeof(Person), "Age = {0}", 27) + number of rows deleted + + + + Insert a new row or update existing row. Returns true if a new row was inserted. + Optional references param decides whether to save all related references as well. E.g: + db.Save(customer, references:true) + + true if a row was inserted; false if it was updated + + + + Insert new rows or update existing rows. Return number of rows added E.g: + db.Save(new Person { Id = 10, FirstName = "Amy", LastName = "Winehouse", Age = 27 }) + + number of rows added + + + + Insert new rows or update existing rows. Return number of rows added E.g: + db.SaveAll(new [] { new Person { Id = 10, FirstName = "Amy", LastName = "Winehouse", Age = 27 } }) + + number of rows added + + + + Wrapper IDbConnection class to allow for connection sharing, mocking, etc. + + + + + Allow for mocking and unit testing by providing non-disposing + connection factory with injectable IDbCommand and IDbTransaction proxies + + + + + Force the IDbConnection to always return this IDbCommand + + + + + Force the IDbConnection to always return this IDbTransaction + + + + + Alias for OpenDbConnection + + + + + Alias for OpenDbConnection + + + + + Allow for code-sharing between OrmLite, IPersistenceProvider and ICacheClient + + + + + Quote the string so that it can be used inside an SQL-expression + Escape quotes inside the string + + + + + + + Populates row fields during re-hydration of results. + + + + Fmt + + + + Nice SqlBuilder class by @samsaffron from Dapper.Contrib: + http://samsaffron.com/archive/2011/09/05/Digging+ourselves+out+of+the+mess+Linq-2-SQL+created + Modified to work in .NET 3.5 + + + + + Clear select expression. All properties will be selected. + + + + + set the specified selectExpression. + + + raw Select expression: "Select SomeField1, SomeField2 from SomeTable" + + + + + Fields to be selected. + + + x=> x.SomeProperty1 or x=> new{ x.SomeProperty1, x.SomeProperty2} + + + objectWithProperties + + + + + Offset of the first row to return. The offset of the initial row is 0 + + + + + Number of rows returned by a SELECT statement + + + + + Set the specified offset and rows for SQL Limit clause. + + + Offset of the first row to return. The offset of the initial row is 0 + + + Number of rows returned by a SELECT statement + + + + + Set the specified offset and rows for SQL Limit clause where they exist. + + + Offset of the first row to return. The offset of the initial row is 0 + + + Number of rows returned by a SELECT statement + + + + + Set the specified rows for Sql Limit clause. + + + Number of rows returned by a SELECT statement + + + + + Clear Sql Limit clause + + + + + Clear Offset and Limit clauses. Alias for Limit() + + + + + + + Fields to be updated. + + + x=> x.SomeProperty1 or x=> new{ x.SomeProperty1, x.SomeProperty2} + + + objectWithProperties + + + + + Clear UpdateFields list ( all fields will be updated) + + + + + Fields to be inserted. + + + x=> x.SomeProperty1 or x=> new{ x.SomeProperty1, x.SomeProperty2} + + + objectWithProperties + + + + + fields to be inserted. + + + IList<string> containing Names of properties to be inserted + + + + + Clear InsertFields list ( all fields will be inserted) + + + + + Use an expression visitor to select which fields to update and construct the where expression, E.g: + + dbCmd.UpdateOnly(new Person { FirstName = "JJ" }, ev => ev.Update(p => p.FirstName).Where(x => x.FirstName == "Jimi")); + UPDATE "Person" SET "FirstName" = 'JJ' WHERE ("FirstName" = 'Jimi') + + What's not in the update expression doesn't get updated. No where expression updates all rows. E.g: + + dbCmd.UpdateOnly(new Person { FirstName = "JJ", LastName = "Hendo" }, ev => ev.Update(p => p.FirstName)); + UPDATE "Person" SET "FirstName" = 'JJ' + + + + + Use an expression visitor to select which fields to update and construct the where expression, E.g: + + var ev = OrmLiteConfig.DialectProvider.ExpressionVisitor>Person<()); + dbCmd.UpdateOnly(new Person { FirstName = "JJ" }, ev.Update(p => p.FirstName).Where(x => x.FirstName == "Jimi")); + UPDATE "Person" SET "FirstName" = 'JJ' WHERE ("FirstName" = 'Jimi') + + What's not in the update expression doesn't get updated. No where expression updates all rows. E.g: + + dbCmd.UpdateOnly(new Person { FirstName = "JJ", LastName = "Hendo" }, ev.Update(p => p.FirstName)); + UPDATE "Person" SET "FirstName" = 'JJ' + + + + + Update record, updating only fields specified in updateOnly that matches the where condition (if any), E.g: + + dbCmd.UpdateOnly(new Person { FirstName = "JJ" }, p => p.FirstName, p => p.LastName == "Hendrix"); + UPDATE "Person" SET "FirstName" = 'JJ' WHERE ("LastName" = 'Hendrix') + + dbCmd.UpdateOnly(new Person { FirstName = "JJ" }, p => p.FirstName); + UPDATE "Person" SET "FirstName" = 'JJ' + + + + + Updates all non-default values set on item matching the where condition (if any). E.g + + dbCmd.UpdateNonDefaults(new Person { FirstName = "JJ" }, p => p.FirstName == "Jimi"); + UPDATE "Person" SET "FirstName" = 'JJ' WHERE ("FirstName" = 'Jimi') + + + + + Updates all values set on item matching the where condition (if any). E.g + + dbCmd.Update(new Person { Id = 1, FirstName = "JJ" }, p => p.LastName == "Hendrix"); + UPDATE "Person" SET "Id" = 1,"FirstName" = 'JJ',"LastName" = NULL,"Age" = 0 WHERE ("LastName" = 'Hendrix') + + + + + Updates all matching fields populated on anonymousType that matches where condition (if any). E.g: + + dbCmd.Update<Person>(new { FirstName = "JJ" }, p => p.LastName == "Hendrix"); + UPDATE "Person" SET "FirstName" = 'JJ' WHERE ("LastName" = 'Hendrix') + + + + + Flexible Update method to succinctly execute a free-text update statement using optional params. E.g: + + dbCmd.Update<Person>(set:"FirstName = {0}".Params("JJ"), where:"LastName = {0}".Params("Hendrix")); + UPDATE "Person" SET FirstName = 'JJ' WHERE LastName = 'Hendrix' + + + + + Flexible Update method to succinctly execute a free-text update statement using optional params. E.g. + + dbCmd.Update(table:"Person", set: "FirstName = {0}".Params("JJ"), where: "LastName = {0}".Params("Hendrix")); + UPDATE "Person" SET FirstName = 'JJ' WHERE LastName = 'Hendrix' + + + + + Using an Expression Visitor to only Insert the fields specified, e.g: + + dbCmd.InsertOnly(new Person { FirstName = "Amy" }, ev => ev.Insert(p => new { p.FirstName })); + INSERT INTO "Person" ("FirstName") VALUES ('Amy'); + + + + + Using an Expression Visitor to only Insert the fields specified, e.g: + + var ev = OrmLiteConfig.DialectProvider.ExpressionVisitor>Person<()); + dbCmd.InsertOnly(new Person { FirstName = "Amy" }, ev.Insert(p => new { p.FirstName })); + INSERT INTO "Person" ("FirstName") VALUES ('Amy'); + + + + + Delete the rows that matches the where expression, e.g: + + dbCmd.Delete<Person>(p => p.Age == 27); + DELETE FROM "Person" WHERE ("Age" = 27) + + + + + Delete the rows that matches the where expression, e.g: + + dbCmd.Delete<Person>(ev => ev.Where(p => p.Age == 27)); + DELETE FROM "Person" WHERE ("Age" = 27) + + + + + Delete the rows that matches the where expression, e.g: + + var ev = OrmLiteConfig.DialectProvider.ExpressionVisitor>Person<()); + dbCmd.Delete<Person>(ev.Where(p => p.Age == 27)); + DELETE FROM "Person" WHERE ("Age" = 27) + + + + + Flexible Delete method to succinctly execute a delete statement using free-text where expression. E.g. + + dbCmd.Delete<Person>(where:"Age = {0}".Params(27)); + DELETE FROM "Person" WHERE Age = 27 + + + + + Flexible Delete method to succinctly execute a delete statement using free-text where expression. E.g. + + dbCmd.Delete(table:"Person", where: "Age = {0}".Params(27)); + DELETE FROM "Person" WHERE Age = 27 + + + + + Dapper, a light weight object mapper for ADO.NET + + + + + Purge the query cache + + + + + Return a count of all the cached queries by dapper + + + + + + Return a list of all the queries cached by dapper + + + + + + + Deep diagnostics only: find any hash collisions in the cache + + + + + + Configire the specified type to be mapped to a given db-type + + + + + Execute parameterized SQL + + Number of rows affected + + + + Return a list of dynamic objects, reader is closed after the call + + + + + Executes a query, returning the data typed as per T + + the dynamic param may seem a bit odd, but this works around a major usability issue in vs, if it is Object vs completion gets annoying. Eg type new [space] get new object + A sequence of data of the supplied type; if a basic type (int, string, etc) is queried then the data from the first column in assumed, otherwise an instance is + created per row, and a direct column-name===member-name mapping is assumed (case insensitive). + + + + + Execute a command that returns multiple result sets, and access each in turn + + + + + Return a typed list of objects, reader is closed after the call + + + + + Maps a query to objects + + The first type in the recordset + The second type in the recordset + The return type + + + + + + + The Field we should split and read the second object from (default: id) + Number of seconds before command execution timeout + Is it a stored proc or a batch? + + + + + Maps a query to objects + + + + + + + + + + + + The Field we should split and read the second object from (default: id) + Number of seconds before command execution timeout + + + + + + Perform a multi mapping query with 4 input parameters + + + + + + + + + + + + + + + + + + + + Perform a multi mapping query with 5 input parameters + + + + + + + + + + + + + + + + + + + + + Perform a multi mapping query with 6 input parameters + + + + + + + + + + + + + + + + + + + + + + Perform a multi mapping query with 7 input parameters + + + + + + + + + + + + + + + + + + + + + + + Internal use only + + + + + + + Internal use only + + + + + Internal use only + + + + + Internal use only + + + + + Internal use only + + + + + Gets type-map for the given type + + Type map implementation, DefaultTypeMap instance if no override present + + + + Set custom mapping for type deserializers + + Entity type to override + Mapping rules impementation, null to remove custom map + + + + Internal use only + + + + + + + + + + + Throws a data exception, only used internally + + + + + + + + Called if the query cache is purged via PurgeQueryCache + + + + + How should connection strings be compared for equivalence? Defaults to StringComparer.Ordinal. + Providing a custom implementation can be useful for allowing multi-tenancy databases with identical + schema to share startegies. Note that usual equivalence rules apply: any equivalent connection strings + MUST yield the same hash-code. + + + + + Implement this interface to pass an arbitrary db specific set of parameters to Dapper + + + + + Add all the parameters needed to the command just before it executes + + The raw command prior to execution + Information about the query + + + + Implement this interface to pass an arbitrary db specific parameter to Dapper + + + + + Add the parameter needed to the command before it executes + + The raw command prior to execution + Parameter name + + + + Implement this interface to change default mapping of reader columns to type memebers + + + + + Finds best constructor + + DataReader column names + DataReader column types + Matching constructor or default one + + + + Gets mapping for constructor parameter + + Constructor to resolve + DataReader column name + Mapping implementation + + + + Gets member mapping for column + + DataReader column name + Mapping implementation + + + + Implements this interface to provide custom member mapping + + + + + Source DataReader column name + + + + + Target member type + + + + + Target property + + + + + Target field + + + + + Target constructor parameter + + + + + This is a micro-cache; suitable when the number of terms is controllable (a few hundred, for example), + and strictly append-only; you cannot change existing values. All key matches are on **REFERENCE** + equality. The type is fully thread-safe. + + + + + Identity of a cached query in Dapper, used for extensability + + + + + Create an identity for use with DynamicParameters, internal use only + + + + + + + + + + + + + + The sql + + + + + The command type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Compare 2 Identity objects + + + + + + + The grid reader provides interfaces for reading multiple result sets from a Dapper query + + + + + Read the next grid of results, returned as a dynamic object + + + + + Read the next grid of results + + + + + Read multiple objects from a single recordset on the grid + + + + + Read multiple objects from a single recordset on the grid + + + + + Read multiple objects from a single record set on the grid + + + + + Read multiple objects from a single record set on the grid + + + + + Read multiple objects from a single record set on the grid + + + + + Read multiple objects from a single record set on the grid + + + + + Dispose the grid, closing and disposing both the underlying reader and command. + + + + + A bag of parameters that can be passed to the Dapper Query and Execute methods + + + + + construct a dynamic parameter bag + + + + + construct a dynamic parameter bag + + can be an anonymous type or a DynamicParameters bag + + + + Append a whole object full of params to the dynamic + EG: AddDynamicParams(new {A = 1, B = 2}) // will add property A and B to the dynamic + + + + + + Add a parameter to this dynamic parameter list + + + + + + + + + + Add all the parameters needed to the command just before it executes + + The raw command prior to execution + Information about the query + + + + Get the value of a parameter + + + + The value, note DBNull.Value is not returned, instead the value is returned as null + + + + If true, the command-text is inspected and only values that are clearly used are included on the connection + + + + + All the names of the param in the bag, use Get to yank them out + + + + + This class represents a SQL string, it can be used if you need to denote your parameter is a Char vs VarChar vs nVarChar vs nChar + + + + + Create a new DbString + + + + + Add the parameter to the command... internal use only + + + + + + + Ansi vs Unicode + + + + + Fixed length + + + + + Length of the string -1 for max + + + + + The value of the string + + + + + Handles variances in features per DBMS + + + + + Dictionary of supported features index by connection type name + + + + + Gets the featureset based on the passed connection + + + + + True if the db supports array columns e.g. Postgresql + + + + + Represents simple memeber map for one of target parameter or property or field to source DataReader column + + + + + Creates instance for simple property mapping + + DataReader column name + Target property + + + + Creates instance for simple field mapping + + DataReader column name + Target property + + + + Creates instance for simple constructor parameter mapping + + DataReader column name + Target constructor parameter + + + + DataReader column name + + + + + Target member type + + + + + Target property + + + + + Target field + + + + + Target constructor parameter + + + + + Represents default type mapping strategy used by Dapper + + + + + Creates default type map + + Entity type + + + + Finds best constructor + + DataReader column names + DataReader column types + Matching constructor or default one + + + + Gets mapping for constructor parameter + + Constructor to resolve + DataReader column name + Mapping implementation + + + + Gets member mapping for column + + DataReader column name + Mapping implementation + + + + Implements custom property mapping by user provided criteria (usually presence of some custom attribute with column to member mapping) + + + + + Creates custom property mapping + + Target entity type + Property selector based on target type and DataReader column name + + + + Always returns default constructor + + DataReader column names + DataReader column types + Default constructor + + + + Not impelmeneted as far as default constructor used for all cases + + + + + + + + Returns property based on selector strategy + + DataReader column name + Poperty member map + + + diff --git a/lib/ServiceStack.Razor.dll b/lib/ServiceStack.Razor.dll new file mode 100644 index 0000000..469a8c2 Binary files /dev/null and b/lib/ServiceStack.Razor.dll differ diff --git a/lib/ServiceStack.Razor.xml b/lib/ServiceStack.Razor.xml new file mode 100644 index 0000000..fd0107e --- /dev/null +++ b/lib/ServiceStack.Razor.xml @@ -0,0 +1,87 @@ + + + + ServiceStack.Razor + + + + + Provides service methods for compilation. + + + + + Determines if the specified type is an anonymous type. + + The type to check. + True if the type is an anonymous type, otherwise false. + + + + Determines if the specified type is a dynamic type. + + The type to check. + True if the type is an anonymous type, otherwise false. + + + + Gets the public or protected constructors of the specified type. + + The target type. + An enumerable of constructors. + + + + Gets an enumerable of all assemblies loaded in the current domain. + + An enumerable of loaded assemblies. + + + + The purpose of the FileSystemWatcher is to ensure razor pages are + consistent with the code generated by the razor engine. The file + system watcher will invalidate pages and queue them for recompilation. + + + + + Avoid throwing unhandled exception when shutting down ASP.NET host + + + + + Attempts to locate the nearest global directive file by + + + + + A common hook into ServiceStack and the hosting infrastructure used to resolve requests. + + + + + This is called by the hosting environment via CatchAll usually for content pages. + + + + + Called by the HtmlFormat:IPlugin who checks to see if any registered view engines can handle the response DTO. + If this view engine can handle the response DTO, then process it, otherwise, returning false will + allow another view engine to attempt to process it. If no view engines can process the DTO, + HtmlFormat will simply handle it itself. + + + + + This view manager is responsible for keeping track of all the + available Razor views and states of Razor pages. + + + + + Class to represent attribute values and, more importantly, + decipher them from tuple madness slightly. + + + + diff --git a/lib/ServiceStack.Redis.XML b/lib/ServiceStack.Redis.XML new file mode 100644 index 0000000..2cfb309 --- /dev/null +++ b/lib/ServiceStack.Redis.XML @@ -0,0 +1,1281 @@ + + + + ServiceStack.Redis + + + + + Provides thread-safe retrievel of redis clients since each client is a new one. + Allows the configuration of different ReadWrite and ReadOnly hosts + + + BasicRedisClientManager for ICacheClient + + For more interoperabilty I'm also implementing the ICacheClient on + this cache client manager which has the affect of calling + GetCacheClient() for all write operations and GetReadOnlyCacheClient() + for the read ones. + + This works well for master-slave replication scenarios where you have + 1 master that replicates to multiple read slaves. + + + + + Hosts can be an IP Address or Hostname in the format: host[:port] + e.g. 127.0.0.1:6379 + default is: localhost:6379 + + The write hosts. + The read hosts. + + + + Returns a Read/Write client (The default) using the hosts defined in ReadWriteHosts + + + + + + Returns a ReadOnly client using the hosts defined in ReadOnlyHosts. + + + + + + Gets or sets object key prefix. + + + + + Courtesy of @marcgravell + http://code.google.com/p/protobuf-net/source/browse/trunk/protobuf-net/BufferPool.cs + + + + + A complete redis command, with method to send command, receive response, and run callback on success or failure + + + + + Allows you to get Redis value operations to operate against POCO types. + + + + + + Use this to share the same redis connection with another + + The client. + + + + Pipeline for redis typed client + + + + + + Queue of commands for redis typed client + + + + + + Redis operation (transaction/pipeline) that allows queued commands to be completed + + + + + Ignore dispose on RedisClientsManager, which should be registered as a singleton + + + + + Useful wrapper IRedisClientsManager to cut down the boiler plat of most IRedisClient access + + + + + A complete redis command, with method to send command, receive response, and run callback on success or failure + + + + + Redis command that does not get queued + + + + + The client wraps the native redis operations into a more readable c# API. + + Where possible these operations are also exposed in common c# interfaces, + e.g. RedisClient.Lists => IList[string] + RedisClient.Sets => ICollection[string] + + + + + This class contains all the common operations for the RedisClient. + The client contains a 1:1 mapping of c# methods to redis operations of the same name. + + Not threadsafe use a pooled manager + + + + + Requires custom result parsing + + Number of results + + + + Command to set multuple binary safe arguments + + + + + + + reset buffer index in send buffer + + + + + Used to manage connection pooling + + + + + Gets or sets object key prefix. + + + + + Creates a new instance of the Redis Client from NewFactoryFn. + + + + + Returns key with automatic object id detection in provided value with generic type. + + + + + + + Returns key with explicit object id. + + + + + + + Returns key with explicit object type and id. + + + + + + + + Provides a redis connection pool that can be sharded + + + + + For interoperabilty GetCacheClient() and GetReadOnlyCacheClient() + return an ICacheClient wrapper around the redis manager which has the affect of calling + GetClient() for all write operations and GetReadOnlyClient() for the read ones. + + This works well for master-slave replication scenarios where you have + 1 master that replicates to multiple read slaves. + + + Provides thread-safe pooling of redis client connections. + Allows load-balancing of master-write and read-slave hosts, ideal for + 1 master and multiple replicated read slaves. + + + + + Hosts can be an IP Address or Hostname in the format: host[:port] + e.g. 127.0.0.1:6379 + default is: localhost:6379 + + The write hosts. + The read hosts. + The config. + + + + Returns a Read/Write client (The default) using the hosts defined in ReadWriteHosts + + + + + + Called within a lock + + + + + + Returns a ReadOnly client using the hosts defined in ReadOnlyHosts. + + + + + + Called within a lock + + + + + + Disposes the read only client. + + The client. + + + + Disposes the write client. + + The client. + + + + Gets or sets object key prefix. + + + + + Manage a client acquired from the PooledRedisClientManager + Dispose method will release the client back to the pool. + + + + + wrap the acquired client + + + + + + release the wrapped client back to the pool + + + + + access the wrapped client + + + + + logical name + + + + + An arbitrary weight relative to other nodes + + + + logical name + An arbitrary weight relative to other nodes + redis nodes + + + + Provides sharding of redis client connections. + uses consistent hashing to distribute keys across connection pools + + + + + maps a key to a redis connection pool + + key to map + a redis connection pool + + + + Adds a node and maps points across the circle + + node to add + An arbitrary number, specifies how often it occurs relative to other targets. + + + + A variation of Binary Search algorithm. Given a number, matches the next highest number from the sorted array. + If a higher number does not exist, then the first number in the array is returned. + + a sorted array to perform the search + number to find the next highest number against + next highest number + + + + Given a key, generates an unsigned 64 bit hash code using MD5 + + + + + + + Distributed lock interface + + + + + Optimized implementation. Primitive types are manually serialized, the rest are serialized using binary serializer />. + + + + + serialize/deserialize arbitrary objects + (objects must be serializable) + + + + + Serialize object to buffer + + serializable object + + + + + Deserialize buffer to object + + byte array to deserialize + + + + + + + + + + + + + + + + + + + serialize value and wrap with + + + + + + + Unwrap object wrapped in + + + + + + + pop numProcessed items from queue and unlock queue for work item id that dequeued + items are associated with + + + + + + A dequeued work item has been processed. When all of the dequeued items have been processed, + all items will be popped from the queue,and the queue unlocked for the work item id that + the dequeued items are associated with + + + + + Update first unprocessed item with new work item. + + + + + + + + + + + distributed work item queue. Each message must have an associated + work item id. For a given id, all work items are guaranteed to be processed + in the order in which they are received. + + + + + distributed work item queue. Each message must have an associated + work item id. For a given id, all work items are guaranteed to be processed + in the order in which they are received. + + + + + + + distributed work item queue + + + + + Enqueue item in priority queue corresponding to workItemId identifier + + + + + + + Preprare next work item id for dequeueing + + + + + Dequeue up to maxBatchSize items from queue corresponding to workItemId identifier. + Once this method is called, or will not + return any items for workItemId until the dequeue lock returned is unlocked. + + + + + + + + Replace existing work item in workItemId queue + + + + + + + + Queue incoming messages + + + + + + + Must call this periodically to move work items from priority queue to pending queue + + + + + Replace existing work item in workItemId queue + + + + + + + + Pop items from list + + + + + + + Force release of locks held by crashed servers + + + + + release lock held by crashed server + + + + true if lock is released, either by this method or by another client; false otherwise + + + + Unlock work item id, so other servers can process items for this id + + + + + + + + + + + + + + + + + + + + + + + + + + + pop remaining items that were returned by dequeue, and unlock queue + + + + + + indicate that an item has been processed by the caller + + + + + Update first unprocessed work item + + + + + + wraps a serialized representation of an object + + + + + + Initializes a new instance of . + + Custom item data. + The serialized item. + + + + The data representing the item being stored/retireved. + + + + + Flags set for this instance. + + + + + distributed lock class that follows the Resource Allocation Is Initialization pattern + + + + + Lock + + + + in seconds + in seconds + + + + unlock + + + + + Enqueue item + + + + + + Dequeue up to maxBatchSize items from queue + + + + + + + distributed work item queue. Messages are processed in chronological order + + + + + Enqueue incoming messages + + + + + + + + Dequeue next batch of work items + + + + + + + + + simple distributed work item queue + + + + + + + Queue incoming messages + + + + + + Dequeue next batch of work items for processing. After this method is called, + no other work items with same id will be available for + dequeuing until PostDequeue is called + + KeyValuePair: key is work item id, and value is list of dequeued items. + + + + + Serialize object to buffer + + serializable object + + + + + + + array of serializable objects + + + + + Deserialize buffer to object + + byte array to deserialize + + + + + + customize the client serializer + + + + + Factory to create SerializingRedisClient objects + + + + + + + + + General purpose pipeline + + + + + + Flush send buffer, and read responses + + + + + Wrap the common redis set operations under a ICollection[string] interface. + + + + + Adds support for Redis Transactions (i.e. MULTI/EXEC/DISCARD operations). + + + + + Put "QUEUED" messages at back of queue + + + + + + Issue exec command (not queued) + + + + + callback for after result count is read in + + + + + + Wrap the common redis set operations under a ICollection[string] interface. + + + + + Wrap the common redis set operations under a ICollection[string] interface. + + + + + Wrap the common redis set operations under a ICollection[string] interface. + + + + + Redis-specific exception. Thrown if unable to connect to Redis server due to socket exception, for example. + + + + + Adds support for Redis Transactions (i.e. MULTI/EXEC/DISCARD operations). + + + + + Put "QUEUED" messages at back of queue + + + + + + Issue exec command (not queued) + + + + + callback for after result count is read in + + + + + + Provide the default factory implementation for creating a RedisClient that + can be mocked and used by different 'Redis Client Managers' + + + + + Wrap the common redis set operations under a ICollection[string] interface. + + + + + Provide the factory implementation for creating a RedisCacheClient that + can be mocked and used by different 'Redis Client Managers' + + + + + Wrap the common redis set operations under a ICollection[string] interface. + + + + + Wrap the common redis list operations under a IList[string] interface. + + + + + Represents a generic collection of key/value pairs that are ordered independently of the key and value. + + The type of the keys in the dictionary + The type of the values in the dictionary + + + + Adds an entry with the specified key and value into the IOrderedDictionary<TKey,TValue> collection with the lowest available index. + + The key of the entry to add. + The value of the entry to add. + The index of the newly added entry + + You can also use the property to add new elements by setting the value of a key that does not exist in the IOrderedDictionary<TKey,TValue> collection; however, if the specified key already exists in the IOrderedDictionary<TKey,TValue>, setting the property overwrites the old value. In contrast, the method does not modify existing elements. + An element with the same key already exists in the IOrderedDictionary<TKey,TValue> + The IOrderedDictionary<TKey,TValue> is read-only.
+ -or-
+ The IOrderedDictionary<TKey,TValue> has a fized size.
+
+ + + Inserts a new entry into the IOrderedDictionary<TKey,TValue> collection with the specified key and value at the specified index. + + The zero-based index at which the element should be inserted. + The key of the entry to add. + The value of the entry to add. The value can be if the type of the values in the dictionary is a reference type. + is less than 0.
+ -or-
+ is greater than .
+ An element with the same key already exists in the IOrderedDictionary<TKey,TValue>. + The IOrderedDictionary<TKey,TValue> is read-only.
+ -or-
+ The IOrderedDictionary<TKey,TValue> has a fized size.
+
+ + + Gets or sets the value at the specified index. + + The zero-based index of the value to get or set. + The value of the item at the specified index. + is less than 0.
+ -or-
+ is equal to or greater than .
+
+ + + Represents a generic collection of key/value pairs that are ordered independently of the key and value. + + The type of the keys in the dictionary + The type of the values in the dictionary + + + + Initializes a new instance of the OrderedDictionary<TKey,TValue> class. + + + + + Initializes a new instance of the OrderedDictionary<TKey,TValue> class using the specified initial capacity. + + The initial number of elements that the OrderedDictionary<TKey,TValue> can contain. + is less than 0 + + + + Initializes a new instance of the OrderedDictionary<TKey,TValue> class using the specified comparer. + + The IEqualityComparer<TKey> to use when comparing keys, or to use the default EqualityComparer<TKey> for the type of the key. + + + + Initializes a new instance of the OrderedDictionary<TKey,TValue> class using the specified initial capacity and comparer. + + The initial number of elements that the OrderedDictionary<TKey,TValue> collection can contain. + The IEqualityComparer<TKey> to use when comparing keys, or to use the default EqualityComparer<TKey> for the type of the key. + is less than 0 + + + + Converts the object passed as a key to the key type of the dictionary + + The key object to check + The key object, cast as the key type of the dictionary + is . + The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . + + + + Converts the object passed as a value to the value type of the dictionary + + The object to convert to the value type of the dictionary + The value object, converted to the value type of the dictionary + is , and the value type of the OrderedDictionary<TKey,TValue> is a value type. + The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . + + + + Inserts a new entry into the OrderedDictionary<TKey,TValue> collection with the specified key and value at the specified index. + + The zero-based index at which the element should be inserted. + The key of the entry to add. + The value of the entry to add. The value can be if the type of the values in the dictionary is a reference type. + is less than 0.
+ -or-
+ is greater than .
+ is . + An element with the same key already exists in the OrderedDictionary<TKey,TValue>. +
+ + + Inserts a new entry into the OrderedDictionary<TKey,TValue> collection with the specified key and value at the specified index. + + The zero-based index at which the element should be inserted. + The key of the entry to add. + The value of the entry to add. The value can be if the type of the values in the dictionary is a reference type. + is less than 0.
+ -or-
+ is greater than .
+ is .
+ -or-
+ is , and the value type of the OrderedDictionary<TKey,TValue> is a value type.
+ The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
+ -or-
+ The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
+ -or-
+ An element with the same key already exists in the OrderedDictionary<TKey,TValue>.
+
+ + + Removes the entry at the specified index from the OrderedDictionary<TKey,TValue> collection. + + The zero-based index of the entry to remove. + is less than 0.
+ -or-
+ index is equal to or greater than .
+
+ + + Adds an entry with the specified key and value into the OrderedDictionary<TKey,TValue> collection with the lowest available index. + + The key of the entry to add. + The value of the entry to add. This value can be . + A key cannot be , but a value can be. + You can also use the property to add new elements by setting the value of a key that does not exist in the OrderedDictionary<TKey,TValue> collection; however, if the specified key already exists in the OrderedDictionary<TKey,TValue>, setting the property overwrites the old value. In contrast, the method does not modify existing elements. + is + An element with the same key already exists in the OrderedDictionary<TKey,TValue> + + + + Adds an entry with the specified key and value into the OrderedDictionary<TKey,TValue> collection with the lowest available index. + + The key of the entry to add. + The value of the entry to add. This value can be . + The index of the newly added entry + A key cannot be , but a value can be. + You can also use the property to add new elements by setting the value of a key that does not exist in the OrderedDictionary<TKey,TValue> collection; however, if the specified key already exists in the OrderedDictionary<TKey,TValue>, setting the property overwrites the old value. In contrast, the method does not modify existing elements. + is + An element with the same key already exists in the OrderedDictionary<TKey,TValue> + + + + Adds an entry with the specified key and value into the OrderedDictionary<TKey,TValue> collection with the lowest available index. + + The key of the entry to add. + The value of the entry to add. This value can be . + is .
+ -or-
+ is , and the value type of the OrderedDictionary<TKey,TValue> is a value type.
+ The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
+ -or-
+ The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of .
+
+ + + Removes all elements from the OrderedDictionary<TKey,TValue> collection. + + The capacity is not changed as a result of calling this method. + + + + Determines whether the OrderedDictionary<TKey,TValue> collection contains a specific key. + + The key to locate in the OrderedDictionary<TKey,TValue> collection. + if the OrderedDictionary<TKey,TValue> collection contains an element with the specified key; otherwise, . + is + + + + Determines whether the OrderedDictionary<TKey,TValue> collection contains a specific key. + + The key to locate in the OrderedDictionary<TKey,TValue> collection. + if the OrderedDictionary<TKey,TValue> collection contains an element with the specified key; otherwise, . + is + The key type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . + + + + Returns the zero-based index of the specified key in the OrderedDictionary<TKey,TValue> + + The key to locate in the OrderedDictionary<TKey,TValue> + The zero-based index of , if is found in the OrderedDictionary<TKey,TValue>; otherwise, -1 + This method performs a linear search; therefore it has a cost of O(n) at worst. + + + + Removes the entry with the specified key from the OrderedDictionary<TKey,TValue> collection. + + The key of the entry to remove + if the key was found and the corresponding element was removed; otherwise, + + + + Removes the entry with the specified key from the OrderedDictionary<TKey,TValue> collection. + + The key of the entry to remove + + + + Copies the elements of the OrderedDictionary<TKey,TValue> elements to a one-dimensional Array object at the specified index. + + The one-dimensional object that is the destination of the objects copied from the OrderedDictionary<TKey,TValue>. The must have zero-based indexing. + The zero-based index in at which copying begins. + The method preserves the order of the elements in the OrderedDictionary<TKey,TValue> + + + + Gets the value associated with the specified key. + + The key of the value to get. + When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of . This parameter can be passed uninitialized. + if the OrderedDictionary<TKey,TValue> contains an element with the specified key; otherwise, . + + + + Adds the specified value to the OrderedDictionary<TKey,TValue> with the specified key. + + The KeyValuePair<TKey,TValue> structure representing the key and value to add to the OrderedDictionary<TKey,TValue>. + + + + Determines whether the OrderedDictionary<TKey,TValue> contains a specific key and value. + + The KeyValuePair<TKey,TValue> structure to locate in the OrderedDictionary<TKey,TValue>. + if is found in the OrderedDictionary<TKey,TValue>; otherwise, . + + + + Copies the elements of the OrderedDictionary<TKey,TValue> to an array of type , starting at the specified index. + + The one-dimensional array of type KeyValuePair<TKey,TValue> that is the destination of the KeyValuePair<TKey,TValue> elements copied from the OrderedDictionary<TKey,TValue>. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + + Removes a key and value from the dictionary. + + The KeyValuePair<TKey,TValue> structure representing the key and value to remove from the OrderedDictionary<TKey,TValue>. + if the key and value represented by is successfully found and removed; otherwise, . This method returns if is not found in the OrderedDictionary<TKey,TValue>. + + + + Gets the dictionary object that stores the keys and values + + The dictionary object that stores the keys and values for the OrderedDictionary<TKey,TValue> + Accessing this property will create the dictionary object if necessary + + + + Gets the list object that stores the key/value pairs. + + The list object that stores the key/value pairs for the OrderedDictionary<TKey,TValue> + Accessing this property will create the list object if necessary. + + + + Gets or sets the value at the specified index. + + The zero-based index of the value to get or set. + The value of the item at the specified index. + is less than 0.
+ -or-
+ index is equal to or greater than .
+
+ + + Gets or sets the value at the specified index. + + The zero-based index of the value to get or set. + The value of the item at the specified index. + is less than 0.
+ -or-
+ index is equal to or greater than .
+ is a null reference, and the value type of the OrderedDictionary<TKey,TValue> is a value type. + The value type of the OrderedDictionary<TKey,TValue> is not in the inheritance hierarchy of . +
+ + + Gets a value indicating whether the OrderedDictionary<TKey,TValue> has a fixed size. + + if the OrderedDictionary<TKey,TValue> has a fixed size; otherwise, . The default is . + + + + Gets a value indicating whether the OrderedDictionary<TKey,TValue> collection is read-only. + + if the OrderedDictionary<TKey,TValue> is read-only; otherwise, . The default is . + + A collection that is read-only does not allow the addition, removal, or modification of elements after the collection is created. + A collection that is read-only is simply a collection with a wrapper that prevents modification of the collection; therefore, if changes are made to the underlying collection, the read-only collection reflects those changes. + + + + + Gets an object containing the keys in the OrderedDictionary<TKey,TValue>. + + An object containing the keys in the OrderedDictionary<TKey,TValue>. + The returned object is not a static copy; instead, the collection refers back to the keys in the original OrderedDictionary<TKey,TValue>. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the key collection. + + + + Gets an object containing the values in the OrderedDictionary<TKey,TValue> collection. + + An object containing the values in the OrderedDictionary<TKey,TValue> collection. + The returned object is not a static copy; instead, the refers back to the values in the original OrderedDictionary<TKey,TValue> collection. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the . + + + + Gets or sets the value with the specified key. + + The key of the value to get or set. + The value associated with the specified key. If the specified key is not found, attempting to get it returns , and attempting to set it creates a new element using the specified key. + + + + Gets or sets the value with the specified key. + + The key of the value to get or set. + The value associated with the specified key. If the specified key is not found, attempting to get it returns , and attempting to set it creates a new element using the specified key. + + + + Gets the number of key/values pairs contained in the OrderedDictionary<TKey,TValue> collection. + + The number of key/value pairs contained in the OrderedDictionary<TKey,TValue> collection. + + + + Gets a value indicating whether access to the OrderedDictionary<TKey,TValue> object is synchronized (thread-safe). + + This method always returns false. + + + + Gets an object that can be used to synchronize access to the OrderedDictionary<TKey,TValue> object. + + An object that can be used to synchronize access to the OrderedDictionary<TKey,TValue> object. + + + + Gets an ICollection<TKey> object containing the keys in the OrderedDictionary<TKey,TValue>. + + An ICollection<TKey> object containing the keys in the OrderedDictionary<TKey,TValue>. + The returned ICollection<TKey> object is not a static copy; instead, the collection refers back to the keys in the original OrderedDictionary<TKey,TValue>. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the key collection. + + + + Gets an ICollection<TValue> object containing the values in the OrderedDictionary<TKey,TValue>. + + An ICollection<TValue> object containing the values in the OrderedDictionary<TKey,TValue>. + The returned ICollection<TKey> object is not a static copy; instead, the collection refers back to the values in the original OrderedDictionary<TKey,TValue>. Therefore, changes to the OrderedDictionary<TKey,TValue> continue to be reflected in the value collection. + + + + acquire distributed, non-reentrant lock on key + + global key for this lock + timeout for acquiring lock + timeout for lock, in seconds (stored as value against lock key) + + + + + + unlock key + + + + + + + + + + + + + Locking strategy interface + + + + + This class manages a read lock for a local readers/writer lock, + using the Resource Acquisition Is Initialization pattern + + + + + RAII initialization + + + + + + RAII disposal + + + + + This class manages a write lock for a local readers/writer lock, + using the Resource Acquisition Is Initialization pattern + + + + + + RAII disposal + + + + + manages a "region" in the redis key space + namespace can be cleared by incrementing the generation + + + + + get current generation + + + + + + set new generation + + + + + + redis key for generation + + + + + + get redis key that holds all namespace keys + + + + + + get global cache key + + + + + + + get global key inside of this namespace + + + prefixes can be added for name deconfliction + + + + + replace UniqueCharacter with its double, to avoid name clash + + + + + + + + + + + + + + get locking strategy + + +
+
diff --git a/lib/ServiceStack.Redis.dll b/lib/ServiceStack.Redis.dll new file mode 100644 index 0000000..557cc88 Binary files /dev/null and b/lib/ServiceStack.Redis.dll differ diff --git a/lib/ServiceStack.Server.dll b/lib/ServiceStack.Server.dll new file mode 100644 index 0000000..9cb50de Binary files /dev/null and b/lib/ServiceStack.Server.dll differ diff --git a/lib/ServiceStack.Server.xml b/lib/ServiceStack.Server.xml new file mode 100644 index 0000000..f8d1a68 --- /dev/null +++ b/lib/ServiceStack.Server.xml @@ -0,0 +1,345 @@ + + + + ServiceStack.Server + + + + + Base rcon class. + + + + + Rcon connection socket. Always set to null when not connected. + + + + + Unique ID for each message. + + + + + Registered callbacks. + + + + + Create a new instance of rcon. + + Endpoint to connect to, usually the game server with query port. + + + + Attempts to connect to the game server for rcon operations. + + True if connection established, false otherwise. + + + + Processes a received packet. + + The packet. + + + + Disconnects from rcon. + + + + + Sends message to the server. + + Words to send. + + + + Disconnected event. + + + + + Game server endpoint. + + + + + Last exception that occured during operation. + + + + + Connected? + + + + + Gets the next unique ID to be used for transmisson. Read this before sending to pair responses to sent messages. + + + + + Event delegate when disconnected from the server. + + + + + + Delegate for async callbacks. + + + + + + + Exception thrown when attempting to send on a non-connected service client. + + + + + True if the packet originated on the server. + + + + + True if the packet is a response from a sent packet. + + + + + Sequence identifier. Unique to the connection. + + + + + Words. + + + + + Contains methods required for encoding and decoding rcon packets. + + + + + Decodes a packet. + + The packet. + A packet object. + + + + Decodes the packet header. + + + + + + + Decodes words in a packet. + + + + + + + Encodes a packet for transmission to the server. + + + + + + + + + + Encodes a packet header. + + + + + + + + + Encodes words. + + + + + + + Processing client used to interface with ServiceStack and allow a message to be processed. + Not an actual client. + + + + + Publish the specified message into the durable queue @queueName + + + + + Publish the specified message into the transient queue @queueName + + + + + Synchronous blocking get. + + + + + Non blocking get message + + + + + Creates a Redis MQ Server that processes each message on its own background thread. + i.e. if you register 3 handlers it will create 7 background threads: + - 1 listening to the Redis MQ Subscription, getting notified of each new message + - 3x1 Normal InQ for each message handler + - 3x1 PriorityQ for each message handler (Turn off with DisablePriorityQueues) + + When RedisMqServer Starts it creates a background thread subscribed to the Redis MQ Topic that + listens for new incoming messages. It also starts 2 background threads for each message type: + - 1 for processing the services Priority Queue and 1 processing the services normal Inbox Queue. + + Priority Queue's can be enabled on a message-per-message basis by specifying types in the + OnlyEnablePriortyQueuesForTypes property. The DisableAllPriorityQueues property disables all Queues. + + The Start/Stop methods are idempotent i.e. It's safe to call them repeatedly on multiple threads + and the Redis MQ Server will only have Started or Stopped once. + + + + + Execute global transformation or custom logic before a request is processed. + Must be thread-safe. + + + + + Execute global transformation or custom logic on the response. + Must be thread-safe. + + + + + Execute global error handler logic. Must be thread-safe. + + + + + If you only want to enable priority queue handlers (and threads) for specific msg types + + + + + Don't listen on any Priority Queues + + + + + Opt-in to only publish responses on this white list. + Publishes all responses by default. + + + + + Transient message queues are a one-pass message queue service that starts + processing messages when Start() is called. Any subsequent Start() calls + while the service is running is ignored. + + The transient service will continue to run until all messages have been + processed after which time it will shutdown all processing until Start() is called again. + + + + + Hosting services via a binary-safe TCP-based protocol. + + + + + Register DTOs and hanlders the MQ Host will process + + + + + + + Get Total Current Stats for all Message Handlers + + + + + + Get a Stats dump + + + + + + Start the MQ Host. Stops the server and restarts if already started. + + + + + Stop the MQ Host if not already stopped. + + + + + Processes a received packet. + + The packet. + + + + Factory to create consumers and producers that work with this service + + + + + Understands how to store a to a MSSQL database. + + + + + Creates needed tables. Run this once on your database. + + + Works in sql server and sqlite (with documented removals). + + + + + Returns a new . + + + + + Stores to dbo.MiniProfilers under its ; + stores all child Timings and SqlTimings to their respective tables. + + + + + Loads the MiniProfiler identifed by 'id' from the database. + + + + + Returns a list of s that haven't been seen by . + + User identified by the current . + + + + Returns a connection to Sql Server. + + + + diff --git a/lib/ServiceStack.Text.dll b/lib/ServiceStack.Text.dll new file mode 100644 index 0000000..2d3dd89 Binary files /dev/null and b/lib/ServiceStack.Text.dll differ diff --git a/lib/ServiceStack.Text.xml b/lib/ServiceStack.Text.xml new file mode 100644 index 0000000..9688d3e --- /dev/null +++ b/lib/ServiceStack.Text.xml @@ -0,0 +1,703 @@ + + + + ServiceStack.Text + + + + + Utils to load types + + + + + Find the type from the name supplied + + [typeName] or [typeName, assemblyName] + + + + + The top-most interface of the given type, if any. + + + + + Find type if it exists + + + + The type if it exists + + + + Populate an object with Example data. + + + + + + + Populates the object with example data. + + + Tracks how deeply nested we are + + + + + If AlwaysUseUtc is set to true then convert all DateTime to UTC. + + + + + + + Repairs an out-of-spec XML date/time string which incorrectly uses a space instead of a 'T' to separate the date from the time. + These string are occasionally generated by SQLite and can cause errors in OrmLite when reading these columns from the DB. + + The XML date/time string to repair + The repaired string. If no repairs were made, the original string is returned. + + + + WCF Json format: /Date(unixts+0000)/ + + + + + + + WCF Json format: /Date(unixts+0000)/ + + + + + + + Get the type(string) constructor if exists + + The type. + + + + + micro optimizations: using flags instead of value.IndexOfAny(EscapeChars) + + + + + + + Class to hold + + + + + + A fast, standards-based, serialization-issue free DateTime serailizer. + + + + + Determines whether this serializer can create the specified type from a string. + + The type. + + true if this instance [can create from string] the specified type; otherwise, false. + + + + + Parses the specified value. + + The value. + + + + + Deserializes from reader. + + The reader. + + + + + Serializes to string. + + The value. + + + + + Serializes to writer. + + The value. + The writer. + + + + Sets which format to use when serializing TimeSpans + + + + + if the is configured + to take advantage of specification, + to support user-friendly serialized formats, ie emitting camelCasing for JSON + and parsing member names and enum values in a case-insensitive manner. + + + + + if the is configured + to support web-friendly serialized formats, ie emitting lowercase_underscore_casing for JSON + + + + + Define how property names are mapped during deserialization + + + + + Gets or sets a value indicating if the framework should throw serialization exceptions + or continue regardless of deserialization errors. If the framework + will throw; otherwise, it will parse as many fields as possible. The default is . + + + + + Gets or sets a value indicating if the framework should always convert to UTC format instead of local time. + + + + + Gets or sets a value indicating if the framework should always assume is in UTC format if Kind is Unspecified. + + + + + Gets or sets whether we should append the Utc offset when we serialize Utc dates. Defaults to no. + Only supported for when the JsConfig.DateHandler == JsonDateHandler.TimestampOffset + + + + + Gets or sets a value indicating if unicode symbols should be serialized as "\uXXXX". + + + + + If set to true, Interface types will be prefered over concrete types when serializing. + + + + + Sets the maximum depth to avoid circular dependencies + + + + + Set this to enable your own type construction provider. + This is helpful for integration with IoC containers where you need to call the container constructor. + Return null if you don't know how to construct the type and the parameterless constructor will be used. + + + + + If set to true, Interface types will be prefered over concrete types when serializing. + + + + + Always emit type info for this type. Takes precedence over ExcludeTypeInfo + + + + + Never emit type info for this type + + + + + if the is configured + to take advantage of specification, + to support user-friendly serialized formats, ie emitting camelCasing for JSON + and parsing member names and enum values in a case-insensitive manner. + + + + + Define custom serialization fn for BCL Structs + + + + + Define custom raw serialization fn + + + + + Define custom serialization hook + + + + + Define custom deserialization fn for BCL Structs + + + + + Define custom raw deserialization fn for objects + + + + + Exclude specific properties of this type from being serialized + + + + + Opt-in flag to set some Value Types to be treated as a Ref Type + + + + + Whether there is a fn (raw or otherwise) + + + + + The property names on target types must match property names in the JSON source + + + + + The property names on target types may not match the property names in the JSON source + + + + + Uses the xsd format like PT15H10M20S + + + + + Uses the standard .net ToString method of the TimeSpan class + + + + + Get JSON string value converted to T + + + + + Get JSON string value + + + + + Get unescaped string value + + + + + Get unescaped string value + + + + + Write JSON Array, Object, bool or number values as raw string + + + + + Get JSON string value + + + + + Creates an instance of a Type from a string value + + + + + Parses the specified value. + + The value. + + + + + Shortcut escape when we're sure value doesn't contain any escaped chars + + + + + + + Given a character as utf32, returns the equivalent string provided that the character + is legal json. + + + + + + + micro optimizations: using flags instead of value.IndexOfAny(EscapeChars) + + + + + + + Implement the serializer using a more static approach + + + + + + Implement the serializer using a more static approach + + + + + + Public Code API to register commercial license for ServiceStack. + + + + + Internal Utilities to verify licensing + + + + + Pretty Thread-Safe cache class from: + http://code.google.com/p/dapper-dot-net/source/browse/Dapper/SqlMapper.cs + + This is a micro-cache; suitable when the number of terms is controllable (a few hundred, for example), + and strictly append-only; you cannot change existing values. All key matches are on **REFERENCE** + equality. The type is fully thread-safe. + + + + + Represents an individual object, allowing access to members by-name + + + + + Use the target types definition of equality + + + + + Obtain the hash of the target object + + + + + Use the target's definition of a string representation + + + + + Wraps an individual object, allowing by-name access to that instance + + + + + Get or Set the value of a named member for the underlying object + + + + + The object represented by this instance + + + + + Provides by-name member-access to objects of a given type + + + + + Create a new instance of this type + + + + + Provides a type-specific accessor, allowing by-name access for all objects of that type + + The accessor is cached internally; a pre-existing accessor may be returned + + + + Does this type support new instances via a parameterless constructor? + + + + + Get or set the value of a named member on the target instance + + + + + Maps the path of a file in the context of a VS project + + the relative path + the absolute path + Assumes static content is two directories above the /bin/ directory, + eg. in a unit test scenario the assembly would be in /bin/Debug/. + + + + Maps the path of a file in a self-hosted scenario + + the relative path + the absolute path + Assumes static content is copied to /bin/ folder with the assemblies + + + + Maps the path of a file in an Asp.Net hosted scenario + + the relative path + the absolute path + Assumes static content is in the parent folder of the /bin/ directory + + + + Implement the serializer using a more static approach + + + + + + Creates a new instance of type. + First looks at JsConfig.ModelFactory before falling back to CreateInstance + + + + + Creates a new instance of type. + First looks at JsConfig.ModelFactory before falling back to CreateInstance + + + + + Creates a new instance from the default constructor of type + + + + + Add a Property attribute at runtime. + Not threadsafe, should only add attributes on Startup. + + + + + Add a Property attribute at runtime. + Not threadsafe, should only add attributes on Startup. + + + + + @jonskeet: Collection of utility methods which operate on streams. + r285, February 26th 2009: http://www.yoda.arachsys.com/csharp/miscutil/ + + + + + Reads the given stream up to the end, returning the data as a byte + array. + + + + + Reads the given stream up to the end, returning the data as a byte + array, using the given buffer size. + + + + + Reads the given stream up to the end, returning the data as a byte + array, using the given buffer for transferring data. Note that the + current contents of the buffer is ignored, so the buffer needn't + be cleared beforehand. + + + + + Copies all the data from one stream into another. + + + + + Copies all the data from one stream into another, using a buffer + of the given size. + + + + + Copies all the data from one stream into another, using the given + buffer for transferring data. Note that the current contents of + the buffer is ignored, so the buffer needn't be cleared beforehand. + + + + + Reads exactly the given number of bytes from the specified stream. + If the end of the stream is reached before the specified amount + of data is read, an exception is thrown. + + + + + Reads into a buffer, filling it completely. + + + + + Reads exactly the given number of bytes from the specified stream, + into the given buffer, starting at position 0 of the array. + + + + + Reads exactly the given number of bytes from the specified stream, + into the given buffer, starting at position 0 of the array. + + + + + Same as ReadExactly, but without the argument checks. + + + + + Converts from base: 0 - 62 + + The source. + From. + To. + + + + + Skip the encoding process for 'safe strings' + + + + + + + A class to allow the conversion of doubles to string representations of + their exact decimal values. The implementation aims for readability over + efficiency. + + Courtesy of @JonSkeet + http://www.yoda.arachsys.com/csharp/DoubleConverter.cs + + + + + + + + How many digits are *after* the decimal point + + + + + Constructs an arbitrary decimal expansion from the given long. + The long must not be negative. + + + + + Multiplies the current expansion by the given amount, which should + only be 2 or 5. + + + + + Shifts the decimal point; a negative value makes + the decimal expansion bigger (as fewer digits come after the + decimal place) and a positive value makes the decimal + expansion smaller. + + + + + Removes leading/trailing zeroes from the expansion. + + + + + Converts the value to a proper decimal string representation. + + + + + Creates an instance of a Type from a string value + + + + + Determines whether the specified type is convertible from string. + + The type. + + true if the specified type is convertible from string; otherwise, false. + + + + + Parses the specified value. + + The value. + + + + + Parses the specified type. + + The type. + The value. + + + + + Useful extension method to get the Dictionary[string,string] representation of any POCO type. + + + + + + Recursively prints the contents of any POCO object in a human-friendly, readable format + + + + + + Print Dump to Console.WriteLine + + + + + Print string.Format to Console.WriteLine + + + + + Parses the specified value. + + The value. + + + + diff --git a/lib/ServiceStack.dll b/lib/ServiceStack.dll new file mode 100644 index 0000000..2f6e559 Binary files /dev/null and b/lib/ServiceStack.dll differ diff --git a/lib/ServiceStack.xml b/lib/ServiceStack.xml new file mode 100644 index 0000000..0b6705c --- /dev/null +++ b/lib/ServiceStack.xml @@ -0,0 +1,8198 @@ + + + + ServiceStack + + + + + Base class to create request filter attributes only for specific HTTP methods (GET, POST...) + + + + + Creates a new + + Defines when the filter should be executed + + + + This method is only executed if the HTTP method matches the property. + + The http request wrapper + The http response wrapper + The request DTO + + + + Create a ShallowCopy of this instance. + + + + + + Inherit from this class if you want to host your web services inside a + Console Application, Windows Service, etc. + + Usage of HttpListener allows you to host webservices on the same port (:80) as IIS + however it requires admin user privillages. + + + + + Wrapper class for the HTTPListener to allow easier access to the + server, for start and stop management and event routing of the actual + inbound requests. + + + + + ASP.NET or HttpListener ServiceStack host + + + + + Register dependency in AppHost IOC on Startup + + + + + AutoWired Registration of an interface with a concrete type in AppHost IOC on Startup. + + + + + Allows the clean up for executed autowired services and filters. + Calls directly after services and filters are executed. + + + + + Called at the end of each request. Enables Request Scope. + + + + + Register an Adhoc web service on Startup + + + + + Apply plugins to this AppHost + + + + + Create a service runner for IService actions + + + + + Resolve the absolute url for this request + + + + + Resolve localized text, returns itself by default. + + + + + Register user-defined custom routes. + + + + + Register custom ContentType serializers + + + + + Add Request Filters, to be applied before the dto is deserialized + + + + + Add Request Filters for HTTP Requests + + + + + Add Response Filters for HTTP Responses + + + + + Add Request Filters for MQ/TCP Requests + + + + + Add Response Filters for MQ/TCP Responses + + + + + Add alternative HTML View Engines + + + + + Provide an exception handler for unhandled exceptions + + + + + Provide an exception handler for un-caught exceptions + + + + + Skip the ServiceStack Request Pipeline and process the returned IHttpHandler instead + + + + + Provide a catch-all handler that doesn't match any routes + + + + + Use a fall-back Error Handler for handling global errors + + + + + Use a Custom Error Handler for handling specific error HttpStatusCodes + + + + + Provide a custom model minder for a specific Request DTO + + + + + The AppHost config + + + + + List of pre-registered and user-defined plugins to be enabled in this AppHost + + + + + Virtual access to file resources + + + + + Funqlets are a set of components provided as a package + to an existing container (like a module). + + + + + Configure the given container with the + registrations provided by the funqlet. + + Container to register. + + + + Executed immediately before a Service is executed. Use return to change the request DTO used, must be of the same type. + + + + + Executed immediately after a service is executed. Use return to change response used. + + + + + Occurs when the Service throws an Exception. + + + + + Occurs when an exception is thrown whilst processing a request. + + + + + Apply PreRequest Filters for participating Custom Handlers, e.g. RazorFormat, MarkdownFormat, etc + + + + + Applies the raw request filters. Returns whether or not the request has been handled + and no more processing should be done. + + + + + + Applies the request filters. Returns whether or not the request has been handled + and no more processing should be done. + + + + + + Applies the response filters. Returns whether or not the request has been handled + and no more processing should be done. + + + + + + The AppHost.Container. Note: it is not thread safe to register dependencies after AppStart. + + + + + Starts the Web Service + + + A Uri that acts as the base that the server is listening on. + Format should be: http://127.0.0.1:8080/ or http://127.0.0.1:8080/somevirtual/ + Note: the trailing slash is required! For more info see the + HttpListener.Prefixes property on MSDN. + + + + + Shut down the Web Service + + + + + Overridable method that can be used to implement a custom hnandler + + + + + + Reserves the specified URL for non-administrator users and accounts. + http://msdn.microsoft.com/en-us/library/windows/desktop/cc307223(v=vs.85).aspx + + Reserved Url if the process completes successfully + + + + Creates the required missing tables or DB schema + + + + + Generic + Useful IService base class + + + + + Resolve an alternate Web Service from ServiceStack's IOC container. + + + + + + + Dynamic Session Bag + + + + + Typed UserSession + + + + + Redirect to the https:// version of this url if not already. + + + + + Don't redirect when in DebugMode + + + + + Don't redirect if the request was a forwarded request, e.g. from a Load Balancer + + + + + Single threaded message handler that can process all messages + of a particular message type. + + + + + Process all messages pending + + + + + + Process messages from a single queue. + + + The queue to process + A predicate on whether to continue processing the next message if any + + + + + Process a single message + + + + + Get Current Stats for this Message Handler + + + + + + The type of the message this handler processes + + + + + Encapsulates creating a new message handler + + + + + Processes all messages in a Normal and Priority Queue. + Expects to be called in 1 thread. i.e. Non Thread-Safe. + + + + + + A convenient repository base class you can inherit from to reduce the boilerplate + with accessing a managed IDbConnection + + + + + A convenient base class for your injected service dependencies that reduces the boilerplate + with managed access to ServiceStack's built-in providers + + + + + Track any IDisposable's to dispose of at the end of the request in IAppHost.OnEndRequest() + + + + + + Gets a list of items for this request. + + This list will be cleared on every request and is specific to the original thread that is handling the request. + If a handler uses additional threads, this data will not be available on those threads. + + + + + This class stores the caller call context in order to restore + it when the work item is executed in the thread pool environment. + + + + + Constructor + + + + + Captures the current thread context + + + + + + Applies the thread context stored earlier + + + + + + EventWaitHandleFactory class. + This is a static class that creates AutoResetEvent and ManualResetEvent objects. + In WindowCE the WaitForMultipleObjects API fails to use the Handle property + of XxxResetEvent. It can use only handles that were created by the CreateEvent API. + Consequently this class creates the needed XxxResetEvent and replaces the handle if + it's a WindowsCE OS. + + + + + Create a new AutoResetEvent object + + Return a new AutoResetEvent object + + + + Create a new ManualResetEvent object + + Return a new ManualResetEvent object + + + + Represents an exception in case IWorkItemResult.GetResult has been canceled + + + Represents an exception in case IWorkItemResult.GetResult has been canceled + + + + + Represents an exception in case IWorkItemResult.GetResult has been timed out + + + Represents an exception in case IWorkItemResult.GetResult has been timed out + + + + + Represents an exception in case IWorkItemResult.GetResult has been timed out + + + Represents an exception in case IWorkItemResult.GetResult has been timed out + + + + + A delegate that represents the method to run as the work item + + A state object for the method to run + + + + A delegate to call after the WorkItemCallback completed + + The work item result object + + + + A delegate to call after the WorkItemCallback completed + + The work item result object + + + + A delegate to call when a WorkItemsGroup becomes idle + + A reference to the WorkItemsGroup that became idle + + + + A delegate to call after a thread is created, but before + it's first use. + + + + + A delegate to call when a thread is about to exit, after + it is no longer belong to the pool. + + + + + Defines the availeable priorities of a work item. + The higher the priority a work item has, the sooner + it will be executed. + + + + + IWorkItemsGroup interface + Created by SmartThreadPool.CreateWorkItemsGroup() + + + + + Get an array with all the state objects of the currently running items. + The array represents a snap shot and impact performance. + + + + + Starts to execute work items + + + + + Cancel all the work items. + Same as Cancel(false) + + + + + Cancel all work items using thread abortion + + True to stop work items by raising ThreadAbortException + + + + Wait for all work item to complete. + + + + + Wait for all work item to complete, until timeout expired + + How long to wait for the work items to complete + Returns true if work items completed within the timeout, otherwise false. + + + + Wait for all work item to complete, until timeout expired + + How long to wait for the work items to complete in milliseconds + Returns true if work items completed within the timeout, otherwise false. + + + + Queue a work item + + A callback to execute + Returns a work item result + + + + Queue a work item + + A callback to execute + The priority of the work item + Returns a work item result + + + + Queue a work item + + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + Returns a work item result + + + + Queue a work item + + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + The work item priority + Returns a work item result + + + + Queue a work item + + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + + A delegate to call after the callback completion + + Returns a work item result + + + + Queue a work item + + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + + A delegate to call after the callback completion + + The work item priority + Returns a work item result + + + + Queue a work item + + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + + A delegate to call after the callback completion + + Indicates on which cases to call to the post execute callback + Returns a work item result + + + + Queue a work item + + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + + A delegate to call after the callback completion + + Indicates on which cases to call to the post execute callback + The work item priority + Returns a work item result + + + + Queue a work item + + Work item info + A callback to execute + Returns a work item result + + + + Queue a work item + + Work item information + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + Returns a work item result + + + + Queue a work item. + + Returns a IWorkItemResult object, but its GetResult() will always return null + + + + Queue a work item. + + Returns a IWorkItemResult object, but its GetResult() will always return null + + + + Queue a work item. + + Returns a IWorkItemResult object, but its GetResult() will always return null + + + + Queue a work item. + + Returns a IWorkItemResult object, but its GetResult() will always return null + + + + Queue a work item. + + Returns a IWorkItemResult object, but its GetResult() will always return null + + + + Queue a work item. + + Returns a IWorkItemResult<TResult> object. + its GetResult() returns a TResult object + + + + Queue a work item. + + Returns a IWorkItemResult<TResult> object. + its GetResult() returns a TResult object + + + + Queue a work item. + + Returns a IWorkItemResult<TResult> object. + its GetResult() returns a TResult object + + + + Queue a work item. + + Returns a IWorkItemResult<TResult> object. + its GetResult() returns a TResult object + + + + Queue a work item. + + Returns a IWorkItemResult<TResult> object. + its GetResult() returns a TResult object + + + + Get/Set the name of the WorkItemsGroup + + + + + Get/Set the maximum number of workitem that execute cocurrency on the thread pool + + + + + Get the number of work items waiting in the queue. + + + + + Get the WorkItemsGroup start information + + + + + IsIdle is true when there are no work items running or queued. + + + + + This event is fired when all work items are completed. + (When IsIdle changes to true) + This event only work on WorkItemsGroup. On SmartThreadPool + it throws the NotImplementedException. + + + + + Never call to the PostExecute call back + + + + + Call to the PostExecute only when the work item is cancelled + + + + + Call to the PostExecute only when the work item is not cancelled + + + + + Always call to the PostExecute + + + + + The common interface of IWorkItemResult and IWorkItemResult<T> + + + + + This method intent is for internal use. + + + + + + This method intent is for internal use. + + + + + + IWorkItemResult interface. + Created when a WorkItemCallback work item is queued. + + + + + IWorkItemResult<TResult> interface. + Created when a Func<TResult> work item is queued. + + + + + Get the result of the work item. + If the work item didn't run yet then the caller waits. + + The result of the work item + + + + Get the result of the work item. + If the work item didn't run yet then the caller waits until timeout. + + The result of the work item + On timeout throws WorkItemTimeoutException + + + + Get the result of the work item. + If the work item didn't run yet then the caller waits until timeout. + + The result of the work item + On timeout throws WorkItemTimeoutException + + + + Get the result of the work item. + If the work item didn't run yet then the caller waits until timeout or until the cancelWaitHandle is signaled. + + Timeout in milliseconds, or -1 for infinite + + true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. + + A cancel wait handle to interrupt the blocking if needed + The result of the work item + On timeout throws WorkItemTimeoutException + On cancel throws WorkItemCancelException + + + + Get the result of the work item. + If the work item didn't run yet then the caller waits until timeout or until the cancelWaitHandle is signaled. + + The result of the work item + On timeout throws WorkItemTimeoutException + On cancel throws WorkItemCancelException + + + + Get the result of the work item. + If the work item didn't run yet then the caller waits. + + Filled with the exception if one was thrown + The result of the work item + + + + Get the result of the work item. + If the work item didn't run yet then the caller waits until timeout. + + + + Filled with the exception if one was thrown + The result of the work item + On timeout throws WorkItemTimeoutException + + + + Get the result of the work item. + If the work item didn't run yet then the caller waits until timeout. + + + Filled with the exception if one was thrown + + The result of the work item + On timeout throws WorkItemTimeoutException + + + + Get the result of the work item. + If the work item didn't run yet then the caller waits until timeout or until the cancelWaitHandle is signaled. + + Timeout in milliseconds, or -1 for infinite + + true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. + + A cancel wait handle to interrupt the blocking if needed + Filled with the exception if one was thrown + The result of the work item + On timeout throws WorkItemTimeoutException + On cancel throws WorkItemCancelException + + + + Get the result of the work item. + If the work item didn't run yet then the caller waits until timeout or until the cancelWaitHandle is signaled. + + The result of the work item + + Filled with the exception if one was thrown + + + On timeout throws WorkItemTimeoutException + On cancel throws WorkItemCancelException + + + + Same as Cancel(false). + + + + + Cancel the work item execution. + If the work item is in the queue then it won't execute + If the work item is completed, it will remain completed + If the work item is in progress then the user can check the SmartThreadPool.IsWorkItemCanceled + property to check if the work item has been cancelled. If the abortExecution is set to true then + the Smart Thread Pool will send an AbortException to the running thread to stop the execution + of the work item. When an in progress work item is canceled its GetResult will throw WorkItemCancelException. + If the work item is already cancelled it will remain cancelled + + When true send an AbortException to the executing thread. + Returns true if the work item was not completed, otherwise false. + + + + Gets an indication whether the asynchronous operation has completed. + + + + + Gets an indication whether the asynchronous operation has been canceled. + + + + + Gets the user-defined object that contains context data + for the work item method. + + + + + Get the work item's priority + + + + + Return the result, same as GetResult() + + + + + Returns the exception if occured otherwise returns null. + + + + + An internal delegate to call when the WorkItem starts or completes + + + + + This method is intent for internal use. + + + + + PriorityQueue class + This class is not thread safe because we use external lock + + + + + The number of queues, there is one for each type of priority + + + + + Work items queues. There is one for each type of priority + + + + + The total number of work items within the queues + + + + + Use with IEnumerable interface + + + + + Enqueue a work item. + + A work item + + + + Dequeque a work item. + + Returns the next work item + + + + Find the next non empty queue starting at queue queueIndex+1 + + The index-1 to start from + + The index of the next non empty queue or -1 if all the queues are empty + + + + + Clear all the work items + + + + + Returns an enumerator to iterate over the work items + + Returns an enumerator + + + + The number of work items + + + + + The class the implements the enumerator + + + + + Smart thread pool class. + + + + + Contains the name of this instance of SmartThreadPool. + Can be changed by the user. + + + + + Cancel all the work items. + Same as Cancel(false) + + + + + Wait for the SmartThreadPool/WorkItemsGroup to be idle + + + + + Wait for the SmartThreadPool/WorkItemsGroup to be idle + + + + + Queue a work item + + A callback to execute + Returns a work item result + + + + Queue a work item + + A callback to execute + The priority of the work item + Returns a work item result + + + + Queue a work item + + Work item info + A callback to execute + Returns a work item result + + + + Queue a work item + + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + Returns a work item result + + + + Queue a work item + + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + The work item priority + Returns a work item result + + + + Queue a work item + + Work item information + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + Returns a work item result + + + + Queue a work item + + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + + A delegate to call after the callback completion + + Returns a work item result + + + + Queue a work item + + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + + A delegate to call after the callback completion + + The work item priority + Returns a work item result + + + + Queue a work item + + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + + A delegate to call after the callback completion + + Indicates on which cases to call to the post execute callback + Returns a work item result + + + + Queue a work item + + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + + A delegate to call after the callback completion + + Indicates on which cases to call to the post execute callback + The work item priority + Returns a work item result + + + + Get/Set the name of the SmartThreadPool/WorkItemsGroup instance + + + + + IsIdle is true when there are no work items running or queued. + + + + + Default minimum number of threads the thread pool contains. (0) + + + + + Default maximum number of threads the thread pool contains. (25) + + + + + Default idle timeout in milliseconds. (One minute) + + + + + Indicate to copy the security context of the caller and then use it in the call. (false) + + + + + Indicate to copy the HTTP context of the caller and then use it in the call. (false) + + + + + Indicate to dispose of the state objects if they support the IDispose interface. (false) + + + + + The default option to run the post execute (CallToPostExecute.Always) + + + + + The default work item priority (WorkItemPriority.Normal) + + + + + The default is to work on work items as soon as they arrive + and not to wait for the start. (false) + + + + + The default thread priority (ThreadPriority.Normal) + + + + + The default thread pool name. (SmartThreadPool) + + + + + The default fill state with params. (false) + It is relevant only to QueueWorkItem of Action<...>/Func<...> + + + + + The default thread backgroundness. (true) + + + + + The default apartment state of a thread in the thread pool. + The default is ApartmentState.Unknown which means the STP will not + set the apartment of the thread. It will use the .NET default. + + + + + The default post execute method to run. (None) + When null it means not to call it. + + + + + The default name to use for the performance counters instance. (null) + + + + + The default Max Stack Size. (SmartThreadPool) + + + + + Dictionary of all the threads in the thread pool. + + + + + Queue of work items. + + + + + Count the work items handled. + Used by the performance counter. + + + + + Number of threads that currently work (not idle). + + + + + Stores a copy of the original STPStartInfo. + It is used to change the MinThread and MaxThreads + + + + + Total number of work items that are stored in the work items queue + plus the work items that the threads in the pool are working on. + + + + + Signaled when the thread pool is idle, i.e. no thread is busy + and the work items queue is empty + + + + + An event to signal all the threads to quit immediately. + + + + + A flag to indicate if the Smart Thread Pool is now suspended. + + + + + A flag to indicate the threads to quit. + + + + + Counts the threads created in the pool. + It is used to name the threads. + + + + + Indicate that the SmartThreadPool has been disposed + + + + + Holds all the WorkItemsGroup instaces that have at least one + work item int the SmartThreadPool + This variable is used in case of Shutdown + + + + + A common object for all the work items int the STP + so we can mark them to cancel in O(1) + + + + + Windows STP performance counters + + + + + Local STP performance counters + + + + + Constructor + + + + + Constructor + + Idle timeout in milliseconds + + + + Constructor + + Idle timeout in milliseconds + Upper limit of threads in the pool + + + + Constructor + + Idle timeout in milliseconds + Upper limit of threads in the pool + Lower limit of threads in the pool + + + + Constructor + + A SmartThreadPool configuration that overrides the default behavior + + + + Waits on the queue for a work item, shutdown, or timeout. + + + Returns the WaitingCallback or null in case of timeout or shutdown. + + + + + Put a new work item in the queue + + A work item to queue + + + + Inform that the current thread is about to quit or quiting. + The same thread may call this method more than once. + + + + + Starts new threads + + The number of threads to start + + + + A worker thread method that processes work items from the work items queue. + + + + + Force the SmartThreadPool to shutdown + + + + + Force the SmartThreadPool to shutdown with timeout + + + + + Empties the queue of work items and abort the threads in the pool. + + + + + Wait for all work items to complete + + Array of work item result objects + + true when every work item in workItemResults has completed; otherwise false. + + + + + Wait for all work items to complete + + Array of work item result objects + The number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely. + + true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. + + + true when every work item in workItemResults has completed; otherwise false. + + + + + Wait for all work items to complete + + Array of work item result objects + The number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely. + + true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. + + A cancel wait handle to interrupt the wait if needed + + true when every work item in workItemResults has completed; otherwise false. + + + + + Wait for all work items to complete + + Array of work item result objects + The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely. + + true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. + + + true when every work item in workItemResults has completed; otherwise false. + + + + + Wait for all work items to complete + + Array of work item result objects + The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely. + + true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. + + A cancel wait handle to interrupt the wait if needed + + true when every work item in workItemResults has completed; otherwise false. + + + + + Waits for any of the work items in the specified array to complete, cancel, or timeout + + Array of work item result objects + + The array index of the work item result that satisfied the wait, or WaitTimeout if any of the work items has been canceled. + + + + + Waits for any of the work items in the specified array to complete, cancel, or timeout + + Array of work item result objects + The number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely. + + true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. + + + The array index of the work item result that satisfied the wait, or WaitTimeout if no work item result satisfied the wait and a time interval equivalent to millisecondsTimeout has passed or the work item has been canceled. + + + + + Waits for any of the work items in the specified array to complete, cancel, or timeout + + Array of work item result objects + The number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely. + + true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. + + A cancel wait handle to interrupt the wait if needed + + The array index of the work item result that satisfied the wait, or WaitTimeout if no work item result satisfied the wait and a time interval equivalent to millisecondsTimeout has passed or the work item has been canceled. + + + + + Waits for any of the work items in the specified array to complete, cancel, or timeout + + Array of work item result objects + The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely. + + true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. + + + The array index of the work item result that satisfied the wait, or WaitTimeout if no work item result satisfied the wait and a time interval equivalent to millisecondsTimeout has passed or the work item has been canceled. + + + + + Waits for any of the work items in the specified array to complete, cancel, or timeout + + Array of work item result objects + The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely. + + true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. + + A cancel wait handle to interrupt the wait if needed + + The array index of the work item result that satisfied the wait, or WaitTimeout if no work item result satisfied the wait and a time interval equivalent to millisecondsTimeout has passed or the work item has been canceled. + + + + + Creates a new WorkItemsGroup. + + The number of work items that can be run concurrently + A reference to the WorkItemsGroup + + + + Creates a new WorkItemsGroup. + + The number of work items that can be run concurrently + A WorkItemsGroup configuration that overrides the default behavior + A reference to the WorkItemsGroup + + + + Checks if the work item has been cancelled, and if yes then abort the thread. + Can be used with Cancel and timeout + + + + + Get an array with all the state objects of the currently running items. + The array represents a snap shot and impact performance. + + + + + Start the thread pool if it was started suspended. + If it is already running, this method is ignored. + + + + + Cancel all work items using thread abortion + + True to stop work items by raising ThreadAbortException + + + + Wait for the thread pool to be idle + + + + + Executes all actions in parallel. + Returns when they all finish. + + Actions to execute + + + + Executes all actions in parallel. + Returns when they all finish. + + Actions to execute + + + + Executes all actions in parallel + Returns when the first one completes + + Actions to execute + + + + Executes all actions in parallel + Returns when the first one completes + + Actions to execute + + + + Executes actions in sequence asynchronously. + Returns immediately. + + A state context that passes + Actions to execute in the order they should run + + + + Executes actions in sequence asynchronously. + Returns immediately. + + + Actions to execute in the order they should run + + + + An event to call after a thread is created, but before + it's first use. + + + + + An event to call when a thread is about to exit, after + it is no longer belong to the pool. + + + + + A reference to the current work item a thread from the thread pool + is executing. + + + + + This event is fired when a thread is created. + Use it to initialize a thread before the work items use it. + + + + + This event is fired when a thread is terminating. + Use it for cleanup. + + + + + Get/Set the lower limit of threads in the pool. + + + + + Get/Set the upper limit of threads in the pool. + + + + + Get the number of threads in the thread pool. + Should be between the lower and the upper limits. + + + + + Get the number of busy (not idle) threads in the thread pool. + + + + + Returns true if the current running work item has been cancelled. + Must be used within the work item's callback method. + The work item should sample this value in order to know if it + needs to quit before its completion. + + + + + Thread Pool start information (readonly) + + + + + Return the local calculated performance counters + Available only if STPStartInfo.EnableLocalPerformanceCounters is true. + + + + + Get/Set the maximum number of work items that execute cocurrency on the thread pool + + + + + Get the number of work items in the queue. + + + + + WorkItemsGroup start information (readonly) + + + + + This event is fired when all work items are completed. + (When IsIdle changes to true) + This event only work on WorkItemsGroup. On SmartThreadPool + it throws the NotImplementedException. + + + + + The thread creation time + The value is stored as UTC value. + + + + + The last time this thread has been running + It is updated by IAmAlive() method + The value is stored as UTC value. + + + + + A reference from each thread in the thread pool to its SmartThreadPool + object container. + With this variable a thread can know whatever it belongs to a + SmartThreadPool. + + + + + A reference to the current work item a thread from the thread pool + is executing. + + + + + Summary description for STPPerformanceCounter. + + + + + Summary description for STPStartInfo. + + + + + Summary description for WIGStartInfo. + + + + + Get a readonly version of this WIGStartInfo + + Returns a readonly reference to this WIGStartInfoRO + + + + Get/Set if to use the caller's security context + + + + + Get/Set if to use the caller's HTTP context + + + + + Get/Set if to dispose of the state object of a work item + + + + + Get/Set the run the post execute options + + + + + Get/Set the default post execute callback + + + + + Get/Set if the work items execution should be suspended until the Start() + method is called. + + + + + Get/Set the default priority that a work item gets when it is enqueued + + + + + Get/Set the if QueueWorkItem of Action<...>/Func<...> fill the + arguments as an object array into the state of the work item. + The arguments can be access later by IWorkItemResult.State. + + + + + Get a readonly version of this STPStartInfo. + + Returns a readonly reference to this STPStartInfo + + + + Get/Set the idle timeout in milliseconds. + If a thread is idle (starved) longer than IdleTimeout then it may quit. + + + + + Get/Set the lower limit of threads in the pool. + + + + + Get/Set the upper limit of threads in the pool. + + + + + Get/Set the scheduling priority of the threads in the pool. + The Os handles the scheduling. + + + + + Get/Set the thread pool name. Threads will get names depending on this. + + + + + Get/Set the performance counter instance name of this SmartThreadPool + The default is null which indicate not to use performance counters at all. + + + + + Enable/Disable the local performance counter. + This enables the user to get some performance information about the SmartThreadPool + without using Windows performance counters. (Useful on WindowsCE, Silverlight, etc.) + The default is false. + + + + + Get/Set backgroundness of thread in thread pool. + + + + + Get/Set the apartment state of threads in the thread pool + + + + + Get/Set the max stack size of threads in the thread pool + + + + + Holds a callback delegate and the state for that delegate. + + + + + Callback delegate for the callback. + + + + + State with which to call the callback delegate. + + + + + Stores the caller's context + + + + + Holds the result of the mehtod + + + + + Hold the exception if the method threw it + + + + + Hold the state of the work item + + + + + A ManualResetEvent to indicate that the result is ready + + + + + A reference count to the _workItemCompleted. + When it reaches to zero _workItemCompleted is Closed + + + + + Represents the result state of the work item + + + + + Work item info + + + + + A reference to an object that indicates whatever the + WorkItemsGroup has been canceled + + + + + A reference to an object that indicates whatever the + SmartThreadPool has been canceled + + + + + The work item group this work item belong to. + + + + + The thread that executes this workitem. + This field is available for the period when the work item is executed, before and after it is null. + + + + + The absulote time when the work item will be timeout + + + + + Stores how long the work item waited on the stp queue + + + + + Stores how much time it took the work item to execute after it went out of the queue + + + + + Initialize the callback holding object. + + The workItemGroup of the workitem + The WorkItemInfo of te workitem + Callback delegate for the callback. + State with which to call the callback delegate. + + We assume that the WorkItem object is created within the thread + that meant to run the callback + + + + Change the state of the work item to in progress if it wasn't canceled. + + + Return true on success or false in case the work item was canceled. + If the work item needs to run a post execute then the method will return true. + + + + + Execute the work item and the post execute + + + + + Execute the work item + + + + + Runs the post execute callback + + + + + Set the result of the work item to return + + The result of the work item + The exception that was throw while the workitem executed, null + if there was no exception. + + + + Returns the work item result + + The work item result + + + + Wait for all work items to complete + + Array of work item result objects + The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely. + + true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. + + A cancel wait handle to interrupt the wait if needed + + true when every work item in waitableResults has completed; otherwise false. + + + + + Waits for any of the work items in the specified array to complete, cancel, or timeout + + Array of work item result objects + The number of milliseconds to wait, or Timeout.Infinite (-1) to wait indefinitely. + + true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. + + A cancel wait handle to interrupt the wait if needed + + The array index of the work item result that satisfied the wait, or WaitTimeout if no work item result satisfied the wait and a time interval equivalent to millisecondsTimeout has passed or the work item has been canceled. + + + + + Fill an array of wait handles with the work items wait handles. + + An array of work item results + An array of wait handles to fill + + + + Release the work items' wait handles + + An array of work item results + + + + Sets the work item's state + + The state to set the work item to + + + + Signals that work item has been completed or canceled + + Indicates that the work item has been canceled + + + + Cancel the work item if it didn't start running yet. + + Returns true on success or false if the work item is in progress or already completed + + + + Get the result of the work item. + If the work item didn't run yet then the caller waits for the result, timeout, or cancel. + In case of error the method throws and exception + + The result of the work item + + + + Get the result of the work item. + If the work item didn't run yet then the caller waits for the result, timeout, or cancel. + In case of error the e argument is filled with the exception + + The result of the work item + + + + A wait handle to wait for completion, cancel, or timeout + + + + + Called when the WorkItem starts + + + + + Called when the WorkItem completes + + + + + Returns true when the work item has completed or canceled + + + + + Returns true when the work item has canceled + + + + + Returns the priority of the work item + + + + + Indicates the state of the work item in the thread pool + + + + + A back reference to the work item + + + + + Return the result, same as GetResult() + + + + + Returns the exception if occured otherwise returns null. + This value is valid only after the work item completed, + before that it is always null. + + + + + Create a new work item + + The WorkItemsGroup of this workitem + Work item group start information + A callback to execute + Returns a work item + + + + Create a new work item + + The WorkItemsGroup of this workitem + Work item group start information + A callback to execute + The priority of the work item + Returns a work item + + + + Create a new work item + + The WorkItemsGroup of this workitem + Work item group start information + Work item info + A callback to execute + Returns a work item + + + + Create a new work item + + The WorkItemsGroup of this workitem + Work item group start information + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + Returns a work item + + + + Create a new work item + + The work items group + Work item group start information + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + The work item priority + Returns a work item + + + + Create a new work item + + The work items group + Work item group start information + Work item information + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + Returns a work item + + + + Create a new work item + + The work items group + Work item group start information + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + + A delegate to call after the callback completion + + Returns a work item + + + + Create a new work item + + The work items group + Work item group start information + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + + A delegate to call after the callback completion + + The work item priority + Returns a work item + + + + Create a new work item + + The work items group + Work item group start information + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + + A delegate to call after the callback completion + + Indicates on which cases to call to the post execute callback + Returns a work item + + + + Create a new work item + + The work items group + Work item group start information + A callback to execute + + The context object of the work item. Used for passing arguments to the work item. + + + A delegate to call after the callback completion + + Indicates on which cases to call to the post execute callback + The work item priority + Returns a work item + + + + Summary description for WorkItemInfo. + + + + + Get/Set if to use the caller's security context + + + + + Get/Set if to use the caller's HTTP context + + + + + Get/Set if to dispose of the state object of a work item + + + + + Get/Set the run the post execute options + + + + + Get/Set the post execute callback + + + + + Get/Set the work item's priority + + + + + Get/Set the work item's timout in milliseconds. + This is a passive timout. When the timout expires the work item won't be actively aborted! + + + + + Summary description for WorkItemsGroup. + + + + + A reference to the SmartThreadPool instance that created this + WorkItemsGroup. + + + + + A flag to indicate if the Work Items Group is now suspended. + + + + + Defines how many work items of this WorkItemsGroup can run at once. + + + + + Priority queue to hold work items before they are passed + to the SmartThreadPool. + + + + + Indicate how many work items are waiting in the SmartThreadPool + queue. + This value is used to apply the concurrency. + + + + + Indicate how many work items are currently running in the SmartThreadPool. + This value is used with the Cancel, to calculate if we can send new + work items to the STP. + + + + + WorkItemsGroup start information + + + + + Signaled when all of the WorkItemsGroup's work item completed. + + + + + A common object for all the work items that this work items group + generate so we can mark them to cancel in O(1) + + + + + Start the Work Items Group if it was started suspended + + + + + Wait for the thread pool to be idle + + + + + The OnIdle event + + + + + WorkItemsGroup start information + + + + + WorkItemsQueue class. + + + + + Waiters queue (implemented as stack). + + + + + Waiters count + + + + + Work items queue + + + + + Indicate that work items are allowed to be queued + + + + + A flag that indicates if the WorkItemsQueue has been disposed. + + + + + Enqueue a work item to the queue. + + + + + Waits for a work item or exits on timeout or cancel + + Timeout in milliseconds + Cancel wait handle + Returns true if the resource was granted + + + + Cleanup the work items queue, hence no more work + items are allowed to be queue + + + + + Returns the WaiterEntry of the current thread + + + In order to avoid creation and destuction of WaiterEntry + objects each thread has its own WaiterEntry object. + + + + Push a new waiter into the waiter's stack + + A waiter to put in the stack + + + + Pop a waiter from the waiter's stack + + Returns the first waiter in the stack + + + + Remove a waiter from the stack + + A waiter entry to remove + If true the waiter count is always decremented + + + + Each thread in the thread pool keeps its own waiter entry. + + + + + Returns the current number of work items in the queue + + + + + Returns the current number of waiters + + + + + Event to signal the waiter that it got the work item. + + + + + Flag to know if this waiter already quited from the queue + because of a timeout. + + + + + Flag to know if the waiter was signaled and got a work item. + + + + + A work item that passed directly to the waiter withou going + through the queue + + + + + Signal the waiter that it got a work item. + + Return true on success + The method fails if Timeout() preceded its call + + + + Mark the wait entry that it has been timed out + + Return true on success + The method fails if Signal() preceded its call + + + + Reset the wait entry so it can be used again + + + + + Free resources + + + + + Respond with a 'Soft redirect' so smart clients (e.g. ajax) have access to the response and + can decide whether or not they should redirect + + + + + Decorate the response with an additional client-side event to instruct participating + smart clients (e.g. ajax) with hints to transparently invoke client-side functionality + + + + + Shortcut to get the ResponseDTO whether it's bare or inside a IHttpResult + + + + + + + Alias of AsDto + + + + + Shortcut to get the ResponseDTO whether it's bare or inside a IHttpResult + + + TResponse if found; otherwise null + + + + Alias of AsDto + + + + + Whether the response is an IHttpError or Exception + + + + + rangeHeader should be of the format "bytes=0-" or "bytes=0-12345" or "bytes=123-456" + + + + + Adds 206 PartialContent Status, Content-Range and Content-Length headers + + + + + Writes partial range as specified by start-end, from fromStream to toStream. + + + + + Service error logs are kept in 'urn:ServiceErrors:{ServiceName}' + + + + + Combined service error logs are maintained in 'urn:ServiceErrors:All' + + + + + RequestLogs service Route, default is /requestlogs + + + + + Turn On/Off Session Tracking + + + + + Turn On/Off Logging of Raw Request Body, default is Off + + + + + Turn On/Off Tracking of Responses + + + + + Turn On/Off Tracking of Exceptions + + + + + Size of InMemoryRollingRequestLogger circular buffer + + + + + Limit access to /requestlogs service to these roles + + + + + Change the RequestLogger provider. Default is InMemoryRollingRequestLogger + + + + + Don't log requests of these types. By default RequestLog's are excluded + + + + + Don't log request bodys for services with sensitive information. + By default Auth and Registration requests are hidden. + + + + + Indicates that the request dto, which is associated with this attribute, + requires authentication. + + + + + Restrict authentication to a specific . + For example, if this attribute should only permit access + if the user is authenticated with , + you should set this property to . + + + + + Redirect the client to a specific URL if authentication failed. + If this property is null, simply `401 Unauthorized` is returned. + + + + + Enable the authentication feature and configure the AuthService. + + + + + Inject logic into existing services by introspecting the request and injecting your own + validation logic. Exceptions thrown will have the same behaviour as if the service threw it. + + If a non-null object is returned the request will short-circuit and return that response. + + The instance of the service + GET,POST,PUT,DELETE + + Response DTO; non-null will short-circuit execution and return that response + + + + Public API entry point to authenticate via code + + + null; if already autenticated otherwise a populated instance of AuthResponse + + + + The specified may change as a side-effect of this method. If + subsequent code relies on current data be sure to reload + the session istance via . + + + + + Remove the Users Session + + + + + + + + The entry point for all AuthProvider providers. Runs inside the AuthService so exceptions are treated normally. + Overridable so you can provide your own Auth implementation. + + + + + Determine if the current session is already authenticated with this AuthProvider + + + + + Allows specifying a global fallback config that if exists is formatted with the Provider as the first arg. + E.g. this appSetting with the TwitterAuthProvider: + oauth.CallbackUrl="http://localhost:11001/auth/{0}" + Would result in: + oauth.CallbackUrl="http://localhost:11001/auth/twitter" + + + + + + Remove the Users Session + + + + + + + + Saves the Auth Tokens for this request. Called in OnAuthenticated(). + Overrideable, the default behaviour is to call IUserAuthRepository.CreateOrMergeAuthSession(). + + + + + Base class for entity validator classes. + + The type of the object being validated + + + + Defines a validator for a particualr type. + + + + + + Defines a validator for a particular type. + + + + + Validates the specified instance + + + A ValidationResult containing any validation failures + + + + Validates the specified instance. + + A ValidationContext + A ValidationResult object containy any validation failures. + + + + Creates a hook to access various meta data properties + + A IValidatorDescriptor object which contains methods to access metadata + + + + Checks to see whether the validator can validate objects of the specified type + + + + + Validates the specified instance. + + The instance to validate + A ValidationResult object containing any validation failures. + + + + Sets the cascade mode for all rules within this validator. + + + + + Validates the specified instance + + The object to validate + A ValidationResult object containing any validation failures + + + + Validates the specified instance. + + Validation Context + A ValidationResult object containing any validation failures. + + + + Adds a rule to the current validator. + + + + + + Creates a that can be used to obtain metadata about the current validator. + + + + + Defines a validation rule for a specify property. + + + RuleFor(x => x.Surname)... + + The type of property being validated + The expression representing the property to validate + an IRuleBuilder instance on which validators can be defined + + + + Defines a custom validation rule using a lambda expression. + If the validation rule fails, it should return a instance of a ValidationFailure + If the validation rule succeeds, it should return null. + + A lambda that executes custom validation rules. + + + + Defines a custom validation rule using a lambda expression. + If the validation rule fails, it should return an instance of ValidationFailure + If the validation rule succeeds, it should return null. + + A lambda that executes custom validation rules + + + + Defines a RuleSet that can be used to group together several validators. + + The name of the ruleset. + Action that encapsulates the rules in the ruleset. + + + + Defines a RuleSet that can be used to provide specific validation rules for specific HTTP methods (GET, POST...) + + The HTTP methods where this rule set should be used. + Action that encapuslates the rules in the ruleset. + + + + Defines a condition that applies to several rules + + The condition that should apply to multiple rules + Action that encapsulates the rules. + + + + + Defiles an inverse condition that applies to several rules + + The condition that should be applied to multiple rules + Action that encapsulates the rules + + + + Returns an enumerator that iterates through the collection of validation rules. + + + A that can be used to iterate through the collection. + + 1 + + + + Sets the cascade mode for all rules within this validator. + + + + + Create a Facebook App at: https://developers.facebook.com/apps + The Callback URL for your app should match the CallbackUrl provided. + + + + + The entry point for all AuthProvider providers. Runs inside the AuthService so exceptions are treated normally. + Overridable so you can provide your own Auth implementation. + + + + + + + + + Sets the CallbackUrl and session.ReferrerUrl if not set and initializes the session tokens for this AuthProvider + + + + + + + + + Download Yammer User Info given its ID. + + + The Yammer User ID. + + + The User info in JSON format. + + + + Yammer provides a method to retrieve current user information via + "https://www.yammer.com/api/v1/users/current.json". + + + However, to ensure consistency with the rest of the Auth codebase, + the explicit URL will be used, where [:id] denotes the User ID: + "https://www.yammer.com/api/v1/users/[:id].json" + + + Refer to: https://developer.yammer.com/restapi/ for full documentation. + + + + + + Thread-safe In memory UserAuth data store so it can be used without a dependency on Redis. + + + + + Creates the required missing tables or DB schema + + + + + Update an existing registraiton + + + + + Create new Registration + + + + + Logic to update UserAuth from Registration info, not enabled on OnPut because of security. + + + + + Thank you Martijn + http://www.dijksterhuis.org/creating-salted-hash-values-in-c/ + + + + + Create an app at https://dev.twitter.com/apps to get your ConsumerKey and ConsumerSecret for your app. + The Callback URL for your app should match the CallbackUrl provided. + + + + + The ServiceStack Yammer OAuth provider. + + + + This provider is loosely based on the existing ServiceStack's Facebook OAuth provider. + + + For the full info on Yammer's OAuth2 authentication flow, refer to: + https://developer.yammer.com/authentication/#a-oauth2 + + + Note: Add these to your application / web config settings under appSettings and replace + values as appropriate. + + + + + + + + + ]]> + + + + + + The OAuth provider name / identifier. + + + + + Initializes a new instance of the class. + + + The application settings (in web.config). + + + + + Authenticate against Yammer OAuth endpoint. + + + The auth service. + + + The session. + + + The request. + + + The . + + + + + Load the UserAuth info into the session. + + + The User session. + + + The OAuth tokens. + + + The auth info. + + + + + Load the UserOAuth info into the session. + + + The auth session. + + + The OAuth tokens. + + + + + Gets or sets the Yammer OAuth client id. + + + + + Gets or sets the Yammer OAuth client secret. + + + + + Gets or sets the Yammer OAuth pre-auth url. + + + + + The Yammer User's email addresses. + + + + + Gets or sets the email address type (e.g. primary). + + + + + Gets or sets the email address. + + + + + Removes items from cache that have keys matching the specified wildcard pattern + + Cache client + The wildcard, where "*" means any sequence of characters and "?" means any single character. + + + + Removes items from the cache based on the specified regular expression pattern + + Cache client + Regular expression pattern to search cache keys + + + + Add value with specified key to the cache, and set the cache entry to never expire. + + + + + Stores The value with key only if such key doesn't exist at the server yet. + + + + + Adds or replaces the value with key, and sets the cache entry to never expire. + + + + + Adds or replaces the value with key. + + + + + Adds or replaces the value with key. + + + + + Replace the value with specified key if it exists, and set the cache entry to never expire. + + + + + Replace the value with specified key if it exists. + + + + + Add the value with key to the cache, set to never expire. + + + + + Add or replace the value with key to the cache, set to never expire. + + + + + Replace the value with key in the cache, set to never expire. + + + + + Add the value with key to the cache, set to expire at specified DateTime. + + This method examines the DateTimeKind of expiresAt to determine if conversion to + universal time is needed. The version of Add that takes a TimeSpan expiration is faster + than using this method with a DateTime of Kind other than Utc, and is not affected by + ambiguous local time during daylight savings/standard time transition. + + + + Add or replace the value with key to the cache, set to expire at specified DateTime. + + This method examines the DateTimeKind of expiresAt to determine if conversion to + universal time is needed. The version of Set that takes a TimeSpan expiration is faster + than using this method with a DateTime of Kind other than Utc, and is not affected by + ambiguous local time during daylight savings/standard time transition. + + + + Replace the value with key in the cache, set to expire at specified DateTime. + + This method examines the DateTimeKind of expiresAt to determine if conversion to + universal time is needed. The version of Replace that takes a TimeSpan expiration is faster + than using this method with a DateTime of Kind other than Utc, and is not affected by + ambiguous local time during daylight savings/standard time transition. + + + + Add the value with key to the cache, set to expire after specified TimeSpan. + + + + + Add or replace the value with key to the cache, set to expire after specified TimeSpan. + + + + + Replace the value with key in the cache, set to expire after specified TimeSpan. + + + + + Create new instance of CacheEntry. + + + + UTC time at which CacheEntry expires. + + + + Would've preferred to use [assembly: ContractNamespace] attribute but it is not supported in Mono + + + + + More familiar name for the new crowd. + + + + + The tier lets you specify a retrieving a setting with the tier prefix first before falling back to the original key. + E.g a tier of 'Live' looks for 'Live.{Key}' or if not found falls back to '{Key}'. + + + + + Returns string if exists, otherwise null + + + + + + + Provides a common interface for Settings providers such as + ConfigurationManager or Azure's RoleEnvironment. The only + requirement is that if the implementation cannot find the + specified key, the return value must be null + + The key for the setting + The string value of the specified key, or null if the key + was invalid + + + + Gets the nullable app setting. + + + + + Gets the app setting. + + + + + Determines wheter the Config section identified by the sectionName exists. + + + + + Returns AppSetting[key] if exists otherwise defaultValue + + + + + Returns AppSetting[key] if exists otherwise defaultValue, for non-string values + + + + + Gets the connection string setting. + + + + + Gets the connection string. + + + + + Gets the list from app setting. + + + + + Gets the dictionary from app setting. + + + + + Get the static Parse(string) method on the type supplied + + + + + Gets the constructor info for T(string) if exists. + + + + + Returns the value returned by the 'T.Parse(string)' method if exists otherwise 'new T(string)'. + e.g. if T was a TimeSpan it will return TimeSpan.Parse(textValue). + If there is no Parse Method it will attempt to create a new instance of the destined type + + + + + Plugin adds support for Cross-origin resource sharing (CORS, see http://www.w3.org/TR/access-control/). + CORS allows to access resources from different domain which usually forbidden by origin policy. + + + + + Represents a default constructor with Allow Origin equals to "*", Allowed GET, POST, PUT, DELETE, OPTIONS request and allowed "Content-Type" header. + + + + + Attribute marks that specific response class has support for Cross-origin resource sharing (CORS, see http://www.w3.org/TR/access-control/). CORS allows to access resources from different domain which usually forbidden by origin policy. + + + + + Represents a default constructor with Allow Origin equals to "*", Allowed GET, POST, PUT, DELETE, OPTIONS request and allowed "Content-Type" header. + + + + + Change the default HTML view or template used for the HTML response of this service + + + + + Class that can be used to find all the validators from a collection of types. + + + + + Creates a scanner that works on a sequence of types. + + + + + Finds all the validators in the specified assembly. + + + + + Finds all the validators in the assembly containing the specified type. + + + + + Performs the specified action to all of the assembly scan results. + + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + 1 + + + + Result of performing a scan. + + + + + Creates an instance of an AssemblyScanResult. + + + + + Validator interface type, eg IValidator<Foo> + + + + + Concrete type that implements the InterfaceType, eg FooValidator. + + + + + Implementation of IValidatorFactory that looks for ValidatorAttribute instances on the specified type in order to provide the validator instance. + + + + + Gets validators for a particular type. + + + + + Gets the validator for the specified type. + + + + + Gets the validator for the specified type. + + + + + Gets a validator for the appropriate type. + + + + + Gets a validator for the appropriate type. + + + + + Validator attribute to define the class that will describe the Validation rules + + + + + Creates an instance of the ValidatorAttribute allowing a validator type to be specified. + + + + + The type of the validator used to validate the current type. + + + + + Associates an instance of IValidator with the current property rule and is used to validate each item within the collection. + + The validator to use + + + + Rule builder + + + + + + + Rule builder + + + + + + + Associates a validator with this the property for this rule builder. + + The validator to set + + + + + Associates an instance of IValidator with the current property rule. + + The validator to use + + + + Represents an object that is configurable. + + Type of object being configured + Return type + + + + Configures the current object. + + Action to configure the object. + + + + + Extension methods that provide the default set of validators. + + + + + Defines a 'not null' validator on the current rule builder. + Validation will fail if the property is null. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + + + + + Defines a 'not empty' validator on the current rule builder. + Validation will fail if the property is null, an empty or the default value for the type (for example, 0 for integers) + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + + + + + Defines a length validator on the current rule builder, but only for string properties. + Validation will fail if the length of the string is outside of the specifed range. The range is inclusive. + + Type of object being validated + The rule builder on which the validator should be defined + + + + + Defines a length validator on the current rule builder, but only for string properties. + Validation will fail if the length of the string is not equal to the length specified. + + Type of object being validated + The rule builder on which the validator should be defined + + + + + Defines a regular expression validator on the current rule builder, but only for string properties. + Validation will fail if the value returned by the lambda does not match the regular expression. + + Type of object being validated + The rule builder on which the validator should be defined + The regular expression to check the value against. + + + + + Defines a regular expression validator on the current rule builder, but only for string properties. + Validation will fail if the value returned by the lambda is not a valid email address. + + Type of object being validated + The rule builder on which the validator should be defined + + + + + Defines a 'not equal' validator on the current rule builder. + Validation will fail if the specified value is equal to the value of the property. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The value to compare + Equality comparer to use + + + + + Defines a 'not equal' validator on the current rule builder using a lambda to specify the value. + Validation will fail if the value returned by the lambda is equal to the value of the property. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + A lambda expression to provide the comparison value + Equality Comparer to use + + + + + Defines an 'equals' validator on the current rule builder. + Validation will fail if the specified value is not equal to the value of the property. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The value to compare + Equality Comparer to use + + + + + Defines an 'equals' validator on the current rule builder using a lambda to specify the comparison value. + Validation will fail if the value returned by the lambda is not equal to the value of the property. + + The type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + A lambda expression to provide the comparison value + Equality comparer to use + + + + + Defines a predicate validator on the current rule builder using a lambda expression to specify the predicate. + Validation will fail if the specified lambda returns false. + Validation will succeed if the specifed lambda returns true. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + A lambda expression specifying the predicate + + + + + Defines a predicate validator on the current rule builder using a lambda expression to specify the predicate. + Validation will fail if the specified lambda returns false. + Validation will succeed if the specifed lambda returns true. + This overload accepts the object being validated in addition to the property being validated. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + A lambda expression specifying the predicate + + + + + Defines a predicate validator on the current rule builder using a lambda expression to specify the predicate. + Validation will fail if the specified lambda returns false. + Validation will succeed if the specifed lambda returns true. + This overload accepts the object being validated in addition to the property being validated. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + A lambda expression specifying the predicate + + + + + Defines a 'less than' validator on the current rule builder. + The validation will succeed if the property value is less than the specified value. + The validation will fail if the property value is greater than or equal to the specified value. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The value being compared + + + + + Defines a 'less than' validator on the current rule builder. + The validation will succeed if the property value is less than the specified value. + The validation will fail if the property value is greater than or equal to the specified value. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The value being compared + + + + + Defines a 'less than or equal' validator on the current rule builder. + The validation will succeed if the property value is less than or equal to the specified value. + The validation will fail if the property value is greater than the specified value. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The value being compared + + + + + Defines a 'less than or equal' validator on the current rule builder. + The validation will succeed if the property value is less than or equal to the specified value. + The validation will fail if the property value is greater than the specified value. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The value being compared + + + + + Defines a 'greater than' validator on the current rule builder. + The validation will succeed if the property value is greater than the specified value. + The validation will fail if the property value is less than or equal to the specified value. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The value being compared + + + + + Defines a 'greater than' validator on the current rule builder. + The validation will succeed if the property value is greater than the specified value. + The validation will fail if the property value is less than or equal to the specified value. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The value being compared + + + + + Defines a 'greater than or equal' validator on the current rule builder. + The validation will succeed if the property value is greater than or equal the specified value. + The validation will fail if the property value is less than the specified value. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The value being compared + + + + + Defines a 'greater than or equal' validator on the current rule builder. + The validation will succeed if the property value is greater than or equal the specified value. + The validation will fail if the property value is less than the specified value. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The value being compared + + + + + Defines a 'less than' validator on the current rule builder using a lambda expression. + The validation will succeed if the property value is less than the specified value. + The validation will fail if the property value is greater than or equal to the specified value. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + A lambda that should return the value being compared + + + + + Defines a 'less than' validator on the current rule builder using a lambda expression. + The validation will succeed if the property value is less than the specified value. + The validation will fail if the property value is greater than or equal to the specified value. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + A lambda that should return the value being compared + + + + + Defines a 'less than or equal' validator on the current rule builder using a lambda expression. + The validation will succeed if the property value is less than or equal to the specified value. + The validation will fail if the property value is greater than the specified value. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The value being compared + + + + + Defines a 'less than or equal' validator on the current rule builder using a lambda expression. + The validation will succeed if the property value is less than or equal to the specified value. + The validation will fail if the property value is greater than the specified value. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The value being compared + + + + + Defines a 'less than' validator on the current rule builder using a lambda expression. + The validation will succeed if the property value is greater than the specified value. + The validation will fail if the property value is less than or equal to the specified value. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The value being compared + + + + + Defines a 'less than' validator on the current rule builder using a lambda expression. + The validation will succeed if the property value is greater than the specified value. + The validation will fail if the property value is less than or equal to the specified value. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The value being compared + + + + + Defines a 'less than' validator on the current rule builder using a lambda expression. + The validation will succeed if the property value is greater than or equal the specified value. + The validation will fail if the property value is less than the specified value. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The value being compared + + + + + Defines a 'less than' validator on the current rule builder using a lambda expression. + The validation will succeed if the property value is greater than or equal the specified value. + The validation will fail if the property value is less than the specified value. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The value being compared + + + + + Validates certain properties of the specified instance. + + The current validator + The object to validate + Expressions to specify the properties to validate + A ValidationResult object containing any validation failures + + + + Validates certain properties of the specified instance. + + The object to validate + The names of the properties to validate. + A ValidationResult object containing any validation failures. + + + + Performs validation and then throws an exception if validation fails. + + + + + Defines an 'inclusive between' validator on the current rule builder, but only for properties of types that implement IComparable. + Validation will fail if the value of the property is outside of the specifed range. The range is inclusive. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The lowest allowed value + The highest allowed value + + + + + Defines an 'inclusive between' validator on the current rule builder, but only for properties of types that implement IComparable. + Validation will fail if the value of the property is outside of the specifed range. The range is inclusive. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The lowest allowed value + The highest allowed value + + + + + Defines an 'exclusive between' validator on the current rule builder, but only for properties of types that implement IComparable. + Validation will fail if the value of the property is outside of the specifed range. The range is exclusive. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The lowest allowed value + The highest allowed value + + + + + Defines an 'exclusive between' validator on the current rule builder, but only for properties of types that implement IComparable. + Validation will fail if the value of the property is outside of the specifed range. The range is exclusive. + + Type of object being validated + Type of property being validated + The rule builder on which the validator should be defined + The lowest allowed value + The highest allowed value + + + + + Defines a credit card validator for the current rule builder that ensures that the specified string is a valid credit card number. + + + + + Default options that can be used to configure a validator. + + + + + Specifies the cascade mode for failures. + If set to 'Stop' then execution of the rule will stop once the first validator in the chain fails. + If set to 'Continue' then all validators in the chain will execute regardless of failures. + + + + + Specifies a custom action to be invoked when the validator fails. + + + + + + + + + + Specifies a custom error message to use if validation fails. + + The current rule + The error message to use + + + + + Specifies a custom error message to use if validation fails. + + The current rule + The error message to use + Additional arguments to be specified when formatting the custom error message. + + + + + Specifies a custom error message to use if validation fails. + + The current rule + The error message to use + Additional property values to be included when formatting the custom error message. + + + + + Specifies a custom error message resource to use when validation fails. + + The current rule + The resource to use as an expression, eg () => Messages.MyResource + + + + + Specifies a custom error message resource to use when validation fails. + + The current rule + The resource to use as an expression, eg () => Messages.MyResource + Custom message format args + + + + + Specifies a custom error message resource to use when validation fails. + + The current rule + The resource to use as an expression, eg () => Messages.MyResource + Custom message format args + + + + + Specifies a custom error message resource to use when validation fails. + + The current rule + The resource to use as an expression, eg () => Messages.MyResource + The resource accessor builder to use. + + + + + Specifies a custom error code to use when validation fails + + The current rule + The error code to use + + + + + Specifies a condition limiting when the validator should run. + The validator will only be executed if the result of the lambda returns true. + + The current rule + A lambda expression that specifies a condition for when the validator should run + Whether the condition should be applied to the current rule or all rules in the chain + + + + + Specifies a condition limiting when the validator should not run. + The validator will only be executed if the result of the lambda returns false. + + The current rule + A lambda expression that specifies a condition for when the validator should not run + Whether the condition should be applied to the current rule or all rules in the chain + + + + + Specifies a custom property name to use within the error message. + + The current rule + The property name to use + + + + + Specifies a localized name for the error message. + + The current rule + The resource to use as an expression, eg () => Messages.MyResource + Resource accessor builder to use + + + + Overrides the name of the property associated with this rule. + NOTE: This is a considered to be an advanced feature. 99% of the time that you use this, you actually meant to use WithName. + + The current rule + The property name to use + + + + + Specifies custom state that should be stored alongside the validation message when validation fails for this rule. + + + + + + + + + + Specifies how rules should cascade when one fails. + + + + + When a rule fails, execution continues to the next rule. + + + + + When a rule fails, validation is stopped and all other rules in the chain will not be executed. + + + + + Specifies where a When/Unless condition should be applied + + + + + Applies the condition to all validators declared so far in the chain. + + + + + Applies the condition to the current validator only. + + + + + Validator implementation that allows rules to be defined without inheriting from AbstractValidator. + + + + public class Customer { + public int Id { get; set; } + public string Name { get; set; } + + public static readonly InlineValidator<Customer> Validator = new InlineValidator<Customer> { + v => v.RuleFor(x => x.Name).NotNull(), + v => v.RuleFor(x => x.Id).NotEqual(0), + } + } + + + + + + + Allows configuration of the validator. + + + + + Delegate that specifies configuring an InlineValidator. + + + + + Default validator selector that will execute all rules that do not belong to a RuleSet. + + + + + Determines whether or not a rule should execute. + + + + + Determines whether or not a rule should execute. + + The rule + Property path (eg Customer.Address.Line1) + Contextual information + Whether or not the validator can execute. + + + + Determines whether or not a rule should execute. + + The rule + Property path (eg Customer.Address.Line1) + Contextual information + Whether or not the validator can execute. + + + + Custom IValidationRule for performing custom logic. + + + + + + Defines a rule associated with a property which can have multiple validators. + + + + + Performs validation using a validation context and returns a collection of Validation Failures. + + Validation Context + A collection of validation failures + + + + The validators that are grouped under this rule. + + + + + Name of the rule-set to which this rule belongs. + + + + + Creates a new DelegateValidator using the specified function to perform validation. + + + + + Creates a new DelegateValidator using the specified function to perform validation. + + + + + Performs validation using a validation context and returns a collection of Validation Failures. + + Validation Context + A collection of validation failures + + + + Performs validation using a validation context and returns a collection of Validation Failures. + + Validation Context + A collection of validation failures + + + + Rule set to which this rule belongs. + + + + + The validators that are grouped under this rule. + + + + + Useful extensions + + + + + Gets a MemberInfo from a member expression. + + + + + Gets a MemberInfo from a member expression. + + + + + Splits pascal case, so "FooBar" would become "Foo Bar" + + + + + Helper method to construct a constant expression from a constant. + + Type of object being validated + Type of property being validated + The value being compared + + + + + Based on a child validator and a propery rule, infers whether the validator should be wrapped in a ChildValidatorAdaptor or a CollectionValidatorAdaptor + + + + + Instancace cache. + TODO: This isn't actually completely thread safe. It would be much better to use ConcurrentDictionary, but this isn't available in Silverlight/WP7. + + + + + Gets or creates an instance using Activator.CreateInstance + + The type to instantiate + The instantiated object + + + + Gets or creates an instance using a custom factory + + The type to instantiate + The custom factory + The instantiated object + + + + Selects validators that are associated with a particular property. + + + + + Creates a new instance of MemberNameValidatorSelector. + + + + + Determines whether or not a rule should execute. + + The rule + Property path (eg Customer.Address.Line1) + Contextual information + Whether or not the validator can execute. + + + + Creates a MemberNameValidatorSelector from a collection of expressions. + + + + + Assists in the construction of validation messages. + + + + + Default Property Name placeholder. + + + + + Adds a value for a validation message placeholder. + + + + + + + + Appends a property name to the message. + + The name of the property + + + + + Adds additional arguments to the message for use with standard string placeholders. + + Additional arguments + + + + + Constructs the final message from the specified template. + + Message template + The message with placeholders replaced with their appropriate values + + + + Represents a chain of properties + + + + + Creates a new PropertyChain. + + + + + Creates a new PropertyChain based on another. + + + + + Adds a MemberInfo instance to the chain + + Member to add + + + + Adds a property name to the chain + + Name of the property to add + + + + Adds an indexer to the property chain. For example, if the following chain has been constructed: + Parent.Child + then calling AddIndexer(0) would convert this to: + Parent.Child[0] + + + + + + Creates a string representation of a property chain. + + + + + Checks if the current chain is the child of another chain. + For example, if chain1 were for "Parent.Child" and chain2 were for "Parent.Child.GrandChild" then + chain2.IsChildChainOf(chain1) would be true. + + The parent chain to compare + True if the current chain is the child of the other chain, otherwise false + + + + Builds a property path. + + + + + Defines a rule associated with a property. + + + + + Creates a new property rule. + + Property + Function to get the property value + Lambda expression used to create the rule + Function to get the cascade mode. + Type to validate + Container type that owns the property + + + + Creates a new property rule from a lambda expression. + + + + + Creates a new property rule from a lambda expression. + + + + + Adds a validator to the rule. + + + + + Replaces a validator in this rule. Used to wrap validators. + + + + + Display name for the property. + + + + + Performs validation using a validation context and returns a collection of Validation Failures. + + Validation Context + A collection of validation failures + + + + Invokes a property validator using the specified validation context. + + + + + Property associated with this rule. + + + + + Function that can be invoked to retrieve the value of the property. + + + + + Expression that was used to create the rule. + + + + + String source that can be used to retrieve the display name (if null, falls back to the property name) + + + + + Rule set that this rule belongs to (if specified) + + + + + Function that will be invoked if any of the validators associated with this rule fail. + + + + + The current validator being configured by this rule. + + + + + Type of the property being validated + + + + + Cascade mode for this rule. + + + + + Validators associated with this rule. + + + + + Returns the property name for the property being validated. + Returns null if it is not a property being validated (eg a method call) + + + + + Builds a validation rule and constructs a validator. + + Type of object being validated + Type of property being validated + + + + Rule builder that starts the chain + + + + + + + Creates a new instance of the RuleBuilder class. + + + + + Sets the validator associated with the rule. + + The validator to set + + + + + Sets the validator associated with the rule. Use with complex properties where an IValidator instance is already declared for the property type. + + The validator to set + + + + The rule being created by this RuleBuilder. + + + + + Selects validators that belong to the specified rulesets. + + + + + Creates a new instance of the RulesetValidatorSelector. + + + + + Determines whether or not a rule should execute. + + The rule + Property path (eg Customer.Address.Line1) + Contextual information + Whether or not the validator can execute. + + + + Provides metadata about a validator. + + + + + Gets the name display name for a property. + + + + + Gets a collection of validators grouped by property. + + + + + Gets validators for a particular property. + + + + + Gets rules for a property. + + + + + Builds a delegate for retrieving a localised resource from a resource type and property name. + + + + + Gets a function that can be used to retrieve a message from a resource type and resource name. + + + + + Builds a delegate for retrieving a localised resource from a resource type and property name. + + + + + Builds a function used to retrieve the resource. + + + + + Gets the PropertyInfo for a resource. + ResourceType and ResourceName are ref parameters to allow derived types + to replace the type/name of the resource before the delegate is constructed. + + + + + Implemenetation of IResourceAccessorBuilder that can fall back to the default resource provider. + + + + + Gets the PropertyInfo for a resource. + ResourceType and ResourceName are ref parameters to allow derived types + to replace the type/name of the resource before the delegate is constructed. + + + + + Provides error message templates + + + + + Construct the error message template + + Error message template + + + + The name of the resource if localized. + + + + + The type of the resource provider if localized. + + + + + Represents a localized string. + + + + + Creates a new instance of the LocalizedErrorMessageSource class using the specified resource name and resource type. + + The resource type + The resource name + Strategy used to construct the resource accessor + + + + Creates an IErrorMessageSource from an expression: () => MyResources.SomeResourceName + + The expression + Strategy used to construct the resource accessor + Error message source + + + + Construct the error message template + + Error message template + + + + The name of the resource if localized. + + + + + The type of the resource provider if localized. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to '{PropertyName}' is not a valid credit card number.. + + + + + Looks up a localized string similar to '{PropertyName}' is not a valid email address.. + + + + + Looks up a localized string similar to '{PropertyName}' should be equal to '{PropertyValue}'.. + + + + + Looks up a localized string similar to '{PropertyName}' must be {MaxLength} characters in length. You entered {TotalLength} characters.. + + + + + Looks up a localized string similar to '{PropertyName}' must be between {From} and {To} (exclusive). You entered {Value}.. + + + + + Looks up a localized string similar to '{PropertyName}' must be greater than '{ComparisonValue}'.. + + + + + Looks up a localized string similar to '{PropertyName}' must be greater than or equal to '{ComparisonValue}'.. + + + + + Looks up a localized string similar to '{PropertyName}' must be between {From} and {To}. You entered {Value}.. + + + + + Looks up a localized string similar to '{PropertyName}' must be between {MinLength} and {MaxLength} characters. You entered {TotalLength} characters.. + + + + + Looks up a localized string similar to '{PropertyName}' must be less than '{ComparisonValue}'.. + + + + + Looks up a localized string similar to '{PropertyName}' must be less than or equal to '{ComparisonValue}'.. + + + + + Looks up a localized string similar to '{PropertyName}' should not be empty.. + + + + + Looks up a localized string similar to '{PropertyName}' should not be equal to '{PropertyValue}'.. + + + + + Looks up a localized string similar to '{PropertyName}' must not be empty.. + + + + + Looks up a localized string similar to The specified condition was not met for '{PropertyName}'.. + + + + + Looks up a localized string similar to '{PropertyName}' is not in the correct format.. + + + + + Represents a static string. + + + + + Creates a new StringErrorMessageSource using the specified error message as the error template. + + The error message template. + + + + Construct the error message template + + Error message template + + + + The name of the resource if localized. + + + + + The type of the resource provider if localized. + + + + + Creates a new validation failure. + + + + + Creates a new ValidationFailure. + + + + + Creates a textual representation of the failure. + + + + + The name of the property. + + + + + The error message + + + + + The error code + + + + + The property value that caused the failure. + + + + + Custom state associated with the failure. + + + + + Used for providing metadata about a validator. + + + + + A custom property validator. + This interface should not be implemented directly in your code as it is subject to change. + Please inherit from PropertyValidator instead. + + + + + Creates an error validation result for this validator. + + The validator context + Returns an error validation result. + + + + Ensures that the property value is a valid credit card number. + + + + + Provides access to the anti-forgery system, which provides protection against + Cross-site Request Forgery (XSRF, also called CSRF) attacks. + + + + + Generates an anti-forgery token for this request. This token can + be validated by calling the Validate() method. + + An HTML string corresponding to an <input type="hidden"> + element. This element should be put inside a <form>. + + This method has a side effect: it may set a response cookie. + + + + + Generates an anti-forgery token pair (cookie and form token) for this request. + This method is similar to GetHtml(), but this method gives the caller control + over how to persist the returned values. To validate these tokens, call the + appropriate overload of Validate. + + The anti-forgery token - if any - that already existed + for this request. May be null. The anti-forgery system will try to reuse this cookie + value when generating a matching form token. + Will contain a new cookie value if the old cookie token + was null or invalid. If this value is non-null when the method completes, the caller + must persist this value in the form of a response cookie, and the existing cookie value + should be discarded. If this value is null when the method completes, the existing + cookie value was valid and needn't be modified. + The value that should be stored in the <form>. The caller + should take care not to accidentally swap the cookie and form tokens. + + Unlike the GetHtml() method, this method has no side effect. The caller + is responsible for setting the response cookie and injecting the returned + form token as appropriate. + + + + + Validates an anti-forgery token that was supplied for this request. + The anti-forgery token may be generated by calling GetHtml(). + + + Throws an HttpAntiForgeryException if validation fails. + + + + + Validates an anti-forgery token pair that was generated by the GetTokens method. + + The token that was supplied in the request cookie. + The token that was supplied in the request form body. + + Throws an HttpAntiForgeryException if validation fails. + + + + + Provides programmatic configuration for the anti-forgery token system. + + + + + Specifies an object that can provide additional data to put into all + generated tokens and that can validate additional data in incoming + tokens. + + + + + Specifies the name of the cookie that is used by the anti-forgery + system. + + + If an explicit name is not provided, the system will automatically + generate a name. + + + + + Specifies whether SSL is required for the anti-forgery system + to operate. If this setting is 'true' and a non-SSL request + comes into the system, all anti-forgery APIs will fail. + + + + + Specifies whether the anti-forgery system should skip checking + for conditions that might indicate misuse of the system. Please + use caution when setting this switch, as improper use could open + security holes in the application. + + + Setting this switch will disable several checks, including: + - Identity.IsAuthenticated = true without Identity.Name being set + - special-casing claims-based identities + + + + + If claims-based authorization is in use, specifies the claim + type from the identity that is used to uniquely identify the + user. If this property is set, all claims-based identities + must return unique values for this claim type. + + + If claims-based authorization is in use and this property has + not been set, the anti-forgery system will automatically look + for claim types "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" + and "http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider". + + + + + Allows providing or validating additional custom data for anti-forgery tokens. + For example, the developer could use this to supply a nonce when the token is + generated, then he could validate the nonce when the token is validated. + + + The anti-forgery system already embeds the client's username within the + generated tokens. This interface provides and consumes supplemental + data. If an incoming anti-forgery token contains supplemental data but no + additional data provider is configured, the supplemental data will not be + validated. + + + + + Provides additional data to be stored for the anti-forgery tokens generated + during this request. + + Information about the current request. + Supplemental data to embed within the anti-forgery token. + + + + Validates additional data that was embedded inside an incoming anti-forgery + token. + + Information about the current request. + Supplemental data that was embedded within the token. + True if the data is valid; false if the data is invalid. + + + + Initializes a new instance of the class. + + The base scope. + + The dictionary to use as a storage. Since the dictionary would be used as-is, we expect the implementer to + use the same key-value comparison logic as we do here. + + + + + Custom comparer for the context dictionaries + The comparer treats strings as a special case, performing case insesitive comparison. + This guaratees that we remain consistent throughout the chain of contexts since PageData dictionary + behaves in this manner. + + + + + End a ServiceStack Request + + + + + End a ServiceStack Request + + + + + End a HttpHandler Request + + + + + End a HttpHandler Request + + + + + End a ServiceStack Request with no content + + + + + Main container class for components, supporting container hierarchies and + lifetime management of instances. + + + + + Initializes a new empty container. + + + + + Creates a child container of the current one, which exposes its + current service registration to the new child container. + + + + + Disposes the container and all instances owned by it (see + ), as well as all child containers + created through . + + + + + Registers a service instance with the container. This instance + will have and + behavior. + Service instance to use. + + + + Registers a named service instance with the container. This instance + will have and + behavior. + Name of the service to register.Service instance to use. + + + + Retrieves a function that can be used to lazily resolve an instance + of the service when needed. + Type of the service to retrieve.The function that can resolve to the service instance when invoked.The requested service has not been registered previously. + + + + + + + + + + + + + + + + + + + + + + Retrieves a function that can be used to lazily resolve an instance + of the service with the given name when needed. + Type of the service to retrieve.Name of the service to retrieve.The function that can resolve to the service instance with the given name when invoked.The requested service with the given name has not been registered previously. + + + + Retrieves a function that can be used to lazily resolve an instance + of the service of the given type, name and service constructor arguments when needed. + Name of the service to retrieve.The function that can resolve to the service instance with the given and service constructor arguments name when invoked.The requested service with the given name and constructor arguments has not been registered previously. + + + + Retrieves a function that can be used to lazily resolve an instance + of the service of the given type, name and service constructor arguments when needed. + Name of the service to retrieve.The function that can resolve to the service instance with the given and service constructor arguments name when invoked.The requested service with the given name and constructor arguments has not been registered previously. + + + + Retrieves a function that can be used to lazily resolve an instance + of the service of the given type, name and service constructor arguments when needed. + Name of the service to retrieve.The function that can resolve to the service instance with the given and service constructor arguments name when invoked.The requested service with the given name and constructor arguments has not been registered previously. + + + + Retrieves a function that can be used to lazily resolve an instance + of the service of the given type, name and service constructor arguments when needed. + Name of the service to retrieve.The function that can resolve to the service instance with the given and service constructor arguments name when invoked.The requested service with the given name and constructor arguments has not been registered previously. + + + + Retrieves a function that can be used to lazily resolve an instance + of the service of the given type, name and service constructor arguments when needed. + Name of the service to retrieve.The function that can resolve to the service instance with the given and service constructor arguments name when invoked.The requested service with the given name and constructor arguments has not been registered previously. + + + + Retrieves a function that can be used to lazily resolve an instance + of the service of the given type, name and service constructor arguments when needed. + Name of the service to retrieve.The function that can resolve to the service instance with the given and service constructor arguments name when invoked.The requested service with the given name and constructor arguments has not been registered previously. + + + + Registers the given service by providing a factory delegate to + instantiate it. + The service type to register.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. + + + + Registers the given service by providing a factory delegate that receives arguments to + instantiate it. + The service type to register.First argument that should be passed to the factory delegate to create the instace.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. + + + + Registers the given service by providing a factory delegate that receives arguments to + instantiate it. + The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. + + + + Registers the given service by providing a factory delegate that receives arguments to + instantiate it. + The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.Third argument that should be passed to the factory delegate to create the instace.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. + + + + Registers the given service by providing a factory delegate that receives arguments to + instantiate it. + The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.Third argument that should be passed to the factory delegate to create the instace.Fourth argument that should be passed to the factory delegate to create the instace.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. + + + + Registers the given service by providing a factory delegate that receives arguments to + instantiate it. + The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.Third argument that should be passed to the factory delegate to create the instace.Fourth argument that should be passed to the factory delegate to create the instace.Fifth argument that should be passed to the factory delegate to create the instace.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. + + + + Registers the given service by providing a factory delegate that receives arguments to + instantiate it. + The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.Third argument that should be passed to the factory delegate to create the instace.Fourth argument that should be passed to the factory delegate to create the instace.Fifth argument that should be passed to the factory delegate to create the instace.Sixth argument that should be passed to the factory delegate to create the instace.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. + + + + Registers the given named service by providing a factory delegate to + instantiate it. + The service type to register.A name used to differenciate this service registration.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. + + + + Registers the given named service by providing a factory delegate that receives arguments to + instantiate it. + The service type to register.First argument that should be passed to the factory delegate to create the instace.A name used to differenciate this service registration.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. + + + + Registers the given named service by providing a factory delegate that receives arguments to + instantiate it. + The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.A name used to differenciate this service registration.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. + + + + Registers the given named service by providing a factory delegate that receives arguments to + instantiate it. + The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.Third argument that should be passed to the factory delegate to create the instace.A name used to differenciate this service registration.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. + + + + Registers the given named service by providing a factory delegate that receives arguments to + instantiate it. + The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.Third argument that should be passed to the factory delegate to create the instace.Fourth argument that should be passed to the factory delegate to create the instace.A name used to differenciate this service registration.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. + + + + Registers the given named service by providing a factory delegate that receives arguments to + instantiate it. + The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.Third argument that should be passed to the factory delegate to create the instace.Fourth argument that should be passed to the factory delegate to create the instace.Fifth argument that should be passed to the factory delegate to create the instace.A name used to differenciate this service registration.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. + + + + Registers the given named service by providing a factory delegate that receives arguments to + instantiate it. + The service type to register.First argument that should be passed to the factory delegate to create the instace.Second argument that should be passed to the factory delegate to create the instace.Third argument that should be passed to the factory delegate to create the instace.Fourth argument that should be passed to the factory delegate to create the instace.Fifth argument that should be passed to the factory delegate to create the instace.Sixth argument that should be passed to the factory delegate to create the instace.A name used to differenciate this service registration.The factory delegate to initialize new instances of the service when needed.The registration object to perform further configuration via its fluent interface. + + + + Resolves the given service by type, without passing any arguments for + its construction. + Type of the service to retrieve.The resolved service instance.The given service could not be resolved. + + + + Resolves the given service by type, passing the given arguments + for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. + + + + Resolves the given service by type, passing the given arguments + for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. + + + + Resolves the given service by type, passing the given arguments + for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. + + + + Resolves the given service by type, passing the given arguments + for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. + + + + Resolves the given service by type, passing the given arguments + for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.Fifth argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. + + + + Resolves the given service by type, passing the given arguments + for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.Fifth argument to pass to the factory delegate that may create the instace.Sixth argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. + + + + Resolves the given service by type and name, without passing arguments for its initialization. + Type of the service to retrieve.The resolved service instance.The given service could not be resolved. + + + + Resolves the given service by type and name, passing the given arguments + for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. + + + + Resolves the given service by type and name, passing the given arguments + for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. + + + + Resolves the given service by type and name, passing the given arguments + for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. + + + + Resolves the given service by type and name, passing the given arguments + for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. + + + + Resolves the given service by type and name, passing the given arguments + for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.Fifth argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. + + + + Resolves the given service by type and name, passing the given arguments + for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.Fifth argument to pass to the factory delegate that may create the instace.Sixth argument to pass to the factory delegate that may create the instace.The resolved service instance.The given service could not be resolved. + + + + Attempts to resolve the given service by type, without passing arguments for its initialization. + Type of the service to retrieve. + The resolved service instance or if it cannot be resolved. + + + + + Attempts to resolve the given service by type, passing the + given arguments arguments for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace. + The resolved service instance or if it cannot be resolved. + + + + + Attempts to resolve the given service by type, passing the + given arguments arguments for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace. + The resolved service instance or if it cannot be resolved. + + + + + Attempts to resolve the given service by type, passing the + given arguments arguments for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace. + The resolved service instance or if it cannot be resolved. + + + + + Attempts to resolve the given service by type, passing the + given arguments arguments for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace. + The resolved service instance or if it cannot be resolved. + + + + + Attempts to resolve the given service by type, passing the + given arguments arguments for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.Fifth argument to pass to the factory delegate that may create the instace. + The resolved service instance or if it cannot be resolved. + + + + + Attempts to resolve the given service by type, passing the + given arguments arguments for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.Fifth argument to pass to the factory delegate that may create the instace.Sixth argument to pass to the factory delegate that may create the instace. + The resolved service instance or if it cannot be resolved. + + + + + Attempts to resolve the given service by type and name, without passing + arguments arguments for its initialization. + Type of the service to retrieve. + The resolved service instance or if it cannot be resolved. + + + + + Attempts to resolve the given service by type and name, passing the + given arguments arguments for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace. + The resolved service instance or if it cannot be resolved. + + + + + Attempts to resolve the given service by type and name, passing the + given arguments arguments for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace. + The resolved service instance or if it cannot be resolved. + + + + + Attempts to resolve the given service by type and name, passing the + given arguments arguments for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace. + The resolved service instance or if it cannot be resolved. + + + + + Attempts to resolve the given service by type and name, passing the + given arguments arguments for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace. + The resolved service instance or if it cannot be resolved. + + + + + Attempts to resolve the given service by type and name, passing the + given arguments arguments for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.Fifth argument to pass to the factory delegate that may create the instace. + The resolved service instance or if it cannot be resolved. + + + + + Attempts to resolve the given service by type and name, passing the + given arguments arguments for its initialization. + Type of the service to retrieve.First argument to pass to the factory delegate that may create the instace.Second argument to pass to the factory delegate that may create the instace.Third argument to pass to the factory delegate that may create the instace.Fourth argument to pass to the factory delegate that may create the instace.Fifth argument to pass to the factory delegate that may create the instace.Sixth argument to pass to the factory delegate that may create the instace. + The resolved service instance or if it cannot be resolved. + + + + + Register an autowired dependency + + + + + + Register an autowired dependency as a separate type + + + + + + Alias for RegisterAutoWiredAs + + + + + + Auto-wires an existing instance, + ie all public properties are tried to be resolved. + + + + + + Generates a function which creates and auto-wires . + + + + + + + + Auto-wires an existing instance of a specific type. + The auto-wiring progress is also cached to be faster + when calling next time with the same type. + + + + + + Default owner for new registrations. by default. + + + + + Default reuse scope for new registrations. by default. + + + + + Enable the Registration feature and configure the RegistrationService. + + + + + Registers the type in the IoC container and + adds auto-wiring to the specified type. + + + + + + + Registers the type in the IoC container and + adds auto-wiring to the specified type. + The reuse scope is set to none (transient). + + + + + + Registers the types in the IoC container and + adds auto-wiring to the specified types. + The reuse scope is set to none (transient). + + + + + + Register a singleton instance as a runtime type + + + + + Encapsulates a method that has five parameters and returns a value of the + type specified by the parameter. + + + + + Encapsulates a method that has six parameters and returns a value of the + type specified by the parameter. + + + + + Encapsulates a method that has seven parameters and returns a value of the + type specified by the parameter. + + + + + Helper interface used to hide the base + members from the fluent API to make for much cleaner + Visual Studio intellisense experience. + + + + + + + + + + + + + + + + + Interface used by plugins to contribute registrations + to an existing container. + + + + + Determines who is responsible for disposing instances + registered with a container. + + + + + Container should dispose provided instances when it is disposed. This is the + default. + + + + + Container does not dispose provided instances. + + + + + Default owner, which equals . + + + + + Exception thrown by the container when a service cannot be resolved. + + + + + Initializes the exception with the service that could not be resolved. + + + + + Initializes the exception with the service (and its name) that could not be resolved. + + + + + Initializes the exception with an arbitrary message. + + + + + Determines visibility and reuse of instances provided by the container. + + + + + Instances are reused within a container hierarchy. Instances + are created (if necessary) in the container where the registration + was performed, and are reused by all descendent containers. + + + + + Instances are reused only at the given container. Descendent + containers do not reuse parent container instances and get + a new instance at their level. + + + + + Each request to resolve the dependency will result in a new + instance being returned. + + + + + Instaces are reused within the given request + + + + + Default scope, which equals . + + + + + Fluent API for customizing the registration of a service. + + + + + Fluent API that exposes both + and owner (). + + + + + Fluent API that allows specifying the reuse instances. + + + + + Specifies how instances are reused within a container or hierarchy. Default + scope is . + + + + + Fluent API that allows specifying the owner of instances + created from a registration. + + + + + Specifies the owner of instances created from this registration. Default + owner is . + + + + + Ownership setting for the service. + + + + + Reuse scope setting for the service. + + + + + The container where the entry was registered. + + + + + Specifies the owner for instances, which determines how + they will be disposed. + + + + + Specifies the scope for instances, which determines + visibility of instances across containers and hierarchies. + + + + + Fluent API for customizing the registration of a service. + + + + + Fluent API that allows registering an initializer for the + service. + + + + + Specifies an initializer that should be invoked after + the service instance has been created by the factory. + + + + + The Func delegate that creates instances of the service. + + + + + The cached service instance if the scope is or + . + + + + + The Func delegate that initializes the object after creation. + + + + + Clones the service entry assigning the to the + . Does not copy the . + + + + + BaseProfilerProvider. This providers some helper methods which provide access to + internals not otherwise available. + To use, override the , and + methods. + + + + + A provider used to create instances and maintain the current instance. + + + + + Starts a new MiniProfiler and sets it to be current. By the end of this method + should return the new MiniProfiler. + + + + + Ends the current profiling session, if one exists. + + + When true, clears the for this HttpContext, allowing profiling to + be prematurely stopped and discarded. Useful for when a specific route does not need to be profiled. + + + + + Returns the current MiniProfiler. This is used by . + + + + + + Starts a new MiniProfiler and sets it to be current. By the end of this method + should return the new MiniProfiler. + + + + + Stops the current MiniProfiler (if any is currently running). + should be called if is false + + If true, any current results will be thrown away and nothing saved + + + + Returns the current MiniProfiler. This is used by . + + + + + + Sets to be active (read to start profiling) + This should be called once a new MiniProfiler has been created. + + The profiler to set to active + If is null + + + + Stops the profiler and marks it as inactive. + + The profiler to stop + True if successful, false if Stop had previously been called on this profiler + If is null + + + + Calls to save the current + profiler using the current storage settings + + + + + + Categories of sql statements. + + + + + Unknown + + + + + DML statements that alter database state, e.g. INSERT, UPDATE + + + + + Statements that return a single record + + + + + Statements that iterate over a result set + + + + + A callback for ProfiledDbConnection and family + + + + + Called when a command starts executing + + + + + + + Called when a reader finishes executing + + + + + + + + Called when a reader is done iterating through the data + + + + + + Called when an error happens during execution of a command + + + + + + + + True if the profiler instance is active + + + + + This is a micro-cache; suitable when the number of terms is controllable (a few hundred, for example), + and strictly append-only; you cannot change existing values. All key matches are on **REFERENCE** + equality. The type is fully thread-safe. + + + + + If the underlying command supports BindByName, this sets/clears the underlying + implementation accordingly. This is required to support OracleCommand from dapper-dot-net + + + + + Wraps a database connection, allowing sql execution timings to be collected when a session is started. + + + + + This will be made private; use + + + + + This will be made private; use + + + + + Returns a new that wraps , + providing query execution profiling. If profiler is null, no profiling will occur. + + Your provider-specific flavor of connection, e.g. SqlConnection, OracleConnection + The currently started or null. + Determines whether the ProfiledDbConnection will dispose the underlying connection. + + + + The underlying, real database connection to your db provider. + + + + + The current profiler instance; could be null. + + + + + The raw connection this is wrapping + + + + + Wrapper for a db provider factory to enable profiling + + + + + Every provider factory must have an Instance public field + + + + + Used for db provider apis internally + + + + + Allow to re-init the provider factory. + + + + + + + proxy + + + + + + + proxy + + + + + proxy + + + + + proxy + + + + + proxy + + + + + proxy + + + + + proxy + + + + + proxy + + + + + proxy + + + + + proxy + + + + + Common extension methods to use only in this project + + + + + Answers true if this String is either null or empty. + + + + + Answers true if this String is neither null or empty. + + + + + Removes trailing / characters from a path and leaves just one + + + + + Removes any leading / characters from a path + + + + + Removes any leading / characters from a path + + + + + Serializes to a json string. + + + + + Gets part of a stack trace containing only methods we care about. + + + + + Gets the current formatted and filted stack trace. + + Space separated list of methods + + + + Identifies users based on ip address. + + + + + Provides functionality to identify which user is profiling a request. + + + + + Returns a string to identify the user profiling the current 'request'. + + The current HttpRequest being profiled. + + + + Returns the paramter HttpRequest's client ip address. + + + + + A single MiniProfiler can be used to represent any number of steps/levels in a call-graph, via Step() + + Totally baller. + + + + Starts when this profiler is instantiated. Each step will use this Stopwatch's current ticks as + their starting time. + + + + + Creates and starts a new MiniProfiler for the root , filtering steps to . + + + + + Returns the 's and this profiler recorded. + + + + + Returns true if Ids match. + + + + + Returns hashcode of Id. + + + + + Obsolete - used for serialization. + + + + + Walks the hierarchy contained in this profiler, starting with , and returns each Timing found. + + + + + Returns milliseconds based on Stopwatch's Frequency. + + + + + Starts a new MiniProfiler based on the current . This new profiler can be accessed by + + + + + + Ends the current profiling session, if one exists. + + + When true, clears the for this HttpContext, allowing profiling to + be prematurely stopped and discarded. Useful for when a specific route does not need to be profiled. + + + + + Returns an that will time the code between its creation and disposal. Use this method when you + do not wish to include the MvcMiniProfiler namespace for the extension method. + + A descriptive name for the code that is encapsulated by the resulting IDisposable's lifetime. + This step's visibility level; allows filtering when is called. + + + + Returns the css and javascript includes needed to display the MiniProfiler results UI. + + Which side of the page the profiler popup button should be displayed on (defaults to left) + Whether to show trivial timings by default (defaults to false) + Whether to show time the time with children column by default (defaults to false) + The maximum number of trace popups to show before removing the oldest (defaults to 15) + xhtml rendering mode, ensure script tag is closed ... etc + when true, shows buttons to minimize and clear MiniProfiler results + Script and link elements normally; an empty string when there is no active profiling session. + + + + Renders the current to json. + + + + + Renders the parameter to json. + + + + + Deserializes the json string parameter to a . + + + + + Create a DEEP clone of this object + + + + + + Returns all currently open commands on this connection + + + + + Returns all results contained in all child steps. + + + + + Contains any sql statements that are executed, along with how many times those statements are executed. + + + + + Adds to the current . + + + + + Returns the number of sql statements of that were executed in all s. + + + + + Identifies this Profiler so it may be stored/cached. + + + + + A display name for this profiling session. + + + + + When this profiler was instantiated. + + + + + Where this profiler was run. + + + + + Allows filtering of steps based on what + the steps are created with. + + + + + The first that is created and started when this profiler is instantiated. + All other s will be children of this one. + + + + + A string identifying the user/client that is profiling this request. Set + with an -implementing class to provide a custom value. + + + If this is not set manually at some point, the implementation will be used; + by default, this will be the current request's ip address. + + + + + Returns true when this MiniProfiler has been viewed by the that recorded it. + + + Allows POSTs that result in a redirect to be profiled. implementation + will keep a list of all profilers that haven't been fetched down. + + + + + For unit testing, returns the timer. + + + + + Milliseconds, to one decimal place, that this MiniProfiler ran. + + + + + Returns true when or any of its are . + + + + + Returns true when all child s are . + + + + + Any Timing step with a duration less than or equal to this will be hidden by default in the UI; defaults to 2.0 ms. + + + + + Ticks since this MiniProfiler was started. + + + + + Json representing the collection of CustomTimings relating to this Profiler + + + Is used when storing the Profiler in SqlStorage + + + + + Points to the currently executing Timing. + + + + + Gets the currently running MiniProfiler for the current HttpContext; null if no MiniProfiler was ed. + + + + + Contains information about queries executed during this profiling session. + + + + + Milliseconds, to one decimal place, that this MiniProfiler was executing sql. + + + + + Returns true when we have profiled queries. + + + + + Returns true when any child Timings have duplicate queries. + + + + + How many sql data readers were executed in all steps. + + + + + How many sql scalar queries were executed in all steps. + + + + + How many sql non-query statements were executed in all steps. + + + + + Various configuration properties. + + + + + Excludes the specified assembly from the stack trace output. + + The short name of the assembly. AssemblyName.Name + + + + Excludes the specified type from the stack trace output. + + The System.Type name to exclude + + + + Excludes the specified method name from the stack trace output. + + The name of the method + + + + Make sure we can at least store profiler results to the http runtime cache. + + + + + Assemblies to exclude from the stack trace report. + + + + + Types to exclude from the stack trace report. + + + + + Methods to exclude from the stack trace report. + + + + + The max length of the stack string to report back; defaults to 120 chars. + + + + + Any Timing step with a duration less than or equal to this will be hidden by default in the UI; defaults to 2.0 ms. + + + + + Dictates if the "time with children" column is displayed by default, defaults to false. + For a per-page override you can use .RenderIncludes(showTimeWithChildren: true/false) + + + + + Dictates if trivial timings are displayed by default, defaults to false. + For a per-page override you can use .RenderIncludes(showTrivial: true/false) + + + + + Determines how many traces to show before removing the oldest; defaults to 15. + For a per-page override you can use .RenderIncludes(maxTracesToShow: 10) + + + + + Dictates on which side of the page the profiler popup button is displayed; defaults to left. + For a per-page override you can use .RenderIncludes(position: RenderPosition.Left/Right) + + + + + Determines if min-max, clear, etc are rendered; defaults to false. + For a per-page override you can use .RenderIncludes(showControls: true/false) + + + + + By default, SqlTimings will grab a stack trace to help locate where queries are being executed. + When this setting is true, no stack trace will be collected, possibly improving profiler performance. + + + + + When is called, if the current request url contains any items in this property, + no profiler will be instantiated and no results will be displayed. + Default value is { "/ssr-", "/content/", "/scripts/", "/favicon.ico" }. + + + + + The path under which ALL routes are registered in, defaults to the application root. For example, "~/myDirectory/" would yield + "/myDirectory/ssr-includes.js" rather than just "/mini-profiler-includes.js" + Any setting here should be in APP RELATIVE FORM, e.g. "~/myDirectory/" + + + + + Understands how to save and load MiniProfilers. Used for caching between when + a profiling session ends and results can be fetched to the client, and for showing shared, full-page results. + + + The normal profiling session life-cycle is as follows: + 1) request begins + 2) profiler is started + 3) normal page/controller/request execution + 4) profiler is stopped + 5) profiler is cached with 's implementation of + 6) request ends + 7) page is displayed and profiling results are ajax-fetched down, pulling cached results from + 's implementation of + + + + + The formatter applied to the SQL being rendered (used only for UI) + + + + + Assembly version of this dank MiniProfiler. + + + + + The provider used to provider the current instance of a provider + This is also + + + + + A function that determines who can access the MiniProfiler results url. It should return true when + the request client has access, false for a 401 to be returned. HttpRequest parameter is the current request and + MiniProfiler parameter is the results that were profiled. + + + Both the HttpRequest and MiniProfiler parameters that will be passed into this function should never be null. + + + + + Allows switching out stopwatches for unit testing. + + + + + Categorizes individual steps to allow filtering. + + + + + Default level given to Timings. + + + + + Useful when profiling many items in a loop, but you don't wish to always see this detail. + + + + + Dictates on which side of the page the profiler popup button is displayed; defaults to left. + + + + + Profiler popup button is displayed on the left. + + + + + Profiler popup button is displayed on the right. + + + + + Contains helper methods that ease working with null s. + + + + + Wraps in a call and executes it, returning its result. + + The current profiling session or null. + Method to execute and profile. + The step name used to label the profiler results. + + + + + Returns an that will time the code between its creation and disposal. + + The current profiling session or null. + A descriptive name for the code that is encapsulated by the resulting IDisposable's lifetime. + This step's visibility level; allows filtering when is called. + + + + Adds 's hierarchy to this profiler's current Timing step, + allowing other threads, remote calls, etc. to be profiled and joined into this profiling session. + + + + + Returns an html-encoded string with a text-representation of ; returns "" when profiler is null. + + The current profiling session or null. + + + + Formats any SQL query with inline parameters, optionally including the value type + + + + + Takes a SqlTiming and returns a formatted SQL string, for parameter replacement, etc. + + + + + Return SQL the way you want it to look on the in the trace. Usually used to format parameters + + + Formatted SQL + + + + Creates a new Inline SQL Formatter, optionally including the parameter type info in comments beside the replaced value + + whether to include a comment after the value, indicating the type, e.g. /* @myParam DbType.Int32 */ + + + + Formats the SQL in a generic frieldly format, including the parameter type information in a comment if it was specified in the InlineFormatter constructor + + The SqlTiming to format + A formatted SQL string + + + + Returns a string representation of the parameter's value, including the type + + The parameter to get a value for + + + + + NOT IMPLEMENTED - will format statements with paramters in an Oracle friendly way + + + + + Does NOTHING, implement me! + + + + + Formats SQL server queries with a DECLARE up top for parameter values + + + + + Formats the SQL in a SQL-Server friendly way, with DECLARE statements for the parameters up top. + + The SqlTiming to format + A formatted SQL string + + + + Contains helper code to time sql statements. + + + + + Returns a new SqlProfiler to be used in the 'profiler' session. + + + + + Tracks when 'command' is started. + + + + + Returns all currently open commands on this connection + + + + + Finishes profiling for 'command', recording durations. + + + + + Called when 'reader' finishes its iterations and is closed. + + + + + The profiling session this SqlProfiler is part of. + + + + + Helper methods that allow operation on SqlProfilers, regardless of their instantiation. + + + + + Tracks when 'command' is started. + + + + + Finishes profiling for 'command', recording durations. + + + + + Called when 'reader' finishes its iterations and is closed. + + + + + Profiles a single sql execution. + + + + + Creates a new SqlTiming to profile 'command'. + + + + + Obsolete - used for serialization. + + + + + Returns a snippet of the sql command and the duration. + + + + + Returns true if Ids match. + + + + + Returns hashcode of Id. + + + + + Called when command execution is finished to determine this SqlTiming's duration. + + + + + Called when database reader is closed, ending profiling for SqlTimings. + + + + + To help with display, put some space around sammiched commas + + + + + Unique identifier for this SqlTiming. + + + + + Category of sql statement executed. + + + + + The sql that was executed. + + + + + The command string with special formatting applied based on MiniProfiler.Settings.SqlFormatter + + + + + Roughly where in the calling code that this sql was executed. + + + + + Offset from main MiniProfiler start that this sql began. + + + + + How long this sql statement took to execute. + + + + + When executing readers, how long it took to come back initially from the database, + before all records are fetched and reader is closed. + + + + + Stores any parameter names and values used by the profiled DbCommand. + + + + + Id of the Timing this statement was executed in. + + + Needed for database deserialization. + + + + + The Timing step that this sql execution occurred in. + + + + + True when other identical sql statements have been executed during this MiniProfiler session. + + + + + Information about a DbParameter used in the sql statement profiled by SqlTiming. + + + + + Returns true if this has the same parent , and as . + + + + + Returns the XOR of certain properties. + + + + + Which SqlTiming this Parameter was executed with. + + + + + Parameter name, e.g. "@routeName" + + + + + The value submitted to the database. + + + + + System.Data.DbType, e.g. "String", "Bit" + + + + + How large the type is, e.g. for string, size could be 4000 + + + + + Understands how to save MiniProfiler results to a MSSQL database, allowing more permanent storage and + querying of slow results. + + + + + Provides saving and loading s to a storage medium. + + + + + Stores under its . + + The results of a profiling session. + + Should also ensure the profiler is stored as being unviewed by its profiling . + + + + + Returns a from storage based on , which should map to . + + + Should also update that the resulting profiler has been marked as viewed by its profiling . + + + + + Returns a list of s that haven't been seen by . + + User identified by the current . + + + + Returns a new SqlServerDatabaseStorage object that will insert into the database identified by connectionString. + + + + + Saves 'profiler' to a database under its . + + + + + Returns the MiniProfiler identified by 'id' from the database or null when no MiniProfiler exists under that 'id'. + + + + + Returns a list of s that haven't been seen by . + + User identified by the current . + + + + Returns a DbConnection for your specific provider. + + + + + Returns a DbConnection already opened for execution. + + + + + How we connect to the database used to save/load MiniProfiler results. + + + + + Understands how to store a to the with absolute expiration. + + + + + The string that prefixes all keys that MiniProfilers are saved under, e.g. + "mini-profiler-ecfb0050-7ce8-4bf1-bf82-2cb38e90e31e". + + + + + Returns a new HttpRuntimeCacheStorage class that will cache MiniProfilers for the specified duration. + + + + + Saves to the HttpRuntime.Cache under a key concated with + and the parameter's . + + + + + Returns the saved identified by . Also marks the resulting + profiler to true. + + + + + Returns a list of s that haven't been seen by . + + User identified by the current . + + + + Syncs access to runtime cache when adding a new list of ids for a user. + + + + + How long to cache each for (i.e. the absolute expiration parameter of + ) + + + + + An individual profiling step that can contain child steps. + + + + + Rebuilds all the parent timings on deserialization calls + + + + + Offset from parent MiniProfiler's creation that this Timing was created. + + + + + Creates a new Timing named 'name' in the 'profiler's session, with 'parent' as this Timing's immediate ancestor. + + + + + Obsolete - used for serialization. + + + + + Returns this Timing's Name. + + + + + Returns true if Ids match. + + + + + Returns hashcode of Id. + + + + + Adds arbitrary string 'value' under 'key', allowing custom properties to be stored in this Timing step. + + + + + Completes this Timing's duration and sets the MiniProfiler's Head up one level. + + + + + Add the parameter 'timing' to this Timing's Children collection. + + + Used outside this assembly for custom deserialization when creating an implementation. + + + + + Adds the parameter 'sqlTiming' to this Timing's SqlTimings collection. + + A sql statement profiling that was executed in this Timing step. + + Used outside this assembly for custom deserialization when creating an implementation. + + + + + Returns the number of sql statements of that were executed in this . + + + + + Unique identifer for this timing; set during construction. + + + + + Text displayed when this Timing is rendered. + + + + + How long this Timing step took in ms; includes any Timings' durations. + + + + + The offset from the start of profiling. + + + + + All sub-steps that occur within this Timing step. Add new children through + + + + + Stores arbitrary key/value strings on this Timing step. Add new tuples through . + + + + + Any queries that occurred during this Timing step. + + + + + Needed for database deserialization and JSON serialization. + + + + + Which Timing this Timing is under - the duration that this step takes will be added to its parent's duration. + + This will be null for the root (initial) Timing. + + + + Gets the elapsed milliseconds in this step without any children's durations. + + + + + Gets the aggregate elapsed milliseconds of all SqlTimings executed in this Timing, excluding Children Timings. + + + + + Returns true when this is less than the configured + , by default 2.0 ms. + + + + + Reference to the containing profiler, allowing this Timing to affect the Head and get Stopwatch readings. + + + + + Returns true when this Timing has inner Timing steps. + + + + + Returns true if this Timing step collected sql execution timings. + + + + + Returns true if any s executed in this step are detected as duplicate statements. + + + + + Returns true when this Timing is the first one created in a MiniProfiler session. + + + + + How far away this Timing is from the Profiler's Root. + + + + + How many sql data readers were executed in this Timing step. Does not include queries in any child Timings. + + + + + How many sql scalar queries were executed in this Timing step. Does not include queries in any child Timings. + + + + + How many sql non-query statements were executed in this Timing step. Does not include queries in any child Timings. + + + + + Understands how to route and respond to MiniProfiler UI urls. + + + + + Returns either includes' css/javascript or results' html. + + + + + Handles rendering static content files. + + + + + Handles rendering a previous MiniProfiler session, identified by its "?id=GUID" on the query. + + + + + Embedded resource contents keyed by filename. + + + + + Helper method that sets a proper 404 response code. + + + + + Try to keep everything static so we can easily be reused. + + + + + HttpContext based profiler provider. This is the default provider to use in a web context. + The current profiler is associated with a HttpContext.Current ensuring that profilers are + specific to a individual HttpRequest. + + + + + Public constructor. This also registers any UI routes needed to display results + + + + + Starts a new MiniProfiler and associates it with the current . + + + + + Ends the current profiling session, if one exists. + + + When true, clears the for this HttpContext, allowing profiling to + be prematurely stopped and discarded. Useful for when a specific route does not need to be profiled. + + + + + Makes sure 'profiler' has a Name, pulling it from route data or url. + + + + + Returns the current profiler + + + + + + Gets the currently running MiniProfiler for the current HttpContext; null if no MiniProfiler was ed. + + + + + WebRequestProfilerProvider specific configurations + + + + + Provides user identification for a given profiling request. + + + + + Indicates that the request dto, which is associated with this attribute, + can only execute, if the user has specific permissions. + + + + + Indicates that the request dto, which is associated with this attribute, + can only execute, if the user has specific roles. + + + + + Check all session is in all supplied roles otherwise a 401 HttpError is thrown + + + + + + + Indicates that the request dto, which is associated with this attribute, + can only execute, if the user has specific permissions. + + + + + Indicates that the request dto, which is associated with this attribute, + can only execute, if the user has any of the specified roles. + + + + + Check all session is in any supplied roles otherwise a 401 HttpError is thrown + + + + + + + Base class to create response filter attributes only for specific HTTP methods (GET, POST...) + + + + + Creates a new + + Defines when the filter should be executed + + + + This method is only executed if the HTTP method matches the property. + + The http request wrapper + The http response wrapper + The response DTO + + + + Create a ShallowCopy of this instance. + + + + + + If they don't have an ICacheClient configured use an In Memory one. + + + + + Creates instance using straight Resolve approach. + This will throw an exception if resolution fails + + + + + Creates instance using the TryResolve approach if tryResolve = true. + Otherwise uses Resolve approach, which will throw an exception if resolution fails + + + + + Sets a persistent cookie which never expires + + + + + Sets a session cookie which expires after the browser session closes + + + + + Deletes a specified cookie by setting its value to empty and expiration to -1 days + + + + + Lets you Register new Services and the optional restPaths will be registered against + this default Request Type + + + + + Naming convention for the ResponseStatus property name on the response DTO + + + + + Create an instance of the service response dto type and inject it with the supplied responseStatus + + + + + + + + + + + + + + + + + Override to provide additional/less context about the Service Exception. + By default the request is serialized and appended to the ResponseStatus StackTrace. + + + + + Scans the supplied Assemblies to infer REST paths and HTTP verbs. + + The instance. + + The assemblies with REST services. + + The same instance; + never . + + + + Configure ServiceStack to have ISession support + + + + + Create the active Session or Permanent Session Id cookie. + + + + + + Create both Permanent and Session Id cookies and return the active sessionId + + + + + + This class interecepts 401 requests and changes them to 402 errors. When this happens the FormAuthentication module + will no longer hijack it and redirect back to login because it is a 402 error, not a 401. + When the request ends, this class sets the status code back to 401 and everything works as it should. + + PathToSupress is the path inside your website where the above swap should happen. + + If you can build for .net 4.5, you do not have to do this swap. You can take advantage of a new flag (SuppressFormsAuthenticationRedirect) + that tells the FormAuthenticationModule to not redirect, which also means you will not need the EndRequest code. + + + + + Converts the validation result to an error result which will be serialized by ServiceStack in a clean and human-readable way. + + The validation result + + + + + Converts the validation result to an error exception which will be serialized by ServiceStack in a clean and human-readable way + if the returned exception is thrown. + + The validation result + + + + + Creates a new instance of the RulesetValidatorSelector. + + + + + Determines whether or not a rule should execute. + + The rule + Property path (eg Customer.Address.Line1) + Contextual information + Whether or not the validator can execute. + + + + Activate the validation mechanism, so every request DTO with an existing validator + will be validated. + + The app host + + + + Override to provide additional/less context about the Service Exception. + By default the request is serialized and appended to the ResponseStatus StackTrace. + + + + + Auto-scans the provided assemblies for a + and registers it in the provided IoC container. + + The IoC container + The assemblies to scan for a validator + + + + In Memory repository for files. Useful for testing. + + + + + Context to capture IService action + + + + + Get an IAppHost container. + Note: Registering dependencies should only be done during setup/configuration + stage and remain immutable there after for thread-safety. + + + + + + + Ensure the same instance is used for subclasses + + + + + Called before page is executed + + + + + Called after page is executed but before it's merged with the + website template if any. + + + + + Don't HTML encode safe output + + + + + + + Return the output of a different view with the specified name + using the supplied model + + + + + + + + Resolve registered Assemblies + + + + + + Reference to MarkdownViewEngine + + + + + The AppHost so you can access configuration and resolve dependencies, etc. + + + + + This precompiled Markdown page with Metadata + + + + + ASP.NET MVC's HtmlHelper + + + + + All variables passed to and created by your page. + The Response DTO is stored and accessible via the 'Model' variable. + + All variables and outputs created are stored in ScopeArgs which is what's available + to your website template. The Generated page is stored in the 'Body' variable. + + + + + Whether HTML or Markdown output is requested + + + + + The Response DTO + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Container service is built-in and read-only.. + + + + + Looks up a localized string similar to Service type {0} does not inherit or implement {1}.. + + + + + Looks up a localized string similar to Required dependency of type {0} named '{1}' could not be resolved.. + + + + + Looks up a localized string similar to Required dependency of type {0} could not be resolved.. + + + + + Looks up a localized string similar to Unknown scope.. + + + + + Gets string value from Items[name] then Cookies[name] if exists. + Useful when *first* setting the users response cookie in the request filter. + To access the value for this initial request you need to set it in Items[]. + + string value or null if it doesn't exist + + + + Gets request paramater string value by looking in the following order: + - QueryString[name] + - FormData[name] + - Cookies[name] + - Items[name] + + string value or null if it doesn't exist + + + * + Input: http://localhost:96/Cambia3/Temp/Test.aspx/path/info?q=item#fragment + + Some HttpRequest path and URL properties: + Request.ApplicationPath: /Cambia3 + Request.CurrentExecutionFilePath: /Cambia3/Temp/Test.aspx + Request.FilePath: /Cambia3/Temp/Test.aspx + Request.Path: /Cambia3/Temp/Test.aspx/path/info + Request.PathInfo: /path/info + Request.PhysicalApplicationPath: D:\Inetpub\wwwroot\CambiaWeb\Cambia3\ + Request.QueryString: /Cambia3/Temp/Test.aspx/path/info?query=arg + Request.Url.AbsolutePath: /Cambia3/Temp/Test.aspx/path/info + Request.Url.AbsoluteUri: http://localhost:96/Cambia3/Temp/Test.aspx/path/info?query=arg + Request.Url.Fragment: + Request.Url.Host: localhost + Request.Url.LocalPath: /Cambia3/Temp/Test.aspx/path/info + Request.Url.PathAndQuery: /Cambia3/Temp/Test.aspx/path/info?query=arg + Request.Url.Port: 96 + Request.Url.Query: ?query=arg + Request.Url.Scheme: http + Request.Url.Segments: / + Cambia3/ + Temp/ + Test.aspx/ + path/ + info + * + + + + Use this to treat Request.Items[] as a cache by returning pre-computed items to save + calculating them multiple times. + + + + + Sets a persistent cookie which never expires + + + + + Sets a session cookie which expires after the browser session closes + + + + + Sets a persistent cookie which expires after the given time + + + + + Sets a persistent cookie with an expiresAt date + + + + + Deletes a specified cookie by setting its value to empty and expiration to -1 days + + + + + Returns the optimized result for the IRequestContext. + Does not use or store results in any cache. + + + + + + + + Overload for the method returning the most + optimized result based on the MimeType and CompressionType from the IRequestContext. + + + + + Overload for the method returning the most + optimized result based on the MimeType and CompressionType from the IRequestContext. + How long to cache for, null is no expiration + + + + + Clears all the serialized and compressed caches set + by the 'Resolve' method for the cacheKey provided + + + + + + + + Store an entry in the IHttpRequest.Items Dictionary + + + + + Get an entry from the IHttpRequest.Items Dictionary + + + + + For performance withPathInfoParts should already be a lower case string + to minimize redundant matching operations. + + + + + + + + For performance withPathInfoParts should already be a lower case string + to minimize redundant matching operations. + + + + + + + + + The number of segments separated by '/' determinable by path.Split('/').Length + e.g. /path/to/here.ext == 3 + + + + + The total number of segments after subparts have been exploded ('.') + e.g. /path/to/here.ext == 4 + + + + + Provide for quick lookups based on hashes that can be determined from a request url + + + + + Execute MQ + + + + + Execute MQ with requestContext + + + + + Execute using empty RequestContext + + + + + Execute HTTP + + + + + Gets the name of the base most type in the heirachy tree with the same. + + We get an exception when trying to create a schema with multiple types of the same name + like when inheriting from a DataContract with the same name. + + The type. + + + + + Inherit from this class if you want to host your web services inside an + ASP.NET application. + + + + + Exécute les tâches définies par l'application associées à la libération ou à la redéfinition des ressources non managées. + + 2 + + + + Load Embedded Resource Templates in ServiceStack. + To get ServiceStack to use your own instead just add a copy of one or more of the following to your Web Root: + ~/Templates/IndexOperations.html + ~/Templates/OperationControl.html + ~/Templates/HtmlFormat.html + + + + + when true, (most) bare plain URLs are auto-hyperlinked + WARNING: this is a significant deviation from the markdown spec + + + + + when true, RETURN becomes a literal newline + WARNING: this is a significant deviation from the markdown spec + + + + + use ">" for HTML output, or " />" for XHTML output + + + + + when true, problematic URL characters like [, ], (, and so forth will be encoded + WARNING: this is a significant deviation from the markdown spec + + + + + when false, email addresses will never be auto-linked + WARNING: this is a significant deviation from the markdown spec + + + + + when true, bold and italic require non-word characters on either side + WARNING: this is a significant deviation from the markdown spec + + + + + Markdown is a text-to-HTML conversion tool for web writers. + Markdown allows you to write using an easy-to-read, easy-to-write plain text format, + then convert it to structurally valid XHTML (or HTML). + + + + + Tabs are automatically converted to spaces as part of the transform + this constant determines how "wide" those tabs become in spaces + + + + + Create a new Markdown instance using default options + + + + + Create a new Markdown instance and optionally load options from a configuration + file. There they should be stored in the appSettings section, available options are: + + Markdown.StrictBoldItalic (true/false) + Markdown.EmptyElementSuffix (">" or " />" without the quotes) + Markdown.LinkEmails (true/false) + Markdown.AutoNewLines (true/false) + Markdown.AutoHyperlink (true/false) + Markdown.EncodeProblemUrlCharacters (true/false) + + + + + + Create a new Markdown instance and set the options from the MarkdownOptions object. + + + + + maximum nested depth of [] and () supported by the transform; implementation detail + + + + + In the static constuctor we'll initialize what stays the same across all transforms. + + + + + Transforms the provided Markdown-formatted text to HTML; + see http://en.wikipedia.org/wiki/Markdown + + + The order in which other subs are called here is + essential. Link and image substitutions need to happen before + EscapeSpecialChars(), so that any *'s or _'s in the a + and img tags get encoded. + + + + + Perform transformations that form block-level tags like paragraphs, headers, and list items. + + + + + Perform transformations that occur *within* block-level tags like paragraphs, headers, and list items. + + + + + splits on two or more newlines, to form "paragraphs"; + each paragraph is then unhashed (if it is a hash and unhashing isn't turned off) or wrapped in HTML p tag + + + + + Reusable pattern to match balanced [brackets]. See Friedl's + "Mastering Regular Expressions", 2nd Ed., pp. 328-331. + + + + + Reusable pattern to match balanced (parens). See Friedl's + "Mastering Regular Expressions", 2nd Ed., pp. 328-331. + + + + + Strips link definitions from text, stores the URLs and titles in hash references. + + + ^[id]: url "optional title" + + + + + derived pretty much verbatim from PHP Markdown + + + + + replaces any block-level HTML blocks with hash entries + + + + + returns an array of HTML tokens comprising the input string. Each token is + either a tag (possibly with nested, tags contained therein, such + as <a href="<MTFoo>">, or a run of text between tags. Each element of the + array is a two-element array; the first is either 'tag' or 'text'; the second is + the actual value. + + + + + Turn Markdown link shortcuts into HTML anchor tags + + + [link text](url "title") + [link text][id] + [id] + + + + + Turn Markdown image shortcuts into HTML img tags. + + + ![alt text][id] + ![alt text](url "optional title") + + + + + Turn Markdown headers into HTML header tags + + + Header 1 + ======== + + Header 2 + -------- + + # Header 1 + ## Header 2 + ## Header 2 with closing hashes ## + ... + ###### Header 6 + + + + + Turn Markdown horizontal rules into HTML hr tags + + + *** + * * * + --- + - - - + + + + + Turn Markdown lists into HTML ul and ol and li tags + + + + + Process the contents of a single ordered or unordered list, splitting it + into individual list items. + + + + + /// Turn Markdown 4-space indented code into HTML pre code blocks + + + + + Turn Markdown `code spans` into HTML code tags + + + + + Turn Markdown *italics* and **bold** into HTML strong and em tags + + + + + Turn markdown line breaks (two space at end of line) into HTML break tags + + + + + Turn Markdown > quoted blocks into HTML blockquote blocks + + + + + Turn angle-delimited URLs into HTML anchor tags + + + <http://www.example.com> + + + + + Remove one level of line-leading spaces + + + + + encodes email address randomly + roughly 10% raw, 45% hex, 45% dec + note that @ is always encoded and : never is + + + + + Encode/escape certain Markdown characters inside code blocks and spans where they are literals + + + + + Encode any ampersands (that aren't part of an HTML entity) and left or right angle brackets + + + + + Encodes any escaped characters such as \`, \*, \[ etc + + + + + swap back in all the special characters we've hidden + + + + + escapes Bold [ * ] and Italic [ _ ] characters + + + + + hex-encodes some unusual "problem" chars in URLs to avoid URL detection problems + + + + + Within tags -- meaning between < and > -- encode [\ ` * _] so they + don't conflict with their use in Markdown for code, italics and strong. + We're replacing each such character with its corresponding hash + value; this is likely overkill, but it should prevent us from colliding + with the escape values by accident. + + + + + convert all tabs to _tabWidth spaces; + standardizes line endings from DOS (CR LF) or Mac (CR) to UNIX (LF); + makes sure text ends with a couple of newlines; + removes any blank lines (only spaces) in the text + + + + + this is to emulate what's evailable in PHP + + + + + use ">" for HTML output, or " />" for XHTML output + + + + + when false, email addresses will never be auto-linked + WARNING: this is a significant deviation from the markdown spec + + + + + when true, bold and italic require non-word characters on either side + WARNING: this is a significant deviation from the markdown spec + + + + + when true, RETURN becomes a literal newline + WARNING: this is a significant deviation from the markdown spec + + + + + when true, (most) bare plain URLs are auto-hyperlinked + WARNING: this is a significant deviation from the markdown spec + + + + + when true, problematic URL characters like [, ], (, and so forth will be encoded + WARNING: this is a significant deviation from the markdown spec + + + + + current version of MarkdownSharp; + see http://code.google.com/p/markdownsharp/ for the latest code or to contribute + + + + + Render Markdown for text/markdown and text/plain ContentTypes + + + + + Used in Unit tests + + + + + + Non ASP.NET requests + + + + + + + + ASP.NET requests + + + + + + Writes to response. + Response headers are customizable by implementing IHasOptions an returning Dictionary of Http headers. + + The response. + Whether or not it was implicity handled by ServiceStack's built-in handlers. + The default action. + The serialization context. + Add prefix to response body if any + Add suffix to response body if any + + + + + Highly optimized code to find if GZIP is supported from: + - http://dotnetperls.com/gzip-request + + Other resources for GZip, deflate resources: + - http://www.west-wind.com/Weblog/posts/10564.aspx + - http://www.west-wind.com/WebLog/posts/102969.aspx + - ICSharpCode + + + + + Changes the links for the servicestack/metadata page + + + + + Non ASP.NET requests + + + + + ASP.NET requests + + + + + Keep default file contents in-memory + + + + + + Call to signal the completion of a ServiceStack-handled Request + + + + + Resolves and auto-wires a ServiceStack Service from a ASP.NET HttpContext. + + + + + Resolves and auto-wires a ServiceStack Service from a HttpListenerContext. + + + + + Resolves and auto-wires a ServiceStack Service. + + + + diff --git a/lib/System.Web.Razor.dll b/lib/System.Web.Razor.dll new file mode 100644 index 0000000..8668fb6 Binary files /dev/null and b/lib/System.Web.Razor.dll differ diff --git a/lib/System.Web.Razor.xml b/lib/System.Web.Razor.xml new file mode 100644 index 0000000..b42f27c --- /dev/null +++ b/lib/System.Web.Razor.xml @@ -0,0 +1,4359 @@ + + + + System.Web.Razor + + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + . + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + Enumerates the list of Visual Basic keywords. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code. + + + \ No newline at end of file diff --git a/lib/copy.bat b/lib/copy.bat new file mode 100644 index 0000000..5dad0b4 --- /dev/null +++ b/lib/copy.bat @@ -0,0 +1,23 @@ +COPY C:\src\ServiceStack.OrmLite\src\ServiceStack.OrmLite.PostgreSQL\bin\Release\ServiceStack.OrmLite.* +COPY C:\src\ServiceStack.OrmLite\src\ServiceStack.OrmLite.PostgreSQL\bin\Release\Mono.Security.dll +COPY C:\src\ServiceStack.OrmLite\src\ServiceStack.OrmLite.PostgreSQL\bin\Release\Npgsql.dll + +COPY C:\src\ServiceStack.OrmLite\src\ServiceStack.OrmLite.MySql\bin\Release\ServiceStack.OrmLite.MySql.* +COPY C:\src\ServiceStack.OrmLite\src\ServiceStack.OrmLite.MySql\bin\Release\MySql.Data.* + +COPY C:\src\ServiceStack.OrmLite\src\ServiceStack.OrmLite.SqlServer\bin\Release\ServiceStack.OrmLite.SqlServer.* + +COPY C:\src\ServiceStack.OrmLite\src\ServiceStack.OrmLite.Sqlite\bin\Release\ServiceStack.OrmLite.Sqlite.* +COPY C:\src\ServiceStack\lib\Mono.Data.Sqlite.dll . +COPY C:\src\ServiceStack\lib\sqlite3.dll . + +COPY C:\src\ServiceStack.Redis\src\ServiceStack.Redis\bin\Release\ServiceStack.Redis.* . + +COPY C:\src\ServiceStack\src\ServiceStack.Authentication.OAuth2\bin\Release\ServiceStack.Authentication.OAuth2.* . +COPY C:\src\ServiceStack\src\ServiceStack.Authentication.OAuth2\bin\Release\DotNetOpenAuth.* . + +COPY C:\src\ServiceStack\src\ServiceStack.Api.Swagger\bin\Release\ServiceStack.Api.Swagger.* . +COPY C:\src\ServiceStack\src\ServiceStack.Server\bin\Release\ServiceStack.Server.* . +COPY C:\src\ServiceStack\src\ServiceStack.Razor\bin\Release\* . + +COPY C:\src\Stripe\src\Stripe\StripeGateway.cs C:\src\Licensing\www.logic\ \ No newline at end of file diff --git a/lib/sqlite3.dll b/lib/sqlite3.dll new file mode 100644 index 0000000..1058a2b Binary files /dev/null and b/lib/sqlite3.dll differ diff --git a/run-all-benchmarks.bat b/run-all-benchmarks.bat new file mode 100644 index 0000000..42dd149 --- /dev/null +++ b/run-all-benchmarks.bat @@ -0,0 +1,49 @@ +SET HOST=127.0.0.1 +REM SET HOST=10.0.0.64 +SET REQUESTS=10000 + +:AspNet +SET PORT=55000 +SET ID=aspnet +CALL :Benchmark + +:HttpListener +SET PORT=55001 +SET ID=httplistener +CALL :Benchmark + +:SmartPool +SET PORT=55003 +SET ID=httplistenersmartpool +CALL :Benchmark + +:HttpListenerPool +SET PORT=55002 +SET ID=httplistenerpool +CALL :Benchmark + +GOTO End + +:Benchmark + +SET URL=http://%HOST%:%PORT% +REM START servers\Techempower.HttpListener\bin\Release\Techempower.HttpListener.exe 128 mysql +REM START servers\Techempower.HttpListener.Pool\bin\Release\Techempower.HttpListener.Pool.exe 128 mysql +REM START servers\Techempower.HttpListener.SmartPool\bin\Release\Techempower.HttpListener.SmartPool.exe 128 mysql + +FOR %%A IN (json plaintext) DO ab -k -n %REQUESTS% -c 10 "%URL%/%%A" > results\raw_%REQUESTS%_10_%%A_%ID%.txt +FOR %%A IN (json plaintext) DO ab -k -n %REQUESTS% -c 100 "%URL%/%%A" > results\raw_%REQUESTS%_100_%%A_%ID%.txt +FOR %%A IN (json plaintext) DO ab -k -n %REQUESTS% -c 256 "%URL%/%%A" > results\raw_%REQUESTS%_256_%%A_%ID%.txt +ab -k -n %REQUESTS% -c 1000 "%URL%/plaintext" > results\raw_10000_1000_plaintext_%ID%.txt + +FOR %%A IN (db queries fortunes updates) DO ab -k -n %REQUESTS% -c 10 "%URL%/%%A" > results\db_%REQUESTS%_10_%%A_%ID%.txt +FOR %%A IN (db queries fortunes updates) DO ab -k -n %REQUESTS% -c 100 "%URL%/%%A" > results\db_%REQUESTS%_100_%%A_%ID%.txt +FOR %%A IN (db queries fortunes updates) DO ab -k -n %REQUESTS% -c 256 "%URL%/%%A" > results\db_%REQUESTS%_256_%%A_%ID%.txt + +REM FOR %%A IN (redis) DO ab -k -n %REQUESTS% -c 10 "%URL%/%%A" > results\redis_%REQUESTS%_10_%%A_%ID%.txt +REM FOR %%A IN (redis) DO ab -k -n %REQUESTS% -c 100 "%URL%/%%A" > results\redis_%REQUESTS%_100_%%A_%ID%.txt +REM FOR %%A IN (redis) DO ab -k -n %REQUESTS% -c 256 "%URL%/%%A" > results\redis_%REQUESTS%_100_%%A_%ID%.txt + +GOTO :EOF + +:End diff --git a/run-aspnet-benchmarks.bat b/run-aspnet-benchmarks.bat new file mode 100644 index 0000000..9d70bb5 --- /dev/null +++ b/run-aspnet-benchmarks.bat @@ -0,0 +1,32 @@ +SET HOST=127.0.0.1 +REM SET HOST=10.0.0.64 +SET REQUESTS=10000 + +:AspNet +SET PORT=55000 +SET ID=aspnet +CALL :Benchmark + +GOTO End + +:Benchmark + +SET URL=http://%HOST%:%PORT% + + +FOR %%A IN (json plaintext) DO ab -k -n %REQUESTS% -c 10 "%URL%/%%A" > results\raw_%REQUESTS%_10_%%A_%ID%.txt +FOR %%A IN (json plaintext) DO ab -k -n %REQUESTS% -c 100 "%URL%/%%A" > results\raw_%REQUESTS%_100_%%A_%ID%.txt +FOR %%A IN (json plaintext) DO ab -k -n %REQUESTS% -c 256 "%URL%/%%A" > results\raw_%REQUESTS%_256_%%A_%ID%.txt +ab -k -n %REQUESTS% -c 1000 "%URL%/plaintext" > results\raw_10000_1000_plaintext_%ID%.txt + +FOR %%A IN (db queries fortunes updates) DO ab -k -n %REQUESTS% -c 10 "%URL%/%%A" > results\db_%REQUESTS%_10_%%A_%ID%.txt +FOR %%A IN (db queries fortunes updates) DO ab -k -n %REQUESTS% -c 100 "%URL%/%%A" > results\db_%REQUESTS%_100_%%A_%ID%.txt +FOR %%A IN (db queries fortunes updates) DO ab -k -n %REQUESTS% -c 256 "%URL%/%%A" > results\db_%REQUESTS%_256_%%A_%ID%.txt + +REM FOR %%A IN (redis) DO ab -k -n %REQUESTS% -c 10 "%URL%/%%A" > results\redis_%REQUESTS%_10_%%A_%ID%.txt +REM FOR %%A IN (redis) DO ab -k -n %REQUESTS% -c 100 "%URL%/%%A" > results\redis_%REQUESTS%_100_%%A_%ID%.txt +REM FOR %%A IN (redis) DO ab -k -n %REQUESTS% -c 256 "%URL%/%%A" > results\redis_%REQUESTS%_100_%%A_%ID%.txt + +GOTO :EOF + +:End diff --git a/run-httplistener-benchmarks.bat b/run-httplistener-benchmarks.bat new file mode 100644 index 0000000..ba4f473 --- /dev/null +++ b/run-httplistener-benchmarks.bat @@ -0,0 +1,32 @@ +SET HOST=127.0.0.1 +REM SET HOST=10.0.0.64 +SET REQUESTS=10000 + +:HttpListener +SET PORT=55001 +SET ID=httplistener +CALL :Benchmark + +GOTO End + +:Benchmark + +SET URL=http://%HOST%:%PORT% +REM START servers\Techempower.HttpListener\bin\Release\Techempower.HttpListener.exe 128 mysql + +FOR %%A IN (json plaintext) DO ab -k -n %REQUESTS% -c 10 "%URL%/%%A" > results\raw_%REQUESTS%_10_%%A_%ID%.txt +FOR %%A IN (json plaintext) DO ab -k -n %REQUESTS% -c 100 "%URL%/%%A" > results\raw_%REQUESTS%_100_%%A_%ID%.txt +FOR %%A IN (json plaintext) DO ab -k -n %REQUESTS% -c 256 "%URL%/%%A" > results\raw_%REQUESTS%_256_%%A_%ID%.txt +ab -k -n %REQUESTS% -c 1000 "%URL%/plaintext" > results\raw_10000_1000_plaintext_%ID%.txt + +FOR %%A IN (db queries fortunes updates) DO ab -k -n %REQUESTS% -c 10 "%URL%/%%A" > results\db_%REQUESTS%_10_%%A_%ID%.txt +FOR %%A IN (db queries fortunes updates) DO ab -k -n %REQUESTS% -c 100 "%URL%/%%A" > results\db_%REQUESTS%_100_%%A_%ID%.txt +FOR %%A IN (db queries fortunes updates) DO ab -k -n %REQUESTS% -c 256 "%URL%/%%A" > results\db_%REQUESTS%_256_%%A_%ID%.txt + +REM FOR %%A IN (redis) DO ab -k -n %REQUESTS% -c 10 "%URL%/%%A" > results\redis_%REQUESTS%_10_%%A_%ID%.txt +REM FOR %%A IN (redis) DO ab -k -n %REQUESTS% -c 100 "%URL%/%%A" > results\redis_%REQUESTS%_100_%%A_%ID%.txt +REM FOR %%A IN (redis) DO ab -k -n %REQUESTS% -c 256 "%URL%/%%A" > results\redis_%REQUESTS%_100_%%A_%ID%.txt + +GOTO :EOF + +:End diff --git a/run-httplistenerpool-benchmarks.bat b/run-httplistenerpool-benchmarks.bat new file mode 100644 index 0000000..bfde988 --- /dev/null +++ b/run-httplistenerpool-benchmarks.bat @@ -0,0 +1,32 @@ +SET HOST=127.0.0.1 +REM SET HOST=10.0.0.64 +SET REQUESTS=10000 + +:HttpListenerPool +SET PORT=55002 +SET ID=httplistenerpool +CALL :Benchmark + +GOTO End + +:Benchmark + +SET URL=http://%HOST%:%PORT% +REM START servers\Techempower.HttpListener.Pool\bin\Release\Techempower.HttpListener.Pool.exe 128 mysql + +FOR %%A IN (json plaintext) DO ab -k -n %REQUESTS% -c 10 "%URL%/%%A" > results\raw_%REQUESTS%_10_%%A_%ID%.txt +FOR %%A IN (json plaintext) DO ab -k -n %REQUESTS% -c 100 "%URL%/%%A" > results\raw_%REQUESTS%_100_%%A_%ID%.txt +FOR %%A IN (json plaintext) DO ab -k -n %REQUESTS% -c 256 "%URL%/%%A" > results\raw_%REQUESTS%_256_%%A_%ID%.txt +ab -k -n %REQUESTS% -c 1000 "%URL%/plaintext" > results\raw_10000_1000_plaintext_%ID%.txt + +FOR %%A IN (db queries fortunes updates) DO ab -k -n %REQUESTS% -c 10 "%URL%/%%A" > results\db_%REQUESTS%_10_%%A_%ID%.txt +FOR %%A IN (db queries fortunes updates) DO ab -k -n %REQUESTS% -c 100 "%URL%/%%A" > results\db_%REQUESTS%_100_%%A_%ID%.txt +FOR %%A IN (db queries fortunes updates) DO ab -k -n %REQUESTS% -c 256 "%URL%/%%A" > results\db_%REQUESTS%_256_%%A_%ID%.txt + +REM FOR %%A IN (redis) DO ab -k -n %REQUESTS% -c 10 "%URL%/%%A" > results\redis_%REQUESTS%_10_%%A_%ID%.txt +REM FOR %%A IN (redis) DO ab -k -n %REQUESTS% -c 100 "%URL%/%%A" > results\redis_%REQUESTS%_100_%%A_%ID%.txt +REM FOR %%A IN (redis) DO ab -k -n %REQUESTS% -c 256 "%URL%/%%A" > results\redis_%REQUESTS%_100_%%A_%ID%.txt + +GOTO :EOF + +:End diff --git a/run-smartpool-benchmarks.bat b/run-smartpool-benchmarks.bat new file mode 100644 index 0000000..ca20307 --- /dev/null +++ b/run-smartpool-benchmarks.bat @@ -0,0 +1,32 @@ +SET HOST=127.0.0.1 +REM SET HOST=10.0.0.64 +SET REQUESTS=10000 + +:SmartPool +SET PORT=55003 +SET ID=httplistenersmartpool +CALL :Benchmark + +GOTO End + +:Benchmark + +SET URL=http://%HOST%:%PORT% +REM START servers\Techempower.HttpListener.SmartPool\bin\Release\Techempower.HttpListener.SmartPool.exe 128 mysql + +FOR %%A IN (json plaintext) DO ab -k -n %REQUESTS% -c 10 "%URL%/%%A" > results\raw_%REQUESTS%_10_%%A_%ID%.txt +FOR %%A IN (json plaintext) DO ab -k -n %REQUESTS% -c 100 "%URL%/%%A" > results\raw_%REQUESTS%_100_%%A_%ID%.txt +FOR %%A IN (json plaintext) DO ab -k -n %REQUESTS% -c 256 "%URL%/%%A" > results\raw_%REQUESTS%_256_%%A_%ID%.txt +ab -k -n %REQUESTS% -c 1000 "%URL%/plaintext" > results\raw_10000_1000_plaintext_%ID%.txt + +FOR %%A IN (db queries fortunes updates) DO ab -k -n %REQUESTS% -c 10 "%URL%/%%A" > results\db_%REQUESTS%_10_%%A_%ID%.txt +FOR %%A IN (db queries fortunes updates) DO ab -k -n %REQUESTS% -c 100 "%URL%/%%A" > results\db_%REQUESTS%_100_%%A_%ID%.txt +FOR %%A IN (db queries fortunes updates) DO ab -k -n %REQUESTS% -c 256 "%URL%/%%A" > results\db_%REQUESTS%_256_%%A_%ID%.txt + +REM FOR %%A IN (redis) DO ab -k -n %REQUESTS% -c 10 "%URL%/%%A" > results\redis_%REQUESTS%_10_%%A_%ID%.txt +REM FOR %%A IN (redis) DO ab -k -n %REQUESTS% -c 100 "%URL%/%%A" > results\redis_%REQUESTS%_100_%%A_%ID%.txt +REM FOR %%A IN (redis) DO ab -k -n %REQUESTS% -c 256 "%URL%/%%A" > results\redis_%REQUESTS%_100_%%A_%ID%.txt + +GOTO :EOF + +:End diff --git a/servers/Perf.ServiceInterface/Perf.ServiceInterface.csproj b/servers/Perf.ServiceInterface/Perf.ServiceInterface.csproj new file mode 100644 index 0000000..dc13f9a --- /dev/null +++ b/servers/Perf.ServiceInterface/Perf.ServiceInterface.csproj @@ -0,0 +1,96 @@ + + + + + Debug + AnyCPU + {E1EFD00E-8A97-41AF-BE99-78A5F3FE5932} + Library + Properties + Perf.SeviceInterface + Perf.SeviceInterface + v4.5 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + ..\..\lib\MySql.Data.dll + + + ..\..\lib\Npgsql.dll + + + ..\..\lib\ServiceStack.dll + + + ..\..\lib\ServiceStack.Client.dll + + + ..\..\lib\ServiceStack.Common.dll + + + ..\..\lib\ServiceStack.Interfaces.dll + + + ..\..\lib\ServiceStack.OrmLite.dll + + + ..\..\lib\ServiceStack.OrmLite.MySql.dll + + + ..\..\lib\ServiceStack.OrmLite.PostgreSQL.dll + + + ..\..\lib\ServiceStack.OrmLite.SqlServer.dll + + + ..\..\lib\ServiceStack.Razor.dll + + + ..\..\lib\ServiceStack.Server.dll + + + ..\..\lib\ServiceStack.Text.dll + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/servers/Perf.ServiceInterface/PerfAsyncServices.cs b/servers/Perf.ServiceInterface/PerfAsyncServices.cs new file mode 100644 index 0000000..eb0ad7c --- /dev/null +++ b/servers/Perf.ServiceInterface/PerfAsyncServices.cs @@ -0,0 +1,37 @@ +using System.Threading; +using System.Threading.Tasks; +using ServiceStack; + +namespace Perf.SeviceInterface +{ + public class SpinWaitAsync : IReturn + { + public int? Iterations { get; set; } + } + + public class SleepAsync : IReturn + { + public int? ForMs { get; set; } + } + + public class PerfAsyncServices : Service + { + private const int DefaultIterations = 1000 * 1000; + private const int DefaultMs = 100; + + public Task Any(SpinWaitAsync request) + { + return new Task( + () => { + Thread.SpinWait(request.Iterations.GetValueOrDefault(DefaultIterations)); + return request; + }); + } + + public async Task Any(SleepAsync request) + { + await Task.Delay(request.ForMs.GetValueOrDefault(DefaultMs)); + return request; + } + } +} diff --git a/servers/Perf.ServiceInterface/PerfServices.cs b/servers/Perf.ServiceInterface/PerfServices.cs new file mode 100644 index 0000000..a839e26 --- /dev/null +++ b/servers/Perf.ServiceInterface/PerfServices.cs @@ -0,0 +1,33 @@ +using System.Threading; +using ServiceStack; + +namespace Perf.SeviceInterface +{ + public class SpinWait : IReturn + { + public int? Iterations { get; set; } + } + + public class Sleep : IReturn + { + public int? ForMs { get; set; } + } + + public class PerfServices : Service + { + private const int DefaultIterations = 1000 * 1000; + private const int DefaultMs = 100; + + public object Any(SpinWait request) + { + Thread.SpinWait(request.Iterations.GetValueOrDefault(DefaultIterations)); + return request; + } + + public object Any(Sleep request) + { + Thread.Sleep(request.ForMs.GetValueOrDefault(DefaultMs)); + return request; + } + } +} diff --git a/servers/Perf.ServiceInterface/Properties/AssemblyInfo.cs b/servers/Perf.ServiceInterface/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..b7058ff --- /dev/null +++ b/servers/Perf.ServiceInterface/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Perf.SeviceInterface")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Perf.SeviceInterface")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("d19a09a2-9d20-470b-b59f-020b5a215c6e")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/servers/Techempower.AspNet/Global.asax b/servers/Techempower.AspNet/Global.asax new file mode 100644 index 0000000..2e09d51 --- /dev/null +++ b/servers/Techempower.AspNet/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.cs" Inherits="Techempower.AspNet.Global" Language="C#" %> diff --git a/servers/Techempower.AspNet/Global.asax.cs b/servers/Techempower.AspNet/Global.asax.cs new file mode 100644 index 0000000..1ec2caf --- /dev/null +++ b/servers/Techempower.AspNet/Global.asax.cs @@ -0,0 +1,25 @@ +using System; +using Funq; +using ServiceStack; +using Techempower.ServiceInterface; + +namespace Techempower.AspNet +{ + public class AppHost : AppHostBase + { + public AppHost() : base("Techempower Benchmarks", typeof(TechmeServices).Assembly) { } + + public override void Configure(Container container) + { + ConfigApp.AppHost(this); + } + } + + public class Global : System.Web.HttpApplication + { + protected void Application_Start(object sender, EventArgs e) + { + new AppHost().Init(); + } + } +} \ No newline at end of file diff --git a/servers/Techempower.AspNet/Properties/AssemblyInfo.cs b/servers/Techempower.AspNet/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e2bd905 --- /dev/null +++ b/servers/Techempower.AspNet/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Perf.AspNet")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Perf.AspNet")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("81825cab-6e48-41fb-a2db-81a0dc7e8ca0")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/servers/Techempower.AspNet/Techempower.AspNet.csproj b/servers/Techempower.AspNet/Techempower.AspNet.csproj new file mode 100644 index 0000000..f5c484c --- /dev/null +++ b/servers/Techempower.AspNet/Techempower.AspNet.csproj @@ -0,0 +1,154 @@ + + + + + Debug + AnyCPU + + + 2.0 + {43CE22B9-37CB-48DB-89D1-F6A492249525} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Techempower.AspNet + Techempower.AspNet + v4.5 + true + + + + + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\ + TRACE + prompt + 4 + + + + + ..\..\lib\ServiceStack.dll + + + ..\..\lib\ServiceStack.Client.dll + + + ..\..\lib\ServiceStack.Common.dll + + + ..\..\lib\ServiceStack.Interfaces.dll + + + ..\..\lib\ServiceStack.OrmLite.dll + + + ..\..\lib\ServiceStack.OrmLite.MySql.dll + + + ..\..\lib\ServiceStack.OrmLite.PostgreSQL.dll + + + ..\..\lib\ServiceStack.OrmLite.SqlServer.dll + + + ..\..\lib\ServiceStack.Razor.dll + + + ..\..\lib\ServiceStack.Server.dll + + + ..\..\lib\ServiceStack.Text.dll + + + + + + + + + + + False + ..\..\..\Licensing\lib\System.Web.Razor.dll + + + + + + + + + + + + + Designer + + + + + Global.asax + + + + + + + Web.config + + + Web.config + + + + + {F9340D2F-DA53-47CA-925C-B67992E4D667} + Techempower.ServiceInterface + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + True + True + 57963 + / + http://localhost:55000/ + False + False + + + False + + + + + + \ No newline at end of file diff --git a/servers/Techempower.AspNet/Views/Fortunes.cshtml b/servers/Techempower.AspNet/Views/Fortunes.cshtml new file mode 100644 index 0000000..dec4375 --- /dev/null +++ b/servers/Techempower.AspNet/Views/Fortunes.cshtml @@ -0,0 +1,26 @@ +@model List + + + + + + Fortunes + + + + + + + + +@foreach (var fortune in Model) +{ + + + + +} +
idmessage
@fortune.id@fortune.message
+ + + \ No newline at end of file diff --git a/servers/Techempower.AspNet/Web.Debug.config b/servers/Techempower.AspNet/Web.Debug.config new file mode 100644 index 0000000..2e302f9 --- /dev/null +++ b/servers/Techempower.AspNet/Web.Debug.config @@ -0,0 +1,30 @@ + + + + + + + + + + \ No newline at end of file diff --git a/servers/Techempower.AspNet/Web.Release.config b/servers/Techempower.AspNet/Web.Release.config new file mode 100644 index 0000000..c358444 --- /dev/null +++ b/servers/Techempower.AspNet/Web.Release.config @@ -0,0 +1,31 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/servers/Techempower.AspNet/Web.config b/servers/Techempower.AspNet/Web.config new file mode 100644 index 0000000..b47e38e --- /dev/null +++ b/servers/Techempower.AspNet/Web.config @@ -0,0 +1,60 @@ + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener.Pool/App.config b/servers/Techempower.HttpListener.Pool/App.config new file mode 100644 index 0000000..c4881cd --- /dev/null +++ b/servers/Techempower.HttpListener.Pool/App.config @@ -0,0 +1,27 @@ + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener.Pool/Program.cs b/servers/Techempower.HttpListener.Pool/Program.cs new file mode 100644 index 0000000..4ee8bc3 --- /dev/null +++ b/servers/Techempower.HttpListener.Pool/Program.cs @@ -0,0 +1,47 @@ +using System; +using Funq; +using ServiceStack; +using ServiceStack.Text; +using Techempower.ServiceInterface; + +namespace Techempower.HttpListener.Pool +{ + public class AppHost : AppHostHttpListenerPoolBase + { + private readonly DbProvider db; + + public AppHost(int poolSize, DbProvider db) + : base("Techempower Benchmarks", poolSize, typeof (TechmeServices).Assembly) + { + this.db = db; + } + + public override void Configure(Container container) + { + ConfigApp.AppHost(this, db); + } + } + + class Program + { + static void Main(string[] args) + { + int poolSize; + if (!(args.Length > 0 && int.TryParse(args[0], out poolSize))) + poolSize = AppHostHttpListenerBase.CalculatePoolSize(); + + DbProvider db; + if (!(args.Length > 1 && Enum.TryParse(args[1], true, out db))) + db = DbProvider.InMemory; + + new AppHost(poolSize, db) + .Init() + .Start("http://*:55002/"); + + "\nAppHost started with ThreadPool size of {0} using {1} listening on tcp port 55002" + .Print(poolSize, db); + "Press Enter to Quit".Print(); + Console.ReadLine(); + } + } +} diff --git a/servers/Techempower.HttpListener.Pool/Properties/AssemblyInfo.cs b/servers/Techempower.HttpListener.Pool/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..21ef3f8 --- /dev/null +++ b/servers/Techempower.HttpListener.Pool/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Perf.HttpListener.Pool")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Perf.HttpListener.Pool")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("e31b241a-543a-4e75-9e8a-9d6408f3492f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/servers/Techempower.HttpListener.Pool/Techempower.HttpListener.Pool.csproj b/servers/Techempower.HttpListener.Pool/Techempower.HttpListener.Pool.csproj new file mode 100644 index 0000000..b7b7522 --- /dev/null +++ b/servers/Techempower.HttpListener.Pool/Techempower.HttpListener.Pool.csproj @@ -0,0 +1,120 @@ + + + + + Debug + AnyCPU + {B971976A-3E05-4484-BB7F-09AC8A548D48} + Exe + Properties + Techempower.HttpListener.Pool + Techempower.HttpListener.Pool + v4.5 + 512 + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\lib\MySql.Data.dll + + + ..\..\lib\Npgsql.dll + + + ..\..\lib\ServiceStack.dll + + + ..\..\lib\ServiceStack.Api.Swagger.dll + + + ..\..\lib\ServiceStack.Client.dll + + + ..\..\lib\ServiceStack.Common.dll + + + ..\..\lib\ServiceStack.Interfaces.dll + + + ..\..\lib\ServiceStack.OrmLite.dll + + + ..\..\lib\ServiceStack.OrmLite.MySql.dll + + + ..\..\lib\ServiceStack.OrmLite.PostgreSQL.dll + + + ..\..\lib\ServiceStack.OrmLite.SqlServer.dll + + + ..\..\lib\ServiceStack.Razor.dll + + + ..\..\lib\ServiceStack.Server.dll + + + ..\..\lib\ServiceStack.Text.dll + + + + + False + ..\..\lib\System.Web.Razor.dll + + + + + + + + + + + + + + + PreserveNewest + + + + Web.config + + + Web.config + + + + + {F9340D2F-DA53-47CA-925C-B67992E4D667} + Techempower.ServiceInterface + + + + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener.Pool/Views/Fortunes.cshtml b/servers/Techempower.HttpListener.Pool/Views/Fortunes.cshtml new file mode 100644 index 0000000..71bb4d1 --- /dev/null +++ b/servers/Techempower.HttpListener.Pool/Views/Fortunes.cshtml @@ -0,0 +1,26 @@ +@inherits ViewPage> + + + + + + Fortunes + + + + + + + + +@foreach (var fortune in Model) +{ + + + + +} +
idmessage
@fortune.id@fortune.message
+ + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener.Pool/Web.Debug.config b/servers/Techempower.HttpListener.Pool/Web.Debug.config new file mode 100644 index 0000000..2e302f9 --- /dev/null +++ b/servers/Techempower.HttpListener.Pool/Web.Debug.config @@ -0,0 +1,30 @@ + + + + + + + + + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener.Pool/Web.Release.config b/servers/Techempower.HttpListener.Pool/Web.Release.config new file mode 100644 index 0000000..c358444 --- /dev/null +++ b/servers/Techempower.HttpListener.Pool/Web.Release.config @@ -0,0 +1,31 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener.Pool/Web.config b/servers/Techempower.HttpListener.Pool/Web.config new file mode 100644 index 0000000..eef271d --- /dev/null +++ b/servers/Techempower.HttpListener.Pool/Web.config @@ -0,0 +1,59 @@ + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener.SmartPool/App.config b/servers/Techempower.HttpListener.SmartPool/App.config new file mode 100644 index 0000000..c4881cd --- /dev/null +++ b/servers/Techempower.HttpListener.SmartPool/App.config @@ -0,0 +1,27 @@ + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener.SmartPool/Program.cs b/servers/Techempower.HttpListener.SmartPool/Program.cs new file mode 100644 index 0000000..21eaf8c --- /dev/null +++ b/servers/Techempower.HttpListener.SmartPool/Program.cs @@ -0,0 +1,47 @@ +using System; +using Funq; +using ServiceStack; +using ServiceStack.Text; +using Techempower.ServiceInterface; + +namespace Techempower.HttpListener.SmartPool +{ + public class AppHost : AppHostHttpListenerSmartPoolBase + { + private readonly DbProvider db; + + public AppHost(int poolSize, DbProvider db) + : base("Techempower Benchmarks", poolSize, typeof(TechmeServices).Assembly) + { + this.db = db; + } + + public override void Configure(Container container) + { + ConfigApp.AppHost(this, db); + } + } + + class Program + { + static void Main(string[] args) + { + int poolSize; + if (!(args.Length > 0 && int.TryParse(args[0], out poolSize))) + poolSize = AppHostHttpListenerBase.CalculatePoolSize(); + + DbProvider db; + if (!(args.Length > 1 && Enum.TryParse(args[1], true, out db))) + db = DbProvider.InMemory; + + new AppHost(poolSize, db) + .Init() + .Start("http://*:55003/"); + + "\nAppHost started with ThreadPool size of {0} using {1} listening on tcp port 55003" + .Print(poolSize, db); + "Press Enter to Quit".Print(); + Console.ReadLine(); + } + } +} diff --git a/servers/Techempower.HttpListener.SmartPool/Properties/AssemblyInfo.cs b/servers/Techempower.HttpListener.SmartPool/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9155e1f --- /dev/null +++ b/servers/Techempower.HttpListener.SmartPool/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Perf.HttpListener.SmartThreads")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Perf.HttpListener.SmartThreads")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("fafde1ef-709e-42fa-ad49-a703a33d4f8e")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/servers/Techempower.HttpListener.SmartPool/Techempower.HttpListener.SmartPool.csproj b/servers/Techempower.HttpListener.SmartPool/Techempower.HttpListener.SmartPool.csproj new file mode 100644 index 0000000..a3db370 --- /dev/null +++ b/servers/Techempower.HttpListener.SmartPool/Techempower.HttpListener.SmartPool.csproj @@ -0,0 +1,136 @@ + + + + + Debug + AnyCPU + {AB040F8D-2886-4513-8301-8FA78AECD358} + Exe + Properties + Techempower.HttpListener.SmartPool + Techempower.HttpListener.SmartPool + v4.5 + 512 + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\lib\Mono.Data.Sqlite.dll + + + False + ..\..\lib\Mono.Security.dll + + + ..\..\lib\MySql.Data.dll + + + ..\..\lib\Npgsql.dll + + + ..\..\lib\ServiceStack.dll + + + ..\..\lib\ServiceStack.Api.Swagger.dll + + + ..\..\lib\ServiceStack.Client.dll + + + ..\..\lib\ServiceStack.Common.dll + + + ..\..\lib\ServiceStack.Interfaces.dll + + + ..\..\lib\ServiceStack.OrmLite.dll + + + ..\..\lib\ServiceStack.OrmLite.MySql.dll + + + ..\..\lib\ServiceStack.OrmLite.PostgreSQL.dll + + + ..\..\lib\ServiceStack.OrmLite.Sqlite.dll + + + ..\..\lib\ServiceStack.OrmLite.SqlServer.dll + + + ..\..\lib\ServiceStack.Razor.dll + + + ..\..\lib\ServiceStack.Server.dll + + + ..\..\lib\ServiceStack.Text.dll + + + + + False + ..\..\lib\System.Web.Razor.dll + + + + + + + + + + + + + + + PreserveNewest + + + + Web.config + + + Web.config + + + + + {F9340D2F-DA53-47CA-925C-B67992E4D667} + Techempower.ServiceInterface + + + + + sqlite3.dll + PreserveNewest + + + + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener.SmartPool/Views/Fortunes.cshtml b/servers/Techempower.HttpListener.SmartPool/Views/Fortunes.cshtml new file mode 100644 index 0000000..71bb4d1 --- /dev/null +++ b/servers/Techempower.HttpListener.SmartPool/Views/Fortunes.cshtml @@ -0,0 +1,26 @@ +@inherits ViewPage> + + + + + + Fortunes + + + + + + + + +@foreach (var fortune in Model) +{ + + + + +} +
idmessage
@fortune.id@fortune.message
+ + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener.SmartPool/Web.Debug.config b/servers/Techempower.HttpListener.SmartPool/Web.Debug.config new file mode 100644 index 0000000..2e302f9 --- /dev/null +++ b/servers/Techempower.HttpListener.SmartPool/Web.Debug.config @@ -0,0 +1,30 @@ + + + + + + + + + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener.SmartPool/Web.Release.config b/servers/Techempower.HttpListener.SmartPool/Web.Release.config new file mode 100644 index 0000000..c358444 --- /dev/null +++ b/servers/Techempower.HttpListener.SmartPool/Web.Release.config @@ -0,0 +1,31 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener.SmartPool/Web.config b/servers/Techempower.HttpListener.SmartPool/Web.config new file mode 100644 index 0000000..c61dc7a --- /dev/null +++ b/servers/Techempower.HttpListener.SmartPool/Web.config @@ -0,0 +1,60 @@ + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener/App.config b/servers/Techempower.HttpListener/App.config new file mode 100644 index 0000000..c4881cd --- /dev/null +++ b/servers/Techempower.HttpListener/App.config @@ -0,0 +1,27 @@ + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener/Program.cs b/servers/Techempower.HttpListener/Program.cs new file mode 100644 index 0000000..ce43b56 --- /dev/null +++ b/servers/Techempower.HttpListener/Program.cs @@ -0,0 +1,31 @@ +using System; +using Funq; +using ServiceStack; +using ServiceStack.Text; +using Techempower.ServiceInterface; + +namespace Techempower.HttpListener +{ + public class AppHost : AppHostHttpListenerBase + { + public AppHost() : base("Techempower Benchmarks", typeof(TechmeServices).Assembly) { } + + public override void Configure(Container container) + { + ConfigApp.AppHost(this); + } + } + + class Program + { + static void Main(string[] args) + { + new AppHost() + .Init() + .Start("http://*:55001/"); + + "Press Enter to Quit".Print(); + Console.ReadLine(); + } + } +} diff --git a/servers/Techempower.HttpListener/Properties/AssemblyInfo.cs b/servers/Techempower.HttpListener/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..dcf93af --- /dev/null +++ b/servers/Techempower.HttpListener/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Perf.HttpListener")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Perf.HttpListener")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("d5e84e9c-f96e-4193-8edf-9ff27a7a85a8")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/servers/Techempower.HttpListener/Techempower.HttpListener.csproj b/servers/Techempower.HttpListener/Techempower.HttpListener.csproj new file mode 100644 index 0000000..126c2c4 --- /dev/null +++ b/servers/Techempower.HttpListener/Techempower.HttpListener.csproj @@ -0,0 +1,117 @@ + + + + + Debug + AnyCPU + {CE4A8244-A56E-4882-9671-4CA41926F6DA} + Exe + Properties + Techempower.HttpListener + Techempower.HttpListener + v4.5 + 512 + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\lib\MySql.Data.dll + + + ..\..\lib\Npgsql.dll + + + ..\..\lib\ServiceStack.dll + + + ..\..\lib\ServiceStack.Client.dll + + + ..\..\lib\ServiceStack.Common.dll + + + ..\..\lib\ServiceStack.Interfaces.dll + + + ..\..\lib\ServiceStack.OrmLite.dll + + + ..\..\lib\ServiceStack.OrmLite.MySql.dll + + + ..\..\lib\ServiceStack.OrmLite.PostgreSQL.dll + + + ..\..\lib\ServiceStack.OrmLite.SqlServer.dll + + + ..\..\lib\ServiceStack.Razor.dll + + + ..\..\lib\ServiceStack.Server.dll + + + ..\..\lib\ServiceStack.Text.dll + + + + + False + ..\..\lib\System.Web.Razor.dll + + + + + + + + + + + + + + + PreserveNewest + + + + Web.config + + + Web.config + + + + + {F9340D2F-DA53-47CA-925C-B67992E4D667} + Techempower.ServiceInterface + + + + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener/Views/Fortunes.cshtml b/servers/Techempower.HttpListener/Views/Fortunes.cshtml new file mode 100644 index 0000000..71bb4d1 --- /dev/null +++ b/servers/Techempower.HttpListener/Views/Fortunes.cshtml @@ -0,0 +1,26 @@ +@inherits ViewPage> + + + + + + Fortunes + + + + + + + + +@foreach (var fortune in Model) +{ + + + + +} +
idmessage
@fortune.id@fortune.message
+ + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener/Web.Debug.config b/servers/Techempower.HttpListener/Web.Debug.config new file mode 100644 index 0000000..2e302f9 --- /dev/null +++ b/servers/Techempower.HttpListener/Web.Debug.config @@ -0,0 +1,30 @@ + + + + + + + + + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener/Web.Release.config b/servers/Techempower.HttpListener/Web.Release.config new file mode 100644 index 0000000..c358444 --- /dev/null +++ b/servers/Techempower.HttpListener/Web.Release.config @@ -0,0 +1,31 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/servers/Techempower.HttpListener/Web.config b/servers/Techempower.HttpListener/Web.config new file mode 100644 index 0000000..eef271d --- /dev/null +++ b/servers/Techempower.HttpListener/Web.config @@ -0,0 +1,59 @@ + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/servers/Techempower.ServiceInterface/Properties/AssemblyInfo.cs b/servers/Techempower.ServiceInterface/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..ce3f721 --- /dev/null +++ b/servers/Techempower.ServiceInterface/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Techme.ServiceInterface")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Techme.ServiceInterface")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("8c3b7ff0-828d-4291-be1e-c5e78d4ce0e7")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/servers/Techempower.ServiceInterface/Techempower.ServiceInterface.csproj b/servers/Techempower.ServiceInterface/Techempower.ServiceInterface.csproj new file mode 100644 index 0000000..e63d525 --- /dev/null +++ b/servers/Techempower.ServiceInterface/Techempower.ServiceInterface.csproj @@ -0,0 +1,87 @@ + + + + + Debug + AnyCPU + {F9340D2F-DA53-47CA-925C-B67992E4D667} + Library + Properties + Techempower.ServiceInterface + Techempower.ServiceInterface + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\lib\ServiceStack.dll + + + ..\..\lib\ServiceStack.Common.dll + + + ..\..\lib\ServiceStack.Interfaces.dll + + + ..\..\lib\ServiceStack.OrmLite.dll + + + ..\..\lib\ServiceStack.OrmLite.MySql.dll + + + ..\..\lib\ServiceStack.OrmLite.PostgreSQL.dll + + + ..\..\lib\ServiceStack.OrmLite.Sqlite.dll + + + ..\..\lib\ServiceStack.OrmLite.SqlServer.dll + + + ..\..\lib\ServiceStack.Razor.dll + + + ..\..\lib\ServiceStack.Redis.dll + + + ..\..\lib\ServiceStack.Text.dll + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/servers/Techempower.ServiceInterface/TechmeServices.cs b/servers/Techempower.ServiceInterface/TechmeServices.cs new file mode 100644 index 0000000..96e5d8a --- /dev/null +++ b/servers/Techempower.ServiceInterface/TechmeServices.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections.Generic; +using ServiceStack; +using ServiceStack.DataAnnotations; +using ServiceStack.OrmLite; +using ServiceStack.Redis; + +namespace Techempower.ServiceInterface +{ + [Route("/json")] + public class Hello + { + public string name { get; set; } + } + + public class HelloResponse + { + public string message { get; set; } + } + + [Route("/db")] + public class Db { } + + [Route("/redis")] + public class Redis { } + + [Route("/queries")] + public class Queries + { + public int queries { get; set; } + } + + [Route("/fortunes")] + public class Fortunes { } + + [Route("/updates")] + public class Updates + { + public int queries { get; set; } + } + + [Route("/plaintext")] + public class PlainText { } + + public class World + { + public int id { get; set; } + public int randomNumber { get; set; } + } + + public class Fortune : IComparable + { + [AutoIncrement] + public int id { get; set; } + public string message { get; set; } + + public int CompareTo(Fortune other) + { + return message.CompareTo(other.message); + } + } + + public class TechmeServices : Service + { + readonly Random rand = new Random(); + + public object Any(Hello request) + { + return new HelloResponse { message = "Hello, " + (request.name ?? "World") + "!" }; + } + + public object Any(Db request) + { + return Db.SingleById(rand.Next(0, 10000) + 1); + } + + public object Any(Redis request) + { + return Redis.GetById(rand.Next(0, 10000) + 1); + } + + public object Any(Queries request) + { + var queries = Math.Max(1, Math.Min(500, request.queries)); + var worlds = new World[queries]; + + for (int i = 0; i < queries; i++) + { + worlds[i] = Db.SingleById(rand.Next(0, 10000) + 1); + } + return worlds; + } + + public List Any(Fortunes request) + { + var fortunes = new List(); + + fortunes.AddRange(Db.Select()); + fortunes.Add(new Fortune { id = 0, message = "Additional fortune added at request time." }); + fortunes.Sort(); + + return fortunes; + } + + public void Any(Updates request) + { + var queries = Math.Max(1, Math.Min(500, request.queries)); + var worlds = new World[queries]; + + for (int i = 0; i < queries; i++) + { + worlds[i] = Db.SingleById(rand.Next(0, 10000) + 1); + worlds[i].randomNumber = rand.Next(0, 10000) + 1; + } + + Db.UpdateAll(worlds); + } + + [AddHeader(ContentType = MimeTypes.PlainText)] + public string Any(PlainText request) + { + return "Hello, World"; + } + + public void Any(Reset request) + { + Db.DropAndCreateTable(); + Redis.FlushAll(); + + var worlds = 10000.Times(i => new World { id = i, randomNumber = rand.Next(0, 10000) + 1 }); + Db.InsertAll(worlds); + + if (TryResolve() != null) + { + Redis.StoreAll(worlds); + } + + Db.DropAndCreateTable(); + new[] { + "A budget is just a method of worrying before you spend money, as well as afterward.", + "A classic is something that everybody wants to have read and nobody wants to read.", + "A conclusion is simply the place where someone got tired of thinking.", + "A diplomat is someone who can tell you to go to hell in such a way that you will look forward to the trip.", + "A psychiatrist is a person who will give you expensive answers that your wife will give you for free.", + }.Each(x => Db.Insert(new Fortune { message = x })); + } + } + + [Route("/reset")] + public class Reset { } +} \ No newline at end of file diff --git a/src/HttpBenchmarks.sln b/src/HttpBenchmarks.sln new file mode 100644 index 0000000..98212d6 --- /dev/null +++ b/src/HttpBenchmarks.sln @@ -0,0 +1,87 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResultsView", "ResultsView\ResultsView.csproj", "{4FEEB081-E5E7-4B44-A348-D927081CBF59}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Servers", "Servers", "{7045D23B-72E4-4CA3-845F-5438D6DE8883}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{AAA99DE9-1FA7-4D06-AF0C-7285A6E37794}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Perf.Tests", "..\tests\Perf.Tests\Perf.Tests.csproj", "{141F69B6-7FE8-4989-8D23-7B04BD29D106}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResultsView.ServiceModel", "ResultsView.ServiceModel\ResultsView.ServiceModel.csproj", "{F2EBE29F-4050-46E1-86AA-8FCFA6CD3860}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Perf.ServiceInterface", "..\servers\Perf.ServiceInterface\Perf.ServiceInterface.csproj", "{E1EFD00E-8A97-41AF-BE99-78A5F3FE5932}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Techempower.AspNet", "..\servers\Techempower.AspNet\Techempower.AspNet.csproj", "{43CE22B9-37CB-48DB-89D1-F6A492249525}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Techempower.HttpListener", "..\servers\Techempower.HttpListener\Techempower.HttpListener.csproj", "{CE4A8244-A56E-4882-9671-4CA41926F6DA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Techempower.HttpListener.Pool", "..\servers\Techempower.HttpListener.Pool\Techempower.HttpListener.Pool.csproj", "{B971976A-3E05-4484-BB7F-09AC8A548D48}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Techempower.HttpListener.SmartPool", "..\servers\Techempower.HttpListener.SmartPool\Techempower.HttpListener.SmartPool.csproj", "{AB040F8D-2886-4513-8301-8FA78AECD358}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Techempower.ServiceInterface", "..\servers\Techempower.ServiceInterface\Techempower.ServiceInterface.csproj", "{F9340D2F-DA53-47CA-925C-B67992E4D667}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResultsView.ServiceInterface", "ResultsView.ServiceInterface\ResultsView.ServiceInterface.csproj", "{3849EE26-780B-450C-9183-0C6EFD2920D5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4FEEB081-E5E7-4B44-A348-D927081CBF59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4FEEB081-E5E7-4B44-A348-D927081CBF59}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4FEEB081-E5E7-4B44-A348-D927081CBF59}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4FEEB081-E5E7-4B44-A348-D927081CBF59}.Release|Any CPU.Build.0 = Release|Any CPU + {141F69B6-7FE8-4989-8D23-7B04BD29D106}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {141F69B6-7FE8-4989-8D23-7B04BD29D106}.Debug|Any CPU.Build.0 = Debug|Any CPU + {141F69B6-7FE8-4989-8D23-7B04BD29D106}.Release|Any CPU.ActiveCfg = Release|Any CPU + {141F69B6-7FE8-4989-8D23-7B04BD29D106}.Release|Any CPU.Build.0 = Release|Any CPU + {F2EBE29F-4050-46E1-86AA-8FCFA6CD3860}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F2EBE29F-4050-46E1-86AA-8FCFA6CD3860}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F2EBE29F-4050-46E1-86AA-8FCFA6CD3860}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F2EBE29F-4050-46E1-86AA-8FCFA6CD3860}.Release|Any CPU.Build.0 = Release|Any CPU + {E1EFD00E-8A97-41AF-BE99-78A5F3FE5932}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1EFD00E-8A97-41AF-BE99-78A5F3FE5932}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1EFD00E-8A97-41AF-BE99-78A5F3FE5932}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1EFD00E-8A97-41AF-BE99-78A5F3FE5932}.Release|Any CPU.Build.0 = Release|Any CPU + {43CE22B9-37CB-48DB-89D1-F6A492249525}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43CE22B9-37CB-48DB-89D1-F6A492249525}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43CE22B9-37CB-48DB-89D1-F6A492249525}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43CE22B9-37CB-48DB-89D1-F6A492249525}.Release|Any CPU.Build.0 = Release|Any CPU + {CE4A8244-A56E-4882-9671-4CA41926F6DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CE4A8244-A56E-4882-9671-4CA41926F6DA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CE4A8244-A56E-4882-9671-4CA41926F6DA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CE4A8244-A56E-4882-9671-4CA41926F6DA}.Release|Any CPU.Build.0 = Release|Any CPU + {B971976A-3E05-4484-BB7F-09AC8A548D48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B971976A-3E05-4484-BB7F-09AC8A548D48}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B971976A-3E05-4484-BB7F-09AC8A548D48}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B971976A-3E05-4484-BB7F-09AC8A548D48}.Release|Any CPU.Build.0 = Release|Any CPU + {AB040F8D-2886-4513-8301-8FA78AECD358}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AB040F8D-2886-4513-8301-8FA78AECD358}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AB040F8D-2886-4513-8301-8FA78AECD358}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AB040F8D-2886-4513-8301-8FA78AECD358}.Release|Any CPU.Build.0 = Release|Any CPU + {F9340D2F-DA53-47CA-925C-B67992E4D667}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F9340D2F-DA53-47CA-925C-B67992E4D667}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F9340D2F-DA53-47CA-925C-B67992E4D667}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F9340D2F-DA53-47CA-925C-B67992E4D667}.Release|Any CPU.Build.0 = Release|Any CPU + {3849EE26-780B-450C-9183-0C6EFD2920D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3849EE26-780B-450C-9183-0C6EFD2920D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3849EE26-780B-450C-9183-0C6EFD2920D5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3849EE26-780B-450C-9183-0C6EFD2920D5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {E1EFD00E-8A97-41AF-BE99-78A5F3FE5932} = {7045D23B-72E4-4CA3-845F-5438D6DE8883} + {43CE22B9-37CB-48DB-89D1-F6A492249525} = {7045D23B-72E4-4CA3-845F-5438D6DE8883} + {CE4A8244-A56E-4882-9671-4CA41926F6DA} = {7045D23B-72E4-4CA3-845F-5438D6DE8883} + {B971976A-3E05-4484-BB7F-09AC8A548D48} = {7045D23B-72E4-4CA3-845F-5438D6DE8883} + {AB040F8D-2886-4513-8301-8FA78AECD358} = {7045D23B-72E4-4CA3-845F-5438D6DE8883} + {F9340D2F-DA53-47CA-925C-B67992E4D667} = {7045D23B-72E4-4CA3-845F-5438D6DE8883} + {141F69B6-7FE8-4989-8D23-7B04BD29D106} = {AAA99DE9-1FA7-4D06-AF0C-7285A6E37794} + EndGlobalSection +EndGlobal diff --git a/src/ResultsView.ServiceInterface/AdminServices.cs b/src/ResultsView.ServiceInterface/AdminServices.cs new file mode 100644 index 0000000..b894733 --- /dev/null +++ b/src/ResultsView.ServiceInterface/AdminServices.cs @@ -0,0 +1,24 @@ +using ResultsView.ServiceModel; +using ResultsView.ServiceModel.Types; +using ServiceStack; +using ServiceStack.Auth; +using ServiceStack.Configuration; +using ServiceStack.OrmLite; + +namespace ResultsView.ServiceInterface +{ + [RequiredRole(RoleNames.Admin)] + public class AdminServices : Service + { + public object Any(Reset request) + { + Db.DropAndCreateTable(); + Db.DropAndCreateTable(); + Db.DropAndCreateTable(); + Db.DropAndCreateTable(); + Db.DropAndCreateTable(); + + return "OK"; + } + } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceInterface/ApacheBenchmarkUtils.cs b/src/ResultsView.ServiceInterface/ApacheBenchmarkUtils.cs new file mode 100644 index 0000000..0302e73 --- /dev/null +++ b/src/ResultsView.ServiceInterface/ApacheBenchmarkUtils.cs @@ -0,0 +1,124 @@ +using System.IO; +using System.Text; +using ResultsView.ServiceModel.Types; +using ServiceStack; + +namespace ResultsView.ServiceInterface +{ + public static class ApacheBenchmarkUtils + { + public static TestResult ToTestResult(this FileInfo file) + { + using (var stream = file.OpenRead()) + { + return ToTestResult(stream); + } + } + + public static TestResult ToTestResult(this string fileContents) + { + using (var stream = new MemoryStream(fileContents.ToUtf8Bytes())) + { + return ToTestResult(stream); + } + } + + public static TestResult ToTestResult(this Stream stream) + { + var to = new TestResult(); + bool reachedStats = false; + var sb = new StringBuilder(); + + foreach (var line in stream.ReadLines()) + { + sb.AppendLine(line); + + if (!ParseLine(line, to, ref reachedStats)) + break; + } + + to.RawData = sb.ToString(); + + return to; + } + + private static bool ParseLine(string line, TestResult to, ref bool reachedStats) + { + if (line.Trim().Length == 0) + return true; + + var startOfStats = line.StartsWith("Server Software:"); + if (!reachedStats && !startOfStats) + return true; + + if (startOfStats) + reachedStats = true; + + if (line.StartsWith("Connection Times (ms)")) + return true; + + var parts = line.SplitOnFirst(':'); + if (parts.Length == 2) + { + var key = parts[0].Trim(); + var value = parts[1].Trim(); + + switch (key) + { + case "Server Software": + to.Software = value; + break; + case "Server Hostname": + to.Hostname = value; + break; + case "Server Port": + to.Port = value.ToInt(); + break; + case "Document Path": + to.RequestPath = value; + break; + case "Document Length": + to.RequestLength = value.SplitOnFirst(' ')[0].ToInt(); + break; + case "Concurrency Level": + to.Concurrency = value.ToInt(); + break; + case "Time taken for tests": + to.TimeTaken = double.Parse(value.SplitOnFirst(' ')[0]); + break; + case "Complete requests": + to.TotalRequests = value.ToInt(); + break; + case "Failed requests": + to.FailedRequests = value.ToInt(); + break; + case "Total transferred": + to.TotalTransferred = value.SplitOnFirst(' ')[0].ToInt(); + break; + case "HTML transferred": + to.HtmlTransferred = value.SplitOnFirst(' ')[0].ToInt(); + break; + case "Requests per second": + to.RequestsPerSec = double.Parse(value.SplitOnFirst(' ')[0]); + break; + case "Time per request": + to.TimePerRequest = double.Parse(value.SplitOnFirst(' ')[0]); //gets overwritten with avg per concurrent request, i.e. what we want + break; + case "Transfer rate": + to.TransferRate = double.Parse(value.SplitOnFirst(' ')[0]); + break; + } + + return true; + } + + if (line.Trim().StartsWith("(Connect:")) + { + to.FailedReasons = line.Trim(); + return true; + } + + return false; + } + } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceInterface/AuthenticatedServices.cs b/src/ResultsView.ServiceInterface/AuthenticatedServices.cs new file mode 100644 index 0000000..c40afe1 --- /dev/null +++ b/src/ResultsView.ServiceInterface/AuthenticatedServices.cs @@ -0,0 +1,352 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Ionic.Zip; +using ResultsView.ServiceModel; +using ResultsView.ServiceModel.Types; +using ServiceStack; +using ServiceStack.Auth; +using ServiceStack.OrmLite; + +namespace ResultsView.ServiceInterface +{ + [Authenticate] + public class AuthenticatedServices : Service + { + public IUserAuthRepository UserAuthRepository { get; set; } + + private int GetSignedInUserId() + { + var authSession = base.GetSession(); + + if (authSession == null || authSession.UserAuthId == null) + throw new UnauthorizedAccessException("Must be signed in to use this service"); + + return int.Parse(authSession.UserAuthId); + } + + public UserInfo Get(MyInfo request) + { + var userId = GetSignedInUserId(); + var userAuth = UserAuthRepository.GetUserAuth(userId.ToString()); + var userInfo = userAuth.ConvertTo(); + + userInfo.UserAuthId = userId; + + if (userInfo.DisplayName == null) + userInfo.DisplayName = userAuth.UserName + ?? userAuth.FullName + ?? "{0} {1}".Fmt(userAuth.FirstName, userAuth.LastName); + + if (userInfo.ProfileUrl64 == null) + userInfo.ProfileUrl64 = this.SessionAs().ProfileUrl64 + ?? "/Content/img/no-profile-pic-64.png"; + + return userInfo; + } + + public object Get(FindTestPlans request) + { + var userId = GetSignedInUserId(); + return Db.Select(q => q.UserAuthId == userId) + .OrderByDescending(x => x.Id); + } + + public object Get(FindTestRuns request) + { + var userId = GetSignedInUserId(); + var planId = request.TestPlanId; + var testRuns = Db.Select(q => + q.UserAuthId == userId && q.TestPlanId == planId) + .OrderByDescending(x => x.Id); + + var testRunCounts = Db.Dictionary( + Db.From() + .Select(x => new { x.TestRunId, count = Sql.Count("*") }) + .Where(q => q.UserAuthId == userId && q.TestPlanId == planId) + .GroupBy(x => x.TestRunId)); + + testRuns + .Where(x => testRunCounts.ContainsKey(x.Id)) + .Each(x => x.TestResultsCount = testRunCounts[x.Id]); + + return testRuns; + } + + public object Post(CreateTestPlan request) + { + var plan = request.ConvertTo(); + plan.CreatedDate = DateTime.UtcNow; + + if (plan.Name.IsNullOrEmpty()) + throw new ArgumentNullException("Name"); + + if (plan.Slug.IsNullOrEmpty()) + plan.Slug = plan.Name.SafeVarName().ToLower(); + + if (Db.Count(q => q.Slug == plan.Slug) > 0) + throw new ArgumentException("Slug already exists", "Slug"); + + plan.UserAuthId = GetSignedInUserId(); + + Db.Save(plan); + + return HttpResult.SoftRedirect(new EditTestPlan { Id = plan.Id }.ToGetUrl(), plan); + } + + public object Any(UpdateTestPlanLabels request) + { + var testPlan = GetTestPlan(request.Id); + + testPlan.ServerLabels = request.ServerLabels.ParseKeyValueText(delimiter:" "); + testPlan.TestLabels = request.TestLabels.ParseKeyValueText(delimiter: " "); + + Db.Save(testPlan); + + return AddMissingLabels(testPlan); + } + + public object Any(DeleteTestPlan request) + { + var testPlan = GetTestPlan(request.Id); + + using (var trans = Db.OpenTransaction()) + { + var userId = GetSignedInUserId(); + Db.Delete(q => q.UserAuthId == userId && q.TestPlanId == testPlan.Id); + Db.Delete(q => q.UserAuthId == userId && q.TestPlanId == testPlan.Id); + Db.Delete(q => q.UserAuthId == userId && q.Id == testPlan.Id); + + trans.Commit(); + } + + return HttpResult.SoftRedirect("/"); + } + + private TestPlan GetTestPlan(int testPlanId) + { + var testPlan = Db.SingleById(testPlanId); + if (testPlan == null) + throw HttpError.NotFound("Test Plan {0} does not exist".Fmt(testPlanId)); + + return testPlan; + } + + //[AddHeader(ContentType = MimeTypes.Html)] + public object Any(EditTestPlan request) + { + //If no test run exists, create one then redirect to it + var testRun = (request.TestRunId != null + ? Db.SingleById(request.TestRunId.Value) + : null) + ?? GetLatestOrCreateTestRun(GetSignedInUserId(), request.Id); + + if (request.TestRunId == null) + { + request.TestRunId = testRun.Id; + return HttpResult.Redirect(request.ToGetUrl()); + } + + using (var service = ResolveService()) + { + var testPlan = service.Any(request.ConvertTo()); + var response = AddMissingLabels(testPlan).ConvertTo(); + response.TestRunId = request.TestRunId; + + return response; + } + } + + private TestPlan AddMissingLabels(TestPlan testPlan) + { + var distinctResults = Db.Select(Db.From() + .SelectDistinct(x => new { x.Hostname, x.Port, x.RequestPath }) + .Where(q => q.TestPlanId == testPlan.Id)) + .Where(x => x.Id > 0).ToList(); + + if (testPlan.ServerLabels == null) + testPlan.ServerLabels = new Dictionary(); + + if (testPlan.TestLabels == null) + testPlan.TestLabels = new Dictionary(); + + var serverLabels = distinctResults.ConvertAll(x => x.Hostname + ":" + x.Port).ToHashSet(); + serverLabels.Each(x => { + if (!testPlan.ServerLabels.ContainsKey(x)) + testPlan.ServerLabels[x] = ""; + }); + + var testLabels = distinctResults.ConvertAll(x => x.RequestPath).ToHashSet(); + testLabels.Each(x => + { + if (!testPlan.TestLabels.ContainsKey(x)) + testPlan.TestLabels[x] = ""; + }); + + return testPlan; + } + + public object Post(CreateTestRun request) + { + var testRun = CreateTestRun(request.TestPlanId, request.SeriesId); + + return HttpResult.SoftRedirect( + new EditTestPlan { Id = request.TestPlanId, TestRunId = testRun.Id }.ToGetUrl(), + testRun); + } + + public object Any(DeleteTestRun request) + { + var testRun = Db.SingleById(request.Id); + if (testRun == null) + throw HttpError.NotFound("Test Run {0} does not exist".Fmt(request.Id)); + + using (var trans = Db.OpenTransaction()) + { + var userId = GetSignedInUserId(); + Db.Delete(q => q.UserAuthId == userId && q.TestRunId == request.Id); + Db.Delete(q => q.UserAuthId == userId && q.Id == request.Id); + + trans.Commit(); + } + + return HttpResult.SoftRedirect(new EditTestPlan { Id = testRun.TestPlanId }.ToGetUrl()); + } + + public object Post(AddTestResults request) + { + var testPlanId = request.TestPlanId; + var testRunId = request.TestRunId.GetValueOrDefault(); + + if (request.Contents.IsNullOrEmpty()) + throw new ArgumentNullException("Contents"); + + var testResult = request.Contents.ToTestResult(); + + if (testResult.Software.IsNullOrEmpty()) + throw new ArgumentException("Invalid Apache Benchmark File", "Contents"); + + var results = new[] { testResult }.ToList(); + + var testRun = AddTestResults(GetSignedInUserId(), testPlanId, testRunId, results); + + return new AddTestResultsResponse + { + TestRun = testRun, + Results = results, + }; + } + + public object Post(UploadTestResults request) + { + var testPlanId = request.TestPlanId; + var testRunId = request.TestRunId.GetValueOrDefault(); + + if (base.Request.Files.Length == 0) + throw new ArgumentException("No Test Result supplied"); + + var results = new List(); + foreach (var httpFile in base.Request.Files) + { + if (httpFile.FileName.ToLower().EndsWith(".zip")) + { + using (var zip = ZipFile.Read(httpFile.InputStream)) + { + foreach (var zipEntry in zip) + { + using (var ms = new MemoryStream()) + { + zipEntry.Extract(ms); + var bytes = ms.ToArray(); + + var result = new MemoryStream(bytes).ToTestResult(); + results.Add(result); + } + } + } + } + else + { + var result = httpFile.InputStream.ToTestResult(); + results.Add(result); + } + } + + var testRun = AddTestResults(GetSignedInUserId(), testPlanId, testRunId, results); + + return new UploadTestResultsResponse + { + success = true, + TestRun = testRun, + Results = results, + }; + } + + private TestRun AddTestResults(int userId, int testPlanId, int testRunId, List testResults) + { + if (testPlanId == default(int)) + throw new ArgumentNullException("TestPlanId"); + + var testPlan = Db.SingleById(testPlanId); + if (testPlan == null) + throw HttpError.NotFound("Test Plan {0} does not exist".Fmt(testPlanId)); + + if (testPlan.UserAuthId != userId) + throw HttpError.Unauthorized("You do not have permission to write to this plan"); + + TestRun testRun = null; + if (testRunId > 0) + { + testRun = Db.Single(q => + q.Id == testRunId + && q.UserAuthId == userId); + + if (testRun == null) + throw HttpError.NotFound("Test Run {0} does not exist".Fmt(testRunId)); + } + else + { + testRun = GetLatestOrCreateTestRun(userId, testPlanId); + } + + testResults.Each(x => + { + x.UserAuthId = userId; + x.TestPlanId = testPlanId; + x.TestRunId = testRun.Id; + }); + + Db.SaveAll(testResults); + + return testRun; + } + + private TestRun GetLatestOrCreateTestRun(int userId, int testPlanId) + { + var testRun = Db.Select(q => + q.Where( + x => x.UserAuthId == userId + && x.TestPlanId == testPlanId) + .OrderByDescending(x => x.Id)) + .FirstOrDefault(); + + return testRun ?? CreateTestRun(testPlanId); + } + + private TestRun CreateTestRun(int planId, string seriesId = null) + { + var testRun = new TestRun + { + UserAuthId = GetSignedInUserId(), + TestPlanId = planId, + SeriesId = seriesId ?? "Created on {0}".Fmt(DateTime.UtcNow.ToString("yyyy-MM-dd")), + CreatedDate = DateTime.UtcNow, + }; + + Db.Save(testRun); + + return testRun; + } + } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceInterface/ModelExtensions.cs b/src/ResultsView.ServiceInterface/ModelExtensions.cs new file mode 100644 index 0000000..b7e52ff --- /dev/null +++ b/src/ResultsView.ServiceInterface/ModelExtensions.cs @@ -0,0 +1,15 @@ +using ResultsView.ServiceModel.Types; +using ServiceStack; + +namespace ResultsView.ServiceInterface +{ + public static class ModelExtensions + { + public static DisplayResult ToDisplayResult(this TestResult from) + { + var to = from.ConvertTo(); + to.Host = from.Hostname; + return to; + } + } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceInterface/Properties/AssemblyInfo.cs b/src/ResultsView.ServiceInterface/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9b6f563 --- /dev/null +++ b/src/ResultsView.ServiceInterface/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ResultsView.Logic")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ResultsView.Logic")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("da5f9c0d-d574-496e-839f-4437a0a9c19b")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/ResultsView.ServiceInterface/ResultsView.ServiceInterface.csproj b/src/ResultsView.ServiceInterface/ResultsView.ServiceInterface.csproj new file mode 100644 index 0000000..cd0d78b --- /dev/null +++ b/src/ResultsView.ServiceInterface/ResultsView.ServiceInterface.csproj @@ -0,0 +1,88 @@ + + + + + Debug + AnyCPU + {3849EE26-780B-450C-9183-0C6EFD2920D5} + Library + Properties + ResultsView.ServiceInterface + ResultsView.ServiceInterface + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\DotNetZip.1.9.2\lib\net20\Ionic.Zip.dll + + + ..\..\lib\ServiceStack.dll + + + ..\..\lib\ServiceStack.Client.dll + + + ..\..\lib\ServiceStack.Common.dll + + + ..\..\lib\ServiceStack.Interfaces.dll + + + ..\..\lib\ServiceStack.OrmLite.dll + + + ..\..\lib\ServiceStack.Text.dll + + + + + + + + + + + + + + + + + + + + + + + + {F2EBE29F-4050-46E1-86AA-8FCFA6CD3860} + ResultsView.ServiceModel + + + + + \ No newline at end of file diff --git a/src/ResultsView.ServiceInterface/UserSession.cs b/src/ResultsView.ServiceInterface/UserSession.cs new file mode 100644 index 0000000..c874868 --- /dev/null +++ b/src/ResultsView.ServiceInterface/UserSession.cs @@ -0,0 +1,71 @@ +using ServiceStack; +using ServiceStack.Auth; + +namespace ResultsView.ServiceInterface +{ + public class UserSession : AuthUserSession + { + public string ProfileUrl64 { get; set; } + + public override void OnRegistered(IServiceBase registerService) + { + base.OnRegistered(registerService); + } + + public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IAuthTokens tokens, System.Collections.Generic.Dictionary authInfo) + { + base.OnAuthenticated(authService, session, tokens, authInfo); + + try + { + if (!this.Email.IsNullOrEmpty()) + this.ProfileUrl64 = this.Email.ToGravatarUrl(size: 64); + + if (tokens.Provider == FacebookAuthProvider.Name) + { + this.DisplayName = tokens.DisplayName ?? this.DisplayName; + this.ProfileUrl64 = "http://avatars.io/facebook/{0}?size=medium".Fmt(this.UserName) + .GetRedirectUrlIfAny() ?? this.ProfileUrl64; + } + else if (tokens.Provider == TwitterAuthProvider.Name) + { + this.DisplayName = tokens.UserName ?? this.DisplayName; + this.ProfileUrl64 = "http://avatars.io/twitter/{0}?size=medium".Fmt(this.UserName) + .GetRedirectUrlIfAny() ?? this.ProfileUrl64; + } + else if (tokens.Provider == "GoogleOAuth") + { + if (authInfo.ContainsKey("picture")) + this.ProfileUrl64 = authInfo["picture"]; + } + else if (tokens.Provider == "LinkedIn") + { + if (authInfo.ContainsKey("picture")) + this.ProfileUrl64 = authInfo["picture"]; + } + } + catch { } + } + } + + public static class SessionExtensions + { + /// + /// Remove the userId from the url by using the anon CDN url + /// + public static string GetRedirectUrlIfAny(this string url) + { + var finalUrl = url; + try + { + var ignore = url.GetBytesFromUrl( + requestFilter: req => req.AllowAutoRedirect = false, + responseFilter: res => finalUrl = res.Headers[HttpHeaders.Location] ?? finalUrl); + } + catch { } + + return finalUrl.EndsWith("avatar-64.png") ? null : finalUrl; + } + } + +} \ No newline at end of file diff --git a/src/ResultsView.ServiceInterface/WebServices.cs b/src/ResultsView.ServiceInterface/WebServices.cs new file mode 100644 index 0000000..9af1ece --- /dev/null +++ b/src/ResultsView.ServiceInterface/WebServices.cs @@ -0,0 +1,90 @@ +using System.Collections.Generic; +using System.Linq; +using ResultsView.ServiceModel; +using ResultsView.ServiceModel.Types; +using ServiceStack; +using ServiceStack.OrmLite; + +namespace ResultsView.ServiceInterface +{ + public class WebServices : Service + { + public object Any(Ping request) + { + var status = ""; + status += Db.Count() > 0 ? "DB OK" : "DB FAIL"; + return new PingResponse { + Result = status, + }; + } + + public TestPlan Any(GetTestPlan request) + { + var plan = Db.SingleById(request.Id); + + if (plan == null) + throw HttpError.NotFound("Plan {0} does not exist".Fmt(request.Id)); + + return plan; + } + + public object Any(SearchTestResults request) + { + var testRun = request.TestRunId != null + ? Db.SingleById(request.TestRunId.Value) + : Db.Select(q => q + .Where(x => x.TestPlanId == request.TestPlanId) + .OrderByDescending(x => x.Id)) + .FirstOrDefault(); + + if (testRun == null) + return new List(); + + var query = Db.From() + .Where(q => q.TestPlanId == request.TestPlanId + && q.TestRunId == testRun.Id); + + if (request.Host != null) + query.Where(q => q.Hostname.Contains(request.Host)); + if (request.Port != null) + query.Where(q => q.Port == request.Port); + if (request.RequestPath != null) + query.Where(q => q.RequestPath.Contains(request.RequestPath)); + + var results = Db.Select(query.Limit(request.Skip, request.Take)); + var total = Db.Count(query); + + var response = request.ConvertTo(); + response.Total = (int)total; + response.Results = results.ConvertAll(x => x.ToDisplayResult()); + + return response; + } + + //[AddHeader(ContentType = MimeTypes.Html)] + public object Any(ViewTestPlan request) + { + var testPlan = Db.Single(q => q.Slug == request.Slug); + + if (testPlan == null) + throw HttpError.NotFound(request.Slug); + + var testRun = request.Id != null + ? Db.Single(x => + x.TestPlanId == testPlan.Id && x.Id == request.Id) + : Db.Select(q => + q.Where(x => x.TestPlanId == testPlan.Id) + .OrderByDescending(x => x.Id)) + .FirstOrDefault(); + + var testResults = Db.Select(q => q.TestRunId == testRun.Id); + + return new ViewTestPlanResponse + { + TestPlan = testPlan, + TestRun = testRun, + Results = testResults.ConvertAll(x => x.ToDisplayResult()) + }; + } + } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceInterface/packages.config b/src/ResultsView.ServiceInterface/packages.config new file mode 100644 index 0000000..55e6219 --- /dev/null +++ b/src/ResultsView.ServiceInterface/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/ResultsView.ServiceModel/EditTestPlan.cs b/src/ResultsView.ServiceModel/EditTestPlan.cs new file mode 100644 index 0000000..aaa71ed --- /dev/null +++ b/src/ResultsView.ServiceModel/EditTestPlan.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using ResultsView.ServiceModel.Types; +using ServiceStack; + +namespace ResultsView.ServiceModel +{ + [Route("/testplans/{Id}/edit")] + [Route("/testplans/{Id}/testruns/{TestRunId}/edit")] + public class EditTestPlan : IReturn + { + public int Id { get; set; } + public int? TestRunId { get; set; } + } + + public class EditTestPlanResponse + { + public int Id { get; set; } + public int? TestRunId { get; set; } + public string Name { get; set; } + public string Slug { get; set; } + public Dictionary ServerLabels { get; set; } + public Dictionary TestLabels { get; set; } + public DateTime CreatedDate { get; set; } + + public ResponseStatus ResponseStatus { get; set; } + } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceModel/MyInfo.cs b/src/ResultsView.ServiceModel/MyInfo.cs new file mode 100644 index 0000000..afd86f5 --- /dev/null +++ b/src/ResultsView.ServiceModel/MyInfo.cs @@ -0,0 +1,10 @@ +using ServiceStack; + +namespace ResultsView.ServiceModel +{ + [Route("/myinfo")] + public class MyInfo { } + + [Route("/reset")] + public class Reset { } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceModel/Ping.cs b/src/ResultsView.ServiceModel/Ping.cs new file mode 100644 index 0000000..10cf8eb --- /dev/null +++ b/src/ResultsView.ServiceModel/Ping.cs @@ -0,0 +1,13 @@ +using ServiceStack; + +namespace ResultsView.ServiceModel +{ + [Route("/ping")] + public class Ping {} //healthcheck by AWS + + public class PingResponse + { + public string Result { get; set; } + public ResponseStatus ResponseStatus { get; set; } + } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceModel/Properties/AssemblyInfo.cs b/src/ResultsView.ServiceModel/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e17a55a --- /dev/null +++ b/src/ResultsView.ServiceModel/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ResultsView.ServiceModel")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ResultsView.ServiceModel")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b431302b-83a4-408c-b9f0-9459820d1fc9")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/ResultsView.ServiceModel/ResultsView.ServiceModel.csproj b/src/ResultsView.ServiceModel/ResultsView.ServiceModel.csproj new file mode 100644 index 0000000..5c9d33f --- /dev/null +++ b/src/ResultsView.ServiceModel/ResultsView.ServiceModel.csproj @@ -0,0 +1,71 @@ + + + + + Debug + AnyCPU + {F2EBE29F-4050-46E1-86AA-8FCFA6CD3860} + Library + Properties + ResultsView.ServiceModel + ResultsView.ServiceModel + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\lib\ServiceStack.Interfaces.dll + + + ..\..\lib\ServiceStack.Text.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/ResultsView.ServiceModel/SearchTestResults.cs b/src/ResultsView.ServiceModel/SearchTestResults.cs new file mode 100644 index 0000000..af03fb9 --- /dev/null +++ b/src/ResultsView.ServiceModel/SearchTestResults.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using ResultsView.ServiceModel.Types; +using ServiceStack; +using ServiceStack.Text; + +namespace ResultsView.ServiceModel +{ + [Route("/testplans/{TestPlanId}/results", "GET")] + [Route("/testplans/{TestPlanId}/testruns/{TestRunId}/results", "GET")] + public class SearchTestResults : IReturn + { + public int TestPlanId { get; set; } + public int? TestRunId { get; set; } + + public int? Skip { get; set; } + public int? Take { get; set; } + public string Host { get; set; } + public int? Port { get; set; } + public string RequestPath { get; set; } + } + + [Csv(CsvBehavior.FirstEnumerable)] + public class SearchTestResultsResponse + { + public int TestPlanId { get; set; } + public int? TestRunId { get; set; } + + public int? Skip { get; set; } + public int? Take { get; set; } + public string Host { get; set; } + public int? Port { get; set; } + public string RequestPath { get; set; } + + public int Total { get; set; } + + public List Results { get; set; } + + public ResponseStatus ResponseStatus { get; set; } + } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceModel/TestPlans.cs b/src/ResultsView.ServiceModel/TestPlans.cs new file mode 100644 index 0000000..93a304d --- /dev/null +++ b/src/ResultsView.ServiceModel/TestPlans.cs @@ -0,0 +1,38 @@ +using System.Collections.Generic; +using ResultsView.ServiceModel.Types; +using ServiceStack; + +namespace ResultsView.ServiceModel +{ + [Route("/testplans", "POST")] + public class CreateTestPlan : IReturn + { + public string Name { get; set; } + public string Slug { get; set; } + } + + [Route("/testplans/{Id}/delete", "POST DELETE")] + public class DeleteTestPlan + { + public int Id { get; set; } + } + + [Route("/testplans/{Id}/labels", "POST")] + public class UpdateTestPlanLabels : IReturn + { + public int Id { get; set; } + public string ServerLabels { get; set; } + public string TestLabels { get; set; } + + public ResponseStatus ResponseStatus { get; set; } + } + + [Route("/testplans", "GET")] + public class FindTestPlans : IReturn> { } + + [Route("/testplans/{Id}")] + public class GetTestPlan : IReturn + { + public int Id { get; set; } + } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceModel/TestRuns.cs b/src/ResultsView.ServiceModel/TestRuns.cs new file mode 100644 index 0000000..99950cc --- /dev/null +++ b/src/ResultsView.ServiceModel/TestRuns.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; +using ResultsView.ServiceModel.Types; +using ServiceStack; + +namespace ResultsView.ServiceModel +{ + [Route("/testplans/{TestPlanId}/testruns", "POST")] + public class CreateTestRun : IReturn + { + public int TestPlanId { get; set; } + public string SeriesId { get; set; } + } + + [Route("/testruns/{Id}/delete", "POST DELETE")] + public class DeleteTestRun + { + public int Id { get; set; } + } + + [Route("/testplans/{TestPlanId}/testruns", "GET")] + public class FindTestRuns : IReturn> + { + public int TestPlanId { get; set; } + } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceModel/Types/DisplayResult.cs b/src/ResultsView.ServiceModel/Types/DisplayResult.cs new file mode 100644 index 0000000..2702e2f --- /dev/null +++ b/src/ResultsView.ServiceModel/Types/DisplayResult.cs @@ -0,0 +1,21 @@ +namespace ResultsView.ServiceModel.Types +{ + public class DisplayResult + { + public int Id { get; set; } + public string Software { get; set; } + public string Host { get; set; } + public int Port { get; set; } + public string RequestPath { get; set; } + public int RequestLength { get; set; } + public int Concurrency { get; set; } + public double TimeTaken { get; set; } + public int TotalRequests { get; set; } + public int FailedRequests { get; set; } + public int TotalTransferred { get; set; } + public int HtmlTransferred { get; set; } + public double RequestsPerSec { get; set; } + public double TimePerRequest { get; set; } + public double TransferRate { get; set; } + } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceModel/Types/TestPlan.cs b/src/ResultsView.ServiceModel/Types/TestPlan.cs new file mode 100644 index 0000000..2adef0b --- /dev/null +++ b/src/ResultsView.ServiceModel/Types/TestPlan.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using ServiceStack.DataAnnotations; + +namespace ResultsView.ServiceModel.Types +{ + public class TestPlan + { + [AutoIncrement] + public int Id { get; set; } + public int UserAuthId { get; set; } + public string Name { get; set; } + public string Slug { get; set; } + public Dictionary ServerLabels { get; set; } + public Dictionary TestLabels { get; set; } + public DateTime CreatedDate { get; set; } + } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceModel/Types/TestResult.cs b/src/ResultsView.ServiceModel/Types/TestResult.cs new file mode 100644 index 0000000..c2c03ee --- /dev/null +++ b/src/ResultsView.ServiceModel/Types/TestResult.cs @@ -0,0 +1,31 @@ +using ServiceStack.DataAnnotations; + +namespace ResultsView.ServiceModel.Types +{ + public class TestResult + { + [AutoIncrement] + public int Id { get; set; } + public int UserAuthId { get; set; } + public int TestPlanId { get; set; } + public int TestRunId { get; set; } + + public string Software { get; set; } + public string Hostname { get; set; } + public int Port { get; set; } + public string RequestPath { get; set; } + public int RequestLength { get; set; } + public int Concurrency { get; set; } + public double TimeTaken { get; set; } + public int TotalRequests { get; set; } + public int FailedRequests { get; set; } + public string FailedReasons { get; set; } + public int TotalTransferred { get; set; } + public int HtmlTransferred { get; set; } + public double RequestsPerSec { get; set; } + public double TimePerRequest { get; set; } + public double TransferRate { get; set; } + + public string RawData { get; set; } + } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceModel/Types/TestRun.cs b/src/ResultsView.ServiceModel/Types/TestRun.cs new file mode 100644 index 0000000..5e966bb --- /dev/null +++ b/src/ResultsView.ServiceModel/Types/TestRun.cs @@ -0,0 +1,18 @@ +using System; +using ServiceStack.DataAnnotations; + +namespace ResultsView.ServiceModel.Types +{ + public class TestRun + { + [AutoIncrement] + public int Id { get; set; } + public int UserAuthId { get; set; } + public int TestPlanId { get; set; } + public string SeriesId { get; set; } + public DateTime CreatedDate { get; set; } + + [Ignore] + public int TestResultsCount { get; set; } + } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceModel/Types/UserInfo.cs b/src/ResultsView.ServiceModel/Types/UserInfo.cs new file mode 100644 index 0000000..37517e2 --- /dev/null +++ b/src/ResultsView.ServiceModel/Types/UserInfo.cs @@ -0,0 +1,12 @@ +namespace ResultsView.ServiceModel.Types +{ + public class UserInfo + { + public int Id { get; set; } + public int UserAuthId { get; set; } + public string DisplayName { get; set; } + public string FirstName { get; set; } + public string LastName { get; set; } + public string ProfileUrl64 { get; set; } + } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceModel/UploadTestResults.cs b/src/ResultsView.ServiceModel/UploadTestResults.cs new file mode 100644 index 0000000..edf2b77 --- /dev/null +++ b/src/ResultsView.ServiceModel/UploadTestResults.cs @@ -0,0 +1,38 @@ +using System.Collections.Generic; +using ResultsView.ServiceModel.Types; +using ServiceStack; + +namespace ResultsView.ServiceModel +{ + [Route("/testplans/{TestPlanId}/upload", "POST")] + [Route("/testplans/{TestPlanId}/testruns/{TestRunId}/upload", "POST")] + public class UploadTestResults : IReturn> + { + public int TestPlanId { get; set; } + public int? TestRunId { get; set; } + } + + public class UploadTestResultsResponse + { + public bool success { get; set; } + public TestRun TestRun { get; set; } + public List Results { get; set; } + public ResponseStatus ResponseStatus { get; set; } + } + + [Route("/testplans/{TestPlanId}/testresults", "POST")] + [Route("/testplans/{TestPlanId}/testruns/{TestRunId}/testresults", "POST")] + public class AddTestResults : IReturn> + { + public int TestPlanId { get; set; } + public int? TestRunId { get; set; } + public string Contents { get; set; } + } + + public class AddTestResultsResponse + { + public TestRun TestRun { get; set; } + public List Results { get; set; } + public ResponseStatus ResponseStatus { get; set; } + } +} \ No newline at end of file diff --git a/src/ResultsView.ServiceModel/ViewTestPlan.cs b/src/ResultsView.ServiceModel/ViewTestPlan.cs new file mode 100644 index 0000000..17324c7 --- /dev/null +++ b/src/ResultsView.ServiceModel/ViewTestPlan.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using ResultsView.ServiceModel.Types; +using ServiceStack; +using ServiceStack.Text; + +namespace ResultsView.ServiceModel +{ + [FallbackRoute("/{Slug}")] + public class ViewTestPlan : IReturn + { + public string Slug { get; set; } + public int? Id { get; set; } + } + + [Csv(CsvBehavior.FirstEnumerable)] + public class ViewTestPlanResponse + { + public TestPlan TestPlan { get; set; } + + public TestRun TestRun { get; set; } + + public List Results { get; set; } + + public ResponseStatus ResponseStatus { get; set; } + } +} \ No newline at end of file diff --git a/src/ResultsView/Content/bootstrap-social.css b/src/ResultsView/Content/bootstrap-social.css new file mode 100644 index 0000000..e824532 --- /dev/null +++ b/src/ResultsView/Content/bootstrap-social.css @@ -0,0 +1,69 @@ +/* + * Social Buttons for Bootstrap + * + * Copyright 2013-2014 Panayiotis Lipiridis + * Licensed under the MIT License + * + * https://github.com/lipis/bootstrap-social + */ + +.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social :first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)} +.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg :first-child{line-height:45px;width:45px;font-size:1.8em} +.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm :first-child{line-height:28px;width:28px;font-size:1.4em} +.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs :first-child{line-height:20px;width:20px;font-size:1.2em} +.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon :first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)} +.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg :first-child{line-height:45px;width:45px;font-size:1.8em} +.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm :first-child{line-height:28px;width:28px;font-size:1.4em} +.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs :first-child{line-height:20px;width:20px;font-size:1.2em} +.btn-social-icon :first-child{border:none;text-align:center;width:100% !important} +.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0} +.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0} +.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0} +.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover,.btn-bitbucket:focus,.btn-bitbucket:active,.btn-bitbucket.active,.open .dropdown-toggle.btn-bitbucket{color:#fff;background-color:#183c60;border-color:rgba(0,0,0,0.2)} +.btn-bitbucket:active,.btn-bitbucket.active,.open .dropdown-toggle.btn-bitbucket{background-image:none} +.btn-bitbucket.disabled,.btn-bitbucket[disabled],fieldset[disabled] .btn-bitbucket,.btn-bitbucket.disabled:hover,.btn-bitbucket[disabled]:hover,fieldset[disabled] .btn-bitbucket:hover,.btn-bitbucket.disabled:focus,.btn-bitbucket[disabled]:focus,fieldset[disabled] .btn-bitbucket:focus,.btn-bitbucket.disabled:active,.btn-bitbucket[disabled]:active,fieldset[disabled] .btn-bitbucket:active,.btn-bitbucket.disabled.active,.btn-bitbucket[disabled].active,fieldset[disabled] .btn-bitbucket.active{background-color:#205081;border-color:rgba(0,0,0,0.2)} +.btn-bitbucket .badge{color:#205081;background-color:#fff} +.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover,.btn-dropbox:focus,.btn-dropbox:active,.btn-dropbox.active,.open .dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d70b7;border-color:rgba(0,0,0,0.2)} +.btn-dropbox:active,.btn-dropbox.active,.open .dropdown-toggle.btn-dropbox{background-image:none} +.btn-dropbox.disabled,.btn-dropbox[disabled],fieldset[disabled] .btn-dropbox,.btn-dropbox.disabled:hover,.btn-dropbox[disabled]:hover,fieldset[disabled] .btn-dropbox:hover,.btn-dropbox.disabled:focus,.btn-dropbox[disabled]:focus,fieldset[disabled] .btn-dropbox:focus,.btn-dropbox.disabled:active,.btn-dropbox[disabled]:active,fieldset[disabled] .btn-dropbox:active,.btn-dropbox.disabled.active,.btn-dropbox[disabled].active,fieldset[disabled] .btn-dropbox.active{background-color:#1087dd;border-color:rgba(0,0,0,0.2)} +.btn-dropbox .badge{color:#1087dd;background-color:#fff} +.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover,.btn-facebook:focus,.btn-facebook:active,.btn-facebook.active,.open .dropdown-toggle.btn-facebook{color:#fff;background-color:#30487b;border-color:rgba(0,0,0,0.2)} +.btn-facebook:active,.btn-facebook.active,.open .dropdown-toggle.btn-facebook{background-image:none} +.btn-facebook.disabled,.btn-facebook[disabled],fieldset[disabled] .btn-facebook,.btn-facebook.disabled:hover,.btn-facebook[disabled]:hover,fieldset[disabled] .btn-facebook:hover,.btn-facebook.disabled:focus,.btn-facebook[disabled]:focus,fieldset[disabled] .btn-facebook:focus,.btn-facebook.disabled:active,.btn-facebook[disabled]:active,fieldset[disabled] .btn-facebook:active,.btn-facebook.disabled.active,.btn-facebook[disabled].active,fieldset[disabled] .btn-facebook.active{background-color:#3b5998;border-color:rgba(0,0,0,0.2)} +.btn-facebook .badge{color:#3b5998;background-color:#fff} +.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover,.btn-flickr:focus,.btn-flickr:active,.btn-flickr.active,.open .dropdown-toggle.btn-flickr{color:#fff;background-color:#d6006f;border-color:rgba(0,0,0,0.2)} +.btn-flickr:active,.btn-flickr.active,.open .dropdown-toggle.btn-flickr{background-image:none} +.btn-flickr.disabled,.btn-flickr[disabled],fieldset[disabled] .btn-flickr,.btn-flickr.disabled:hover,.btn-flickr[disabled]:hover,fieldset[disabled] .btn-flickr:hover,.btn-flickr.disabled:focus,.btn-flickr[disabled]:focus,fieldset[disabled] .btn-flickr:focus,.btn-flickr.disabled:active,.btn-flickr[disabled]:active,fieldset[disabled] .btn-flickr:active,.btn-flickr.disabled.active,.btn-flickr[disabled].active,fieldset[disabled] .btn-flickr.active{background-color:#ff0084;border-color:rgba(0,0,0,0.2)} +.btn-flickr .badge{color:#ff0084;background-color:#fff} +.btn-foursquare{color:#fff;background-color:#0072b1;border-color:rgba(0,0,0,0.2)}.btn-foursquare:hover,.btn-foursquare:focus,.btn-foursquare:active,.btn-foursquare.active,.open .dropdown-toggle.btn-foursquare{color:#fff;background-color:#005888;border-color:rgba(0,0,0,0.2)} +.btn-foursquare:active,.btn-foursquare.active,.open .dropdown-toggle.btn-foursquare{background-image:none} +.btn-foursquare.disabled,.btn-foursquare[disabled],fieldset[disabled] .btn-foursquare,.btn-foursquare.disabled:hover,.btn-foursquare[disabled]:hover,fieldset[disabled] .btn-foursquare:hover,.btn-foursquare.disabled:focus,.btn-foursquare[disabled]:focus,fieldset[disabled] .btn-foursquare:focus,.btn-foursquare.disabled:active,.btn-foursquare[disabled]:active,fieldset[disabled] .btn-foursquare:active,.btn-foursquare.disabled.active,.btn-foursquare[disabled].active,fieldset[disabled] .btn-foursquare.active{background-color:#0072b1;border-color:rgba(0,0,0,0.2)} +.btn-foursquare .badge{color:#0072b1;background-color:#fff} +.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:hover,.btn-github:focus,.btn-github:active,.btn-github.active,.open .dropdown-toggle.btn-github{color:#fff;background-color:#303030;border-color:rgba(0,0,0,0.2)} +.btn-github:active,.btn-github.active,.open .dropdown-toggle.btn-github{background-image:none} +.btn-github.disabled,.btn-github[disabled],fieldset[disabled] .btn-github,.btn-github.disabled:hover,.btn-github[disabled]:hover,fieldset[disabled] .btn-github:hover,.btn-github.disabled:focus,.btn-github[disabled]:focus,fieldset[disabled] .btn-github:focus,.btn-github.disabled:active,.btn-github[disabled]:active,fieldset[disabled] .btn-github:active,.btn-github.disabled.active,.btn-github[disabled].active,fieldset[disabled] .btn-github.active{background-color:#444;border-color:rgba(0,0,0,0.2)} +.btn-github .badge{color:#444;background-color:#fff} +.btn-google-plus{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google-plus:hover,.btn-google-plus:focus,.btn-google-plus:active,.btn-google-plus.active,.open .dropdown-toggle.btn-google-plus{color:#fff;background-color:#ca3523;border-color:rgba(0,0,0,0.2)} +.btn-google-plus:active,.btn-google-plus.active,.open .dropdown-toggle.btn-google-plus{background-image:none} +.btn-google-plus.disabled,.btn-google-plus[disabled],fieldset[disabled] .btn-google-plus,.btn-google-plus.disabled:hover,.btn-google-plus[disabled]:hover,fieldset[disabled] .btn-google-plus:hover,.btn-google-plus.disabled:focus,.btn-google-plus[disabled]:focus,fieldset[disabled] .btn-google-plus:focus,.btn-google-plus.disabled:active,.btn-google-plus[disabled]:active,fieldset[disabled] .btn-google-plus:active,.btn-google-plus.disabled.active,.btn-google-plus[disabled].active,fieldset[disabled] .btn-google-plus.active{background-color:#dd4b39;border-color:rgba(0,0,0,0.2)} +.btn-google-plus .badge{color:#dd4b39;background-color:#fff} +.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover,.btn-instagram:focus,.btn-instagram:active,.btn-instagram.active,.open .dropdown-toggle.btn-instagram{color:#fff;background-color:#335d7e;border-color:rgba(0,0,0,0.2)} +.btn-instagram:active,.btn-instagram.active,.open .dropdown-toggle.btn-instagram{background-image:none} +.btn-instagram.disabled,.btn-instagram[disabled],fieldset[disabled] .btn-instagram,.btn-instagram.disabled:hover,.btn-instagram[disabled]:hover,fieldset[disabled] .btn-instagram:hover,.btn-instagram.disabled:focus,.btn-instagram[disabled]:focus,fieldset[disabled] .btn-instagram:focus,.btn-instagram.disabled:active,.btn-instagram[disabled]:active,fieldset[disabled] .btn-instagram:active,.btn-instagram.disabled.active,.btn-instagram[disabled].active,fieldset[disabled] .btn-instagram.active{background-color:#3f729b;border-color:rgba(0,0,0,0.2)} +.btn-instagram .badge{color:#3f729b;background-color:#fff} +.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover,.btn-linkedin:focus,.btn-linkedin:active,.btn-linkedin.active,.open .dropdown-toggle.btn-linkedin{color:#fff;background-color:#005f8d;border-color:rgba(0,0,0,0.2)} +.btn-linkedin:active,.btn-linkedin.active,.open .dropdown-toggle.btn-linkedin{background-image:none} +.btn-linkedin.disabled,.btn-linkedin[disabled],fieldset[disabled] .btn-linkedin,.btn-linkedin.disabled:hover,.btn-linkedin[disabled]:hover,fieldset[disabled] .btn-linkedin:hover,.btn-linkedin.disabled:focus,.btn-linkedin[disabled]:focus,fieldset[disabled] .btn-linkedin:focus,.btn-linkedin.disabled:active,.btn-linkedin[disabled]:active,fieldset[disabled] .btn-linkedin:active,.btn-linkedin.disabled.active,.btn-linkedin[disabled].active,fieldset[disabled] .btn-linkedin.active{background-color:#007bb6;border-color:rgba(0,0,0,0.2)} +.btn-linkedin .badge{color:#007bb6;background-color:#fff} +.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover,.btn-tumblr:focus,.btn-tumblr:active,.btn-tumblr.active,.open .dropdown-toggle.btn-tumblr{color:#fff;background-color:#1f3346;border-color:rgba(0,0,0,0.2)} +.btn-tumblr:active,.btn-tumblr.active,.open .dropdown-toggle.btn-tumblr{background-image:none} +.btn-tumblr.disabled,.btn-tumblr[disabled],fieldset[disabled] .btn-tumblr,.btn-tumblr.disabled:hover,.btn-tumblr[disabled]:hover,fieldset[disabled] .btn-tumblr:hover,.btn-tumblr.disabled:focus,.btn-tumblr[disabled]:focus,fieldset[disabled] .btn-tumblr:focus,.btn-tumblr.disabled:active,.btn-tumblr[disabled]:active,fieldset[disabled] .btn-tumblr:active,.btn-tumblr.disabled.active,.btn-tumblr[disabled].active,fieldset[disabled] .btn-tumblr.active{background-color:#2c4762;border-color:rgba(0,0,0,0.2)} +.btn-tumblr .badge{color:#2c4762;background-color:#fff} +.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover,.btn-twitter:focus,.btn-twitter:active,.btn-twitter.active,.open .dropdown-toggle.btn-twitter{color:#fff;background-color:#309aea;border-color:rgba(0,0,0,0.2)} +.btn-twitter:active,.btn-twitter.active,.open .dropdown-toggle.btn-twitter{background-image:none} +.btn-twitter.disabled,.btn-twitter[disabled],fieldset[disabled] .btn-twitter,.btn-twitter.disabled:hover,.btn-twitter[disabled]:hover,fieldset[disabled] .btn-twitter:hover,.btn-twitter.disabled:focus,.btn-twitter[disabled]:focus,fieldset[disabled] .btn-twitter:focus,.btn-twitter.disabled:active,.btn-twitter[disabled]:active,fieldset[disabled] .btn-twitter:active,.btn-twitter.disabled.active,.btn-twitter[disabled].active,fieldset[disabled] .btn-twitter.active{background-color:#55acee;border-color:rgba(0,0,0,0.2)} +.btn-twitter .badge{color:#55acee;background-color:#fff} +.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:hover,.btn-vk:focus,.btn-vk:active,.btn-vk.active,.open .dropdown-toggle.btn-vk{color:#fff;background-color:#4a6a89;border-color:rgba(0,0,0,0.2)} +.btn-vk:active,.btn-vk.active,.open .dropdown-toggle.btn-vk{background-image:none} +.btn-vk.disabled,.btn-vk[disabled],fieldset[disabled] .btn-vk,.btn-vk.disabled:hover,.btn-vk[disabled]:hover,fieldset[disabled] .btn-vk:hover,.btn-vk.disabled:focus,.btn-vk[disabled]:focus,fieldset[disabled] .btn-vk:focus,.btn-vk.disabled:active,.btn-vk[disabled]:active,fieldset[disabled] .btn-vk:active,.btn-vk.disabled.active,.btn-vk[disabled].active,fieldset[disabled] .btn-vk.active{background-color:#587ea3;border-color:rgba(0,0,0,0.2)} +.btn-vk .badge{color:#587ea3;background-color:#fff} diff --git a/src/ResultsView/Content/bootstrap-theme.css b/src/ResultsView/Content/bootstrap-theme.css new file mode 100644 index 0000000..a406992 --- /dev/null +++ b/src/ResultsView/Content/bootstrap-theme.css @@ -0,0 +1,347 @@ +/*! + * Bootstrap v3.1.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #2b669a; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #2d6ca2; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #2d6ca2; + border-color: #2b669a; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: #e8e8e8; + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #357ebd; + background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); + background-repeat: repeat-x; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); +} +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; +} +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%); + background-image: linear-gradient(to bottom, #222 0%, #282828 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #3071a9; + background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); + background-repeat: repeat-x; + border-color: #3278b3; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); +} +/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/src/ResultsView/Content/bootstrap-theme.css.map b/src/ResultsView/Content/bootstrap-theme.css.map new file mode 100644 index 0000000..b36fc9a --- /dev/null +++ b/src/ResultsView/Content/bootstrap-theme.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["less/theme.less","less/mixins.less"],"names":[],"mappings":"AAeA;AACA;AACA;AACA;AACA;AACA;EACE,wCAAA;ECoGA,2FAAA;EACQ,mFAAA;;ADhGR,YAAC;AAAD,YAAC;AAAD,YAAC;AAAD,SAAC;AAAD,YAAC;AAAD,WAAC;AACD,YAAC;AAAD,YAAC;AAAD,YAAC;AAAD,SAAC;AAAD,YAAC;AAAD,WAAC;EC8FD,wDAAA;EACQ,gDAAA;;ADnER,IAAC;AACD,IAAC;EACC,sBAAA;;AAKJ;EC4PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;EAyB2C,yBAAA;EAA2B,kBAAA;;AAvBtE,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAeJ;EC2PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAgBJ;EC0PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAiBJ;ECyPI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,SAAC;AACD,SAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,SAAC;AACD,SAAC;EACC,yBAAA;EACA,qBAAA;;AAkBJ;ECwPI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAmBJ;ECuPI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED7TA,2BAAA;EACA,qBAAA;;AAEA,WAAC;AACD,WAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,WAAC;AACD,WAAC;EACC,yBAAA;EACA,qBAAA;;AA2BJ;AACA;EC6CE,kDAAA;EACQ,0CAAA;;ADpCV,cAAe,KAAK,IAAG;AACvB,cAAe,KAAK,IAAG;ECmOnB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EDpOF,yBAAA;;AAEF,cAAe,UAAU;AACzB,cAAe,UAAU,IAAG;AAC5B,cAAe,UAAU,IAAG;EC6NxB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED9NF,yBAAA;;AAUF;ECiNI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EAoCF,mEAAA;EDrPA,kBAAA;ECaA,2FAAA;EACQ,mFAAA;;ADjBV,eAOE,YAAY,UAAU;EC0MpB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EApMF,wDAAA;EACQ,gDAAA;;ADLV;AACA,WAAY,KAAK;EACf,8CAAA;;AAIF;EC+LI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EAoCF,mEAAA;;ADtOF,eAIE,YAAY,UAAU;EC2LpB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EApMF,uDAAA;EACQ,+CAAA;;ADCV,eASE;AATF,eAUE,YAAY,KAAK;EACf,yCAAA;;AAKJ;AACA;AACA;EACE,gBAAA;;AAUF;EACE,6CAAA;EChCA,0FAAA;EACQ,kFAAA;;AD2CV;ECqJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5JF,qBAAA;;AAKF;ECoJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5JF,qBAAA;;AAMF;ECmJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5JF,qBAAA;;AAOF;ECkJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5JF,qBAAA;;AAgBF;ECyII,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADlIJ;EC+HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADjIJ;EC8HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADhIJ;EC6HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;AD/HJ;EC4HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;AD9HJ;EC2HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADtHJ;EACE,kBAAA;EC/EA,kDAAA;EACQ,0CAAA;;ADiFV,gBAAgB;AAChB,gBAAgB,OAAO;AACvB,gBAAgB,OAAO;EACrB,6BAAA;EC4GE,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED7GF,qBAAA;;AAUF;ECjGE,iDAAA;EACQ,yCAAA;;AD0GV,cAAe;ECsFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADxFJ,cAAe;ECqFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADvFJ,cAAe;ECoFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADtFJ,WAAY;ECmFR,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADrFJ,cAAe;ECkFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADpFJ,aAAc;ECiFV,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;AD5EJ;ECyEI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED1EF,qBAAA;EC1HA,yFAAA;EACQ,iFAAA","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","//\n// Mixins\n// --------------------------------------------------\n\n\n// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n\n// WebKit-style focus\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n\n// Center-align a block level element\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n width: @width;\n height: @height;\n}\n.square(@size) {\n .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support the\n// standard `box-shadow` property.\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n -webkit-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n// Transformations\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n transform: rotate(@degrees);\n}\n.scale(@ratio; @ratio-y...) {\n -webkit-transform: scale(@ratio, @ratio-y);\n -ms-transform: scale(@ratio, @ratio-y); // IE9 only\n transform: scale(@ratio, @ratio-y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n transform: translate(@x, @y);\n}\n.skew(@x; @y) {\n -webkit-transform: skew(@x, @y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n transform: skew(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// User select\n// For selecting text on the page\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n\n// Resize anything\n.resizable(@direction) {\n resize: @direction; // Options: horizontal, vertical, both\n overflow: auto; // Safari fix\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Opacity\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n\n\n\n// GRADIENTS\n// --------------------------------------------------\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n\n// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n\n\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n\n// Panels\n// -------------------------\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse .panel-body {\n border-top-color: @border;\n }\n }\n & > .panel-footer {\n + .panel-collapse .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n\n// Alerts\n// -------------------------\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n\n// Tables\n// -------------------------\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n\n// List Groups\n// -------------------------\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading { color: inherit; }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &:active,\n &.active,\n .open .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 8%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n// -------------------------\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n\n// Pagination\n// -------------------------\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n\n// Labels\n// -------------------------\n.label-variant(@color) {\n background-color: @color;\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n\n// Contextual backgrounds\n// -------------------------\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n\n// Typography\n// -------------------------\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n.progress-bar-variant(@color) {\n background-color: @color;\n .progress-striped & {\n #gradient > .striped();\n }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n\n\n// Grid System\n// -----------\n\n// Centered container element\n.container-fixed() {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n @media (min-width: @screen-xs-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-push(@columns) {\n @media (min-width: @screen-xs-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-pull(@columns) {\n @media (min-width: @screen-xs-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n\n// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. ``\n// element gets special love because it's special, and that's a fact!\n\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Variables\n// --------------------------------------------------\n\n\n//== Colors\n//\n//## Gray and brand colors for use across Bootstrap.\n\n@gray-darker: lighten(#000, 13.5%); // #222\n@gray-dark: lighten(#000, 20%); // #333\n@gray: lighten(#000, 33.5%); // #555\n@gray-light: lighten(#000, 60%); // #999\n@gray-lighter: lighten(#000, 93.5%); // #eee\n\n@brand-primary: #428bca;\n@brand-success: #5cb85c;\n@brand-info: #5bc0de;\n@brand-warning: #f0ad4e;\n@brand-danger: #d9534f;\n\n\n//== Scaffolding\n//\n// ## Settings for some of the most global styles.\n\n//** Background color for ``.\n@body-bg: #fff;\n//** Global text color on ``.\n@text-color: @gray-dark;\n\n//** Global textual link color.\n@link-color: @brand-primary;\n//** Link hover color set via `darken()` function.\n@link-hover-color: darken(@link-color, 15%);\n\n\n//== Typography\n//\n//## Font, line-height, and color for body text, headings, and more.\n\n@font-family-sans-serif: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-family-serif: Georgia, \"Times New Roman\", Times, serif;\n//** Default monospace fonts for ``, ``, and `
`.\n@font-family-monospace:   Menlo, Monaco, Consolas, \"Courier New\", monospace;\n@font-family-base:        @font-family-sans-serif;\n\n@font-size-base:          14px;\n@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px\n@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px\n\n@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px\n@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px\n@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px\n@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px\n@font-size-h5:            @font-size-base;\n@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px\n\n//** Unit-less `line-height` for use in components like buttons.\n@line-height-base:        1.428571429; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px\n\n//** By default, this inherits from the ``.\n@headings-font-family:    inherit;\n@headings-font-weight:    500;\n@headings-line-height:    1.1;\n@headings-color:          inherit;\n\n\n//-- Iconography\n//\n//## Specify custom locations of the include Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n@icon-font-path:          \"../fonts/\";\n@icon-font-name:          \"glyphicons-halflings-regular\";\n@icon-font-svg-id:        \"glyphicons_halflingsregular\";\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n@padding-base-vertical:     6px;\n@padding-base-horizontal:   12px;\n\n@padding-large-vertical:    10px;\n@padding-large-horizontal:  16px;\n\n@padding-small-vertical:    5px;\n@padding-small-horizontal:  10px;\n\n@padding-xs-vertical:       1px;\n@padding-xs-horizontal:     5px;\n\n@line-height-large:         1.33;\n@line-height-small:         1.5;\n\n@border-radius-base:        4px;\n@border-radius-large:       6px;\n@border-radius-small:       3px;\n\n//** Global color for active items (e.g., navs or dropdowns).\n@component-active-color:    #fff;\n//** Global background color for active items (e.g., navs or dropdowns).\n@component-active-bg:       @brand-primary;\n\n//** Width of the `border` for generating carets that indicator dropdowns.\n@caret-width-base:          4px;\n//** Carets increase slightly in size for larger components.\n@caret-width-large:         5px;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for ``s and ``s.\n@table-cell-padding:            8px;\n//** Padding for cells in `.table-condensed`.\n@table-condensed-cell-padding:  5px;\n\n//** Default background color used for all tables.\n@table-bg:                      transparent;\n//** Background color used for `.table-striped`.\n@table-bg-accent:               #f9f9f9;\n//** Background color used for `.table-hover`.\n@table-bg-hover:                #f5f5f5;\n@table-bg-active:               @table-bg-hover;\n\n//** Border color for table and cell borders.\n@table-border-color:            #ddd;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\n\n@btn-font-weight:                normal;\n\n@btn-default-color:              #333;\n@btn-default-bg:                 #fff;\n@btn-default-border:             #ccc;\n\n@btn-primary-color:              #fff;\n@btn-primary-bg:                 @brand-primary;\n@btn-primary-border:             darken(@btn-primary-bg, 5%);\n\n@btn-success-color:              #fff;\n@btn-success-bg:                 @brand-success;\n@btn-success-border:             darken(@btn-success-bg, 5%);\n\n@btn-info-color:                 #fff;\n@btn-info-bg:                    @brand-info;\n@btn-info-border:                darken(@btn-info-bg, 5%);\n\n@btn-warning-color:              #fff;\n@btn-warning-bg:                 @brand-warning;\n@btn-warning-border:             darken(@btn-warning-bg, 5%);\n\n@btn-danger-color:               #fff;\n@btn-danger-bg:                  @brand-danger;\n@btn-danger-border:              darken(@btn-danger-bg, 5%);\n\n@btn-link-disabled-color:        @gray-light;\n\n\n//== Forms\n//\n//##\n\n//** `` background color\n@input-bg:                       #fff;\n//** `` background color\n@input-bg-disabled:              @gray-lighter;\n\n//** Text color for ``s\n@input-color:                    @gray;\n//** `` border color\n@input-border:                   #ccc;\n//** `` border radius\n@input-border-radius:            @border-radius-base;\n//** Border color for inputs on focus\n@input-border-focus:             #66afe9;\n\n//** Placeholder text color\n@input-color-placeholder:        @gray-light;\n\n//** Default `.form-control` height\n@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);\n//** Large `.form-control` height\n@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n//** Small `.form-control` height\n@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);\n\n@legend-color:                   @gray-dark;\n@legend-border-color:            #e5e5e5;\n\n//** Background color for textual input addons\n@input-group-addon-bg:           @gray-lighter;\n//** Border color for textual input addons\n@input-group-addon-border-color: @input-border;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n@dropdown-bg:                    #fff;\n//** Dropdown menu `border-color`.\n@dropdown-border:                rgba(0,0,0,.15);\n//** Dropdown menu `border-color` **for IE8**.\n@dropdown-fallback-border:       #ccc;\n//** Divider color for between dropdown items.\n@dropdown-divider-bg:            #e5e5e5;\n\n//** Dropdown link text color.\n@dropdown-link-color:            @gray-dark;\n//** Hover color for dropdown links.\n@dropdown-link-hover-color:      darken(@gray-dark, 5%);\n//** Hover background for dropdown links.\n@dropdown-link-hover-bg:         #f5f5f5;\n\n//** Active dropdown menu item text color.\n@dropdown-link-active-color:     @component-active-color;\n//** Active dropdown menu item background color.\n@dropdown-link-active-bg:        @component-active-bg;\n\n//** Disabled dropdown menu item background color.\n@dropdown-link-disabled-color:   @gray-light;\n\n//** Text color for headers within dropdown menus.\n@dropdown-header-color:          @gray-light;\n\n// Note: Deprecated @dropdown-caret-color as of v3.1.0\n@dropdown-caret-color:           #000;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n@zindex-navbar:            1000;\n@zindex-dropdown:          1000;\n@zindex-popover:           1010;\n@zindex-tooltip:           1030;\n@zindex-navbar-fixed:      1030;\n@zindex-modal-background:  1040;\n@zindex-modal:             1050;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1\n@screen-xs:                  480px;\n@screen-xs-min:              @screen-xs;\n@screen-phone:               @screen-xs-min;\n\n// Small screen / tablet\n// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1\n@screen-sm:                  768px;\n@screen-sm-min:              @screen-sm;\n@screen-tablet:              @screen-sm-min;\n\n// Medium screen / desktop\n// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1\n@screen-md:                  992px;\n@screen-md-min:              @screen-md;\n@screen-desktop:             @screen-md-min;\n\n// Large screen / wide desktop\n// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1\n@screen-lg:                  1200px;\n@screen-lg-min:              @screen-lg;\n@screen-lg-desktop:          @screen-lg-min;\n\n// So media queries don't overlap when required, provide a maximum\n@screen-xs-max:              (@screen-sm-min - 1);\n@screen-sm-max:              (@screen-md-min - 1);\n@screen-md-max:              (@screen-lg-min - 1);\n\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n@grid-columns:              12;\n//** Padding between columns. Gets divided in half for the left and right.\n@grid-gutter-width:         30px;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n@grid-float-breakpoint:     @screen-sm-min;\n//** Point at which the navbar begins collapsing.\n@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n@container-tablet:             ((720px + @grid-gutter-width));\n//** For `@screen-sm-min` and up.\n@container-sm:                 @container-tablet;\n\n// Medium screen / desktop\n@container-desktop:            ((940px + @grid-gutter-width));\n//** For `@screen-md-min` and up.\n@container-md:                 @container-desktop;\n\n// Large screen / wide desktop\n@container-large-desktop:      ((1140px + @grid-gutter-width));\n//** For `@screen-lg-min` and up.\n@container-lg:                 @container-large-desktop;\n\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n@navbar-height:                    50px;\n@navbar-margin-bottom:             @line-height-computed;\n@navbar-border-radius:             @border-radius-base;\n@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));\n@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);\n@navbar-collapse-max-height:       340px;\n\n@navbar-default-color:             #777;\n@navbar-default-bg:                #f8f8f8;\n@navbar-default-border:            darken(@navbar-default-bg, 6.5%);\n\n// Navbar links\n@navbar-default-link-color:                #777;\n@navbar-default-link-hover-color:          #333;\n@navbar-default-link-hover-bg:             transparent;\n@navbar-default-link-active-color:         #555;\n@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);\n@navbar-default-link-disabled-color:       #ccc;\n@navbar-default-link-disabled-bg:          transparent;\n\n// Navbar brand label\n@navbar-default-brand-color:               @navbar-default-link-color;\n@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);\n@navbar-default-brand-hover-bg:            transparent;\n\n// Navbar toggle\n@navbar-default-toggle-hover-bg:           #ddd;\n@navbar-default-toggle-icon-bar-bg:        #888;\n@navbar-default-toggle-border-color:       #ddd;\n\n\n// Inverted navbar\n// Reset inverted navbar basics\n@navbar-inverse-color:                      @gray-light;\n@navbar-inverse-bg:                         #222;\n@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);\n\n// Inverted navbar links\n@navbar-inverse-link-color:                 @gray-light;\n@navbar-inverse-link-hover-color:           #fff;\n@navbar-inverse-link-hover-bg:              transparent;\n@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;\n@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);\n@navbar-inverse-link-disabled-color:        #444;\n@navbar-inverse-link-disabled-bg:           transparent;\n\n// Inverted navbar brand label\n@navbar-inverse-brand-color:                @navbar-inverse-link-color;\n@navbar-inverse-brand-hover-color:          #fff;\n@navbar-inverse-brand-hover-bg:             transparent;\n\n// Inverted navbar toggle\n@navbar-inverse-toggle-hover-bg:            #333;\n@navbar-inverse-toggle-icon-bar-bg:         #fff;\n@navbar-inverse-toggle-border-color:        #333;\n\n\n//== Navs\n//\n//##\n\n//=== Shared nav styles\n@nav-link-padding:                          10px 15px;\n@nav-link-hover-bg:                         @gray-lighter;\n\n@nav-disabled-link-color:                   @gray-light;\n@nav-disabled-link-hover-color:             @gray-light;\n\n@nav-open-link-hover-color:                 #fff;\n\n//== Tabs\n@nav-tabs-border-color:                     #ddd;\n\n@nav-tabs-link-hover-border-color:          @gray-lighter;\n\n@nav-tabs-active-link-hover-bg:             @body-bg;\n@nav-tabs-active-link-hover-color:          @gray;\n@nav-tabs-active-link-hover-border-color:   #ddd;\n\n@nav-tabs-justified-link-border-color:            #ddd;\n@nav-tabs-justified-active-link-border-color:     @body-bg;\n\n//== Pills\n@nav-pills-border-radius:                   @border-radius-base;\n@nav-pills-active-link-hover-bg:            @component-active-bg;\n@nav-pills-active-link-hover-color:         @component-active-color;\n\n\n//== Pagination\n//\n//##\n\n@pagination-color:                     @link-color;\n@pagination-bg:                        #fff;\n@pagination-border:                    #ddd;\n\n@pagination-hover-color:               @link-hover-color;\n@pagination-hover-bg:                  @gray-lighter;\n@pagination-hover-border:              #ddd;\n\n@pagination-active-color:              #fff;\n@pagination-active-bg:                 @brand-primary;\n@pagination-active-border:             @brand-primary;\n\n@pagination-disabled-color:            @gray-light;\n@pagination-disabled-bg:               #fff;\n@pagination-disabled-border:           #ddd;\n\n\n//== Pager\n//\n//##\n\n@pager-bg:                             @pagination-bg;\n@pager-border:                         @pagination-border;\n@pager-border-radius:                  15px;\n\n@pager-hover-bg:                       @pagination-hover-bg;\n\n@pager-active-bg:                      @pagination-active-bg;\n@pager-active-color:                   @pagination-active-color;\n\n@pager-disabled-color:                 @pagination-disabled-color;\n\n\n//== Jumbotron\n//\n//##\n\n@jumbotron-padding:              30px;\n@jumbotron-color:                inherit;\n@jumbotron-bg:                   @gray-lighter;\n@jumbotron-heading-color:        inherit;\n@jumbotron-font-size:            ceil((@font-size-base * 1.5));\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n@state-success-text:             #3c763d;\n@state-success-bg:               #dff0d8;\n@state-success-border:           darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text:                #31708f;\n@state-info-bg:                  #d9edf7;\n@state-info-border:              darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text:             #8a6d3b;\n@state-warning-bg:               #fcf8e3;\n@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text:              #a94442;\n@state-danger-bg:                #f2dede;\n@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n@tooltip-max-width:           200px;\n//** Tooltip text color\n@tooltip-color:               #fff;\n//** Tooltip background color\n@tooltip-bg:                  #000;\n@tooltip-opacity:             .9;\n\n//** Tooltip arrow width\n@tooltip-arrow-width:         5px;\n//** Tooltip arrow color\n@tooltip-arrow-color:         @tooltip-bg;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n@popover-bg:                          #fff;\n//** Popover maximum width\n@popover-max-width:                   276px;\n//** Popover border color\n@popover-border-color:                rgba(0,0,0,.2);\n//** Popover fallback border color\n@popover-fallback-border-color:       #ccc;\n\n//** Popover title background color\n@popover-title-bg:                    darken(@popover-bg, 3%);\n\n//** Popover arrow width\n@popover-arrow-width:                 10px;\n//** Popover arrow color\n@popover-arrow-color:                 #fff;\n\n//** Popover outer arrow width\n@popover-arrow-outer-width:           (@popover-arrow-width + 1);\n//** Popover outer arrow color\n@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);\n//** Popover outer arrow fallback color\n@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n@label-default-bg:            @gray-light;\n//** Primary label background color\n@label-primary-bg:            @brand-primary;\n//** Success label background color\n@label-success-bg:            @brand-success;\n//** Info label background color\n@label-info-bg:               @brand-info;\n//** Warning label background color\n@label-warning-bg:            @brand-warning;\n//** Danger label background color\n@label-danger-bg:             @brand-danger;\n\n//** Default label text color\n@label-color:                 #fff;\n//** Default text color of a linked label\n@label-link-hover-color:      #fff;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n@modal-inner-padding:         20px;\n\n//** Padding applied to the modal title\n@modal-title-padding:         15px;\n//** Modal title line-height\n@modal-title-line-height:     @line-height-base;\n\n//** Background color of modal content area\n@modal-content-bg:                             #fff;\n//** Modal content border color\n@modal-content-border-color:                   rgba(0,0,0,.2);\n//** Modal content border color **for IE8**\n@modal-content-fallback-border-color:          #999;\n\n//** Modal backdrop background color\n@modal-backdrop-bg:           #000;\n//** Modal backdrop opacity\n@modal-backdrop-opacity:      .5;\n//** Modal header border color\n@modal-header-border-color:   #e5e5e5;\n//** Modal footer border color\n@modal-footer-border-color:   @modal-header-border-color;\n\n@modal-lg:                    900px;\n@modal-md:                    600px;\n@modal-sm:                    300px;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n@alert-padding:               15px;\n@alert-border-radius:         @border-radius-base;\n@alert-link-font-weight:      bold;\n\n@alert-success-bg:            @state-success-bg;\n@alert-success-text:          @state-success-text;\n@alert-success-border:        @state-success-border;\n\n@alert-info-bg:               @state-info-bg;\n@alert-info-text:             @state-info-text;\n@alert-info-border:           @state-info-border;\n\n@alert-warning-bg:            @state-warning-bg;\n@alert-warning-text:          @state-warning-text;\n@alert-warning-border:        @state-warning-border;\n\n@alert-danger-bg:             @state-danger-bg;\n@alert-danger-text:           @state-danger-text;\n@alert-danger-border:         @state-danger-border;\n\n\n//== Progress bars\n//\n//##\n\n//** Background color of the whole progress component\n@progress-bg:                 #f5f5f5;\n//** Progress bar text color\n@progress-bar-color:          #fff;\n\n//** Default progress bar color\n@progress-bar-bg:             @brand-primary;\n//** Success progress bar color\n@progress-bar-success-bg:     @brand-success;\n//** Warning progress bar color\n@progress-bar-warning-bg:     @brand-warning;\n//** Danger progress bar color\n@progress-bar-danger-bg:      @brand-danger;\n//** Info progress bar color\n@progress-bar-info-bg:        @brand-info;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n@list-group-bg:                 #fff;\n//** `.list-group-item` border color\n@list-group-border:             #ddd;\n//** List group border radius\n@list-group-border-radius:      @border-radius-base;\n\n//** Background color of single list elements on hover\n@list-group-hover-bg:           #f5f5f5;\n//** Text color of active list elements\n@list-group-active-color:       @component-active-color;\n//** Background color of active list elements\n@list-group-active-bg:          @component-active-bg;\n//** Border color of active list elements\n@list-group-active-border:      @list-group-active-bg;\n@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);\n\n@list-group-link-color:         #555;\n@list-group-link-heading-color: #333;\n\n\n//== Panels\n//\n//##\n\n@panel-bg:                    #fff;\n@panel-body-padding:          15px;\n@panel-border-radius:         @border-radius-base;\n\n//** Border color for elements within panels\n@panel-inner-border:          #ddd;\n@panel-footer-bg:             #f5f5f5;\n\n@panel-default-text:          @gray-dark;\n@panel-default-border:        #ddd;\n@panel-default-heading-bg:    #f5f5f5;\n\n@panel-primary-text:          #fff;\n@panel-primary-border:        @brand-primary;\n@panel-primary-heading-bg:    @brand-primary;\n\n@panel-success-text:          @state-success-text;\n@panel-success-border:        @state-success-border;\n@panel-success-heading-bg:    @state-success-bg;\n\n@panel-info-text:             @state-info-text;\n@panel-info-border:           @state-info-border;\n@panel-info-heading-bg:       @state-info-bg;\n\n@panel-warning-text:          @state-warning-text;\n@panel-warning-border:        @state-warning-border;\n@panel-warning-heading-bg:    @state-warning-bg;\n\n@panel-danger-text:           @state-danger-text;\n@panel-danger-border:         @state-danger-border;\n@panel-danger-heading-bg:     @state-danger-bg;\n\n\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n@thumbnail-padding:           4px;\n//** Thumbnail background color\n@thumbnail-bg:                @body-bg;\n//** Thumbnail border color\n@thumbnail-border:            #ddd;\n//** Thumbnail border radius\n@thumbnail-border-radius:     @border-radius-base;\n\n//** Custom text color for thumbnail captions\n@thumbnail-caption-color:     @text-color;\n//** Padding around the thumbnail caption\n@thumbnail-caption-padding:   9px;\n\n\n//== Wells\n//\n//##\n\n@well-bg:                     #f5f5f5;\n@well-border:                 darken(@well-bg, 7%);\n\n\n//== Badges\n//\n//##\n\n@badge-color:                 #fff;\n//** Linked badge text color on hover\n@badge-link-hover-color:      #fff;\n@badge-bg:                    @gray-light;\n\n//** Badge text color in active nav link\n@badge-active-color:          @link-color;\n//** Badge background color in active nav link\n@badge-active-bg:             #fff;\n\n@badge-font-weight:           bold;\n@badge-line-height:           1;\n@badge-border-radius:         10px;\n\n\n//== Breadcrumbs\n//\n//##\n\n@breadcrumb-padding-vertical:   8px;\n@breadcrumb-padding-horizontal: 15px;\n//** Breadcrumb background color\n@breadcrumb-bg:                 #f5f5f5;\n//** Breadcrumb text color\n@breadcrumb-color:              #ccc;\n//** Text color of current page in the breadcrumb\n@breadcrumb-active-color:       @gray-light;\n//** Textual separator for between breadcrumb elements\n@breadcrumb-separator:          \"/\";\n\n\n//== Carousel\n//\n//##\n\n@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);\n\n@carousel-control-color:                      #fff;\n@carousel-control-width:                      15%;\n@carousel-control-opacity:                    .5;\n@carousel-control-font-size:                  20px;\n\n@carousel-indicator-active-bg:                #fff;\n@carousel-indicator-border-color:             #fff;\n\n@carousel-caption-color:                      #fff;\n\n\n//== Close\n//\n//##\n\n@close-font-weight:           bold;\n@close-color:                 #000;\n@close-text-shadow:           0 1px 0 #fff;\n\n\n//== Code\n//\n//##\n\n@code-color:                  #c7254e;\n@code-bg:                     #f9f2f4;\n\n@kbd-color:                   #fff;\n@kbd-bg:                      #333;\n\n@pre-bg:                      #f5f5f5;\n@pre-color:                   @gray-dark;\n@pre-border-color:            #ccc;\n@pre-scrollable-max-height:   340px;\n\n\n//== Type\n//\n//##\n\n//** Text muted color\n@text-muted:                  @gray-light;\n//** Abbreviations and acronyms border color\n@abbr-border-color:           @gray-light;\n//** Headings small color\n@headings-small-color:        @gray-light;\n//** Blockquote small color\n@blockquote-small-color:      @gray-light;\n//** Blockquote font size\n@blockquote-font-size:        (@font-size-base * 1.25);\n//** Blockquote border color\n@blockquote-border-color:     @gray-lighter;\n//** Page header border color\n@page-header-border-color:    @gray-lighter;\n\n\n//== Miscellaneous\n//\n//##\n\n//** Horizontal line color.\n@hr-border:                   @gray-lighter;\n\n//** Horizontal offset for forms and lists.\n@component-offset-horizontal: 180px;\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  display: block;\n  padding: @thumbnail-padding;\n  margin-bottom: @line-height-computed;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  > img,\n  a > img {\n    &:extend(.img-responsive);\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  // Add a hover state for linked versions only\n  a&:hover,\n  a&:focus,\n  a&.active {\n    border-color: @link-color;\n  }\n\n  // Image captions\n  .caption {\n    padding: @thumbnail-caption-padding;\n    color: @thumbnail-caption-color;\n  }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n\n  > .item {\n    display: none;\n    position: relative;\n    .transition(.6s ease-in-out left);\n\n    // Account for jankitude on images\n    > img,\n    > a > img {\n      &:extend(.img-responsive);\n      line-height: 1;\n    }\n  }\n\n  > .active,\n  > .next,\n  > .prev { display: block; }\n\n  > .active {\n    left: 0;\n  }\n\n  > .next,\n  > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%;\n  }\n\n  > .next {\n    left: 100%;\n  }\n  > .prev {\n    left: -100%;\n  }\n  > .next.left,\n  > .prev.right {\n    left: 0;\n  }\n\n  > .active.left {\n    left: -100%;\n  }\n  > .active.right {\n    left: 100%;\n  }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: @carousel-control-width;\n  .opacity(@carousel-control-opacity);\n  font-size: @carousel-control-font-size;\n  color: @carousel-control-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  // We can't have this transition here because WebKit cancels the carousel\n  // animation if you trip this while in the middle of another animation.\n\n  // Set gradients for backgrounds\n  &.left {\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n  }\n  &.right {\n    left: auto;\n    right: 0;\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n  }\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n    outline: none;\n    color: @carousel-control-color;\n    text-decoration: none;\n    .opacity(.9);\n  }\n\n  // Toggles\n  .icon-prev,\n  .icon-next,\n  .glyphicon-chevron-left,\n  .glyphicon-chevron-right {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: inline-block;\n  }\n  .icon-prev,\n  .glyphicon-chevron-left {\n    left: 50%;\n  }\n  .icon-next,\n  .glyphicon-chevron-right {\n    right: 50%;\n  }\n  .icon-prev,\n  .icon-next {\n    width:  20px;\n    height: 20px;\n    margin-top: -10px;\n    margin-left: -10px;\n    font-family: serif;\n  }\n\n  .icon-prev {\n    &:before {\n      content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n    }\n  }\n  .icon-next {\n    &:before {\n      content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n    }\n  }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center;\n\n  li {\n    display: inline-block;\n    width:  10px;\n    height: 10px;\n    margin: 1px;\n    text-indent: -999px;\n    border: 1px solid @carousel-indicator-border-color;\n    border-radius: 10px;\n    cursor: pointer;\n\n    // IE8-9 hack for event handling\n    //\n    // Internet Explorer 8-9 does not support clicks on elements without a set\n    // `background-color`. We cannot use `filter` since that's not viewed as a\n    // background color by the browser. Thus, a hack is needed.\n    //\n    // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n    // set alpha transparency for the best results possible.\n    background-color: #000 \\9; // IE8\n    background-color: rgba(0,0,0,0); // IE9\n  }\n  .active {\n    margin: 0;\n    width:  12px;\n    height: 12px;\n    background-color: @carousel-indicator-active-bg;\n  }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: @carousel-caption-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  & .btn {\n    text-shadow: none; // No shadow for button elements in carousel-caption\n  }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n  // Scale up the controls a smidge\n  .carousel-control {\n    .glyphicon-chevron-left,\n    .glyphicon-chevron-right,\n    .icon-prev,\n    .icon-next {\n      width: 30px;\n      height: 30px;\n      margin-top: -15px;\n      margin-left: -15px;\n      font-size: 30px;\n    }\n  }\n\n  // Show and left align the captions\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n\n  // Move up the indicators\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: @headings-font-family;\n  font-weight: @headings-font-weight;\n  line-height: @headings-line-height;\n  color: @headings-color;\n\n  small,\n  .small {\n    font-weight: normal;\n    line-height: 1;\n    color: @headings-small-color;\n  }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: @line-height-computed;\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 65%;\n  }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: (@line-height-computed / 2);\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 75%;\n  }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n  margin-bottom: @line-height-computed;\n  font-size: floor((@font-size-base * 1.15));\n  font-weight: 200;\n  line-height: 1.4;\n\n  @media (min-width: @screen-sm-min) {\n    font-size: (@font-size-base * 1.5);\n  }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: 14px base font * 85% = about 12px\nsmall,\n.small  { font-size: 85%; }\n\n// Undo browser default styling\ncite    { font-style: normal; }\n\n// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n.text-justify        { text-align: justify; }\n\n// Contextual colors\n.text-muted {\n  color: @text-muted;\n}\n.text-primary {\n  .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n  .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n  .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n  .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n  .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n  // Given the contrast here, this is the only class to have its color inverted\n  // automatically.\n  color: #fff;\n  .bg-variant(@brand-primary);\n}\n.bg-success {\n  .bg-variant(@state-success-bg);\n}\n.bg-info {\n  .bg-variant(@state-info-bg);\n}\n.bg-warning {\n  .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n  .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: ((@line-height-computed / 2) - 1);\n  margin: (@line-height-computed * 2) 0 @line-height-computed;\n  border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// --------------------------------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: (@line-height-computed / 2);\n  ul,\n  ol {\n    margin-bottom: 0;\n  }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n  .list-unstyled();\n  margin-left: -5px;\n\n  > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-top: 0; // Remove browser default\n  margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n  line-height: @line-height-base;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n@media (min-width: @grid-float-breakpoint) {\n  .dl-horizontal {\n    dt {\n      float: left;\n      width: (@component-offset-horizontal - 20);\n      clear: left;\n      text-align: right;\n      .text-overflow();\n    }\n    dd {\n      margin-left: @component-offset-horizontal;\n      &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n    }\n  }\n}\n\n// MISC\n// ----\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n  padding: (@line-height-computed / 2) @line-height-computed;\n  margin: 0 0 @line-height-computed;\n  font-size: @blockquote-font-size;\n  border-left: 5px solid @blockquote-border-color;\n\n  p,\n  ul,\n  ol {\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Note: Deprecated small and .small as of v3.1.0\n  // Context: https://github.com/twbs/bootstrap/issues/11660\n  footer,\n  small,\n  .small {\n    display: block;\n    font-size: 80%; // back to default font-size\n    line-height: @line-height-base;\n    color: @blockquote-small-color;\n\n    &:before {\n      content: '\\2014 \\00A0'; // em dash, nbsp\n    }\n  }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid @blockquote-border-color;\n  border-left: 0;\n  text-align: right;\n\n  // Account for citation\n  footer,\n  small,\n  .small {\n    &:before { content: ''; }\n    &:after {\n      content: '\\00A0 \\2014'; // nbsp, em dash\n    }\n  }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\n// Addresses\naddress {\n  margin-bottom: @line-height-computed;\n  font-style: normal;\n  line-height: @line-height-base;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n  font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @code-color;\n  background-color: @code-bg;\n  white-space: nowrap;\n  border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @kbd-color;\n  background-color: @kbd-bg;\n  border-radius: @border-radius-small;\n  box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: ((@line-height-computed - 1) / 2);\n  margin: 0 0 (@line-height-computed / 2);\n  font-size: (@font-size-base - 1); // 14px to 13px\n  line-height: @line-height-base;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: @pre-color;\n  background-color: @pre-bg;\n  border: 1px solid @pre-border-color;\n  border-radius: @border-radius-base;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: @pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n  .container-fixed();\n\n  @media (min-width: @screen-sm-min) {\n    width: @container-sm;\n  }\n  @media (min-width: @screen-md-min) {\n    width: @container-md;\n  }\n  @media (min-width: @screen-lg-min) {\n    width: @container-lg;\n  }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n  .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n  .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n  .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n  .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n  .make-grid(lg);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  max-width: 100%;\n  background-color: @table-bg;\n}\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  margin-bottom: @line-height-computed;\n  // Cells\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-cell-padding;\n        line-height: @line-height-base;\n        vertical-align: top;\n        border-top: 1px solid @table-border-color;\n      }\n    }\n  }\n  // Bottom align for column headings\n  > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid @table-border-color;\n  }\n  // Remove top border from thead by default\n  > caption + thead,\n  > colgroup + thead,\n  > thead:first-child {\n    > tr:first-child {\n      > th,\n      > td {\n        border-top: 0;\n      }\n    }\n  }\n  // Account for multiple tbody instances\n  > tbody + tbody {\n    border-top: 2px solid @table-border-color;\n  }\n\n  // Nesting\n  .table {\n    background-color: @body-bg;\n  }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-condensed-cell-padding;\n      }\n    }\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid @table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        border: 1px solid @table-border-color;\n      }\n    }\n  }\n  > thead > tr {\n    > th,\n    > td {\n      border-bottom-width: 2px;\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  > tbody > tr:nth-child(odd) {\n    > td,\n    > th {\n      background-color: @table-bg-accent;\n    }\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody > tr:hover {\n    > td,\n    > th {\n      background-color: @table-bg-hover;\n    }\n  }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n  position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n  float: none;\n  display: table-column;\n}\ntable {\n  td,\n  th {\n    &[class*=\"col-\"] {\n      position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n      float: none;\n      display: table-cell;\n    }\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n@media (max-width: @screen-xs-max) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: (@line-height-computed * 0.75);\n    overflow-y: hidden;\n    overflow-x: scroll;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid @table-border-color;\n    -webkit-overflow-scrolling: touch;\n\n    // Tighten up spacing\n    > .table {\n      margin-bottom: 0;\n\n      // Ensure the content doesn't wrap\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th,\n          > td {\n            white-space: nowrap;\n          }\n        }\n      }\n    }\n\n    // Special overrides for the bordered tables\n    > .table-bordered {\n      border: 0;\n\n      // Nuke the appropriate borders so that the parent can handle them\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th:first-child,\n          > td:first-child {\n            border-left: 0;\n          }\n          > th:last-child,\n          > td:last-child {\n            border-right: 0;\n          }\n        }\n      }\n\n      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n      // chances are there will be only one `tr` in a `thead` and that would\n      // remove the border altogether.\n      > tbody,\n      > tfoot {\n        > tr:last-child {\n          > th,\n          > td {\n            border-bottom: 0;\n          }\n        }\n      }\n\n    }\n  }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  // Chrome and Firefox set a `min-width: -webkit-min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: @line-height-computed;\n  font-size: (@font-size-base * 1.5);\n  line-height: inherit;\n  color: @legend-color;\n  border: 0;\n  border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n  .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; /* IE8-9 */\n  line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  .tab-focus();\n}\n\n// Adjust output element\noutput {\n  display: block;\n  padding-top: (@padding-base-vertical + 1);\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  background-color: @input-bg;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid @input-border;\n  border-radius: @input-border-radius;\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n  .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  .form-control-focus();\n\n  // Placeholder\n  .placeholder();\n\n  // Disabled and read-only inputs\n  //\n  // HTML5 says that controls under a fieldset > legend:first-child won't be\n  // disabled if the fieldset is disabled. Due to implementation difficulty, we\n  // don't honor that edge case; we style them as disabled anyway.\n  &[disabled],\n  &[readonly],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    background-color: @input-bg-disabled;\n    opacity: 1; // iOS fix for unreadable disabled content\n  }\n\n  // Reset height for `textarea`s\n  textarea& {\n    height: auto;\n  }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n\n\n// Special styles for iOS date input\n//\n// In Mobile Safari, date inputs require a pixel line-height that matches the\n// given height of the input.\n\ninput[type=\"date\"] {\n  line-height: @input-height-base;\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: @line-height-computed; // clear the floating input if there is no label text\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n  label {\n    display: inline;\n    font-weight: normal;\n    cursor: pointer;\n  }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"],\n.radio,\n.radio-inline,\n.checkbox,\n.checkbox-inline {\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n  }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm {\n  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n  // Enable absolute positioning\n  position: relative;\n\n  // Ensure icons don't overlap text\n  .form-control {\n    padding-right: (@input-height-base * 1.25);\n  }\n\n  // Feedback icon (requires .glyphicon classes)\n  .form-control-feedback {\n    position: absolute;\n    top: (@line-height-computed + 5); // Height of the `label` and its margin\n    right: 0;\n    display: block;\n    width: @input-height-base;\n    height: @input-height-base;\n    line-height: @input-height-base;\n    text-align: center;\n  }\n}\n\n// Feedback states\n.has-success {\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  margin-bottom: 0; // Remove default margin from `p`\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n  // Kick in the inline\n  @media (min-width: @screen-sm-min) {\n    // Inline-block all the things for \"inline\"\n    .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // In navbar-form, allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n      width: auto; // Prevent labels from stacking above inputs in `.form-group`\n      vertical-align: middle;\n    }\n    // Input groups need that 100% width though\n    .input-group > .form-control {\n      width: 100%;\n    }\n\n    .control-label {\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match (which also avoids\n    // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n    .radio,\n    .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      padding-left: 0;\n      vertical-align: middle;\n    }\n    .radio input[type=\"radio\"],\n    .checkbox input[type=\"checkbox\"] {\n      float: none;\n      margin-left: 0;\n    }\n\n    // Validation states\n    //\n    // Reposition the icon because it's now within a grid column and columns have\n    // `position: relative;` on them. Also accounts for the grid gutter padding.\n    .has-feedback .form-control-feedback {\n      top: 0;\n    }\n  }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n  // Consistent vertical alignment of labels, radios, and checkboxes\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n  }\n  // Account for padding we're adding to ensure the alignment and of help text\n  // and other content below items\n  .radio,\n  .checkbox {\n    min-height: (@line-height-computed + (@padding-base-vertical + 1));\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n    .make-row();\n  }\n\n  .form-control-static {\n    padding-top: (@padding-base-vertical + 1);\n  }\n\n  // Only right align form labels here when the columns stop stacking\n  @media (min-width: @screen-sm-min) {\n    .control-label {\n      text-align: right;\n    }\n  }\n\n  // Validation states\n  //\n  // Reposition the icon because it's now within a grid column and columns have\n  // `position: relative;` on them. Also accounts for the grid gutter padding.\n  .has-feedback .form-control-feedback {\n    top: 0;\n    right: (@grid-gutter-width / 2);\n  }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: @btn-font-weight;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  white-space: nowrap;\n  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n  .user-select(none);\n\n  &,\n  &:active,\n  &.active {\n    &:focus {\n      .tab-focus();\n    }\n  }\n\n  &:hover,\n  &:focus {\n    color: @btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    pointer-events: none; // Future-proof disabling of clicks\n    .opacity(.65);\n    .box-shadow(none);\n  }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: @link-color;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    .box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: @btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n  .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n    &:focus {\n      // Remove focus outline when dropdown JS adds it after closing the menu\n      outline: none;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -5px; // Offset the first child's margin\n  &:extend(.clearfix all);\n\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    .border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    .box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: @caret-width-large @caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    &:extend(.clearfix all);\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    border-top-right-radius: @border-radius-base;\n    .border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    border-bottom-left-radius: @border-radius-base;\n    .border-top-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  > .btn,\n  > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\n  }\n}\n\n\n// Checkbox and radio options\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  .transition(opacity .15s linear);\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n  &.in {\n    display: block;\n  }\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  .transition(height .35s ease);\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n//  Star\n\n// Import the fonts\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: ~\"url('@{icon-font-path}@{icon-font-name}.eot')\";\n  src: ~\"url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.woff') format('woff')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg')\";\n}\n\n// Catchall baseclass\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk               { &:before { content: \"\\2a\"; } }\n.glyphicon-plus                   { &:before { content: \"\\2b\"; } }\n.glyphicon-euro                   { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus                  { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud                  { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope               { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil                 { &:before { content: \"\\270f\"; } }\n.glyphicon-glass                  { &:before { content: \"\\e001\"; } }\n.glyphicon-music                  { &:before { content: \"\\e002\"; } }\n.glyphicon-search                 { &:before { content: \"\\e003\"; } }\n.glyphicon-heart                  { &:before { content: \"\\e005\"; } }\n.glyphicon-star                   { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty             { &:before { content: \"\\e007\"; } }\n.glyphicon-user                   { &:before { content: \"\\e008\"; } }\n.glyphicon-film                   { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large               { &:before { content: \"\\e010\"; } }\n.glyphicon-th                     { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list                { &:before { content: \"\\e012\"; } }\n.glyphicon-ok                     { &:before { content: \"\\e013\"; } }\n.glyphicon-remove                 { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in                { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out               { &:before { content: \"\\e016\"; } }\n.glyphicon-off                    { &:before { content: \"\\e017\"; } }\n.glyphicon-signal                 { &:before { content: \"\\e018\"; } }\n.glyphicon-cog                    { &:before { content: \"\\e019\"; } }\n.glyphicon-trash                  { &:before { content: \"\\e020\"; } }\n.glyphicon-home                   { &:before { content: \"\\e021\"; } }\n.glyphicon-file                   { &:before { content: \"\\e022\"; } }\n.glyphicon-time                   { &:before { content: \"\\e023\"; } }\n.glyphicon-road                   { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt           { &:before { content: \"\\e025\"; } }\n.glyphicon-download               { &:before { content: \"\\e026\"; } }\n.glyphicon-upload                 { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox                  { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle            { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat                 { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh                { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt               { &:before { content: \"\\e032\"; } }\n.glyphicon-lock                   { &:before { content: \"\\e033\"; } }\n.glyphicon-flag                   { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones             { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off             { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down            { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up              { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode                 { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode                { &:before { content: \"\\e040\"; } }\n.glyphicon-tag                    { &:before { content: \"\\e041\"; } }\n.glyphicon-tags                   { &:before { content: \"\\e042\"; } }\n.glyphicon-book                   { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark               { &:before { content: \"\\e044\"; } }\n.glyphicon-print                  { &:before { content: \"\\e045\"; } }\n.glyphicon-camera                 { &:before { content: \"\\e046\"; } }\n.glyphicon-font                   { &:before { content: \"\\e047\"; } }\n.glyphicon-bold                   { &:before { content: \"\\e048\"; } }\n.glyphicon-italic                 { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height            { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width             { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left             { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center           { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right            { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify          { &:before { content: \"\\e055\"; } }\n.glyphicon-list                   { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left            { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right           { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video         { &:before { content: \"\\e059\"; } }\n.glyphicon-picture                { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker             { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust                 { &:before { content: \"\\e063\"; } }\n.glyphicon-tint                   { &:before { content: \"\\e064\"; } }\n.glyphicon-edit                   { &:before { content: \"\\e065\"; } }\n.glyphicon-share                  { &:before { content: \"\\e066\"; } }\n.glyphicon-check                  { &:before { content: \"\\e067\"; } }\n.glyphicon-move                   { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward          { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward          { &:before { content: \"\\e070\"; } }\n.glyphicon-backward               { &:before { content: \"\\e071\"; } }\n.glyphicon-play                   { &:before { content: \"\\e072\"; } }\n.glyphicon-pause                  { &:before { content: \"\\e073\"; } }\n.glyphicon-stop                   { &:before { content: \"\\e074\"; } }\n.glyphicon-forward                { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward           { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward           { &:before { content: \"\\e077\"; } }\n.glyphicon-eject                  { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left           { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right          { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign              { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign             { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign            { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign                { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign          { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign              { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot             { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle          { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle              { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle             { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left             { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right            { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up               { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down             { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt              { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full            { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small           { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign       { &:before { content: \"\\e101\"; } }\n.glyphicon-gift                   { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf                   { &:before { content: \"\\e103\"; } }\n.glyphicon-fire                   { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open               { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close              { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign           { &:before { content: \"\\e107\"; } }\n.glyphicon-plane                  { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar               { &:before { content: \"\\e109\"; } }\n.glyphicon-random                 { &:before { content: \"\\e110\"; } }\n.glyphicon-comment                { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet                 { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up             { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down           { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet                { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart          { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close           { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open            { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical        { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal      { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd                    { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn               { &:before { content: \"\\e122\"; } }\n.glyphicon-bell                   { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate            { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up              { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down            { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right             { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left              { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up                { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down              { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right     { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left      { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up        { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down      { &:before { content: \"\\e134\"; } }\n.glyphicon-globe                  { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench                 { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks                  { &:before { content: \"\\e137\"; } }\n.glyphicon-filter                 { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase              { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen             { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard              { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip              { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty            { &:before { content: \"\\e143\"; } }\n.glyphicon-link                   { &:before { content: \"\\e144\"; } }\n.glyphicon-phone                  { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin                { &:before { content: \"\\e146\"; } }\n.glyphicon-usd                    { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp                    { &:before { content: \"\\e149\"; } }\n.glyphicon-sort                   { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet       { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt   { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order          { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt      { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes     { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked              { &:before { content: \"\\e157\"; } }\n.glyphicon-expand                 { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down          { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up            { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in                 { &:before { content: \"\\e161\"; } }\n.glyphicon-flash                  { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out                { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window             { &:before { content: \"\\e164\"; } }\n.glyphicon-record                 { &:before { content: \"\\e165\"; } }\n.glyphicon-save                   { &:before { content: \"\\e166\"; } }\n.glyphicon-open                   { &:before { content: \"\\e167\"; } }\n.glyphicon-saved                  { &:before { content: \"\\e168\"; } }\n.glyphicon-import                 { &:before { content: \"\\e169\"; } }\n.glyphicon-export                 { &:before { content: \"\\e170\"; } }\n.glyphicon-send                   { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk            { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved           { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove          { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save            { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open            { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card            { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer               { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery                { &:before { content: \"\\e179\"; } }\n.glyphicon-header                 { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed             { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone               { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt              { &:before { content: \"\\e183\"; } }\n.glyphicon-tower                  { &:before { content: \"\\e184\"; } }\n.glyphicon-stats                  { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video               { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video               { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles              { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo           { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby            { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1              { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1              { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1              { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark         { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark      { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download         { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload           { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer           { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous         { &:before { content: \"\\e200\"; } }\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top:   @caret-width-base solid;\n  border-right: @caret-width-base solid transparent;\n  border-left:  @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: @zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: @font-size-base;\n  background-color: @dropdown-bg;\n  border: 1px solid @dropdown-fallback-border; // IE8 fallback\n  border: 1px solid @dropdown-border;\n  border-radius: @border-radius-base;\n  .box-shadow(0 6px 12px rgba(0,0,0,.175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    .nav-divider(@dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: @line-height-base;\n    color: @dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: @dropdown-link-hover-color;\n    background-color: @dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-active-color;\n    text-decoration: none;\n    outline: 0;\n    background-color: @dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-disabled-color;\n  }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    .reset-filter();\n    cursor: not-allowed;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  left: auto; // Reset the default from `.dropdown-menu`\n  right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: @font-size-small;\n  line-height: @line-height-base;\n  color: @dropdown-header-color;\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    border-top: 0;\n    border-bottom: @caret-width-base solid;\n    content: \"\";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 1px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      .dropdown-menu-right();\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      .dropdown-menu-left();\n    }\n  }\n}\n\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &[class*=\"col-\"] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\n    width: 100%;\n    margin-bottom: 0;\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn { .input-lg(); }\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn { .input-sm(); }\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  color: @input-color;\n  text-align: center;\n  background-color: @input-group-addon-bg;\n  border: 1px solid @input-group-addon-border-color;\n  border-radius: @border-radius-base;\n\n  // Sizing\n  &.input-sm {\n    padding: @padding-small-vertical @padding-small-horizontal;\n    font-size: @font-size-small;\n    border-radius: @border-radius-small;\n  }\n  &.input-lg {\n    padding: @padding-large-vertical @padding-large-horizontal;\n    font-size: @font-size-large;\n    border-radius: @border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  .border-right-radius(0);\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  .border-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      margin-left: -1px;\n    }\n  }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  &:extend(.clearfix all);\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: @nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: @nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: @nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: @nav-disabled-link-hover-color;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: @nav-link-hover-bg;\n      border-color: @link-color;\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    .nav-divider();\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid @nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: @line-height-base;\n      border: 1px solid transparent;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n      &:hover {\n        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and its :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-tabs-active-link-hover-color;\n        background-color: @nav-tabs-active-link-hover-bg;\n        border: 1px solid @nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n        cursor: default;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    .nav-justified();\n    .nav-tabs-justified();\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: @nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-pills-active-link-hover-color;\n        background-color: @nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n     > a {\n      text-align: center;\n      margin-bottom: 5px;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: @border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid @nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: @nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: @navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: @navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  max-height: @navbar-collapse-max-height;\n  overflow-x: visible;\n  padding-right: @navbar-padding-horizontal;\n  padding-left:  @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n  &:extend(.clearfix all);\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-left: 0;\n      padding-right: 0;\n    }\n  }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n  > .navbar-header,\n  > .navbar-collapse {\n    margin-right: -@navbar-padding-horizontal;\n    margin-left:  -@navbar-padding-horizontal;\n\n    @media (min-width: @grid-float-breakpoint) {\n      margin-right: 0;\n      margin-left:  0;\n    }\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: @zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: @zindex-navbar-fixed;\n\n  // Undo the rounded corners\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: @navbar-padding-vertical @navbar-padding-horizontal;\n  font-size: @font-size-large;\n  line-height: @line-height-computed;\n  height: @navbar-height;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\n      margin-left: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: @navbar-padding-horizontal;\n  padding: 9px 10px;\n  .navbar-vertical-align(34px);\n  background-color: transparent;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: @border-radius-base;\n\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: none;\n  }\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n  > li > a {\n    padding-top:    10px;\n    padding-bottom: 10px;\n    line-height: @line-height-computed;\n  }\n\n  @media (max-width: @grid-float-breakpoint-max) {\n    // Dropdowns get custom display when collapsed\n    .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none;\n      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: @line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top:    @navbar-padding-vertical;\n        padding-bottom: @navbar-padding-vertical;\n      }\n    }\n\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-left  { .pull-left(); }\n  .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -@navbar-padding-horizontal;\n  margin-right: -@navbar-padding-horizontal;\n  padding: 10px @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n\n  // Mixin behavior for optimum display\n  .form-inline();\n\n  .form-group {\n    @media (max-width: @grid-float-breakpoint-max) {\n      margin-bottom: 5px;\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  .navbar-vertical-align(@input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    .box-shadow(none);\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  .navbar-vertical-align(@input-height-base);\n\n  &.btn-sm {\n    .navbar-vertical-align(@input-height-small);\n  }\n  &.btn-xs {\n    .navbar-vertical-align(22);\n  }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  .navbar-vertical-align(@line-height-computed);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin-left: @navbar-padding-horizontal;\n    margin-right: @navbar-padding-horizontal;\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: 0;\n    }\n  }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: @navbar-default-bg;\n  border-color: @navbar-default-border;\n\n  .navbar-brand {\n    color: @navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-brand-hover-color;\n      background-color: @navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-hover-color;\n        background-color: @navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-active-color;\n        background-color: @navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n        background-color: @navbar-default-link-disabled-bg;\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: @navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: @navbar-default-border;\n  }\n\n  // Dropdown menu items\n  .navbar-nav {\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-default-link-active-bg;\n        color: @navbar-default-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: @navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-hover-color;\n            background-color: @navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-active-color;\n            background-color: @navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-disabled-color;\n            background-color: @navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: @navbar-default-link-color;\n    &:hover {\n      color: @navbar-default-link-hover-color;\n    }\n  }\n\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: @navbar-inverse-bg;\n  border-color: @navbar-inverse-border;\n\n  .navbar-brand {\n    color: @navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-brand-hover-color;\n      background-color: @navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-hover-color;\n        background-color: @navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-active-color;\n        background-color: @navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n        background-color: @navbar-inverse-link-disabled-bg;\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: @navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken(@navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-inverse-link-active-bg;\n        color: @navbar-inverse-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: @navbar-inverse-border;\n        }\n        .divider {\n          background-color: @navbar-inverse-border;\n        }\n        > li > a {\n          color: @navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-hover-color;\n            background-color: @navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-active-color;\n            background-color: @navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-disabled-color;\n            background-color: @navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-link {\n    color: @navbar-inverse-link-color;\n    &:hover {\n      color: @navbar-inverse-link-hover-color;\n    }\n  }\n\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n  .clearfix();\n}\n.center-block {\n  .center-block();\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n  margin-bottom: @line-height-computed;\n  list-style: none;\n  background-color: @breadcrumb-bg;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline-block;\n\n    + li:before {\n      content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n      padding: 0 5px;\n      color: @breadcrumb-color;\n    }\n  }\n\n  > .active {\n    color: @breadcrumb-active-color;\n  }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: @padding-base-vertical @padding-base-horizontal;\n      line-height: @line-height-base;\n      text-decoration: none;\n      color: @pagination-color;\n      background-color: @pagination-bg;\n      border: 1px solid @pagination-border;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        .border-left-radius(@border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius-base);\n      }\n    }\n  }\n\n  > li > a,\n  > li > span {\n    &:hover,\n    &:focus {\n      color: @pagination-hover-color;\n      background-color: @pagination-hover-bg;\n      border-color: @pagination-hover-border;\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 2;\n      color: @pagination-active-color;\n      background-color: @pagination-active-bg;\n      border-color: @pagination-active-border;\n      cursor: default;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: @pagination-disabled-color;\n      background-color: @pagination-disabled-bg;\n      border-color: @pagination-disabled-border;\n      cursor: not-allowed;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  &:extend(.clearfix all);\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: @pager-bg;\n      border: 1px solid @pager-border;\n      border-radius: @pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: @pager-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: @pager-disabled-color;\n      background-color: @pager-bg;\n      cursor: not-allowed;\n    }\n  }\n\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: @label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // Add hover effects, but only for links\n  &[href] {\n    &:hover,\n    &:focus {\n      color: @label-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  .label-variant(@label-default-bg);\n}\n\n.label-primary {\n  .label-variant(@label-primary-bg);\n}\n\n.label-success {\n  .label-variant(@label-success-bg);\n}\n\n.label-info {\n  .label-variant(@label-info-bg);\n}\n\n.label-warning {\n  .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n  .label-variant(@label-danger-bg);\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base classes\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: @font-size-small;\n  font-weight: @badge-font-weight;\n  color: @badge-color;\n  line-height: @badge-line-height;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: @badge-bg;\n  border-radius: @badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n  .btn-xs & {\n    top: 0;\n    padding: 1px 5px;\n  }\n}\n\n// Hover state, but only for links\na.badge {\n  &:hover,\n  &:focus {\n    color: @badge-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n\n// Account for counters in navs\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: @badge-active-color;\n  background-color: @badge-active-bg;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding: @jumbotron-padding;\n  margin-bottom: @jumbotron-padding;\n  color: @jumbotron-color;\n  background-color: @jumbotron-bg;\n\n  h1,\n  .h1 {\n    color: @jumbotron-heading-color;\n  }\n  p {\n    margin-bottom: (@jumbotron-padding / 2);\n    font-size: @jumbotron-font-size;\n    font-weight: 200;\n  }\n\n  .container & {\n    border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n  }\n\n  .container {\n    max-width: 100%;\n  }\n\n  @media screen and (min-width: @screen-sm-min) {\n    padding-top:    (@jumbotron-padding * 1.6);\n    padding-bottom: (@jumbotron-padding * 1.6);\n\n    .container & {\n      padding-left:  (@jumbotron-padding * 2);\n      padding-right: (@jumbotron-padding * 2);\n    }\n\n    h1,\n    .h1 {\n      font-size: (@font-size-base * 4.5);\n    }\n  }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: @alert-padding;\n  margin-bottom: @line-height-computed;\n  border: 1px solid transparent;\n  border-radius: @alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    // Specified for the h4 to prevent conflicts of changing @headings-color\n    color: inherit;\n  }\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: @alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissable alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable {\n padding-right: (@alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  background-color: @progress-bg;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: @font-size-small;\n  line-height: @line-height-computed;\n  color: @progress-bar-color;\n  text-align: center;\n  background-color: @progress-bar-bg;\n  .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n  .transition(width .6s ease);\n}\n\n// Striped bars\n.progress-striped .progress-bar {\n  #gradient > .striped();\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n.progress.active .progress-bar {\n  .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n  display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n  > .pull-left {\n    margin-right: 10px;\n  }\n  > .pull-right {\n    margin-left: 10px;\n  }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on 
    ,
      , or
      .\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n\n // Align badges within list items\n > .badge {\n float: right;\n }\n > .badge + .badge {\n margin-right: 5px;\n }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @list-group-hover-bg;\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: 10px 15px;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table {\n margin-bottom: 0;\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n overflow: hidden; // crop contents when collapsed\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n + .panel-collapse .panel-body {\n border-top: 1px solid @panel-inner-border;\n }\n }\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: auto;\n overflow-y: scroll;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0)}\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: none;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n margin-top: 15px;\n padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n visibility: visible;\n font-size: @font-size-small;\n line-height: 1.4;\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n text-decoration: none;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n text-align: left; // Reset given new insertion method\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Overrides for proper insertion\n white-space: normal;\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 18px;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#browsers\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n"]} \ No newline at end of file diff --git a/src/ResultsView/Content/bootstrap.min.css b/src/ResultsView/Content/bootstrap.min.css new file mode 100644 index 0000000..679272d --- /dev/null +++ b/src/ResultsView/Content/bootstrap.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.1.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#999}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:nowrap;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:0}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:0}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:0}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:0}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:0}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:0}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:0}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:0}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date]{line-height:34px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.has-feedback .form-control-feedback{position:absolute;top:25px;right:0;display:block;width:34px;height:34px;line-height:34px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.form-control-static{margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:gray}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/src/ResultsView/Content/default.css b/src/ResultsView/Content/default.css new file mode 100644 index 0000000..a9f3896 --- /dev/null +++ b/src/ResultsView/Content/default.css @@ -0,0 +1,65 @@ +body { + color: #444; +} +#body { + padding: 0 20px; +} +.error { +} +a.disabled,span.disabled,a.disabled:hover { + color: #999; + cursor: text; + text-decoration: none; +} +.help-block.error, .note.error, .notes.error { + color: #f00; +} +input.error { + background: #FFD9D9; + border: 1px solid #f00; +} +input { + border: 1px solid #cdcdcd; +} +input:hover { + border: 1px solid #b9b9b9; +} +input:focus { + border: 1px solid #4285f4; +} +.error-summary { + display: none; +} +.has-errors .error-summary, .validation .error-summary { + display: block; +} + +#modalLogin .modal-title { + font-size: 18px; +} +#modalLogin .modal-body label { + display: block; +} +#modalLogin .modal-body div { + display: inline-block; +} +#modalLogin .modal-body input { + width: 260px; + padding: 5px; + margin: 0 7px 0 0; +} + +.when-auth, .when-anon { + display: none; +} +a, span[data-click],span[data-trigger] { + color: #428bca; + cursor: pointer; +} +a:hover, span[data-click]:hover,span[data-trigger]:hover { + color: #2a6496; +} +li.active a, li.active a:hover { + color: #444; + font-weight: bold; +} \ No newline at end of file diff --git a/src/ResultsView/Content/font-awesome.css b/src/ResultsView/Content/font-awesome.css new file mode 100644 index 0000000..048cff9 --- /dev/null +++ b/src/ResultsView/Content/font-awesome.css @@ -0,0 +1,1338 @@ +/*! + * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.0.3'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.3333333333333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.2857142857142858em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.142857142857143em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.142857142857143em; + width: 2.142857142857143em; + top: 0.14285714285714285em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.8571428571428572em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: spin 2s infinite linear; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-o-keyframes spin { + 0% { + -o-transform: rotate(0deg); + } + 100% { + -o-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +.fa-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -ms-transform: rotate(270deg); + -o-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -moz-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + -o-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -moz-transform: scale(1, -1); + -ms-transform: scale(1, -1); + -o-transform: scale(1, -1); + transform: scale(1, -1); +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-asc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-desc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-reply-all:before { + content: "\f122"; +} +.fa-mail-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} diff --git a/src/ResultsView/Content/font-awesome.min.css b/src/ResultsView/Content/font-awesome.min.css new file mode 100644 index 0000000..449d6ac --- /dev/null +++ b/src/ResultsView/Content/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.0.3');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857142858em;text-align:center}.fa-ul{padding-left:0;margin-left:2.142857142857143em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;top:.14285714285714285em;text-align:center}.fa-li.fa-lg{left:-1.8571428571428572em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-asc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-desc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-reply-all:before{content:"\f122"}.fa-mail-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"} \ No newline at end of file diff --git a/src/ResultsView/Content/img/apache318x260.png b/src/ResultsView/Content/img/apache318x260.png new file mode 100644 index 0000000..81ec251 Binary files /dev/null and b/src/ResultsView/Content/img/apache318x260.png differ diff --git a/src/ResultsView/Content/img/charts-bare.png b/src/ResultsView/Content/img/charts-bare.png new file mode 100644 index 0000000..91f5e54 Binary files /dev/null and b/src/ResultsView/Content/img/charts-bare.png differ diff --git a/src/ResultsView/Content/img/charts-labelled.png b/src/ResultsView/Content/img/charts-labelled.png new file mode 100644 index 0000000..77b41b6 Binary files /dev/null and b/src/ResultsView/Content/img/charts-labelled.png differ diff --git a/src/ResultsView/Content/img/create-testplan.png b/src/ResultsView/Content/img/create-testplan.png new file mode 100644 index 0000000..21dc411 Binary files /dev/null and b/src/ResultsView/Content/img/create-testplan.png differ diff --git a/src/ResultsView/Content/img/create-testrun.png b/src/ResultsView/Content/img/create-testrun.png new file mode 100644 index 0000000..f952f7f Binary files /dev/null and b/src/ResultsView/Content/img/create-testrun.png differ diff --git a/src/ResultsView/Content/img/custom-labels.png b/src/ResultsView/Content/img/custom-labels.png new file mode 100644 index 0000000..565a85b Binary files /dev/null and b/src/ResultsView/Content/img/custom-labels.png differ diff --git a/src/ResultsView/Content/img/edit-custom-labels.png b/src/ResultsView/Content/img/edit-custom-labels.png new file mode 100644 index 0000000..5dac704 Binary files /dev/null and b/src/ResultsView/Content/img/edit-custom-labels.png differ diff --git a/src/ResultsView/Content/img/export-search-filter.png b/src/ResultsView/Content/img/export-search-filter.png new file mode 100644 index 0000000..eb91cd2 Binary files /dev/null and b/src/ResultsView/Content/img/export-search-filter.png differ diff --git a/src/ResultsView/Content/img/http-icon.png b/src/ResultsView/Content/img/http-icon.png new file mode 100644 index 0000000..1b951c2 Binary files /dev/null and b/src/ResultsView/Content/img/http-icon.png differ diff --git a/src/ResultsView/Content/img/login.png b/src/ResultsView/Content/img/login.png new file mode 100644 index 0000000..0207248 Binary files /dev/null and b/src/ResultsView/Content/img/login.png differ diff --git a/src/ResultsView/Content/img/logo.png b/src/ResultsView/Content/img/logo.png new file mode 100644 index 0000000..1674601 Binary files /dev/null and b/src/ResultsView/Content/img/logo.png differ diff --git a/src/ResultsView/Content/img/no-profile-pic-200.png b/src/ResultsView/Content/img/no-profile-pic-200.png new file mode 100644 index 0000000..edb83ed Binary files /dev/null and b/src/ResultsView/Content/img/no-profile-pic-200.png differ diff --git a/src/ResultsView/Content/img/no-profile-pic-64.png b/src/ResultsView/Content/img/no-profile-pic-64.png new file mode 100644 index 0000000..3cdf91c Binary files /dev/null and b/src/ResultsView/Content/img/no-profile-pic-64.png differ diff --git a/src/ResultsView/Content/img/no-profile-pic-96.png b/src/ResultsView/Content/img/no-profile-pic-96.png new file mode 100644 index 0000000..f806379 Binary files /dev/null and b/src/ResultsView/Content/img/no-profile-pic-96.png differ diff --git a/src/ResultsView/Content/img/no-profile-pic.jpg b/src/ResultsView/Content/img/no-profile-pic.jpg new file mode 100644 index 0000000..4e57f56 Binary files /dev/null and b/src/ResultsView/Content/img/no-profile-pic.jpg differ diff --git a/src/ResultsView/Content/img/saved-custom-labels.png b/src/ResultsView/Content/img/saved-custom-labels.png new file mode 100644 index 0000000..b17ac32 Binary files /dev/null and b/src/ResultsView/Content/img/saved-custom-labels.png differ diff --git a/src/ResultsView/Content/img/search-filter.png b/src/ResultsView/Content/img/search-filter.png new file mode 100644 index 0000000..4b891c5 Binary files /dev/null and b/src/ResultsView/Content/img/search-filter.png differ diff --git a/src/ResultsView/Content/img/splash.png b/src/ResultsView/Content/img/splash.png new file mode 100644 index 0000000..87cb400 Binary files /dev/null and b/src/ResultsView/Content/img/splash.png differ diff --git a/src/ResultsView/Content/img/updated-testrun.png b/src/ResultsView/Content/img/updated-testrun.png new file mode 100644 index 0000000..7dd78f0 Binary files /dev/null and b/src/ResultsView/Content/img/updated-testrun.png differ diff --git a/src/ResultsView/Content/img/upload-files.png b/src/ResultsView/Content/img/upload-files.png new file mode 100644 index 0000000..b39324c Binary files /dev/null and b/src/ResultsView/Content/img/upload-files.png differ diff --git a/src/ResultsView/Content/img/upload-results.png b/src/ResultsView/Content/img/upload-results.png new file mode 100644 index 0000000..b7d4d08 Binary files /dev/null and b/src/ResultsView/Content/img/upload-results.png differ diff --git a/src/ResultsView/Global.asax b/src/ResultsView/Global.asax new file mode 100644 index 0000000..c8b4f43 --- /dev/null +++ b/src/ResultsView/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.cs" Inherits="ResultsView.Global" Language="C#" %> diff --git a/src/ResultsView/Global.asax.cs b/src/ResultsView/Global.asax.cs new file mode 100644 index 0000000..625679b --- /dev/null +++ b/src/ResultsView/Global.asax.cs @@ -0,0 +1,72 @@ +using System; +using Funq; +using ResultsView.ServiceInterface; +using ResultsView.ServiceModel.Types; +using ServiceStack; +using ServiceStack.Auth; +using ServiceStack.Authentication.OAuth2; +using ServiceStack.Configuration; +using ServiceStack.Data; +using ServiceStack.OrmLite; +using ServiceStack.Razor; + +namespace ResultsView +{ + public class AppHost : AppHostBase + { + public AppHost() : base("HTTP Benchmarks Viewer", typeof(WebServices).Assembly) { } + + public override void Configure(Container container) + { + SetConfig(new HostConfig { + DebugMode = true + }); + + var appSettings = new AppSettings(); + + Plugins.Add(new RazorFormat()); + + container.Register(c => + new OrmLiteConnectionFactory("db.sqlite", SqliteDialect.Provider)); + //container.Register(c => + // new OrmLiteConnectionFactory( + // Environment.GetEnvironmentVariable("PGSQL_TEST"), + // PostgreSqlDialect.Provider)); + + Plugins.Add(new AuthFeature(() => new UserSession(), + new IAuthProvider[] { + new CredentialsAuthProvider(), + new TwitterAuthProvider(appSettings), + new FacebookAuthProvider(appSettings), + new GoogleOAuth2Provider(appSettings), + new LinkedInOAuth2Provider(appSettings), + }) { + HtmlRedirect = "/", + IncludeRegistrationService = true + }); + + container.Register(c => + new OrmLiteAuthRepository(c.Resolve()) { + MaxLoginAttempts = appSettings.Get("MaxLoginAttempts", 5) + }); + + container.Resolve().InitSchema(); + + using (var db = container.Resolve().Open()) + { + db.CreateTableIfNotExists(); + db.CreateTableIfNotExists(); + db.CreateTableIfNotExists(); + } + } + } + + public class Global : System.Web.HttpApplication + { + protected void Application_Start(object sender, EventArgs e) + { + Licensing.RegisterLicenseFromFileIfExists(@"c:\src\appsettings.license.txt"); + new AppHost().Init(); + } + } +} \ No newline at end of file diff --git a/src/ResultsView/HtmlExtensions.cs b/src/ResultsView/HtmlExtensions.cs new file mode 100644 index 0000000..0fc30cf --- /dev/null +++ b/src/ResultsView/HtmlExtensions.cs @@ -0,0 +1,16 @@ +using ResultsView.ServiceInterface; +using ServiceStack.Razor; + +namespace ResultsView +{ + public static class HtmlExtensions + { + public static string ProfileUrl(this ViewPage view) + { + var session = view.SessionAs(); + return session == null || session.ProfileUrl64 == null + ? "/Content/img/no-profile-pic-64.png" + : session.ProfileUrl64; + } + } +} \ No newline at end of file diff --git a/src/ResultsView/Properties/AssemblyInfo.cs b/src/ResultsView/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d44fa7e --- /dev/null +++ b/src/ResultsView/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ResultsView")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ResultsView")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4ea25871-7acd-4b3f-b5e7-7ef033db2bd8")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/ResultsView/ResultsView.csproj b/src/ResultsView/ResultsView.csproj new file mode 100644 index 0000000..21c3e9a --- /dev/null +++ b/src/ResultsView/ResultsView.csproj @@ -0,0 +1,248 @@ + + + + + Debug + AnyCPU + + + 2.0 + {4FEEB081-E5E7-4B44-A348-D927081CBF59} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + ResultsView + ResultsView + v4.5 + true + + + + + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\ + TRACE + prompt + 4 + + + + ..\..\lib\DotNetOpenAuth.dll + + + ..\packages\DotNetZip.1.9.2\lib\net20\Ionic.Zip.dll + + + + ..\..\lib\Mono.Data.Sqlite.dll + + + ..\..\lib\Mono.Security.dll + + + ..\..\lib\MySql.Data.dll + + + ..\..\lib\Npgsql.dll + + + ..\..\lib\ServiceStack.dll + + + ..\..\lib\ServiceStack.Api.Swagger.dll + + + ..\..\lib\ServiceStack.Authentication.OAuth2.dll + + + ..\..\lib\ServiceStack.Client.dll + + + ..\..\lib\ServiceStack.Common.dll + + + ..\..\lib\ServiceStack.Interfaces.dll + + + ..\..\lib\ServiceStack.OrmLite.dll + + + ..\..\lib\ServiceStack.OrmLite.MySql.dll + + + ..\..\lib\ServiceStack.OrmLite.PostgreSQL.dll + + + ..\..\lib\ServiceStack.OrmLite.Sqlite.dll + + + ..\..\lib\ServiceStack.OrmLite.SqlServer.dll + + + ..\..\lib\ServiceStack.Razor.dll + + + ..\..\lib\ServiceStack.Server.dll + + + ..\..\lib\ServiceStack.Text.dll + + + + + + + + + + + False + ..\..\lib\System.Web.Razor.dll + + + + + + + + + + + + sqlite3.dll + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Global.asax + + + + + + + + + + + Web.config + + + Web.config + + + + + {3849EE26-780B-450C-9183-0C6EFD2920D5} + ResultsView.ServiceInterface + + + {F2EBE29F-4050-46E1-86AA-8FCFA6CD3860} + ResultsView.ServiceModel + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + True + True + 60871 + / + http://localhost:56000/ + False + False + + + False + + + + + + \ No newline at end of file diff --git a/src/ResultsView/Scripts/bootstrap.js b/src/ResultsView/Scripts/bootstrap.js new file mode 100644 index 0000000..8ae571b --- /dev/null +++ b/src/ResultsView/Scripts/bootstrap.js @@ -0,0 +1,1951 @@ +/*! + * Bootstrap v3.1.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') } + +/* ======================================================================== + * Bootstrap: transition.js v3.1.1 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd', + 'MozTransition' : 'transitionend', + 'OTransition' : 'oTransitionEnd otransitionend', + 'transition' : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false, $el = this + $(this).one($.support.transition.end, function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.1.1 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.hasClass('alert') ? $this : $this.parent() + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent.trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one($.support.transition.end, removeElement) + .emulateTransitionEnd(150) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.1.1 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (!data.resetText) $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked') && this.$element.hasClass('active')) changed = false + else $parent.find('.active').removeClass('active') + } + if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') + } + + if (changed) this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + e.preventDefault() + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.1.1 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getActiveIndex = function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + + return this.$items.index(this.$active) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getActiveIndex() + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || $active[type]() + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + if (!$next.length) { + if (!this.options.wrap) return + $next = this.$element.find('.item')[fallback]() + } + + if ($next.hasClass('active')) return this.sliding = false + + var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid.bs.carousel', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0) + }) + .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid.bs.carousel') + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + }) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + $carousel.carousel($carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.1.1 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.transitioning = null + + if (this.options.parent) this.$parent = $(this.options.parent) + if (this.options.toggle) this.toggle() + } + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var actives = this.$parent && this.$parent.find('> .panel > .in') + + if (actives && actives.length) { + var hasData = actives.data('bs.collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing') + [dimension](0) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in') + [dimension]('auto') + this.transitioning = 0 + this.$element.trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + [dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element + [dimension](this.$element[dimension]()) + [0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse') + .removeClass('in') + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .trigger('hidden.bs.collapse') + .removeClass('collapsing') + .addClass('collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && option == 'show') option = !option + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + var target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + var $target = $(target) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + var parent = $this.attr('data-parent') + var $parent = parent && $(parent) + + if (!data || !data.transitioning) { + if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') + $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + } + + $target.collapse(option) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.1.1 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle=dropdown]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $('