Skip to content

Commit

Permalink
GeForceNOW-SDK Release 2.0
Browse files Browse the repository at this point in the history
This is the official 2.0 release. See README.md for more details.
  • Loading branch information
PrakashY-NV committed Jul 27, 2023
1 parent fa339dc commit d104973
Show file tree
Hide file tree
Showing 66 changed files with 258 additions and 802 deletions.
9 changes: 3 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# NVIDIA GeForce NOW SDK Release 1.12
# NVIDIA GeForce NOW SDK Release 2.0

## At a Glance

Expand All @@ -10,11 +10,8 @@ Please refer to the [SDK GFN Primer](./doc/SDK-GFN-PRIMER.pdf) for a more detail

### What's New in This Release

* Added device physical resolution to the GfnGetClientInfo call
* Added IP, client resolution, and safe-zone information to the callbacks received after GfnRegisterClientInfoCallback
* Added bi-directional communication between GFN/custom clients and GFN SDK-enabled applications running in the GFN cloud. See the Primer and SendMessage API for more details
* Modified samples to demonstrate APIs which previously hadn't been prominent
* Added a new error-code, gfnNoData. This occurs in cases such as the GetPartnerData API, where it is possible to have no internal error, yet still find no data
* Deprecates user authentication flow through third party applications; StartStream API no longer accepts NVIDIA IDM Token string (param `pchAuthToken`) or Token identifier (param `tokenType`)
* Adds support for Visual Studio 2022
* Bug fixes and minor improvements

## GeForce NOW Developer Portal
Expand Down
Binary file modified doc/SDK-GFN-PRIMER.pdf
Binary file not shown.
12 changes: 0 additions & 12 deletions doc/SDK-GFN-RUNTIME/html/_gfn_runtime_sdk___c_a_p_i_8h.html
Original file line number Diff line number Diff line change
Expand Up @@ -128,14 +128,6 @@
<tr class="memitem:a4cde70a6df1c6f98de8389e037814dd6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4cde70a6df1c6f98de8389e037814dd6"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>GfnRuntimeError</b>&#160;&#160;&#160;<a class="el" href="_gfn_sdk_8h.html#a1b7d39d60da8754a0e1ed6bec951faa2">GfnError</a></td></tr>
<tr class="separator:a4cde70a6df1c6f98de8389e037814dd6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ef03e550b834b1620a157f88d2032b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ef03e550b834b1620a157f88d2032b9"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_runtime_sdk___c_a_p_i_8h.html#a3ef03e550b834b1620a157f88d2032b9">AUTH_NVIDIA_DEFAULT</a>&#160;&#160;&#160;7</td></tr>
<tr class="memdesc:a3ef03e550b834b1620a157f88d2032b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">One of the possible values of AuthType_t. Delegate token provided by NVIDIA IDM. <br /></td></tr>
<tr class="separator:a3ef03e550b834b1620a157f88d2032b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acf10277e2adb8804e1bbf1764c72abc1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf10277e2adb8804e1bbf1764c72abc1"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_runtime_sdk___c_a_p_i_8h.html#acf10277e2adb8804e1bbf1764c72abc1">AUTH_NVIDIA_JWT</a>&#160;&#160;&#160;8</td></tr>
<tr class="memdesc:acf10277e2adb8804e1bbf1764c72abc1"><td class="mdescLeft">&#160;</td><td class="mdescRight">One of the possible values of AuthType_t. JSON Web Token. <br /></td></tr>
<tr class="separator:acf10277e2adb8804e1bbf1764c72abc1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a25538f005dd06eded396ebfcefbeb754"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a25538f005dd06eded396ebfcefbeb754"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>IP_V4_SIZE</b>&#160;&#160;&#160;(17)</td></tr>
<tr class="separator:a25538f005dd06eded396ebfcefbeb754"><td class="memSeparator" colspan="2">&#160;</td></tr>
Expand Down Expand Up @@ -174,10 +166,6 @@
typedef void(<a class="el" href="_gfn_sdk_8h.html#a6c0d24df59a5bd1c1fbf10cc0864d1d6">GFN_CALLBACK</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_runtime_sdk___c_a_p_i_8h.html#a19851a66182321b10f714e395fcb4737">StopStreamCallbackSig</a>) (GfnRuntimeError, void *context)</td></tr>
<tr class="memdesc:a19851a66182321b10f714e395fcb4737"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback function signation for notifications on status of stop a streaming session. <br /></td></tr>
<tr class="separator:a19851a66182321b10f714e395fcb4737"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa0248bd6ee742dfdf112c228ea832f21"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0248bd6ee742dfdf112c228ea832f21"></a>
typedef unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_runtime_sdk___c_a_p_i_8h.html#aa0248bd6ee742dfdf112c228ea832f21">AuthType_t</a></td></tr>
<tr class="memdesc:aa0248bd6ee742dfdf112c228ea832f21"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type of token to use for GFN session. Valid values include AUTH_NVIDIA_DEFAULT and AUTH_NVIDIA_JWT. <br /></td></tr>
<tr class="separator:aa0248bd6ee742dfdf112c228ea832f21"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afd7de910963e8113f6595708bf5e8b2b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd7de910963e8113f6595708bf5e8b2b"></a>
typedef struct <a class="el" href="struct_start_stream_input.html">StartStreamInput</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_runtime_sdk___c_a_p_i_8h.html#afd7de910963e8113f6595708bf5e8b2b">StartStreamInput</a></td></tr>
<tr class="memdesc:afd7de910963e8113f6595708bf5e8b2b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Input data for gfnStartStream. <br /></td></tr>
Expand Down
147 changes: 72 additions & 75 deletions doc/SDK-GFN-RUNTIME/html/_gfn_runtime_sdk___c_a_p_i_8h_source.html

Large diffs are not rendered by default.

34 changes: 17 additions & 17 deletions doc/SDK-GFN-RUNTIME/html/_gfn_runtime_sdk___wrapper_8h_source.html

Large diffs are not rendered by default.

20 changes: 10 additions & 10 deletions doc/SDK-GFN-RUNTIME/html/_gfn_sdk_8h.html
Original file line number Diff line number Diff line change
Expand Up @@ -132,45 +132,45 @@
<tr class="memdesc:a41f9c5fb8b08eb5dc3edce4dcb37fee7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Simple aliasing for Boolean true. <br /></td></tr>
<tr class="separator:a41f9c5fb8b08eb5dc3edce4dcb37fee7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9aa29280fe4f9aacd9ad25ffbcedd854"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9aa29280fe4f9aacd9ad25ffbcedd854"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_sdk_8h.html#a9aa29280fe4f9aacd9ad25ffbcedd854">NVGFNSDK_VERSION_MAJOR</a>&#160;&#160;&#160;1</td></tr>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_sdk_8h.html#a9aa29280fe4f9aacd9ad25ffbcedd854">NVGFNSDK_VERSION_MAJOR</a>&#160;&#160;&#160;2</td></tr>
<tr class="memdesc:a9aa29280fe4f9aacd9ad25ffbcedd854"><td class="mdescLeft">&#160;</td><td class="mdescRight">GFN SDK Major Version. <br /></td></tr>
<tr class="separator:a9aa29280fe4f9aacd9ad25ffbcedd854"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a36f9286155f18f70725b6c0cbba4b966"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36f9286155f18f70725b6c0cbba4b966"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_sdk_8h.html#a36f9286155f18f70725b6c0cbba4b966">NVGFNSDK_VERSION_MINOR</a>&#160;&#160;&#160;12</td></tr>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_sdk_8h.html#a36f9286155f18f70725b6c0cbba4b966">NVGFNSDK_VERSION_MINOR</a>&#160;&#160;&#160;0</td></tr>
<tr class="memdesc:a36f9286155f18f70725b6c0cbba4b966"><td class="mdescLeft">&#160;</td><td class="mdescRight">GFN SDK Minor Version. <br /></td></tr>
<tr class="separator:a36f9286155f18f70725b6c0cbba4b966"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45a66dd5a42989cb2e2903a91e1f5996"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a45a66dd5a42989cb2e2903a91e1f5996"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_sdk_8h.html#a45a66dd5a42989cb2e2903a91e1f5996">NVGFNSDK_VERSION_SHORT</a>&#160;&#160;&#160;1.12</td></tr>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_sdk_8h.html#a45a66dd5a42989cb2e2903a91e1f5996">NVGFNSDK_VERSION_SHORT</a>&#160;&#160;&#160;2.0</td></tr>
<tr class="memdesc:a45a66dd5a42989cb2e2903a91e1f5996"><td class="mdescLeft">&#160;</td><td class="mdescRight">GFN SDK Version. <br /></td></tr>
<tr class="separator:a45a66dd5a42989cb2e2903a91e1f5996"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae3d6fee7aa89956d23257d5cca655b65"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3d6fee7aa89956d23257d5cca655b65"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_sdk_8h.html#ae3d6fee7aa89956d23257d5cca655b65">NVGFNSDK_VERSION_PATCH</a>&#160;&#160;&#160;0</td></tr>
<tr class="memdesc:ae3d6fee7aa89956d23257d5cca655b65"><td class="mdescLeft">&#160;</td><td class="mdescRight">GFN SDK Patch Version. <br /></td></tr>
<tr class="separator:ae3d6fee7aa89956d23257d5cca655b65"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a68ee89a9d83ad9be38e85b244266d616"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a68ee89a9d83ad9be38e85b244266d616"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_sdk_8h.html#a68ee89a9d83ad9be38e85b244266d616">NVGFNSDK_VERSION_BUILD</a>&#160;&#160;&#160;32905025</td></tr>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_sdk_8h.html#a68ee89a9d83ad9be38e85b244266d616">NVGFNSDK_VERSION_BUILD</a>&#160;&#160;&#160;33103756</td></tr>
<tr class="memdesc:a68ee89a9d83ad9be38e85b244266d616"><td class="mdescLeft">&#160;</td><td class="mdescRight">GFN SDK Build Version. <br /></td></tr>
<tr class="separator:a68ee89a9d83ad9be38e85b244266d616"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a03aac63521881472fe76bdd1c79bd7cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03aac63521881472fe76bdd1c79bd7cb"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_sdk_8h.html#a03aac63521881472fe76bdd1c79bd7cb">NVGFNSDK_VERSION_LONG</a>&#160;&#160;&#160;1.12.0.32905025</td></tr>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_sdk_8h.html#a03aac63521881472fe76bdd1c79bd7cb">NVGFNSDK_VERSION_LONG</a>&#160;&#160;&#160;2.0.0.33103756</td></tr>
<tr class="memdesc:a03aac63521881472fe76bdd1c79bd7cb"><td class="mdescLeft">&#160;</td><td class="mdescRight">GFN SDK Version. <br /></td></tr>
<tr class="separator:a03aac63521881472fe76bdd1c79bd7cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac693d90ad6ba31c11dc77310915a0b95"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac693d90ad6ba31c11dc77310915a0b95"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_sdk_8h.html#ac693d90ad6ba31c11dc77310915a0b95">NVGFNSDK_VERSION_STR</a>&#160;&#160;&#160;&quot;1.12.0.32905025&quot;</td></tr>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_sdk_8h.html#ac693d90ad6ba31c11dc77310915a0b95">NVGFNSDK_VERSION_STR</a>&#160;&#160;&#160;&quot;2.0.0.33103756&quot;</td></tr>
<tr class="memdesc:ac693d90ad6ba31c11dc77310915a0b95"><td class="mdescLeft">&#160;</td><td class="mdescRight">GFN SDK Version string. <br /></td></tr>
<tr class="separator:ac693d90ad6ba31c11dc77310915a0b95"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acfa7253c4f2b2794ea1d4d09091185f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acfa7253c4f2b2794ea1d4d09091185f8"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>NVGFNSDK_VERSION_STR_PROD</b>&#160;&#160;&#160;&quot;1.12.0&quot;</td></tr>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>NVGFNSDK_VERSION_STR_PROD</b>&#160;&#160;&#160;&quot;2.0.0&quot;</td></tr>
<tr class="separator:acfa7253c4f2b2794ea1d4d09091185f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0286d07acb196d7344ec45a3f60e17b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab0286d07acb196d7344ec45a3f60e17b"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_sdk_8h.html#ab0286d07acb196d7344ec45a3f60e17b">NVGFNSDK_VERSION_BUILDCL</a>&#160;&#160;&#160;32905025</td></tr>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_gfn_sdk_8h.html#ab0286d07acb196d7344ec45a3f60e17b">NVGFNSDK_VERSION_BUILDCL</a>&#160;&#160;&#160;33103756</td></tr>
<tr class="memdesc:ab0286d07acb196d7344ec45a3f60e17b"><td class="mdescLeft">&#160;</td><td class="mdescRight">GFN SDK Build CL. <br /></td></tr>
<tr class="separator:ab0286d07acb196d7344ec45a3f60e17b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a97b6acf7c485e73a75f0df2d0bd319bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97b6acf7c485e73a75f0df2d0bd319bb"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>NVGFNSDK_VERSION_BUILDH</b>&#160;&#160;&#160;3290</td></tr>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>NVGFNSDK_VERSION_BUILDH</b>&#160;&#160;&#160;3310</td></tr>
<tr class="separator:a97b6acf7c485e73a75f0df2d0bd319bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a61f683f9c27a580bff7af4f817061716"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61f683f9c27a580bff7af4f817061716"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>NVGFNSDK_VERSION_BUILDL</b>&#160;&#160;&#160;5025</td></tr>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>NVGFNSDK_VERSION_BUILDL</b>&#160;&#160;&#160;3756</td></tr>
<tr class="separator:a61f683f9c27a580bff7af4f817061716"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Expand Down
2 changes: 1 addition & 1 deletion doc/SDK-GFN-RUNTIME/html/_gfn_sdk_8h_source.html

Large diffs are not rendered by default.

11 changes: 0 additions & 11 deletions doc/SDK-GFN-RUNTIME/html/functions.html
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@
<li><a href="#index_p"><span>p</span></a></li>
<li><a href="#index_r"><span>r</span></a></li>
<li><a href="#index_s"><span>s</span></a></li>
<li><a href="#index_t"><span>t</span></a></li>
<li><a href="#index_u"><span>u</span></a></li>
<li class="current"><a href="#index_v"><span>v</span></a></li>
</ul>
Expand Down Expand Up @@ -167,9 +166,6 @@ <h3><a class="anchor" id="index_o"></a>- o -</h3><ul>


<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
<li>pchAuthToken
: <a class="el" href="struct_start_stream_input.html#a2e4c1a0ecb730bdd5b7d80a2cef08e00">StartStreamInput</a>
</li>
<li>pchBuildPath
: <a class="el" href="struct_title_installation_information.html#a2571880501b1051bff254eef8fce47ba">TitleInstallationInformation</a>
</li>
Expand Down Expand Up @@ -215,13 +211,6 @@ <h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
</ul>


<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
<li>tokenType
: <a class="el" href="struct_start_stream_input.html#abaaa079b12040eaaca900ef1bf2fc1f5">StartStreamInput</a>
</li>
</ul>


<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
<li>uiTitleId
: <a class="el" href="struct_start_stream_input.html#ad57e93fa51f18c6781183e4fb46f8781">StartStreamInput</a>
Expand Down
11 changes: 0 additions & 11 deletions doc/SDK-GFN-RUNTIME/html/functions_vars.html
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@
<li><a href="#index_p"><span>p</span></a></li>
<li><a href="#index_r"><span>r</span></a></li>
<li><a href="#index_s"><span>s</span></a></li>
<li><a href="#index_t"><span>t</span></a></li>
<li><a href="#index_u"><span>u</span></a></li>
<li class="current"><a href="#index_v"><span>v</span></a></li>
</ul>
Expand Down Expand Up @@ -167,9 +166,6 @@ <h3><a class="anchor" id="index_o"></a>- o -</h3><ul>


<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
<li>pchAuthToken
: <a class="el" href="struct_start_stream_input.html#a2e4c1a0ecb730bdd5b7d80a2cef08e00">StartStreamInput</a>
</li>
<li>pchBuildPath
: <a class="el" href="struct_title_installation_information.html#a2571880501b1051bff254eef8fce47ba">TitleInstallationInformation</a>
</li>
Expand Down Expand Up @@ -215,13 +211,6 @@ <h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
</ul>


<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
<li>tokenType
: <a class="el" href="struct_start_stream_input.html#abaaa079b12040eaaca900ef1bf2fc1f5">StartStreamInput</a>
</li>
</ul>


<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
<li>uiTitleId
: <a class="el" href="struct_start_stream_input.html#ad57e93fa51f18c6781183e4fb46f8781">StartStreamInput</a>
Expand Down
15 changes: 4 additions & 11 deletions doc/SDK-GFN-RUNTIME/html/globals.html
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,7 @@
</div>
<div id="navrow4" class="tabs3">
<ul class="tablist">
<li class="current"><a href="globals.html#index_a"><span>a</span></a></li>
<li><a href="globals_b.html#index_b"><span>b</span></a></li>
<li class="current"><a href="globals.html#index_b"><span>b</span></a></li>
<li><a href="globals_c.html#index_c"><span>c</span></a></li>
<li><a href="globals_e.html#index_e"><span>e</span></a></li>
<li><a href="globals_f.html#index_f"><span>f</span></a></li>
Expand Down Expand Up @@ -113,15 +112,9 @@
<div class="contents">
<div class="textblock">Here is a list of all documented file members with links to the documentation:</div>

<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
<li>AUTH_NVIDIA_DEFAULT
: <a class="el" href="_gfn_runtime_sdk___c_a_p_i_8h.html#a3ef03e550b834b1620a157f88d2032b9">GfnRuntimeSdk_CAPI.h</a>
</li>
<li>AUTH_NVIDIA_JWT
: <a class="el" href="_gfn_runtime_sdk___c_a_p_i_8h.html#acf10277e2adb8804e1bbf1764c72abc1">GfnRuntimeSdk_CAPI.h</a>
</li>
<li>AuthType_t
: <a class="el" href="_gfn_runtime_sdk___c_a_p_i_8h.html#aa0248bd6ee742dfdf112c228ea832f21">GfnRuntimeSdk_CAPI.h</a>
<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
<li>bool
: <a class="el" href="_gfn_sdk_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">GfnSdk.h</a>
</li>
</ul>
</div><!-- contents -->
Expand Down
Loading

0 comments on commit d104973

Please sign in to comment.