Skip to content

Commit

Permalink
Merge pull request #75 from GoogleChrome/74-add-HRIR-data-for-soa
Browse files Browse the repository at this point in the history
Add HRIR data for 2nd-order ambisonics renderering
  • Loading branch information
hoch authored Oct 31, 2017
2 parents 51e50be + 059148a commit f65ac0b
Show file tree
Hide file tree
Showing 12 changed files with 175 additions and 86 deletions.
98 changes: 66 additions & 32 deletions build/omnitone.js
Original file line number Diff line number Diff line change
Expand Up @@ -2010,9 +2010,9 @@ const FOAVirtualSpeaker = __webpack_require__(7);
const HOAConvolver = __webpack_require__(8);
const HOARenderer = __webpack_require__(16);
const HOARotator = __webpack_require__(9);
const Polyfill = __webpack_require__(18);
const Polyfill = __webpack_require__(19);
const Utils = __webpack_require__(0);
const Version = __webpack_require__(19);
const Version = __webpack_require__(20);

// DEPRECATED in V1, in favor of BufferList.
const AudioBufferManager = __webpack_require__(5);
Expand Down Expand Up @@ -2614,33 +2614,36 @@ function FOARenderer(context, config) {
renderingMode: RenderingMode.AMBISONIC,
};

if (config.channelMap) {
if (Array.isArray(config.channelMap) && config.channelMap.length === 4) {
this._config.channelMap = config.channelMap;
} else {
Utils.throw(
'FOARenderer: Invalid channel map. (got ' + config.channelMap + ')');
if (config) {
if (config.channelMap) {
if (Array.isArray(config.channelMap) && config.channelMap.length === 4) {
this._config.channelMap = config.channelMap;
} else {
Utils.throw(
'FOARenderer: Invalid channel map. (got ' + config.channelMap
+ ')');
}
}
}

if (config.hrirPathList) {
if (Array.isArray(config.hrirPathList) &&
config.hrirPathList.length === 2) {
this._config.pathList = config.hrirPathList;
} else {
Utils.throw(
'FOARenderer: Invalid HRIR URLs. It must be an array with ' +
'2 URLs to HRIR files. (got ' + config.hrirPathList + ')');
if (config.hrirPathList) {
if (Array.isArray(config.hrirPathList) &&
config.hrirPathList.length === 2) {
this._config.pathList = config.hrirPathList;
} else {
Utils.throw(
'FOARenderer: Invalid HRIR URLs. It must be an array with ' +
'2 URLs to HRIR files. (got ' + config.hrirPathList + ')');
}
}
}

if (config.renderingMode) {
if (Object.values(RenderingMode).includes(config.renderingMode)) {
this._config.renderingMode = config.renderingMode;
} else {
Utils.log(
'FOARenderer: Invalid rendering mode order. (got' +
config.renderingMode + ') Fallbacks to the mode "ambisonic".');
if (config.renderingMode) {
if (Object.values(RenderingMode).includes(config.renderingMode)) {
this._config.renderingMode = config.renderingMode;
} else {
Utils.log(
'FOARenderer: Invalid rendering mode order. (got' +
config.renderingMode + ') Fallbacks to the mode "ambisonic".');
}
}
}

Expand All @@ -2667,6 +2670,10 @@ FOARenderer.prototype._buildAudioGraph = function() {
this._foaRouter.output.connect(this._foaRotator.input);
this._foaRotator.output.connect(this._foaConvolver.input);
this._foaConvolver.output.connect(this.output);

this.input.channelCount = 4;
this.input.channelCountMode = 'explicit';
this.input.channelInterpretation = 'discrete';
};


Expand Down Expand Up @@ -2860,6 +2867,7 @@ const BufferList = __webpack_require__(1);
const HOAConvolver = __webpack_require__(8);
const HOARotator = __webpack_require__(9);
const TOAHrirBase64 = __webpack_require__(17);
const SOAHrirBase64 = __webpack_require__(18);
const Utils = __webpack_require__(0);


Expand Down Expand Up @@ -2937,8 +2945,8 @@ function HOARenderer(context, config) {
this._config.renderingMode = config.renderingMode;
} else {
Utils.log(
'HOARenderer: Invalid rendering mode. (got ' + config.renderingMode +
') Fallbacks to "ambisonic".');
'HOARenderer: Invalid rendering mode. (got ' +
config.renderingMode + ') Fallbacks to "ambisonic".');
}
}

Expand All @@ -2963,6 +2971,10 @@ HOARenderer.prototype._buildAudioGraph = function() {
this.input.connect(this._bypass);
this._hoaRotator.output.connect(this._hoaConvolver.input);
this._hoaConvolver.output.connect(this.output);

this.input.channelCount = this._config.numberOfChannels;
this.input.channelCountMode = 'explicit';
this.input.channelInterpretation = 'discrete';
};


Expand All @@ -2973,9 +2985,16 @@ HOARenderer.prototype._buildAudioGraph = function() {
* @param {function} reject - Rejection handler.
*/
HOARenderer.prototype._initializeCallback = function(resolve, reject) {
const bufferList = this._config.pathList
? new BufferList(this._context, this._config.pathList, {dataType: 'url'})
: new BufferList(this._context, TOAHrirBase64);
let bufferList;
if (this._config.pathList) {
bufferList =
new BufferList(this._context, this._config.pathList, {dataType: 'url'});
} else {
bufferList = this._config.ambisonicOrder === 2
? new BufferList(this._context, SOAHrirBase64)
: new BufferList(this._context, TOAHrirBase64);
}

bufferList.load().then(
function(hrirBufferList) {
this._hoaConvolver.setHRIRBufferList(hrirBufferList);
Expand Down Expand Up @@ -3094,6 +3113,21 @@ module.exports = OmnitoneTOAHrirBase64;

/***/ }),
/* 18 */
/***/ (function(module, exports) {

const OmnitoneSOAHrirBase64 = [
"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/P////v//P8CAAQA+//+//3//f8CAAUA+v/9//////8AAAQA+v/8////AAD//wIA+//8/wAAAQD+/wEA+//8/wAAAgD9/////P/9/wEAAgD8//7//f/9/wAAAgD8//3//v/+////AQD8//z/////////AAD8//3///8AAP7/AAD9//7///8AAP7////+//////8AAP7////+////////////////////",
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD//////v8AAP///////wAAAAAAAP7/AQABAAAABwD///X/BQAjAPL/CQDb/9D/GAAb/7sAYwCW/z0BcP/X/7T/2QDW+wH8yANCCCUJ5QT++UXmhPwhA78FuAxH+p78ifudBlAG9vmu/lAK2fdlB///cfjoCa0E7Akn9Yb/zvba+AkAHPywBGEBFwUNAL8AXAAGA20DFvmR/kz+F/06Ag/+GwHl/5EEKgJd/q0AP/ym/9n6EfxY/2H+/QFtAC4C6QBDAaMCo/20/+3/3f/p/fL9rv9V/6cBhQHuAX4AcwJYAaH/IP/P/gsApP0LAe7/sQBuAI0AAgGDAE4BzACe/5X//v+v/+f+Zf+gAOv/5QBhAOIApAANASYAuP+h/8b/HQBr/9//bACWAGEAFAB5AD0AWQDU/+D/Yf/p//D/s/+R/4QAMQBvABEAkQBfABQAJgDW/wwA8/8XALz/vf8zAFAAKwD1/zEAPwDJ/x0A7/8LAOX/FwDR//H/EQAdAO//6P8QAFEA2f8WABEAMgDy/xIA+f/s/xAALgDv////HQAvAPT/+f8iAAYAEgAFABoAGgD//w0A+f/0/xsAHgDx/9f/GAACAPH/8f8JAPf/GwALABEA7/8cAPT/CgD2//j/BQD8/+3/OgAgAAYA9f8PAN7/DgD9/9r/1//3/+3/9//1//b/8//5//f/AgAJAOf/+v8OAAMACwD9/+7/5f8eAAEA9//q//7/8P8WAP7/+//4/wIA+f8TAAIA9f/5/wcA+P8iAAgA9v/n/xoA//8gAAUABwDj/wAA9v8BAAUAFQDn/wMA7v8QABAAEQDm/wwA8f8aAAAABwDu/wcACgASAAEA7//w//f/BgARAAkA6P/3/wcADgAKAAYA4f/4/wYADgAAAPr/8P/9/xQACgAHAPn/7//9/xEAAgD+//L/8v/8/xUAAwDw//H/9f8CAAsA/v/q//L/+f8FAAYA/P/r//j///8GAAkA+//o//j/AQAIAP//+v/o//v/CAAIAPv/+P/w/wEACQAHAPj/+f/0/wIACwAFAPb/+f/4/wQACwACAPP/+f/+/wYACAD///L/+/8BAAYABQD9//P//P8FAAUAAgD7//T//f8HAAQA///7//f///8IAAMA/P/6//r/AQAIAAEA+v/6//3/AgAHAAAA+f/7/wAAAwAFAP7/+P/8/wIAAgACAP3/+f/9/wMAAwAAAPz/+v/+/wQAAgD+//z/+/8AAAQAAQD8//z//f8BAAQAAAD7//3///8BAAMA///7//3/AAACAAEA/v/7//7/AQABAAAA/v/9////AQAAAP///v/+////AAD/////////////////////////////",
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD////////+//////8AAAAA/v/+/wAAAQD8//3/CQAJAP3/+v8PAAcApABlABkBkwCO/i//lfqa/HQAcf/3BdkCzwJcBCMC0wMN/9/9wgI7AaECYfxV/Tf83vhn/xrt8Owx/8n7cgHABYb43QcZDh4WugNrA7P74gHu/9z/zv0t/acCiQHY/iv4qQOl/ysCE/0//XT9Sf4O//j9xfupAn394gHO+rsCXAFIAxQC9wIXBgcD2AQuAnb/9gJh/6wAVfxEAI4Bvf7oAFv/bALsAMQBe/88/joAT/4dAH39/v9LAXn/gwDI//QBdABcAA0A7f4lAMn///+9/tv/iABp/13/pP/dALv/w/8MAHv//f+y/6////7U/5AAZP+Z/8r/nQDR/5r/DwDr/xAA4v+s/3z/+P9uAOv/t/82AGcAHgCb/yQAFQBGAM7/CgD3/xoAegAaAOz/CgBHAA8Adv8/AAAABQC2/xIAAAA7ABQAKgCj/z4AAQAXAJz/JAADAAcA8f/1/2AAAQAlAPD/NgDx/1wA7v/4/wMAZADv//3/HQAkAFoA8P9FAPv/FgBIAPf/WQAHAEUACQD0/xIAQwDu/wMAwP9VALn/XwCw/yEA5f8sAPj/FgDD/1YAyv8rAOX/HQDo//j/IQAQACAAHwD9/yQAHQBAABgABQAiAAUAKAD3/wkACwAKAAMABwAJAPb/+f8GAOr/JQAHABMA6P8TAA4AGgD//woA8/8ZAP//GADu/w0A9v8SAAMABwD4/wQA5P8XAAQACgDq/wUA+/8VAAcACADs/xIAAAATAPH/+v/1//T/7f///+z/+v/y/+//9/8KAAcACgAJAPT/BAAKAAAABgAIAPL/9v8KAAMABAACAPr/9v8OAAIA+P/x//v/+f8MAPb/+P/w/wQA9f8MAPn////7/woA/v8PAAEAAgD1/xAAAQAPAP//AwD//xQABwALAAAABgADABAAAgAHAAAACAABAA8ABQAFAAMABwAEAA4ABwADAAEACQAFAAoAAwD//wAACQADAAUAAQD/////CAABAAMAAAD/////BwACAAEAAAD/////BwACAP7///8BAAAABgABAP7///8CAAAABAAAAP7///8DAAAAAwAAAP3///8DAAAAAQAAAP3//v8EAAAAAAD+//////8EAP/////+/wAA/v8EAP/////+/wEA/v8EAP///v/+/wIA//8DAP///v/+/wIA//8BAP///v/+/wMA//8BAP/////+/wMA//8AAP//AAD+/wQA//8AAP7/AQD//wIA////////AQD//wIA////////AQAAAAEAAAAAAP//AQD//wEAAAAAAP//AQAAAAEAAAAAAAAA",
"UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD+/wAA+v8AAPz/AAD//wAA/f8AAAEAAAD+/wAACQAAAAQAAAAZAAAAtgAAAFsBAABW/gAAH/oAAGcBAABoBwAAlAAAAO3/AAARAQAA+wIAAEoEAACe/gAAiv4AALD0AADJ8wAAkQQAAF34AABi8QAAPQAAAAH2AAD19AAADAMAAJwGAACTEAAA0AwAAJkHAACOBwAAuQEAANcDAAC6AgAAHwUAAHEFAAB0AwAAbgEAADz+AADYAQAAGAAAAJwCAADgAAAA//0AAMn+AAAT/AAAwP8AAOn9AAAJAAAAewEAAOn+AACN/wAAOv0AAO3+AADN/gAAcP8AACj/AACq/gAA+f4AAML9AACa/wAA/f4AAN7/AABo/wAA6/4AAE//AAAC/wAAEQAAAHX/AAB0AAAA5f8AAEwAAAB3AAAA5/8AAMIAAABCAAAAzgAAAE8AAAB3AAAAKAAAADMAAACqAAAALwAAAK4AAAASAAAAVgAAACgAAAAtAAAATAAAAP3/AAA7AAAA2/8AACQAAADw/wAALQAAADEAAAAlAAAAbAAAADMAAABUAAAAEAAAACgAAAD1/wAA9v8AAPr/AADu/wAALgAAABIAAABUAAAARAAAAGUAAABGAAAAOAAAAGAAAAAuAAAARQAAACEAAAAfAAAAAAAAAAkAAAAQAAAAAwAAABIAAADs/wAAEAAAAAYAAAASAAAAIgAAABEAAAADAAAABAAAAA8AAAD4/wAAHQAAAAsAAAAIAAAADgAAAP//AAAcAAAADwAAAAYAAAASAAAAFwAAAAMAAAAYAAAAEgAAAPr/AAAQAAAADQAAAAoAAAD3/wAABgAAAPb/AADf/wAA/v8AAPL/AAD6/wAAFAAAAAQAAAAEAAAAGwAAAAEAAAAMAAAAIAAAAAIAAAAdAAAAGAAAAAIAAAAcAAAAEgAAAAcAAAAeAAAADwAAAAQAAAAeAAAABAAAAAYAAAAZAAAAAQAAAA4AAAATAAAA/v8AAAoAAAAOAAAA+/8AAAsAAAAJAAAA+f8AAAsAAAABAAAA+f8AAAoAAAD9/wAA+v8AAAcAAAD5/wAA+v8AAAUAAAD3/wAA/f8AAAQAAAD2/wAAAAAAAAEAAAD3/wAAAgAAAAAAAAD4/wAAAwAAAP7/AAD6/wAABAAAAP3/AAD8/wAABAAAAPv/AAD+/wAAAwAAAPv/AAD//wAAAQAAAPv/AAAAAAAAAAAAAPv/AAACAAAA//8AAPz/AAACAAAA/v8AAP3/AAACAAAA/f8AAP7/AAABAAAA/f8AAP//AAABAAAA/f8AAAAAAAAAAAAA/v8AAAEAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
];

module.exports = OmnitoneSOAHrirBase64;


/***/ }),
/* 19 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
Expand Down Expand Up @@ -3172,7 +3206,7 @@ exports.patchSafari = function() {


/***/ }),
/* 19 */
/* 20 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
Expand Down Expand Up @@ -3202,7 +3236,7 @@ exports.patchSafari = function() {
* Omnitone library version
* @type {String}
*/
module.exports = '1.0.5';
module.exports = '1.0.6';


/***/ })
Expand Down
4 changes: 2 additions & 2 deletions build/omnitone.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion doc/Omnitone.html
Original file line number Diff line number Diff line change
Expand Up @@ -2825,7 +2825,7 @@ <h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="Omnito
<br class="clear">

<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Fri Oct 20 2017 13:05:26 GMT-0700 (PDT)
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Oct 31 2017 15:56:04 GMT-0700 (PDT)
</footer>

<script> prettyPrint(); </script>
Expand Down
2 changes: 1 addition & 1 deletion doc/global.html
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ <h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="Omnito
<br class="clear">

<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Fri Oct 20 2017 13:05:26 GMT-0700 (PDT)
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Oct 31 2017 15:56:04 GMT-0700 (PDT)
</footer>

<script> prettyPrint(); </script>
Expand Down
2 changes: 1 addition & 1 deletion doc/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ <h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="Omnito
<br class="clear">

<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Fri Oct 20 2017 13:05:26 GMT-0700 (PDT)
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Oct 31 2017 15:56:04 GMT-0700 (PDT)
</footer>

<script> prettyPrint(); </script>
Expand Down
2 changes: 1 addition & 1 deletion doc/omnitone.js.html
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,7 @@ <h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="Omnito
<br class="clear">

<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Fri Oct 20 2017 13:05:26 GMT-0700 (PDT)
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Oct 31 2017 15:56:04 GMT-0700 (PDT)
</footer>

<script> prettyPrint(); </script>
Expand Down
70 changes: 53 additions & 17 deletions examples/hoa-renderer.html
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ <h1>
<code>HOARenderer</code> is an optimized higher-order ambisonic renderer
based on the integrated convolution (SH-MaxRe HRIR). This renderer
supports arbitrary order ambisonic rendering, provided the user supplies
the appropriate SH-MaxRe HRIRs.
the appropriate SH-MaxRe HRIRs. You may toggle between 2nd and 3rd order
ambisonic renderer.
</p>
<div id="secSource">
<p>
Expand Down Expand Up @@ -61,7 +62,9 @@ <h2>
<input oninput="adjustGain(this);" id="eRangeGain" type="range" min=
"-60" max="24" value="0" step="1">
</dd>
</dl><button id="eButtonPlayback" disabled>Play</button>
</dl>
<button id="eButtonPlayback" disabled>Play</button>
<button id="eButtonAmbisonicOrder" disabled>3rd Order</button>
</div>
<div id="footer">
<p>
Expand All @@ -77,13 +80,15 @@ <h2>
var exampleInitialized = false;

var audioContext;
var hoaRenderer;
var toaRenderer;
var soaRenderer;
var currentBufferSource;
var inputGain;
var mergedTOABuffer;
var contentBuffer;
var rotationMatrix3 = new Float32Array(9);

var eButtonPlayback;
var eButtonAmbisonicOrder;
var eRangeAzimuth;
var eRangeElevation;
var eRangeGain;
Expand Down Expand Up @@ -142,17 +147,27 @@ <h2>
rotationMatrix3[7] = forward[1];
rotationMatrix3[8] = forward[2];

hoaRenderer.setRotationMatrix3(rotationMatrix3);
eButtonAmbisonicOrder.textContent === '3rd Order'
? toaRenderer.setRotationMatrix3(rotationMatrix3)
: soaRenderer.setRotationMatrix3(rotationMatrix3);
}

function onToggleButton(event) {
function onGainSliderChange() {
if (!exampleInitialized)
return;

document.getElementById('eLabelGain').textContent = eRangeGain.value;
inputGain.gain.value = Math.pow(10, parseFloat(eRangeGain.value) / 20);
}

function onTogglePlayback(event) {
if (!exampleInitialized)
return;

switch (event.target.textContent) {
case 'Play':
currentBufferSource = audioContext.createBufferSource();
currentBufferSource.buffer = mergedTOABuffer;
currentBufferSource.buffer = contentBuffer;
currentBufferSource.loop = true;
currentBufferSource.connect(inputGain);
currentBufferSource.start();
Expand All @@ -166,39 +181,60 @@ <h2>
}
}

function onGainSliderChange() {
function onToggleAmbisonicOrder(event) {
if (!exampleInitialized)
return;

document.getElementById('eLabelGain').textContent = eRangeGain.value;
inputGain.gain.value = Math.pow(10, parseFloat(eRangeGain.value) / 20);
switch (event.target.textContent) {
case '3rd Order':
toaRenderer.setRenderingMode('off');
soaRenderer.setRenderingMode('ambisonic');
soaRenderer.setRotationMatrix3(rotationMatrix3);
event.target.textContent = '2nd Order';
break;
case '2nd Order':
soaRenderer.setRenderingMode('off');
toaRenderer.setRenderingMode('ambisonic');
toaRenderer.setRotationMatrix3(rotationMatrix3);
event.target.textContent = '3rd Order';
break;
}
}

function onLoad() {
eButtonPlayback = document.getElementById('eButtonPlayback');
eButtonAmbisonicOrder =
document.getElementById('eButtonAmbisonicOrder');
eRangeAzimuth = document.getElementById('eRangeAzimuth');
eRangeElevation = document.getElementById('eRangeElevation');
eRangeGain = document.getElementById('eRangeGain');

eButtonPlayback.onclick = onToggleButton;
eButtonPlayback.disabled = true;
eButtonPlayback.onclick = onTogglePlayback;
eButtonAmbisonicOrder.onclick = onToggleAmbisonicOrder;
eRangeGain.oninput = onGainSliderChange;
eRangeAzimuth.oninput = onDirectionChange;
eRangeElevation.oninput = onDirectionChange;

audioContext = new AudioContext();
inputGain = audioContext.createGain();
hoaRenderer = Omnitone.createHOARenderer(audioContext);
toaRenderer = Omnitone.createHOARenderer(audioContext);
soaRenderer = Omnitone.createHOARenderer(audioContext,
{ambisonicOrder: 2});

Promise.all([
Omnitone.createBufferList(audioContext, exampleSoundPathList),
hoaRenderer.initialize()
toaRenderer.initialize(),
soaRenderer.initialize()
]).then((results) => {
mergedTOABuffer =
contentBuffer =
Omnitone.mergeBufferListByChannel(audioContext, results[0]);
inputGain.connect(hoaRenderer.input);
hoaRenderer.output.connect(audioContext.destination);
inputGain.connect(soaRenderer.input);
inputGain.connect(toaRenderer.input);
soaRenderer.output.connect(audioContext.destination);
toaRenderer.output.connect(audioContext.destination);
soaRenderer.setRenderingMode('off');
eButtonPlayback.disabled = false;
eButtonAmbisonicOrder.disabled = false;
exampleInitialized = true;
});
}
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "omnitone",
"version": "1.0.5",
"version": "1.0.6",
"description": "Spatial Audio Decoder in Web Audio API",
"main": "build/omnitone.js",
"keywords": [
Expand Down
Loading

0 comments on commit f65ac0b

Please sign in to comment.