Getting function using GMP











up vote
0
down vote

favorite












I have point(x,y) and i want add another point. i write only formul, but i want getting function:



    struct point {
mpz_t x;
mpz_t y;
};

point my_func(mpz_t x, mpz_t y) {
/..../
//lambda
mpz_sub(a, Y, y);
mpz_sub(b, X, x);
mpz_invert(c, b, P);
mpz_mul(b, a, c);
mpz_mod(f, b, P);

//point x
mpz_mul(a, f, f);
mpz_sub(b, a, x);
mpz_sub(c, b, X);
mpz_mod(d, c, P);

//point y
mpz_sub(a, x, d);
mpz_mul(b, f, a);
mpz_sub(c, b, y);
mpz_mod(e, c, P);

return (x, y);
}


It seems to me that this should not be difficult, but I have been driving all day.
point gp = {x, y};
error: array must be initialized with a brace-enclosed initializer



I want only having a point (x, y) to get the next point at the output. it does not have to be a structure, I tried pair and tuple, it still does not help.










share|improve this question




















  • 1




    Why don't you use boost multiprecision? It has a nice C++ wrapper for GMP.
    – The Quantum Physicist
    Nov 22 at 14:54










  • I read that boost uses gmp and decided to use it right away. I'll try boost, but I'm sure it will take me a whole day (.
    – vbujym
    Nov 22 at 14:59










  • > return (x, y); That won't work. return {x, y} is possible though
    – papagaga
    Nov 22 at 15:37










  • Without going to boost, GMP itself comes with a C++ interface (header gmpxx.h, type mpz_class). You cannot return a mpz_t (or an aggregate of mpz_t), it doesn't have value semantics, either you need a C++ wrapper, or you can pass a reference/pointer to a point to the function and assign to it inside the function (then you don't need to return anything).
    – Marc Glisse
    Nov 22 at 15:39












  • Marc Glisse, thank you!!!
    – vbujym
    Nov 24 at 8:50















up vote
0
down vote

favorite












I have point(x,y) and i want add another point. i write only formul, but i want getting function:



    struct point {
mpz_t x;
mpz_t y;
};

point my_func(mpz_t x, mpz_t y) {
/..../
//lambda
mpz_sub(a, Y, y);
mpz_sub(b, X, x);
mpz_invert(c, b, P);
mpz_mul(b, a, c);
mpz_mod(f, b, P);

//point x
mpz_mul(a, f, f);
mpz_sub(b, a, x);
mpz_sub(c, b, X);
mpz_mod(d, c, P);

//point y
mpz_sub(a, x, d);
mpz_mul(b, f, a);
mpz_sub(c, b, y);
mpz_mod(e, c, P);

return (x, y);
}


It seems to me that this should not be difficult, but I have been driving all day.
point gp = {x, y};
error: array must be initialized with a brace-enclosed initializer



I want only having a point (x, y) to get the next point at the output. it does not have to be a structure, I tried pair and tuple, it still does not help.










share|improve this question




















  • 1




    Why don't you use boost multiprecision? It has a nice C++ wrapper for GMP.
    – The Quantum Physicist
    Nov 22 at 14:54










  • I read that boost uses gmp and decided to use it right away. I'll try boost, but I'm sure it will take me a whole day (.
    – vbujym
    Nov 22 at 14:59










  • > return (x, y); That won't work. return {x, y} is possible though
    – papagaga
    Nov 22 at 15:37










  • Without going to boost, GMP itself comes with a C++ interface (header gmpxx.h, type mpz_class). You cannot return a mpz_t (or an aggregate of mpz_t), it doesn't have value semantics, either you need a C++ wrapper, or you can pass a reference/pointer to a point to the function and assign to it inside the function (then you don't need to return anything).
    – Marc Glisse
    Nov 22 at 15:39












  • Marc Glisse, thank you!!!
    – vbujym
    Nov 24 at 8:50













up vote
0
down vote

favorite









up vote
0
down vote

favorite











I have point(x,y) and i want add another point. i write only formul, but i want getting function:



    struct point {
mpz_t x;
mpz_t y;
};

point my_func(mpz_t x, mpz_t y) {
/..../
//lambda
mpz_sub(a, Y, y);
mpz_sub(b, X, x);
mpz_invert(c, b, P);
mpz_mul(b, a, c);
mpz_mod(f, b, P);

//point x
mpz_mul(a, f, f);
mpz_sub(b, a, x);
mpz_sub(c, b, X);
mpz_mod(d, c, P);

//point y
mpz_sub(a, x, d);
mpz_mul(b, f, a);
mpz_sub(c, b, y);
mpz_mod(e, c, P);

return (x, y);
}


It seems to me that this should not be difficult, but I have been driving all day.
point gp = {x, y};
error: array must be initialized with a brace-enclosed initializer



I want only having a point (x, y) to get the next point at the output. it does not have to be a structure, I tried pair and tuple, it still does not help.










share|improve this question















I have point(x,y) and i want add another point. i write only formul, but i want getting function:



    struct point {
mpz_t x;
mpz_t y;
};

point my_func(mpz_t x, mpz_t y) {
/..../
//lambda
mpz_sub(a, Y, y);
mpz_sub(b, X, x);
mpz_invert(c, b, P);
mpz_mul(b, a, c);
mpz_mod(f, b, P);

//point x
mpz_mul(a, f, f);
mpz_sub(b, a, x);
mpz_sub(c, b, X);
mpz_mod(d, c, P);

//point y
mpz_sub(a, x, d);
mpz_mul(b, f, a);
mpz_sub(c, b, y);
mpz_mod(e, c, P);

return (x, y);
}


It seems to me that this should not be difficult, but I have been driving all day.
point gp = {x, y};
error: array must be initialized with a brace-enclosed initializer



I want only having a point (x, y) to get the next point at the output. it does not have to be a structure, I tried pair and tuple, it still does not help.







c++ func gmp






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 22 at 15:29









stackptr

8,20223256




8,20223256










asked Nov 22 at 14:52









vbujym

11




11








  • 1




    Why don't you use boost multiprecision? It has a nice C++ wrapper for GMP.
    – The Quantum Physicist
    Nov 22 at 14:54










  • I read that boost uses gmp and decided to use it right away. I'll try boost, but I'm sure it will take me a whole day (.
    – vbujym
    Nov 22 at 14:59










  • > return (x, y); That won't work. return {x, y} is possible though
    – papagaga
    Nov 22 at 15:37










  • Without going to boost, GMP itself comes with a C++ interface (header gmpxx.h, type mpz_class). You cannot return a mpz_t (or an aggregate of mpz_t), it doesn't have value semantics, either you need a C++ wrapper, or you can pass a reference/pointer to a point to the function and assign to it inside the function (then you don't need to return anything).
    – Marc Glisse
    Nov 22 at 15:39












  • Marc Glisse, thank you!!!
    – vbujym
    Nov 24 at 8:50














  • 1




    Why don't you use boost multiprecision? It has a nice C++ wrapper for GMP.
    – The Quantum Physicist
    Nov 22 at 14:54










  • I read that boost uses gmp and decided to use it right away. I'll try boost, but I'm sure it will take me a whole day (.
    – vbujym
    Nov 22 at 14:59










  • > return (x, y); That won't work. return {x, y} is possible though
    – papagaga
    Nov 22 at 15:37










  • Without going to boost, GMP itself comes with a C++ interface (header gmpxx.h, type mpz_class). You cannot return a mpz_t (or an aggregate of mpz_t), it doesn't have value semantics, either you need a C++ wrapper, or you can pass a reference/pointer to a point to the function and assign to it inside the function (then you don't need to return anything).
    – Marc Glisse
    Nov 22 at 15:39












  • Marc Glisse, thank you!!!
    – vbujym
    Nov 24 at 8:50








1




1




Why don't you use boost multiprecision? It has a nice C++ wrapper for GMP.
– The Quantum Physicist
Nov 22 at 14:54




Why don't you use boost multiprecision? It has a nice C++ wrapper for GMP.
– The Quantum Physicist
Nov 22 at 14:54












I read that boost uses gmp and decided to use it right away. I'll try boost, but I'm sure it will take me a whole day (.
– vbujym
Nov 22 at 14:59




I read that boost uses gmp and decided to use it right away. I'll try boost, but I'm sure it will take me a whole day (.
– vbujym
Nov 22 at 14:59












> return (x, y); That won't work. return {x, y} is possible though
– papagaga
Nov 22 at 15:37




> return (x, y); That won't work. return {x, y} is possible though
– papagaga
Nov 22 at 15:37












Without going to boost, GMP itself comes with a C++ interface (header gmpxx.h, type mpz_class). You cannot return a mpz_t (or an aggregate of mpz_t), it doesn't have value semantics, either you need a C++ wrapper, or you can pass a reference/pointer to a point to the function and assign to it inside the function (then you don't need to return anything).
– Marc Glisse
Nov 22 at 15:39






Without going to boost, GMP itself comes with a C++ interface (header gmpxx.h, type mpz_class). You cannot return a mpz_t (or an aggregate of mpz_t), it doesn't have value semantics, either you need a C++ wrapper, or you can pass a reference/pointer to a point to the function and assign to it inside the function (then you don't need to return anything).
– Marc Glisse
Nov 22 at 15:39














Marc Glisse, thank you!!!
– vbujym
Nov 24 at 8:50




Marc Glisse, thank you!!!
– vbujym
Nov 24 at 8:50












1 Answer
1






active

oldest

votes

















up vote
0
down vote













really, why bother with something if i need to just change the values ​​of x and y
the void function by reference solved the problem, I am grateful for the useful advice
this function working and need RAM 600kb



void add(mpz_t& x, mpz_t& y, mpz_t& X, mpz_t& Y,  mpz_t& P) {
mpz_t a, b, c, d, f;
mpz_inits(a, b, c, d, f, 0);
//lambda
mpz_sub(a, Y, y);
mpz_sub(b, X, x);
mpz_invert(c, b, P);
mpz_mul(b, a, c);
mpz_mod(f, b, P);
//point x
mpz_mul(a, f, f);
mpz_sub(b, a, x);
mpz_sub(c, b, X);
mpz_mod(d, c, P);
//point y
mpz_sub(a, x, d);
mpz_mul(b, f, a);
mpz_sub(c, b, y);
mpz_mod(f, c, P);
//set x, y
mpz_set(x, d);
mpz_set(y, f);

mpz_clears(a, b, c, d, f, nullptr);
}





share|improve this answer























  • Don't forget to mpz_clear the variables. Also, you can simplify mpz_t& x to mpz_t x in the function arguments, because mpz_t already acts like a pointer/reference (that's why you couldn't return it). I still recommend you use a C++ wrapper, it is so much more convenient to write b=a-x; and not need the init/clear for each variable.
    – Marc Glisse
    Nov 24 at 22:31












  • Yes, I turned on cleaning at the end of my function, but if I run it sequentially in a loop, I see how the amount of RAM grows, as soon as the loop ends, the memory is cleared. While not yet solved this problem.
    – vbujym
    Nov 26 at 6:52










  • If the numbers get progressively bigger and bigger, it is normal that they take more RAM (and the iterations get slower).
    – Marc Glisse
    Nov 26 at 12:29










  • I understand this, of course, yes but in my case I write:mpz_clears(a, b, c, d, f, NULL); and then immediately after i call mpz_out_str(stdout, 10, a); and see that these variables are not cleared!
    – vbujym
    Nov 26 at 14:27










  • I tried to clear each variable separately (mpz_clear(a);), but it still does not help.
    – vbujym
    Nov 26 at 14:33











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53433499%2fgetting-function-using-gmp%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
0
down vote













really, why bother with something if i need to just change the values ​​of x and y
the void function by reference solved the problem, I am grateful for the useful advice
this function working and need RAM 600kb



void add(mpz_t& x, mpz_t& y, mpz_t& X, mpz_t& Y,  mpz_t& P) {
mpz_t a, b, c, d, f;
mpz_inits(a, b, c, d, f, 0);
//lambda
mpz_sub(a, Y, y);
mpz_sub(b, X, x);
mpz_invert(c, b, P);
mpz_mul(b, a, c);
mpz_mod(f, b, P);
//point x
mpz_mul(a, f, f);
mpz_sub(b, a, x);
mpz_sub(c, b, X);
mpz_mod(d, c, P);
//point y
mpz_sub(a, x, d);
mpz_mul(b, f, a);
mpz_sub(c, b, y);
mpz_mod(f, c, P);
//set x, y
mpz_set(x, d);
mpz_set(y, f);

mpz_clears(a, b, c, d, f, nullptr);
}





share|improve this answer























  • Don't forget to mpz_clear the variables. Also, you can simplify mpz_t& x to mpz_t x in the function arguments, because mpz_t already acts like a pointer/reference (that's why you couldn't return it). I still recommend you use a C++ wrapper, it is so much more convenient to write b=a-x; and not need the init/clear for each variable.
    – Marc Glisse
    Nov 24 at 22:31












  • Yes, I turned on cleaning at the end of my function, but if I run it sequentially in a loop, I see how the amount of RAM grows, as soon as the loop ends, the memory is cleared. While not yet solved this problem.
    – vbujym
    Nov 26 at 6:52










  • If the numbers get progressively bigger and bigger, it is normal that they take more RAM (and the iterations get slower).
    – Marc Glisse
    Nov 26 at 12:29










  • I understand this, of course, yes but in my case I write:mpz_clears(a, b, c, d, f, NULL); and then immediately after i call mpz_out_str(stdout, 10, a); and see that these variables are not cleared!
    – vbujym
    Nov 26 at 14:27










  • I tried to clear each variable separately (mpz_clear(a);), but it still does not help.
    – vbujym
    Nov 26 at 14:33















up vote
0
down vote













really, why bother with something if i need to just change the values ​​of x and y
the void function by reference solved the problem, I am grateful for the useful advice
this function working and need RAM 600kb



void add(mpz_t& x, mpz_t& y, mpz_t& X, mpz_t& Y,  mpz_t& P) {
mpz_t a, b, c, d, f;
mpz_inits(a, b, c, d, f, 0);
//lambda
mpz_sub(a, Y, y);
mpz_sub(b, X, x);
mpz_invert(c, b, P);
mpz_mul(b, a, c);
mpz_mod(f, b, P);
//point x
mpz_mul(a, f, f);
mpz_sub(b, a, x);
mpz_sub(c, b, X);
mpz_mod(d, c, P);
//point y
mpz_sub(a, x, d);
mpz_mul(b, f, a);
mpz_sub(c, b, y);
mpz_mod(f, c, P);
//set x, y
mpz_set(x, d);
mpz_set(y, f);

mpz_clears(a, b, c, d, f, nullptr);
}





share|improve this answer























  • Don't forget to mpz_clear the variables. Also, you can simplify mpz_t& x to mpz_t x in the function arguments, because mpz_t already acts like a pointer/reference (that's why you couldn't return it). I still recommend you use a C++ wrapper, it is so much more convenient to write b=a-x; and not need the init/clear for each variable.
    – Marc Glisse
    Nov 24 at 22:31












  • Yes, I turned on cleaning at the end of my function, but if I run it sequentially in a loop, I see how the amount of RAM grows, as soon as the loop ends, the memory is cleared. While not yet solved this problem.
    – vbujym
    Nov 26 at 6:52










  • If the numbers get progressively bigger and bigger, it is normal that they take more RAM (and the iterations get slower).
    – Marc Glisse
    Nov 26 at 12:29










  • I understand this, of course, yes but in my case I write:mpz_clears(a, b, c, d, f, NULL); and then immediately after i call mpz_out_str(stdout, 10, a); and see that these variables are not cleared!
    – vbujym
    Nov 26 at 14:27










  • I tried to clear each variable separately (mpz_clear(a);), but it still does not help.
    – vbujym
    Nov 26 at 14:33













up vote
0
down vote










up vote
0
down vote









really, why bother with something if i need to just change the values ​​of x and y
the void function by reference solved the problem, I am grateful for the useful advice
this function working and need RAM 600kb



void add(mpz_t& x, mpz_t& y, mpz_t& X, mpz_t& Y,  mpz_t& P) {
mpz_t a, b, c, d, f;
mpz_inits(a, b, c, d, f, 0);
//lambda
mpz_sub(a, Y, y);
mpz_sub(b, X, x);
mpz_invert(c, b, P);
mpz_mul(b, a, c);
mpz_mod(f, b, P);
//point x
mpz_mul(a, f, f);
mpz_sub(b, a, x);
mpz_sub(c, b, X);
mpz_mod(d, c, P);
//point y
mpz_sub(a, x, d);
mpz_mul(b, f, a);
mpz_sub(c, b, y);
mpz_mod(f, c, P);
//set x, y
mpz_set(x, d);
mpz_set(y, f);

mpz_clears(a, b, c, d, f, nullptr);
}





share|improve this answer














really, why bother with something if i need to just change the values ​​of x and y
the void function by reference solved the problem, I am grateful for the useful advice
this function working and need RAM 600kb



void add(mpz_t& x, mpz_t& y, mpz_t& X, mpz_t& Y,  mpz_t& P) {
mpz_t a, b, c, d, f;
mpz_inits(a, b, c, d, f, 0);
//lambda
mpz_sub(a, Y, y);
mpz_sub(b, X, x);
mpz_invert(c, b, P);
mpz_mul(b, a, c);
mpz_mod(f, b, P);
//point x
mpz_mul(a, f, f);
mpz_sub(b, a, x);
mpz_sub(c, b, X);
mpz_mod(d, c, P);
//point y
mpz_sub(a, x, d);
mpz_mul(b, f, a);
mpz_sub(c, b, y);
mpz_mod(f, c, P);
//set x, y
mpz_set(x, d);
mpz_set(y, f);

mpz_clears(a, b, c, d, f, nullptr);
}






share|improve this answer














share|improve this answer



share|improve this answer








edited Dec 3 at 11:47

























answered Nov 24 at 8:56









vbujym

11




11












  • Don't forget to mpz_clear the variables. Also, you can simplify mpz_t& x to mpz_t x in the function arguments, because mpz_t already acts like a pointer/reference (that's why you couldn't return it). I still recommend you use a C++ wrapper, it is so much more convenient to write b=a-x; and not need the init/clear for each variable.
    – Marc Glisse
    Nov 24 at 22:31












  • Yes, I turned on cleaning at the end of my function, but if I run it sequentially in a loop, I see how the amount of RAM grows, as soon as the loop ends, the memory is cleared. While not yet solved this problem.
    – vbujym
    Nov 26 at 6:52










  • If the numbers get progressively bigger and bigger, it is normal that they take more RAM (and the iterations get slower).
    – Marc Glisse
    Nov 26 at 12:29










  • I understand this, of course, yes but in my case I write:mpz_clears(a, b, c, d, f, NULL); and then immediately after i call mpz_out_str(stdout, 10, a); and see that these variables are not cleared!
    – vbujym
    Nov 26 at 14:27










  • I tried to clear each variable separately (mpz_clear(a);), but it still does not help.
    – vbujym
    Nov 26 at 14:33


















  • Don't forget to mpz_clear the variables. Also, you can simplify mpz_t& x to mpz_t x in the function arguments, because mpz_t already acts like a pointer/reference (that's why you couldn't return it). I still recommend you use a C++ wrapper, it is so much more convenient to write b=a-x; and not need the init/clear for each variable.
    – Marc Glisse
    Nov 24 at 22:31












  • Yes, I turned on cleaning at the end of my function, but if I run it sequentially in a loop, I see how the amount of RAM grows, as soon as the loop ends, the memory is cleared. While not yet solved this problem.
    – vbujym
    Nov 26 at 6:52










  • If the numbers get progressively bigger and bigger, it is normal that they take more RAM (and the iterations get slower).
    – Marc Glisse
    Nov 26 at 12:29










  • I understand this, of course, yes but in my case I write:mpz_clears(a, b, c, d, f, NULL); and then immediately after i call mpz_out_str(stdout, 10, a); and see that these variables are not cleared!
    – vbujym
    Nov 26 at 14:27










  • I tried to clear each variable separately (mpz_clear(a);), but it still does not help.
    – vbujym
    Nov 26 at 14:33
















Don't forget to mpz_clear the variables. Also, you can simplify mpz_t& x to mpz_t x in the function arguments, because mpz_t already acts like a pointer/reference (that's why you couldn't return it). I still recommend you use a C++ wrapper, it is so much more convenient to write b=a-x; and not need the init/clear for each variable.
– Marc Glisse
Nov 24 at 22:31






Don't forget to mpz_clear the variables. Also, you can simplify mpz_t& x to mpz_t x in the function arguments, because mpz_t already acts like a pointer/reference (that's why you couldn't return it). I still recommend you use a C++ wrapper, it is so much more convenient to write b=a-x; and not need the init/clear for each variable.
– Marc Glisse
Nov 24 at 22:31














Yes, I turned on cleaning at the end of my function, but if I run it sequentially in a loop, I see how the amount of RAM grows, as soon as the loop ends, the memory is cleared. While not yet solved this problem.
– vbujym
Nov 26 at 6:52




Yes, I turned on cleaning at the end of my function, but if I run it sequentially in a loop, I see how the amount of RAM grows, as soon as the loop ends, the memory is cleared. While not yet solved this problem.
– vbujym
Nov 26 at 6:52












If the numbers get progressively bigger and bigger, it is normal that they take more RAM (and the iterations get slower).
– Marc Glisse
Nov 26 at 12:29




If the numbers get progressively bigger and bigger, it is normal that they take more RAM (and the iterations get slower).
– Marc Glisse
Nov 26 at 12:29












I understand this, of course, yes but in my case I write:mpz_clears(a, b, c, d, f, NULL); and then immediately after i call mpz_out_str(stdout, 10, a); and see that these variables are not cleared!
– vbujym
Nov 26 at 14:27




I understand this, of course, yes but in my case I write:mpz_clears(a, b, c, d, f, NULL); and then immediately after i call mpz_out_str(stdout, 10, a); and see that these variables are not cleared!
– vbujym
Nov 26 at 14:27












I tried to clear each variable separately (mpz_clear(a);), but it still does not help.
– vbujym
Nov 26 at 14:33




I tried to clear each variable separately (mpz_clear(a);), but it still does not help.
– vbujym
Nov 26 at 14:33


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53433499%2fgetting-function-using-gmp%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Trompette piccolo

Slow SSRS Report in dynamic grouping and multiple parameters

Simon Yates (cyclisme)