From 3e07fd307cc0d344dad61ff285061555d4eef1cf Mon Sep 17 00:00:00 2001 From: Claire Strodtbeck Date: Mon, 15 Jun 2020 20:19:42 -0700 Subject: [PATCH] ApiResult now works to retrieve data via GET using an access token! --- MatrixDotNetLib/.vs/MatrixDotNetLib/v16/.suo | Bin 45568 -> 53248 bytes MatrixDotNetLib/MatrixDotNetCmd/Program.cs | 11 +- ...rixDotNetCmd.csprojAssemblyReference.cache | Bin 110069 -> 6992 bytes MatrixDotNetLib/MatrixDotNetLib/MatrixApis.cs | 706 +++++++++++++++--- .../MatrixDotNetLib/MatrixSessionManager.cs | 118 ++- .../Debug/netcoreapp3.1/MatrixDotNetLib.dll | Bin 18432 -> 24064 bytes .../Debug/netcoreapp3.1/MatrixDotNetLib.pdb | Bin 3464 -> 6192 bytes ...ixDotNetLib.csproj.CoreCompileInputs.cache | 2 +- ...rixDotNetLib.csprojAssemblyReference.cache | Bin 104852 -> 104852 bytes .../Debug/netcoreapp3.1/MatrixDotNetLib.dll | Bin 18432 -> 24064 bytes .../Debug/netcoreapp3.1/MatrixDotNetLib.pdb | Bin 3464 -> 6192 bytes 11 files changed, 700 insertions(+), 137 deletions(-) diff --git a/MatrixDotNetLib/.vs/MatrixDotNetLib/v16/.suo b/MatrixDotNetLib/.vs/MatrixDotNetLib/v16/.suo index aab20682ee99979aa97755e85edfd12b86efaf21..4280dc45d9b0a1b763902982b9a756d3029a40a0 100644 GIT binary patch literal 53248 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 delta 4398 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 Y9fztc;8j3AoqFoKK|YZ|xs%`izimI?c>n+a diff --git a/MatrixDotNetLib/MatrixDotNetLib/MatrixApis.cs b/MatrixDotNetLib/MatrixDotNetLib/MatrixApis.cs index 5becb17..18f56df 100644 --- a/MatrixDotNetLib/MatrixDotNetLib/MatrixApis.cs +++ b/MatrixDotNetLib/MatrixDotNetLib/MatrixApis.cs @@ -7,120 +7,636 @@ namespace MatrixDotNetLib public class MatrixApis { - public class Server + public static class Server { + /// + /// Gets discovery information about the domain. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/Server32administration/getWellknown + /// public static string Discovery = "/.well-known/matrix/client"; + + /// + /// Gets the versions of the specifications supported by the server. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/Server32administration/getVersions + /// public static string Versions = "/_matrix/client/versions"; + + /// + /// Gets information about the server's supported feature set and other relevant capabilities. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/Capabilities/getCapabilities + /// public static string Capabilities = "/_matrix/client/r0/capabilities"; + + /// + /// Gets information about a particular user. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/Server32administration/getWhoIs + /// public static string Whois = "/_matrix/client/r0/admin/whois/{userid}"; + + /// + /// Performs a full text search across different categories. Posts with a search object. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/Search/search + /// public static string Search = "/_matrix/client/r0/search"; + + /// + /// Performs a user search. Posts with a user search object. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/User32data/searchUserDirectory + /// public static string UserSearch = "/_matrix/client/r0/user_directory/search"; + + /// + /// Lists the public rooms on the server. Posts with a filter object. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/Room32discovery/getPublicRooms + /// public static string RoomList = "/_matrix/client/r0/publicrooms"; - public static string ManageRooms = "/_matrix/client/r0/directory/list/appservice/{networkid}/{roomid}"; - public static string UpgradeRoom = "/_matrix/client/r0/rooms/{roomid}/upgrade"; - public static string Openid = "/_matrix/client/r0/user/{userid}/openid/request_token"; - public static string Voip = "/_matrix/client/r0/voip/turnserver"; - } - public class Key - { - public static string Latest = "/_matrix/client/r0/keys/changes"; - public static string Claim = "/_matrix/client/r0/keys/claim"; - public static string Download = "/_matrix/client/r0/keys/query"; - public static string Upload = "/_matrix/client/r0/keys/upload"; - } + /// + /// Updates the visibility of a given room in the directory. Puts a visibility object. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/Application32service32room32directory32management/updateAppserviceRoomDirectoryVsibility + /// + public static string ManageRooms = "/_matrix/client/r0/directory/list/appservice/{networkid}/{roomid}"; - public class Device - { - public static string Manage = "/_matrix/client/r0/devices"; - public static string MultiDelete = "/_matrix/client/r0/delete_devices"; - public static string Send = "/_matrix/client/r0/sendtodevice/{eventtype}/{txnid}"; - } + /// + /// Upgrades the given room to a particular room version. Posts with a room upgrade object. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/Room32upgrades/upgradeRoom + /// + public static string UpgradeRoom = "/_matrix/client/r0/rooms/{roomid}/upgrade"; - public class Media - { - public static string Config = "/_matrix/media/r0/config"; - public static string Save = "/_matrix/media/r0/download/{servername}/{mediaid}"; - public static string Saveas = "/_matrix/media/r0/download/{servername}/{mediaid}/{filename}"; - public static string Preview = "/_matrix/media/r0/preview_url"; - public static string Thumb = "/_matrix/media/r0/thumbnail/{servername}/{mediaid}"; - public static string Upload = "/_matrix/media/r0/upload"; - } + /// + /// Gets an OpenID token object for use with another service. Posts with a userId parameter. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/OpenID/requestOpenIdToken + /// + public static string Openid = "/_matrix/client/r0/user/{userid}/openid/request_token"; - public class Notifier - { - public static string Notifiers = "/_matrix/client/r0/notifications"; - public static string Pushers = "/_matrix/client/r0/pushers"; - public static string Set = "/_matrix/client/r0/pushers/set"; - public static string Rules = "/_matrix/client/r0/pushrules/"; + /// + /// Gets client credentials for use when initiating a call. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/VOIP/getTurnServer + /// + public static string Voip = "/_matrix/client/r0/voip/turnserver"; } - public class NotifierRule - { - public static string Manage = "/_matrix/client/r0/pushrules/{scope}/{kind}/{ruleid}"; - public static string Actions = "/_matrix/client/r0/pushrules/{scope}/{kind}/{ruleid}/actions"; - public static string Toggle = "/_matrix/client/r0/pushrules/{scope}/{kind}/{ruleid}/enabled"; - } + public static class Key + { + /// + /// Gets a list of users who have updated their device identity keys. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/End45to45end32encryption/getKeysChanges + /// + public static string Latest = "/_matrix/client/r0/keys/changes"; - public static class User - { - public static string Thirdparty = "/_matrix/client/r0/account/3pid"; - public static string Deactivate = "/_matrix/client/r0/account/deactivate"; - public static string Password = "/_matrix/client/r0/account/password"; - public static string Register = "/_matrix/client/r0/register"; - public static string WhoAmI = "/_matrix/client/r0/account/whoami"; - public static string Profile = "/_matrix/client/r0/profile/{userid}"; - public static string Avatar = "/_matrix/client/r0/profile/{userid}/avtatar_url"; - public static string DisplayName = "/_matrix/client/r0/profile/{userid}/displayname"; - public static string ExtraInfo = "/_matrix/client/r0/user/{userid}/account_data/{type}"; - public static string EventFilter = "/_matrix/client/r0/user/{userid}/filter"; - public static string Rooms = "/_matrix/client/r0/joined_rooms"; - public static string Login = "/_matrix/client/r0/login"; - public static string Logout = "/_matrix/client/r0/logout"; - public static string Status = "/_matrix/client/r0/presence/{userid}/status"; - } + /// + /// Claims one-time keys for use in pre-key messages. Posts with a key object. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/End45to45end32encryption/claimKeys + /// + public static string Claim = "/_matrix/client/r0/keys/claim"; - public class UserRoom - { - public static string Extrainfo = "/_matrix/client/r0/user/{userid}/rooms/{roomid}/account_data/{type}"; - public static string Tags = "/_matrix/client/r0/user/{userid}/rooms/{roomid}/tags"; - } + /// + /// Returns the current devices and identity keys for the given users. Posts with a key object. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/End45to45end32encryption/queryKeys + /// + public static string Download = "/_matrix/client/r0/keys/query"; - public class Room - { - public static string Create = "/_matrix/client/r0/createroom"; - public static string Aliases = "/_matrix/client/unstable/org.matrix.msc2432/rooms/{roomid}/aliases"; - public static string Active = "/_matrix/client/r0/rooms/{roomid}/joined_members"; - public static string Members = "/_matrix/client/r0/rooms/{roomid}/members"; - public static string Messages = "/_matrix/client/r0/rooms/{roomid}/messages"; - public static string Join = "/_matrix/client/r0/join/{roomidoralias}"; - public static string Ban = "/_matrix/client/r0/rooms/{roomid}/ban"; - public static string Forget = "/_matrix/client/r0/rooms/{roomid}/forget"; - public static string Invite = "/_matrix/client/r0/rooms/{roomid}/invite"; - public static string IdJoin = "/_matrix/client/r0/rooms/{roomid}/join"; - public static string Kick = "/_matrix/client/r0/rooms/{roomid}/kick"; - public static string Leave = "/_matrix/client/r0/rooms/{roomid}/leave"; - public static string Unban = "/_matrix/client/r0/rooms/{roomid}/unban"; - public static string Marker = "/_matrix/client/r0/rooms/{roomid}/read_markers"; - } + /// + /// Publishes end-to-end encryption keys for the device. Posts with a key object. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/End45to45end32encryption/uploadKeys + /// + public static string Upload = "/_matrix/client/r0/keys/upload"; + } - public class RoomEvent - { - public static string Context = "/_matrix/client/r0/rooms/{roomid}/context/{eventid}"; - public static string Event = "/_matrix/client/r0/rooms/{roomid}/event/{eventid}"; - public static string Receipt = "/_matrix/client/r0/rooms/{roomid}/receipt/{receipttype}/{eventid}"; - public static string Redact = "/_matrix/client/r0/rooms/{roomid}/redact/{eventid}/{txnid}"; - public static string Send = "/_matrix/client/r0/rooms/{roomid}/send/{eventtype}/{txnid}"; - public static string Typing = "/_matrix/client/r0/rooms/{roomid}/typing/{userid}"; - public static string Flag = "/_matrix/client/r0/rooms/{roomid}/report/{eventid}"; - } + public static class Device + { + /// + /// Private string for device URL + /// + private static string _deviceIdUrl = "/_matrix/client/r0/devices/{deviceId}"; - public class RoomState - { - public static string List = "/_matrix/client/r0/rooms/{roomid}/state"; - public static string State = "/_matrix/client/r0/rooms/{roomid}/state/{eventtype}/{statekey}"; - } - } + /// + /// Gets information about all devices for the current user. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/Device32management/getDevices + /// + public static string Manage = "/_matrix/client/r0/devices"; + + /// + /// Deletes the given device, and invalidates any access token associated with it. Deletes with interactive auth object and deviceId parameter. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/Device32management/deleteDevice + /// + public static string Delete = _deviceIdUrl; + + /// + /// Gets information on a single device, by device id. Gets with deviceId parameter. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/Device32management/getDevice + /// + public static string Info = _deviceIdUrl; + + /// + /// Updates the metadata (display name) on the given device. Puts a device metadata object with deviceId parameter. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/Device32management/updateDevice + /// + public static string Update = _deviceIdUrl; + + /// + /// Deletes the given devices, and invalidates any access token associated with them. Posts with an interactive auth + device list object. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/Device32management/deleteDevices + /// + public static string MultiDelete = "/_matrix/client/r0/delete_devices"; + + /// + /// Sends send-to-device events to the given devices. Puts a device message object with eventType and txnId parameters. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/Send45to45Device32messaging/sendToDevice + /// + public static string Send = "/_matrix/client/r0/sendtodevice/{eventtype}/{txnid}"; + } + + public static class Media + { + + /// + /// + /// + /// + /// + /// + public static string Config = "/_matrix/media/r0/config"; + + /// + /// + /// + /// + /// + /// + public static string Save = "/_matrix/media/r0/download/{servername}/{mediaid}"; + + /// + /// + /// + /// + /// + /// + public static string Saveas = "/_matrix/media/r0/download/{servername}/{mediaid}/{filename}"; + + /// + /// + /// + /// + /// + /// + public static string Preview = "/_matrix/media/r0/preview_url"; + + /// + /// + /// + /// + /// + /// + public static string Thumb = "/_matrix/media/r0/thumbnail/{servername}/{mediaid}"; + + /// + /// + /// + /// + /// + /// + public static string Upload = "/_matrix/media/r0/upload"; + } + + public static class Notifier + { + + /// + /// + /// + /// + /// + /// + public static string Notifiers = "/_matrix/client/r0/notifications"; + + /// + /// + /// + /// + /// + /// + public static string Pushers = "/_matrix/client/r0/pushers"; + + /// + /// + /// + /// + /// + /// + public static string Set = "/_matrix/client/r0/pushers/set"; + + /// + /// + /// + /// + /// + /// + public static string Rules = "/_matrix/client/r0/pushrules/"; + } + + public static class NotifierRule + { + + /// + /// + /// + /// + /// + /// + public static string Manage = "/_matrix/client/r0/pushrules/{scope}/{kind}/{ruleid}"; + + /// + /// + /// + /// + /// + /// + public static string Actions = "/_matrix/client/r0/pushrules/{scope}/{kind}/{ruleid}/actions"; + + /// + /// + /// + /// + /// + /// + public static string Toggle = "/_matrix/client/r0/pushrules/{scope}/{kind}/{ruleid}/enabled"; + } + + public static class User + { + + /// + /// + /// + /// + /// + /// + public static string Thirdparty = "/_matrix/client/r0/account/3pid"; + + /// + /// + /// + /// + /// + /// + public static string Deactivate = "/_matrix/client/r0/account/deactivate"; + + /// + /// + /// + /// + /// + /// + public static string Password = "/_matrix/client/r0/account/password"; + + /// + /// + /// + /// + /// + /// + public static string Register = "/_matrix/client/r0/register"; + + /// + /// + /// + /// + /// + /// + public static string WhoAmI = "/_matrix/client/r0/account/whoami"; + + /// + /// + /// + /// + /// + /// + public static string Profile = "/_matrix/client/r0/profile/{userid}"; + + /// + /// + /// + /// + /// + /// + public static string Avatar = "/_matrix/client/r0/profile/{userid}/avtatar_url"; + + /// + /// + /// + /// + /// + /// + public static string DisplayName = "/_matrix/client/r0/profile/{userid}/displayname"; + + /// + /// + /// + /// + /// + /// + public static string ExtraInfo = "/_matrix/client/r0/user/{userid}/account_data/{type}"; + + /// + /// + /// + /// + /// + /// + public static string EventFilter = "/_matrix/client/r0/user/{userid}/filter"; + + /// + /// Gets a list of the user's current rooms. + /// + /// + /// https://matrix.org/docs/api/client-server/#!/Room32membership/getJoinedRooms + /// + public static string Rooms = "/_matrix/client/r0/joined_rooms"; + + /// + /// + /// + /// + /// + /// + public static string Login = "/_matrix/client/r0/login"; + + /// + /// + /// + /// + /// + /// + public static string Logout = "/_matrix/client/r0/logout"; + + /// + /// + /// + /// + /// + /// + public static string Status = "/_matrix/client/r0/presence/{userid}/status"; + } + + public static class UserRoom + { + + /// + /// + /// + /// + /// + /// + public static string Extrainfo = "/_matrix/client/r0/user/{userid}/rooms/{roomid}/account_data/{type}"; + + /// + /// + /// + /// + /// + /// + public static string Tags = "/_matrix/client/r0/user/{userid}/rooms/{roomid}/tags"; + } + + public static class Room + { + + /// + /// + /// + /// + /// + /// + public static string Create = "/_matrix/client/r0/createroom"; + + /// + /// + /// + /// + /// + /// + public static string Aliases = "/_matrix/client/unstable/org.matrix.msc2432/rooms/{roomid}/aliases"; + + /// + /// + /// + /// + /// + /// + public static string Active = "/_matrix/client/r0/rooms/{roomid}/joined_members"; + + /// + /// + /// + /// + /// + /// + public static string Members = "/_matrix/client/r0/rooms/{roomid}/members"; + + /// + /// + /// + /// + /// + /// + public static string Messages = "/_matrix/client/r0/rooms/{roomid}/messages"; + + /// + /// + /// + /// + /// + /// + public static string Join = "/_matrix/client/r0/join/{roomidoralias}"; + + /// + /// + /// + /// + /// + /// + public static string Ban = "/_matrix/client/r0/rooms/{roomid}/ban"; + + /// + /// + /// + /// + /// + /// + public static string Forget = "/_matrix/client/r0/rooms/{roomid}/forget"; + + /// + /// + /// + /// + /// + /// + public static string Invite = "/_matrix/client/r0/rooms/{roomid}/invite"; + + /// + /// + /// + /// + /// + /// + public static string IdJoin = "/_matrix/client/r0/rooms/{roomid}/join"; + + /// + /// + /// + /// + /// + /// + public static string Kick = "/_matrix/client/r0/rooms/{roomid}/kick"; + + /// + /// + /// + /// + /// + /// + public static string Leave = "/_matrix/client/r0/rooms/{roomid}/leave"; + + /// + /// + /// + /// + /// + /// + public static string Unban = "/_matrix/client/r0/rooms/{roomid}/unban"; + + /// + /// + /// + /// + /// + /// + public static string Marker = "/_matrix/client/r0/rooms/{roomid}/read_markers"; + } + + public static class RoomEvent + { + + /// + /// + /// + /// + /// + /// + public static string Context = "/_matrix/client/r0/rooms/{roomid}/context/{eventid}"; + + /// + /// + /// + /// + /// + /// + public static string Event = "/_matrix/client/r0/rooms/{roomid}/event/{eventid}"; + + /// + /// + /// + /// + /// + /// + public static string Receipt = "/_matrix/client/r0/rooms/{roomid}/receipt/{receipttype}/{eventid}"; + + /// + /// + /// + /// + /// + /// + public static string Redact = "/_matrix/client/r0/rooms/{roomid}/redact/{eventid}/{txnid}"; + + /// + /// + /// + /// + /// + /// + public static string Send = "/_matrix/client/r0/rooms/{roomid}/send/{eventtype}/{txnid}"; + + /// + /// + /// + /// + /// + /// + public static string Typing = "/_matrix/client/r0/rooms/{roomid}/typing/{userid}"; + + /// + /// + /// + /// + /// + /// + public static string Flag = "/_matrix/client/r0/rooms/{roomid}/report/{eventid}"; + } + + public static class RoomState + { + + /// + /// + /// + /// + /// + /// + public static string List = "/_matrix/client/r0/rooms/{roomid}/state"; + + /// + /// + /// + /// + /// + /// + public static string State = "/_matrix/client/r0/rooms/{roomid}/state/{eventtype}/{statekey}"; + } + } public class MatrixApiEntities { diff --git a/MatrixDotNetLib/MatrixDotNetLib/MatrixSessionManager.cs b/MatrixDotNetLib/MatrixDotNetLib/MatrixSessionManager.cs index 5bafd44..fd5aca6 100644 --- a/MatrixDotNetLib/MatrixDotNetLib/MatrixSessionManager.cs +++ b/MatrixDotNetLib/MatrixDotNetLib/MatrixSessionManager.cs @@ -1,6 +1,7 @@ using Newtonsoft.Json; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Net; using System.Net.Http; using System.Net.Http.Headers; @@ -13,10 +14,21 @@ namespace MatrixDotNetLib { public class MatrixSessionManager { + /// + /// Gets or sets the authentication token. + /// public string Token { get; set; } + /// + /// Gets or sets the Matrix homeserver FQDN. + /// public string Server { get; set; } + /// + /// Gets or sets the login session as a MatrixLoginResponse object. + /// + public MatrixLoginResponse LoginSession { get; set; } + /// /// Logs the user in with specified server and credentials. /// @@ -27,6 +39,9 @@ namespace MatrixDotNetLib /// public MatrixLoginResponse Login(string server, string user, string pass, string device = "") { + // set the object's server + this.Server = server; + MatrixLoginIdentifier userId = new MatrixLoginIdentifier() { IdType = "m.id.user", @@ -45,51 +60,34 @@ namespace MatrixDotNetLib theRequest.DeviceId = device; } - // create a web request - string loginUrl = "https://" + server + MatrixApis.User.Login; - // serialize object into JSON string requestJson = JsonConvert.SerializeObject(theRequest); - string responseJson = ApiResult(MatrixApis.User.Login, httpAction.GET, requestJson); + string responseJson = ApiResult(MatrixApis.User.Login, httpAction.POST, requestJson); MatrixLoginResponse response = JsonConvert.DeserializeObject(responseJson); - return response; - //// simplest implementation - //// might not work for UWP - //// sauce: https://stackoverflow.com/questions/5527316/how-to-set-the-content-of-an-httpwebrequest-in-c - //HttpContent requestContent = new StringContent(requestJson, Encoding.UTF8, "application/json"); + // we're logged in, so set the object's token + this.Token = response.Token; - //HttpClient client = new HttpClient(); - //client.BaseAddress = new Uri(loginUrl); - //client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + // also set the object's session data + this.LoginSession = response; - //HttpResponseMessage responseMessage = client.PostAsync(loginUrl, requestContent).Result; - //string responseString = responseMessage.Content.ReadAsStringAsync().Result; - - //if(responseString.Contains("errcode")) - //{ - // // deserialize into error object - // MatrixError error = JsonConvert.DeserializeObject(responseString); + return response; + } - // // convert error object to a string - // string errMsg = error.ErrorCode + ": " + error.ErrorMessage; + /// + /// Gets the logged-in user's currently-joined rooms. + /// + /// + public MatrixUserRooms GetRooms() + { - // // throw exception (can be caught and handled gracefully) - // throw new Exception(errMsg); - //} - //else - //{ - // MatrixLoginResponse response = JsonConvert.DeserializeObject(responseString); + string responseJson = ApiResult(MatrixApis.User.Rooms, httpAction.GET); - // return response; - //} - } + MatrixUserRooms theRooms = JsonConvert.DeserializeObject(responseJson); - public MatrixUserRooms GetRooms(string token) - { - + return theRooms; } public enum httpAction @@ -109,10 +107,17 @@ namespace MatrixDotNetLib // replace all entities in param string url = "https://" + this.Server + api; - + HttpClient client = new HttpClient(); client.BaseAddress = new Uri(url); + // if an access token exists, create a bearer authorization header + if (this.Token != null) + { + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", this.Token); + + } + // init empty string string responseString = ""; @@ -143,6 +148,7 @@ namespace MatrixDotNetLib // get value of property through GetType().GetProperty().GetValue() // sauce: https://www.techrepublic.com/article/applied-reflection-dynamically-accessing-properties-of-a-class-at-runtime/ string newVal = entities.GetType().GetProperty(prop).GetValue(entities).ToString(); + // return URL with entities replaced and URL-encoded url = WebUtility.UrlEncode(url.Replace(oldVal, newVal)); } @@ -171,8 +177,6 @@ namespace MatrixDotNetLib responseMessage = client.PutAsync(url, requestContent).Result; break; } - - responseString = responseMessage.Content.ReadAsStringAsync().Result; } else { @@ -188,6 +192,8 @@ namespace MatrixDotNetLib } } + responseString = responseMessage.Content.ReadAsStringAsync().Result; + if (responseString.Contains("errcode")) { // deserialize into error object @@ -199,10 +205,48 @@ namespace MatrixDotNetLib // throw exception (can be caught and handled gracefully) throw new Exception(errMsg); } + else if (responseMessage.StatusCode != HttpStatusCode.OK) + { + // web server responded with an HTTP status code other than 200 OK + string errMsg = "Server returned " + (int)responseMessage.StatusCode + ": " + responseMessage.StatusCode.ToString(); + throw new Exception(errMsg); + } else { return responseString; } } } -} \ No newline at end of file +} + + + +//// simplest implementation +//// might not work for UWP +//// sauce: https://stackoverflow.com/questions/5527316/how-to-set-the-content-of-an-httpwebrequest-in-c +//HttpContent requestContent = new StringContent(requestJson, Encoding.UTF8, "application/json"); + +//HttpClient client = new HttpClient(); +//client.BaseAddress = new Uri(loginUrl); +//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + +//HttpResponseMessage responseMessage = client.PostAsync(loginUrl, requestContent).Result; +//string responseString = responseMessage.Content.ReadAsStringAsync().Result; + +//if(responseString.Contains("errcode")) +//{ +// // deserialize into error object +// MatrixError error = JsonConvert.DeserializeObject(responseString); + +// // convert error object to a string +// string errMsg = error.ErrorCode + ": " + error.ErrorMessage; + +// // throw exception (can be caught and handled gracefully) +// throw new Exception(errMsg); +//} +//else +//{ +// MatrixLoginResponse response = JsonConvert.DeserializeObject(responseString); + +// return response; +//} \ No newline at end of file diff --git a/MatrixDotNetLib/MatrixDotNetLib/bin/Debug/netcoreapp3.1/MatrixDotNetLib.dll b/MatrixDotNetLib/MatrixDotNetLib/bin/Debug/netcoreapp3.1/MatrixDotNetLib.dll index b5d30dd8ffdc9b067a8d071c9c6dc01ed03187ac..61bb19a095d85562310e713af8f3d6c3166676ce 100644 GIT binary patch literal 24064 zcmeHv4R}=7dFFTTjAlk7X*53|zydtNfQ11e0X9GWlRyGw{saOTNsPn?66v&^i}zb`C!dZd)A9DL-SH87&}yow z3C`7~yE=$A86Il9`tnb^wVk0k@hYR4XeSt-VvpqT8OM7JZ=$eZQ~AvV`!BDPkl^{{ zp}spgEB`BgYLzLx7QpUS24h6mb0E%r9V4m+*PJElIXCTmdYmXwk{*D*p+s-WS%T7bc&Hyy=Z47`LdOhAHuU2$dlVhc9WMp6I7~X7a58frOR-!c} zs=&SM1YYc$Nfq?YWkf5X7{Y#dF~@8S5e4b8+2%)K!+Y5r({qae5b#M60ze?(iVy$- zty6>m5EU*V00hQ^${_%R-z5ZqK-g6d0U#<}LI8-MO9%i_2>~Exxr6`^vt2>}h>Kl90EoCtXi%)K!A%i> ztaDsK0EkOmLI8-lE}=ou*gQ8ygJQ~jH$?!9T4gi^15+Ar1YJ|vhV*_QR;q9Ik^>48GeXV^_-8imfIUwm#%eH_ z#Q+Uf`F&Z8%b*SSgJd>#BYn!do|re{T{N5gHU?tQ>6D_Jl*Kp<+8A<}bAJ_6;+b68)VEE@ntdkf-!&AL8(}PB7UEZ;TN>zjWHI?p%)@fKse|6C0@}L@^F7Qf)Wj0~&@+(8f>+#%g?#sz{BEQ4(y#fCvWZ zI~4G>)XiI?jlm3g$sh=n4dMS)1j#&8JIf2S-)L9nKR+ff^-U9_Jn8W(_Z z4x=eq1Tq*4t3cQb3-lr&docugW6?-77KucrH&vpOA~Tv|3+MQKk+9vwd6q!bEJX7` zG#3eU)N&M^5}6WphtV|6);%OR=*&ckq%hiEW1 zH8OP(`o0kzzA#o7sbhbA&L1Nk7|!~n<73kz)3O*1!J8|2L#D*)3IWfdU+1lpkp0U!{5MQBi*{Ai|1(V&=u?ocTj z6jRVgDn$UyqoWj|fzArQW6d5yJa`L_kf#xoIvDgVs-z=V0aY!$#8b!XL9p=}i0Y`> zcr89X)9hB}uwWny`LUlC491!bvSE*3&Wniq7<%99R2o3&c&~FMBlNk~!CsshL&tla z|H=rx?{(f|gueGW+e{$zs@M4>BXq3Snc@M0w_ayIBXpG4`934K?Y-=TbCDMqj(eRO z7{PI`^C?E~-s^mi5&ZX}7tn5lurkTZ30EMcmGkUjgm!t4usXJ;fYugJJCO7HoDYkm z*ZBb>tf1b@-gd6>0mG`-$uQc$==+SY;CP)aexU0ZeT>mYMsG0M1O)Hr1b{a)JIH7Y zqt7tf%IGCVU7YiXGo=!E8?#3kZD;fjBP?lX9k=a1X&L&!34+J+>vg`uXa}Qr8SP}W zt_le29xO4sp3yfM?Pe6L2D*XK0Y*16`Y(+3Fj`&%w3pExj6TBXIYzt{IBzrRV{};v zC;@cYPUkkp{mfR?0u3-b-rqd)gPh|jMi!%$VW54CKEr5;(JvV7XVe}6N-}zo(E&zh z7!5O88U;!*x`WXOqwg_FGm6K6FkaDPj53T)GP((9!Z?{d1u577yv|*WvW$MtD8~p} zPG&66=%mss8g%n`xrhZpy> zfj)XEWKl~&JE}EP(!N;3X;W#TXhUJvrqfcdoSo2GsyTubn@H)W}$umRjJSv_KiJdi4 z*IvnUT522=%Z~~^AU=OaN(~6}xRlMPwoBR1Oa3nj^N*5$P-IS+Gh+F6scVYJc_MF> zvMN5uB>zn!cS-79u<7&dqKA#0IQu*Ud7a2DBD*2G;=JD6HT`rAuS&a>7C22Ope3~S zW6WuT4rncFoWK>CqqSQx!%h0A)_&_hfffFCtyKlW(C*dRYNUDTL9MO#hoOB|YrA2y zg1(@&eXvhcLMvtpKEQkFAVKjt$h`K`suH=b_#y_>2J06Tcic(C9PG#W`NFW zZARb(Rnlu(TL3>R=}oPjtvP`!onLG1^_nm=PXpm~S6~MGtfDHd&4tY>nxeJeqFgo2 z)LLyQ3~ip)UWG3;v{-9z!p|DILTmRSE+M)`YoA73LbP6MJxHsity&vES}k3#wPzwH zV5d)O&qcz}l3F_%I)NkmO%zC`F|tt~+tqI8?qR-p}1`ncAPqrMnDptZ+QUyL5n z+FF#GLVu*SEhsmIzN|DEJyYq=by^lZHkH1iwWH{S%?|D!RTeyz3Z!>6Em=13n&&KXp#w7}D7(F~fRwQrzB zGia99Uavku7tuVey;B{A)}%DCQco*%8qbG%x>jpEAL?m?);?eTZCw0yY3(c3r=jiE z+Dz0wixOH}h}vh-0j;e?BxaMNwJtBq_uyl zebJapXSEg#zXa{)N|V~>(Jyrx`#F#PS!?X)Jn~*r?4$Wqqcmyle445?_H#bX*4li` zs!M6U)><$dFQp|~`_rnIjYe9bwUbq^Kxy zKbv3lrG>t(w7?J0_7?h<*3P2sE%Y6&eFE`ZNdS|V>lC=R1N8&#o=(+ODP{m;PqfQY|<~P!eI}!RWttpuCP9QWJbf4bh^gC zPQqt}8IVC*0Le3i<9zK1}yW>RHKo4=oLkF;jaN{ckWIr`PC(s{837NqvY?p-fi}_jP9&`oGOjhswXKyzw$prGmQ5lU#AA6EBG9kFCxziwAc4MEik_9`!33+Bj2Z| zXh*Vm8%8}br51i6r&fLuoZ3Gzz%4&++;JIIZ~cSE*{oi;7mTA$#A zmduO^KB^@%#{?hOl9`i&Pie`_8Np|@WQGj(+0c@ixZnmYnQ0Z=rX@3df)iRYGbZ?` zmdqRzd|XRrP6|GyB{OFPpVg8XGQ}S)nTZQ-(2|)}!EIVH(2^yF=38s$^1RwJ3YsQIj$x1kAdIqIVsF3Et!8F{LP*-!kpET z`Pabzu7|whzn08bdfCsoFb!HVzX1FLo>pPnv}C>${Ay31FbOT0PlEq~XH1x*S~7nR z_^)`533FUa<{tw;-*Zx!Q(7{AM(|lJnV|~tSxaW(f*Z7CWMKo|D3y(vtb-!T;2AMwqi&GXEO*UwX(V zK5NN*rEi!jysg6Yi99Cqq{uTO$!-HMai))(-+;`(0(NFbQmm6>`IS<#2^Qj8^ zV>RxW)ld_z>6T#CewpGX(d`Dy+5pRqewGJ>xyHx%Tau?%n8lLkmo>~c3KI)4ep~W9 zEMj(DZ&qRbPfh+N6BFa_3xFQFxMw|`2Yk)(zPB!qa1?FpCKDFR0 zWL)XSfMfVGarHVCcq;x(T!T&no`ydYeK`Yo2L4Q357qd|b5{cwY+Kh*4qSy#RP2{tQ|KX=0o#25y2h zF;~qUDNACh~&W^$7!u1RFA9ZqUufO_mL{^1zBEP{NvEDCD)sj2>e(9(P-80c9&y2QIGLfA;sdI3v^FGNviJ?gfZA@dy zP)uW%aciVr4kjxrz1VU37ZpXOeaa-Ze=reI&0}E zRy6MtyhD^uLh5W!qDVH;pR%aO9vZ?&mt*h4Y@;o<8a=%1iKXKF6i-W3cGaDsl2%Zp z5rr8lX{wWW!V*`GxC`z+oXuGyP22Mrv`CVIJbhIeLCo=l5=sCwYTgQ`A+v>9D+xtS z?Y~8Ry(M#0g^G8gLIs7%Eomk5SuB?7YZIAV-r=6$ysb8J zZuRGfhAd}|gCWVmmw`q+DHLkA5;$^CfSNTl0g?a>#elqAkSc1 z4mJ1Z3zpgBxm-zY#iX`u)*9(g9qviyN=x)490YM49^be4L@+TwckoWj;gx4%VrP1v z?TjS&$dpLEZ?3g=dS7xV5C6v*QEd})J0|5JLD`9wV3-c(2XYe=*gztExR{`al<>J^ ze=?QKm84#mwbQVbv7Azthmf59s4bt{&kN~*I8t&hR0ld9F1wPs{oC>hwp*Hxp`}d7 z36Q!IqZVzlShjKBTC^^e7(!oi7)T~FP9ZdY9yICjaSE!E4_loLsXO1Fl_!zhGVRI4 zP#Q?y>Y?0do~BvXqz2l;TLn!itF|oxun8R{w@5?puD53)_Iu7NW1kV6oNM%%sB6O1J zopv(g_85+iO?DoeY&lrw zcVys~*y8aaRs^W>0`r_8Djm3E(JB@-YOmwB&9?x8ZOB`{^U^7 z7WXhA9>NctA0$;nWlVN4>g0jMOQ7x0dMj6=H4QM=G$0>5^%7aJS2%Zw$)d&$V6AZQ zD5Mt|JyuGlncI(giD_~dW^N|7`K(^(F>P_72vzUH06ZH(VCzW8ij?G3*+1Gc$quYH zIc9j_5x|>pmgGc)Pwfbgo-QXjf-Iw8xe0tY63+$Tax__DwotHVKenMkc-6$0yqtrN z5Zrt>HxB}(BdiKwp~@wa>4Fir%^2BMnm2+h>BXv$r3XK5YQo6LrxH%bp^T%Bs%VGI zy+XF)66O3Y$%7yLr|$sns^C&ptQht!&PvI2i5Lz63VU?bf)Iu6%Ys z8*}G{s;Kn*C;=QtoI8NCl)?3n9t*!kBaN7YR2wgFbDfT`x=V+bHd$k(eRu=6gj3Asp7;%)=rji&&lD;dmA=r>dbD*r&3#;j*$#B{8G^w%p|b)^ZMbg*to$I8^Jxp zB<`0r;VDW?M8Y%34a}u*PizP&Y2Xa*j$stwSxOt}gLs~QKc2wMfzRUJA>VDJnl&h! zK&n{4&CNaZQQWJ%5%&cb(+x;jjOQ!&;!foP{7ml_G8z&nok1;0+_6i*RuZ<;uyg=6 z84;crb?`R;Z4g$eVm0oSQbV`YFe)-G_2uBXgA%yf;2f7PfyW1-rSP|yhLK`JXWJuE zlY_brK^u_TEu`egXjy{0f$yKb1W%Q+KUwW(mgw3KD&fc-SZ*E1uOB73wcJvi?C~?q z^2#UBsu7f7{}0lBv?YnsOAuYRzqt4CEcLST>~SA+KMlYZZ7Z*gTT?G;N=nQJ&<-98 zhvCUMi&vLtF$3@WB_0E?V&iXwV={JodBrDlgM*ueTT3M1JT$q(M!^mMalm+p|%|5v=flO2EG%@rkZ1&x_LXDU?rQ zAbj|;DiS;#smuXbte1O=7d!4L+E|{~+^6oyQvF}bbjrx$h3NcCidrB_OJWMFEx%L> zUgYrRX<6zI4V7nu`#X)YJe5l=@aSWEYH7?Nsyy=4T*+bSRAUfJ&LoTG2y*i5OkhN~ z3m`A&`@jtm4NUZGVu?Zc!wa_CE9_6{*yOKlxRmm!SYFTH!~gnqut(e??t!8=la1S= zcWyi~GIx3OSZHOh%)JzTNl=d0In1#<+TJg61njyT|^U6@}v5EcVNahhe-qV*M zrX00$SLk!g^ZMq-U=)bgOc^bRBJj1S$$vVzGd{2H9A3uHGw_D3x z_W$L6aHEH~$z^U%d}YLomKrAN8i~g4{Gf30im4*3)?B`F!0k+26qjD!vc`MWQv8@; z86@xH?qwK<*wx%VOJKh7sg8RVO-Ou@7wYWiTA93K#*b(|De=ih@BbI%D(oDaJ1&IR zY?E(>aA!&^%Dj+wTYGMFxp#`u#i_c?YmoEDwjVZe6Q#@x{PWw|r$-Q9ZCn_OypHh+ zSa#vf7ou0(=+XtT#;3Lc+&U_Etv`SK_~gU8B2FA-j+OJ<;~B2|ckhLWomysiSK$@H zLA&)FEb}_@{ND18%4awWSB`v=E4{YVXOBs)3Mbpa&RfS6EU*q`pj;r;8bgHt?%f*ni)!lvd zz?tNt`NIz!?!k;Kag)dM!c1EC(1S(bmJ2ZoiuTUeBgI_mh8MOM`p8c{vEvu(XLdX_ zdO=%$X<+bL?RV zxy=ef?uP<#j}gLWC>W=y(Xrzw`-OlDxRo)gj+-DJGoqcL=w82us5nN!xZ$R-BYOj4 z<1r)T6Pl|vB@AICM-qPWa)Uw@evcXQz!5WK`Z$w^@x=e~qHD;@Pw0A079I%G7x4OKMdx~a(dl@v#5?Zs%?jajxyKhtAqGfA z3=Dj*hts)5(di6V3S7xBE-)U5d!upokGbZ`IGl~7LeXldv!oYhNy>7`y_}s5!3o3D zNFlrf6^&e(w-L3lSji#|fl@%r0|uV0=htil4@UQxb-SEIW{aIJJV$_UWAPM_fqZ^> z4*7C}rZ;Wr=viw!R$C^sNPnw(_2{yu78nRkDLj```ux-sJeaS(S}Z)ef&VKCPx`AT zL8uz$TkxOT;7{?Q;1_RFC*0!NeT_wnO& z_}|3vV~rd?lqE=>8^H78RH>dA>BVEWRBKQ$S$G1%s;d-v(L);u`2 zY)R|UJHIrge$##gm#BU9o^Ctu3|M>4>E933?fwIMr2F@zt=s^HQzDbWAUd~PQ)aNA zx;L~fz5EK&4xDryKqIF%&-#P!Ua@TN!0#`*?!Ikki2E959Cx+xpYDGss@PtP<@Qu+ zGoBxy5qv4@Se86jq|3ZF4`$8{$9Q}HuKhoZ0RL}8_`j`i6JmU&ynx~Vz@3EWd>in- zevI&IO4iitH|BDHo%m%+FJuR82kNA)_?=5HKDXf47h5Ic*S)X5tA1a?HSkM);{T45 zmlv|ctZ?m+{A(CKnyg~vtLn>b? zZbD7{NZ%mk-TK;*#y1`~KcAu1E$MRXG-H1;3K7@|JH_wgxqJ(5aWog+T<;X*=SZnL zD156hRpR;i{cgf-HhzKtznnvl@UNHn<}F*`NMsNLZov?~uy9w0E~#&;<~hoo+iiE@ zM&$>@t5~m!dl&5S*K>I}?|+!MH{*A227Y5zTK?Rq6=R0q(@A{We*q&z(( zb)l^bZI=!^?NZn!9SWpOw-CBOfi7E^!X{-08kh{Fo$W$kmK0bZK)b*!u&^cUch0>} zda~72fv_{o>`Qfg&Uel|_uRj8?|XXc_8b3(>WIjP&maCk^d$cB)hYDcWD@GgMW2t* z6QPrfo;0?dT-3imU5MxH+^C%#kEfE^Y|e=fS#i6VjiC(XMxG zB-&=w(U-m-e%!6?G+i8TFgjEaeuX|gfWL8k2JsU#5M?q8@e7J&((?23ERr#V92r3BtGnG6F#1+b6QEFhq+&Iacm~l z(|48;9bQ9Z2zvhHVslx9C`^~4XlsX$X4Weog=U~jZMe2v4!|xD*WxJ#zFYz( z5xGw{qR|J{ToBjxMg~Saz=s)l!UO!AfwLuG5~JgKyQUth>p@&^lMEd80N-KYhb3SV z)6^}z!w=Oy5V!Ds3>@|VuP_h}lr8Q8Z@yL#iEQA8GPeP$4iMKi z&%iw%;5i0<-~ldc1h5XoEpm{7yF9=%41CiA#G3#lK-?ntG4QAd@J9g51#vCzV&EYU z@G}Pf+XGzL44@mtEpm{7yF9>?41Bo+Oa{vBmiiX9lnZ|Zy#1*XFp0F|_R+j3RLeo! ziYx|-9^eE6|K-clGXbmuaf`fzf%`qccNuu81Wbm??cO>IsyBnUg}=nW*FC_h*#I_xxE9Ya z@PY@BRky9JZ1FUB`&kdLdJcefAj-#NxE#PEtolSrwbVY#KzMG+wgI*(N17BvibQ&e z((OFVHcz=+6zMU1X(^j7G~bHM?gLPFn=k;HTtFBANW98IGddGPgXF6;nkj3LhLuJb zn4)3@Xr^q6FqK9an6|orFaTz_fG_}%=~WS70L*d$VF1i_0nL=FYjZWiz;uoa2m@fQ z3kU;Xo(pKE>}TVBL`Lqtr&v(B2W!D#TZ1_}T{vyrjvFT$)&4K6Qz8Qf*4E8G}ZhOP=Xg_glG zY(ERT0(vIg>MNjzaBF?EK3G8e!#T7$Owsxrni}RPv@x0!&Mi>7VAPje$T9*7xB8?0 z9D)w#7BRV)p+GcX|B@qK%u*;Cy6iHF29}}qD_XmfA zQQ%g#MK`TzZHzXyHm#s&Q^ov56l$!6!Dt{B1qcHGaVbC;0EkZknkkPLf>s*Mlr?CH z(g*`5Xp90hQyN-Y-*^3bL!V^$Ty$`Cq9d`YW7W#F5OCJXfVN=qEWVxSZTNc{8Dw#v zW2dvD1-96SF$kis7w_q#;Vaa+aq;FoJ>Aebke6U1Uc5e&8)9Qz=p5sQ1s@KDkb&uU z#wx;4qH_uDC%7jBNY~+mK_m32=-!UMC`YK8FwoS24lYeR$nFfE}sq10~QOMwV= zz)yrGL1XlR`ltO!lcDE8w+g+v?m75*rGC&Kqj!g%2LG-4$3wGd2wFc~;va;i9lS9( z3+G*?pQ*nw=tumQfIbN=$9)wOVEnIz<_CLdrSRORAM~@-h|@ajjt7)fFOomRQZuxy zn<=^$$Si$8bTOJC(tICVw$UPy8bz9qQz%=0Pij~|my5JXyey!0ksOg0(Ul?{m&h)r zt1)zs1ilM;D#Wz2j_C$sxGX5V+=@2$pto?xb7$5Up8L? zeO8bWleNDmrq`Rl1bssAq|o`I{jrBvma_$U*8DZ>m9|HaRbv07&~`!Ugnyg)J6IkD z-4*9CxTozT=8r-9M0$7I^MSLFCV4v2J>+0c81z9UY0Hl&DY&D~Gz|KrmiE=P!175g z-42~e$Fy`mbS9n9(o>-w7~5}X>1!ba(kUfL4LH+=L{E&V3g2| ztviMK>Z$&95_RxDP+vVow6r>48h)CkrE3E%XwyYXlKKL)OzR#b(+E(9mLA1S3D8$UW8)E=T zEqxKXX8Nj@J``MNw9s=}dOWxo(zlf)wMXd(TE}rl>1SHvIHU9{k0rLtOVnIC>|bug zXdUh+-B~w_HY+LkBg8U`c53ODh-DVNQA>BBeY0s$OZTCDvnj2m$1t{SbU;g=#n`sd zty($>pL6K#S~>-vbLd@4k~Ykx_iEjBs9`QWq@}H>VJ`i>$8sKhLhJSht}y1&XSHMn z-T>*JwRAUh^XV&EIt<->dR9qNAGSfPkmu|FFX-p7U7NHUw2qz+wzT+YGxnxhYY)-M zfPr!3%rFNuOv^!AkWZPe71|}VN9b;$ZxVU{)K7PU&ZK(<!6cJoFf?U6WRB5S&A1?oG-Z4_@O5UVAYGa= z-UIv#W>S!($w(T=W9FnFcWTP`y}(bIM+A9TQ^t=1?=_DJa$Hl!PXPa^d0LPcHD&w^ z@ZXwLCy{H)c&KiS8tUSLEYg(mPT{*WWn@tJq^68a3V)}jj2sdEVNDr1Cj4N1u4lM^ zB3}jHmK#lHtE<*03)UVxGd+s_+?bV}4m;K1o?$ENq({=0J-rBb=X7*SZrtj#?1R;G z%9}IsYI-=VT5fALcPOh06{goHy|5{hJ5)v2YdQ8rx0OjwOe@FJ#~nwRj3q%01*vHv z6RT{BgMZLM)xZ*bC#`EcnWy@lR zYPicmVi+pINR{P6Q!$UfvZ||4u*Qcn6a8t&TcST{qY<0%&83B9H8$OT6RO{9*##u8 z>B^q$NX{Nla%M|rUe#(tE<2JQE!tvNcB0xQU@zv$Ey5MbdN<--Hd15CnXX_5$?QZ~ zp$AKFCq0zTq#cj;`a&)XUwO;+qLOcUCEt*C_U|qxxr`@u(?L$)v@x5?4I`gTnHCA% zX3@waG}oXzogB>~{iaiegp8ETplw!m)Y(sa?DW(OpBT<$#6+hLnM^J(lMne{J11WM zJV&H}q!lq&92-kc5lnG13u#Nv=}wMk-4J`N5xpzX##>TWo=1^(Sce>}soaQ@;Qn%L zu?;17$?35BkV|2`J()#Dwe{j~^Oe+FPG7o+gy2Elr6`5DK~hW@wQ__lvVvPwPHtl7 z5zE#pPkEwo^PMN662wm799d7anpMsuXHX*LpBu)1BNCmr@?wNyC@?6U>E zKruD2wL?^{yYlIRTe5$@jV&7n2|hLy23(#0~MlKe&O5tS1UfQF@#4xwk# zSYNkVJBMz@aR?oRUavqnbRhPSl%s=Wkxf9?v{Ql(LCWCY z<+%UNLVF0boyIANr;9eq+yW^DeHwOIU`AAxF968_!K3$;?KE(X679N1Pl-7x_|M}r z1TXB{5&!UY-D~->aR%pzUZs4)A=;0)xUJMvo3A7dBl@(oyIi`R-bzKF!+2UjO$D?* ziT+5zJFTkCZ$+7zMMT8?UV-ke&68Vp0MVr3!$KSmTFIl>UgXC=Vfbt_qL(YKzUaFI4f}j_&aKrluTZUIIKNXsosx+<{Y* zNlgH^HC})1h~1(CsMC@`8<620lllk`)ObSYi8j_&t83p5FGYC9W(ZHVUWU|^L4P^A zrdk&q$1;J~cE&)!O=T3GiLGgTaXS7;IMa08tjx`y4cm!xe?cUrnoCGR-hj?CP zxyMFp^XA(3qo=z)zIc|hXO-ytG2T4m)yi|Q5oGmBq$b`*vNVF$j8;wm<0!`~KZ*I` zCTvd$M4Xg*C^bFe>1C(R431N+CAAgpfHy9sA}yEKSpvyh)s{pln)vhA$nkOC@Q9UT zqvpJxU5?%Dx5_dDvYzopc!PsgSVXIbh^$&#RJP}2&as_mFIL&)r$<|{ zZd&;`!84xwLT!E2H9c1E;lgdTw_s0o(2JZ^_q!fzT#r*q1$h3P-{x4ZQ*F5@ z-C!dY9%am{8gri;N4aD>QM$HXsaBR(0m9lHCZRRXmF2$M8J(;H>dUIlzUQ9a4FyqZ*QqS@uMh1wnU?AlpdZ=WlI3V+DTrQ4Jm*YV9L!9BtmVL;{z z-$L=}md}v97P3{(In{EMrvy&gT$=L(c8eNs8!O7-?80-0&+&-nhT3{cof*_A&%L8^ zdr!@G-oZS6C;zH8$F7rVlc3z`taT-~y2?fUs#7GyL5*@#Yupn5_=rk1;V{dIOQ+}> zw{dToUJNi#7sBSsx3-*?NmQTlb;h2A1n2Nt$B)k zLE1FMXOv~$%G6T^jQ*Yr(XMG;LvBl{#+2jQPo2>_F=M()V~yuSfg!|>6j9>_f9~T;Z{alN#TQ$kF72_^o~r0;*B9u>TO!YSozePKrcxpfT?T(mctR)hQ$KvpVUs2RWaN$+0$b27OsJkf;uQMXCo5X9( z^2I5Z4#sI_Y}|+)Kpp&tD{Q5PxH&UcG~h7S0|j%iZbgU`>j`j?B4QJYFwKa+#V{69 z#1}SVEllFU$FCc>Bl@r5tAZUL-}%E&Kl%y$_Cz(p^hZp8(C1$eTTf(ETK@Q15w;Jy={FRvJ-8~d z5)L9WO7D7frwe(!o+EF&%rK}~eQjHQ=ZwO5SyH{bK#g#}62BwDKl~^PxCnTaj_X9- z>S8O)w(+WjrK}*}D|8GyMQnZ_XdpS_SoXj;_CIzq!mkeDS3m~&9K3;{IQhz-A_j%j zYd`~d%Z!@wo@2W7MifyT?A%3i>SxX&YBss_2lF$qbC~n@{+qjzJCk@nV(xu7Efm!dKw~MH>&0+1q%64d8&^ zC7@Y&r+hr2Vs$1;#Z(6c-gEgc$k@KigovMC(KBzsr&H;ea!0n}a|u412Jq+RY53`T%tM>KfigwD{H)T*?Q_c#FC}j2x?;`iNe3`^vkrh8`P_|TYo2&{#qX2%|KqB^MMK={lg!6m zsq(M;qkM%9U;=k%GTZS&1dSIs5=-8Z(PjRy6mF(=N2R}-C4N^{eup+$S%g=d{5EYG z&URbydE+3_D?FI`dc|A~ZZEzl901*jZ-D#oWzSB0eKCN)JMh0I*eRA@@crjmHQHPQ zU+ORaPL3~RywV%00)TYmW56q)A~zvX^O?8@DOw&sLAOLo^+U_|PzBj^-Gr`uJnq|v zSPjIa-bvsiz;sVnicJUJ4^aPBLBj-mQC-Ue6Zow!Xe&ZmCDM_?T>f?J` z#`&Pd)^58?4=G=xzsmKhe%}RuyagBK$a+5g-hnsA4MgQFKegA&eMWfWn)|m4eaeSR neuj}jE901Xl|5Z9!~OjicI{GccmIpK;QqqG|Nn6Rv>y0hx~>5Y diff --git a/MatrixDotNetLib/MatrixDotNetLib/bin/Debug/netcoreapp3.1/MatrixDotNetLib.pdb b/MatrixDotNetLib/MatrixDotNetLib/bin/Debug/netcoreapp3.1/MatrixDotNetLib.pdb index 105b92bd30f74eb60458b3477401db5b9826f05a..77e9efc85fd49f96bdc593ae752c0eadad5569a9 100644 GIT binary patch literal 6192 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 Z^QF%4CFwc6U+!6xHSyZ)Zx> z>I_;dXzFB4+c?^awTW#t83kW;Vzf0jCZw$<*9Q`HS2KYd011GX0Wp9?0PeUKAOQ4$X#iXc*G3JtsA^!)vIiu; zKnho%>J$CF2*Br_7{3mNw!n;gU>}05q?D|p0yzx!7}#fEwSqwQ3Y5G7R;QsPR3nfF zV7~)S297c_Qk`e*m8fdYGptTCJXh z;ACn)G*QBQ*inOHv)!U%Z~#LKs!rTX;{;IW|L+06wQxOl=kF~QMa z2FG!|Opc?T#c|ZLIgUEkkO_aN=WrbL`5Z@m0mo5a#BtOYa~$?nR>^Z zqQnVzfy{%uhUCFrBn@!alGSk6K_+7c;TZ>!8n_3mbu&bbI-ETh=AwOHg9+aNK5mi2 zS`8Ue^PhAmvb(gIxMjuVbSUz2Sy8O5@+6;Zux|p9-R|W|E3rFUZH_v(9pv^7S@D!9 zP6x^Fw0f*=9O877Cc8~`cqa5hr^AEPvq4_LX24$X3cZoC^YoPPf`MI|jlSXIkxv_| zU;b^tAExZ7A!C(45#BnwVtvQuz2}NgotE~u-(7K*=xVko9=R==8B3wlZkL-pHrTtR zM0Ut-TT`%Ks+GGuI!b9EO%RF}>S~-F?j|{OxfMQcT}4h$h3r{oYcw#P@3JYDCMDq2 zoCSG#c~#PDo4$E`sP@Fid)EA@?aL>cKMt%povYjCy|(M!hrezM$lDD^Y7q7M?#nuH zCaKVhVI((DG!mCiH2G;5(C(+AIE$o)i6PL`L$kX_6eCF(94p;cG$xK27=iVPL+-CnGJ=ea}c z8<}$xTiC=Fj%F_-n!OAuL!BVyOyw4?-QtqDMZcBmXPb*xrk(g({b+7|%f4NUXZ5Xk zyeN0)*R#ITWIrw!rl~%H*)s&2Lo4LX9!M2ui^qZ~8{|(F$c517P0Lb`#})N|+_F@* zHp^}$-rv7MZt*9cWx4FJHbd%LiksT3Sy?Ye`iInRaKjwU~K~M{fo7 zuBKia_4d#N>iuaHd%zkfJ&?!Ctqv$aTr7D%mIiZtDdp$SrY0Zg>1}zoG<;6pg6hX% z#eI)%Cbe`m%y;jA5=X=IR1}54Xf32$Jc%^oe}M?;1+{O65U9sQqap_MEUBe4qbon0lu&p^3A!by?{eG}6wMVP)=gb#I$2=$igz)>T*3=^RMQ?cDl zlW6x1+PjGM{)T$5(Y}S$7ejp=LeC+=_W|v%p#8_`Kx-uRmzz2$y3dcXZ&b3}tUB7( zY<_$DP=<1AWNOo{4cv^F#IUe(@L_KzJoGuR&PHP8H<1xOq-NhWp_&wX)4!na=f zyLjw(H#hcg+~gZ452Chz6+04pZLIq8$(-}=*%}g01*l$(7G_w&nKD&onkN)4)S_QS zS7^7|+;Tv^%T)wXqh01~vf9O3xy@y=^OXmmKuiRP7c3Tek#S8{-@r3)g@n-#TY)3KQqJ} z?%MJ2sdI+L*|AVRE@rM~f2{GO}vipWC0`U(#PE pUCQ+qeUzNmv2%C);00;t@6YcxtTX3_UmV-IaPfG>qgS9L{}->EiUa@v diff --git a/MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.csproj.CoreCompileInputs.cache b/MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.csproj.CoreCompileInputs.cache index 143c214..17cb158 100644 --- a/MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.csproj.CoreCompileInputs.cache +++ b/MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -f16bca70409c8e2ae88277b1bedf2f151bb03767 +533436dc4ebb032189320843d6e1e024aef4bca8 diff --git a/MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.csprojAssemblyReference.cache b/MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.csprojAssemblyReference.cache index b872225a07482aa769dd23a4cc1c08552e7a49fb..c7e9bdd652ddbd42897e80b041492983ebb435ea 100644 GIT binary patch delta 21 dcmbQTnQh8uwhjJ_OuN{d0~xmmGBP^P0035t2N(bV delta 21 dcmbQTnQh8uwhjJ_Oi`@OfsES&85x~t002@~2DShI diff --git a/MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.dll b/MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.dll index b5d30dd8ffdc9b067a8d071c9c6dc01ed03187ac..61bb19a095d85562310e713af8f3d6c3166676ce 100644 GIT binary patch literal 24064 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 diff --git a/MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.pdb b/MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.pdb index 105b92bd30f74eb60458b3477401db5b9826f05a..77e9efc85fd49f96bdc593ae752c0eadad5569a9 100644 GIT binary patch literal 6192 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 Z^QF%4CFwc6U+!6xHSyZ)Zx> z>I_;dXzFB4+c?^awTW#t83kW;Vzf0jCZw$<*9Q`HS2KYd011GX0Wp9?0PeUKAOQ4$X#iXc*G3JtsA^!)vIiu; zKnho%>J$CF2*Br_7{3mNw!n;gU>}05q?D|p0yzx!7}#fEwSqwQ3Y5G7R;QsPR3nfF zV7~)S297c_Qk`e*m8fdYGptTCJXh z;ACn)G*QBQ*inOHv)!U%Z~#LKs!rTX;{;IW|L+06wQxOl=kF~QMa z2FG!|Opc?T#c|ZLIgUEkkO_aN=WrbL`5Z@m0mo5a#BtOYa~$?nR>^Z zqQnVzfy{%uhUCFrBn@!alGSk6K_+7c;TZ>!8n_3mbu&bbI-ETh=AwOHg9+aNK5mi2 zS`8Ue^PhAmvb(gIxMjuVbSUz2Sy8O5@+6;Zux|p9-R|W|E3rFUZH_v(9pv^7S@D!9 zP6x^Fw0f*=9O877Cc8~`cqa5hr^AEPvq4_LX24$X3cZoC^YoPPf`MI|jlSXIkxv_| zU;b^tAExZ7A!C(45#BnwVtvQuz2}NgotE~u-(7K*=xVko9=R==8B3wlZkL-pHrTtR zM0Ut-TT`%Ks+GGuI!b9EO%RF}>S~-F?j|{OxfMQcT}4h$h3r{oYcw#P@3JYDCMDq2 zoCSG#c~#PDo4$E`sP@Fid)EA@?aL>cKMt%povYjCy|(M!hrezM$lDD^Y7q7M?#nuH zCaKVhVI((DG!mCiH2G;5(C(+AIE$o)i6PL`L$kX_6eCF(94p;cG$xK27=iVPL+-CnGJ=ea}c z8<}$xTiC=Fj%F_-n!OAuL!BVyOyw4?-QtqDMZcBmXPb*xrk(g({b+7|%f4NUXZ5Xk zyeN0)*R#ITWIrw!rl~%H*)s&2Lo4LX9!M2ui^qZ~8{|(F$c517P0Lb`#})N|+_F@* zHp^}$-rv7MZt*9cWx4FJHbd%LiksT3Sy?Ye`iInRaKjwU~K~M{fo7 zuBKia_4d#N>iuaHd%zkfJ&?!Ctqv$aTr7D%mIiZtDdp$SrY0Zg>1}zoG<;6pg6hX% z#eI)%Cbe`m%y;jA5=X=IR1}54Xf32$Jc%^oe}M?;1+{O65U9sQqap_MEUBe4qbon0lu&p^3A!by?{eG}6wMVP)=gb#I$2=$igz)>T*3=^RMQ?cDl zlW6x1+PjGM{)T$5(Y}S$7ejp=LeC+=_W|v%p#8_`Kx-uRmzz2$y3dcXZ&b3}tUB7( zY<_$DP=<1AWNOo{4cv^F#IUe(@L_KzJoGuR&PHP8H<1xOq-NhWp_&wX)4!na=f zyLjw(H#hcg+~gZ452Chz6+04pZLIq8$(-}=*%}g01*l$(7G_w&nKD&onkN)4)S_QS zS7^7|+;Tv^%T)wXqh01~vf9O3xy@y=^OXmmKuiRP7c3Tek#S8{-@r3)g@n-#TY)3KQqJ} z?%MJ2sdI+L*|AVRE@rM~f2{GO}vipWC0`U(#PE pUCQ+qeUzNmv2%C);00;t@6YcxtTX3_UmV-IaPfG>qgS9L{}->EiUa@v