You can subscribe to this list here.
| 2000 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(17) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(23) |
| 2002 |
Jan
(18) |
Feb
(20) |
Mar
(22) |
Apr
(41) |
May
(28) |
Jun
(25) |
Jul
(10) |
Aug
(7) |
Sep
(5) |
Oct
(20) |
Nov
(13) |
Dec
(11) |
| 2003 |
Jan
(28) |
Feb
(5) |
Mar
(6) |
Apr
(5) |
May
(17) |
Jun
(6) |
Jul
(45) |
Aug
(35) |
Sep
(24) |
Oct
(50) |
Nov
(53) |
Dec
(6) |
| 2004 |
Jan
(4) |
Feb
(10) |
Mar
(52) |
Apr
(46) |
May
(8) |
Jun
(25) |
Jul
(12) |
Aug
(6) |
Sep
(8) |
Oct
(8) |
Nov
(9) |
Dec
(7) |
| 2005 |
Jan
(18) |
Feb
(60) |
Mar
(19) |
Apr
(26) |
May
(14) |
Jun
(27) |
Jul
(8) |
Aug
(15) |
Sep
(19) |
Oct
(53) |
Nov
(20) |
Dec
(23) |
| 2006 |
Jan
(16) |
Feb
(27) |
Mar
(33) |
Apr
(51) |
May
(36) |
Jun
(25) |
Jul
(54) |
Aug
(30) |
Sep
(25) |
Oct
(67) |
Nov
(43) |
Dec
(13) |
| 2007 |
Jan
(23) |
Feb
(27) |
Mar
(55) |
Apr
(79) |
May
(60) |
Jun
(66) |
Jul
(46) |
Aug
(30) |
Sep
(90) |
Oct
(49) |
Nov
(85) |
Dec
(74) |
| 2008 |
Jan
(68) |
Feb
(59) |
Mar
(64) |
Apr
(28) |
May
(66) |
Jun
(35) |
Jul
(73) |
Aug
(76) |
Sep
(65) |
Oct
(46) |
Nov
(41) |
Dec
(19) |
| 2009 |
Jan
(46) |
Feb
(90) |
Mar
(51) |
Apr
(104) |
May
(13) |
Jun
(24) |
Jul
(20) |
Aug
(39) |
Sep
(109) |
Oct
(101) |
Nov
(117) |
Dec
(57) |
| 2010 |
Jan
(55) |
Feb
(42) |
Mar
(39) |
Apr
(22) |
May
(33) |
Jun
(41) |
Jul
(25) |
Aug
(52) |
Sep
(75) |
Oct
(60) |
Nov
(62) |
Dec
(52) |
| 2011 |
Jan
(70) |
Feb
(31) |
Mar
(26) |
Apr
(28) |
May
(17) |
Jun
(38) |
Jul
(51) |
Aug
(35) |
Sep
(27) |
Oct
(35) |
Nov
(10) |
Dec
(20) |
| 2012 |
Jan
(21) |
Feb
(29) |
Mar
(13) |
Apr
(37) |
May
(33) |
Jun
(12) |
Jul
(34) |
Aug
(27) |
Sep
(29) |
Oct
(35) |
Nov
(58) |
Dec
(27) |
| 2013 |
Jan
(27) |
Feb
(16) |
Mar
(40) |
Apr
(16) |
May
(34) |
Jun
(37) |
Jul
(6) |
Aug
(3) |
Sep
(4) |
Oct
(49) |
Nov
(13) |
Dec
(12) |
| 2014 |
Jan
(15) |
Feb
(21) |
Mar
(11) |
Apr
(13) |
May
(27) |
Jun
(60) |
Jul
(19) |
Aug
(29) |
Sep
(20) |
Oct
(28) |
Nov
(41) |
Dec
(15) |
| 2015 |
Jan
(33) |
Feb
(29) |
Mar
(26) |
Apr
(17) |
May
(2) |
Jun
(13) |
Jul
(21) |
Aug
(30) |
Sep
(22) |
Oct
(15) |
Nov
(46) |
Dec
(20) |
| 2016 |
Jan
(6) |
Feb
(5) |
Mar
(9) |
Apr
(15) |
May
(9) |
Jun
(4) |
Jul
(3) |
Aug
(4) |
Sep
(39) |
Oct
(8) |
Nov
(5) |
Dec
(8) |
| 2017 |
Jan
(4) |
Feb
(14) |
Mar
(4) |
Apr
(16) |
May
(5) |
Jun
(10) |
Jul
(25) |
Aug
(2) |
Sep
(5) |
Oct
(11) |
Nov
(8) |
Dec
(11) |
| 2018 |
Jan
(7) |
Feb
(4) |
Mar
|
Apr
(1) |
May
(4) |
Jun
(21) |
Jul
(8) |
Aug
(3) |
Sep
(2) |
Oct
(2) |
Nov
(1) |
Dec
|
| 2019 |
Jan
(1) |
Feb
(5) |
Mar
(18) |
Apr
(9) |
May
(5) |
Jun
(21) |
Jul
(25) |
Aug
(25) |
Sep
(4) |
Oct
(2) |
Nov
(2) |
Dec
(5) |
| 2020 |
Jan
|
Feb
|
Mar
(3) |
Apr
|
May
(2) |
Jun
(2) |
Jul
(1) |
Aug
|
Sep
(1) |
Oct
(2) |
Nov
(6) |
Dec
|
| 2021 |
Jan
(1) |
Feb
|
Mar
(2) |
Apr
(1) |
May
(4) |
Jun
|
Jul
(1) |
Aug
|
Sep
(2) |
Oct
(9) |
Nov
(1) |
Dec
(5) |
| 2022 |
Jan
(7) |
Feb
(3) |
Mar
|
Apr
(2) |
May
(5) |
Jun
(3) |
Jul
(3) |
Aug
(3) |
Sep
(3) |
Oct
(14) |
Nov
|
Dec
(1) |
| 2023 |
Jan
(10) |
Feb
|
Mar
|
Apr
(2) |
May
|
Jun
(2) |
Jul
(2) |
Aug
(1) |
Sep
|
Oct
(5) |
Nov
|
Dec
|
| 2024 |
Jan
(8) |
Feb
|
Mar
(2) |
Apr
(1) |
May
|
Jun
|
Jul
(4) |
Aug
(5) |
Sep
|
Oct
(4) |
Nov
(1) |
Dec
(1) |
| 2025 |
Jan
(3) |
Feb
(2) |
Mar
(2) |
Apr
(1) |
May
(2) |
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
| 2026 |
Jan
(1) |
Feb
(12) |
Mar
|
Apr
(2) |
May
(8) |
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: Luigi B. <lui...@gm...> - 2008-01-10 11:13:08
|
On Thu, 2008-01-10 at 12:03 +0100, Ferdinando Ametrano wrote: > is there any open source implementation of (Gaussian) Copula? > Anyone willing to contribute it to QuantLib? I've received a contribution on credit derivatives which includes it. I'll be adding it to the repository shortly. Luigi -- If you can't convince them, confuse them. -- Harry S. Truman |
|
From: Ferdinando A. <na...@am...> - 2008-01-10 11:03:52
|
Hi all is there any open source implementation of (Gaussian) Copula? Anyone willing to contribute it to QuantLib? thanks ciao -- Nando |
|
From: Luigi B. <lui...@gm...> - 2008-01-10 09:18:54
|
On Thu, 2008-01-10 at 09:07 +0900, Ibrahim El-Fayoumi wrote: > Hello Luigi > I got exception, not with the analytic European option but rather the > binomial american option > > My question whether the greeks are available for all options > calculation or not? > I mean, delta, vega, gamma, theta, and rho... Oh, I see. No, not all greeks are available for all engines. Let me check the source... yes, the binomial engine only provides delta, gamma and theta. If you need the other greeks, you'll have to perturb the input values and calculate them numerically. Luigi -- The young man knows the rules, but the old man knows the exceptions. -- O. W. Holmes |
|
From: Ibrahim El-F. <Ibr...@au...> - 2008-01-10 00:07:25
|
Hello Luigi I got exception, not with the analytic European option but rather the binomial american option My question whether the greeks are available for all options calculation or not? I mean, delta, vega, gamma, theta, and rho... Regards Ibrahim > On Wed, 2008-01-09 at 13:34 +0000, Ibrahim El-Fayoumi wrote: > > Hello Luigi > > When I tried to use the example with package to obtain the greeks, > > I did the following: > > ...... > > // options > > VanillaOption europeanOption(payoff, europeanExercise); > > VanillaOption bermudanOption(payoff, bermudanExercise); > > VanillaOption americanOption(payoff, americanExercise); > > > > // Analytic formulas: > > > > // Black-Scholes for European > > method = "Black-Scholes"; > > europeanOption.setPricingEngine(boost::shared_ptr<PricingEngine>( > > new AnalyticEuropeanEngine(bsmProcess))); > > std::cout << std::setw(widths[0]) << std::left << method > > << std::fixed > > << std::setw(widths[1]) << std::left << europeanOption.NPV() > > << std::setw(widths[2]) << std::left << "N/A" > > << std::setw(widths[3]) << std::left << "N/A" > > << std::endl; > > std::cout << europeanObtion.delta(); > > > > > > ... > > > > This did not work, what I am missing? > > Hi Ibrahim, > "did not work" as in "compilation error" or "runtime error"? In any > case, what does the error message say exactly? > > Luigi > > Ibrahim El-Fayoumi Senior Software Engineer IWL Limited ABN 53 078 119 212 Level 7, 141 St Georges Terrace Perth WA Australia 6000 Phone: +61 8 9282 8430 Fax: +61 8 9321 1553 Mobile: 0402 817 354 Email: Ibr...@iw... Visit our corporate website:www.iwl.com.au This e-mail and any files transmitted with it are confidential and are only for the use of the person to whom they are addressed. If you are not the intended recipient, you are hereby notified that any use, dissemination, forwarding, printing, copying or dealing in any way whatsoever with this e-mail is strictly prohibited. If you have received this e-mail in error, please reply to us immediately and delete the document. It is the recipient's duty to virus scan and otherwise test the enclosed information before using the information or loading attached files onto any computer system. IWL Limited does not warrant that the information contained in this e-mail is free from viruses, defects, errors, interception or interference. Any views expressed in this message are those of the individual sender, except where that sender specifically states them to be the views of IWL Limited. This e-mail and any files transmitted with it are confidential and are only for the use of the person to whom they are addressed. If you are not the intended recipient, you are hereby notified that any use, dissemination, forwarding, printing, copying or dealing in any way whatsoever with this e-mail is strictly prohibited. If you have received this e-mail in error, please reply to us immediately and delete the document. It is the recipient's duty to virus-scan and otherwise test the enclosed information before using the information or loading attached files onto any computer system. Australian Investment Exchange Ltd does not warrant that the information contained in this e-mail is free from viruses, defects, errors, interception or interference. Australian Investment Exchange Ltd, and each of its related companies each reserve the right to monitor all e-mail communications through its networks. Any views expressed in this message are those of the individual sender, except where that sender specifically states them to be the views of Australian Investment Exchange Ltd. Your private information is only used and disclosed for the intention which you have provided it for. This information is not disclosed or used unless your consent has been provided or in the case that Australian Investment Exchange Ltd permitted to do so under the Privacy Act of 1988. |
|
From: Ferdinando A. <na...@am...> - 2008-01-09 14:23:08
|
On Jan 8, 2008 6:01 PM, Luigi Ballabio <lui...@gm...> wrote: > On Tue, 2008-01-08 at 16:01 +0100, Bianchetti Marco wrote: > > ------ Build started: Project: QuantLibObjects, Configuration: Release > > CRTDLL Win32 ------ > > Compiling... > > capletvolstructure.cpp > > qlo\capletvolstructure.cpp(56) : error C2082: redefinition of formal > > parameter 'bdc' > > Trunk or branch? trunk, my fault. it's now fixed. ciao -- Nando |
|
From: Luigi B. <lui...@gm...> - 2008-01-09 14:16:01
|
On Wed, 2008-01-09 at 13:34 +0000, Ibrahim El-Fayoumi wrote: > Hello Luigi > When I tried to use the example with package to obtain the greeks, > I did the following: > ...... > // options > VanillaOption europeanOption(payoff, europeanExercise); > VanillaOption bermudanOption(payoff, bermudanExercise); > VanillaOption americanOption(payoff, americanExercise); > > // Analytic formulas: > > // Black-Scholes for European > method = "Black-Scholes"; > europeanOption.setPricingEngine(boost::shared_ptr<PricingEngine>( > new AnalyticEuropeanEngine(bsmProcess))); > std::cout << std::setw(widths[0]) << std::left << method > << std::fixed > << std::setw(widths[1]) << std::left << europeanOption.NPV() > << std::setw(widths[2]) << std::left << "N/A" > << std::setw(widths[3]) << std::left << "N/A" > << std::endl; > std::cout << europeanObtion.delta(); > > > ... > > This did not work, what I am missing? Hi Ibrahim, "did not work" as in "compilation error" or "runtime error"? In any case, what does the error message say exactly? Luigi -- The Feynman Problem Solving Algorithm: 1) Write down the problem. 2) Think very hard. 3) Write down the solution. |
|
From: Ibrahim El-F. <elf...@gm...> - 2008-01-09 14:05:15
|
Hello Luigi
When I tried to use the example with package to obtain the greeks,
I did the following:
......
// options
VanillaOption europeanOption(payoff, europeanExercise);
VanillaOption bermudanOption(payoff, bermudanExercise);
VanillaOption americanOption(payoff, americanExercise);
// Analytic formulas:
// Black-Scholes for European
method = "Black-Scholes";
europeanOption.setPricingEngine(boost::shared_ptr<PricingEngine>(
new AnalyticEuropeanEngine(bsmProcess)));
std::cout << std::setw(widths[0]) << std::left << method
<< std::fixed
<< std::setw(widths[1]) << std::left << europeanOption.NPV()
<< std::setw(widths[2]) << std::left << "N/A"
<< std::setw(widths[3]) << std::left << "N/A"
<< std::endl;
std::cout << europeanObtion.delta();
...
This did not work, what I am missing?
Thanks
ibrahim
|
|
From: Luigi B. <lui...@gm...> - 2008-01-08 17:01:39
|
On Tue, 2008-01-08 at 16:01 +0100, Bianchetti Marco wrote: > ------ Build started: Project: QuantLibObjects, Configuration: Release > CRTDLL Win32 ------ > Compiling... > capletvolstructure.cpp > qlo\capletvolstructure.cpp(56) : error C2082: redefinition of formal > parameter 'bdc' Trunk or branch? Luigi -- So little done, so much to do. -- Cecil Rhodes |
|
From: Luigi B. <lui...@gm...> - 2008-01-08 16:47:58
|
On Tue, 2008-01-01 at 15:51 +0000, Roland Lichters wrote: > On 12/24/07, Nathan Abbott <nka...@gm...> wrote: > > I have just run the tests in the testsuite program and have come across > > these errors. I compile QuantLib with Boost1.34.1 and Visual C++ 2005. > > I am looking into it at the moment. You are right, but fortunately the > error appears with today's date = 24/12/07 only, and not with any > other date in December. It is related to the new BMA yield curve test > that depends on three calendars, TARGET, London, New York that treat > the 26th differently. Serves me right for making a holiday release... (Bah! Humbug!) Setting the curve calendar to the joint calendar of NY and London might work, too. I'll look at your patch in the next days. Thanks, Luigi -- Use every man after his desert, and who shall scape whipping? -- Hamlet, Act II, scene II |
|
From: Luigi B. <lui...@gm...> - 2008-01-08 16:46:07
|
On Tue, 2008-01-08 at 08:32 -0800, Richard Wang wrote: > The method is developed by M. Giles from Oxford University recently > (who is named Risk quant of the year 2007). You can get his > information from > > http://web.comlab.ox.ac.uk/oucl/work/mike.giles/finance.html Thanks, I'll have a look. Luigi -- There is no opinion so absurd that some philosopher will not express it. -- Marcus Tullius Cicero, "Ad familiares" |
|
From: Richard W. <ric...@gm...> - 2008-01-08 16:32:22
|
Hi, I have been on the list for a while, but haven't gotten a chance to contribute. Recently I am reading a paper which uses a multilevel technique to reduce computational cost in Monte Carlo method. I'd like to make a proposal to implement this fast Monte Carlo method to the library. The method is developed by M. Giles from Oxford University recently (who is named Risk quant of the year 2007). You can get his information from http://web.comlab.ox.ac.uk/oucl/work/mike.giles/finance.html The paper M.B. Giles. `Multi-level Monte Carlo path simulation'. to appear in Operations Research, 2007/8. can be download from the same page. Richard |
|
From: Bianchetti M. <mar...@ba...> - 2008-01-08 15:02:08
|
------ Build started: Project: QuantLibObjects, Configuration: Release CRTDLL Win32 ------ Compiling... capletvolstructure.cpp qlo\capletvolstructure.cpp(56) : error C2082: redefinition of formal parameter 'bdc' |
|
From: Andrea <mar...@go...> - 2008-01-07 20:21:08
|
Hi, I've had some time to play with my project of a generic multi asset path dependent MC engine. Here are the files 1) example 2) payoff 3) option 4) mcengine A few thoughts: 1) not sure about the existence of BOTH option AND payoff 2) return types are not optimal (still thinking about shared_ptr, references, Disposable ...) 3) TimeGrid: I'm not happy because the MCPathBasketEngine::timeGrid() is called twice: from MCPathBasketEngine::pathGenerator() and MCPathBasketEngine::pathPricer(). Maybe I wanted to write a new MultiPathGenerator that only returns a MultiPath made of the Mandatory times of TimeGrid and not all of them. 4) TimeGrid: Can I build a TimeGrid with a maximum time step (e.g. 0.25)? I can specify the total number of steps, but this is not very intuitive. 10 steps in 10 years is not the same as 10 steps in 1 month. Feel free to comment on it. Andrea |
|
From: adam99 <ada...@gm...> - 2008-01-06 04:01:04
|
I am trying to install quantlib on cygwin. Install fails on term structure
directory. Here is the last couple of lines of install
/bin/install -c -m 644 'eurodollarfuturesquote.hpp'
'/usr/local/include/ql/quotes/eurodollarfuturesquote.hpp'
/bin/install -c -m 644 'forwardvaluequote.hpp'
'/usr/local/include/ql/quotes/forwardvaluequote.hpp'
/bin/install -c -m 644 'futuresconvadjustmentquote.hpp'
'/usr/local/include/ql/quotes/futuresconvadjustmentquote.hpp'
/bin/install -c -m 644 'impliedstddevquote.hpp'
'/usr/local/include/ql/quotes/impliedstddevquote.hpp'
/bin/install -c -m 644 'simplequote.hpp'
'/usr/local/include/ql/quotes/simplequote.hpp'
make[3]: Leaving directory `/dev/QuantLib-0.8.1/ql/quotes'
make[2]: Leaving directory `/dev/QuantLib-0.8.1/ql/quotes'
Making install in termstructures
make[2]: Entering directory `/dev/QuantLib-0.8.1/ql/termstructures'
Making install in volatilities
make[3]: Entering directory
`/dev/QuantLib-0.8.1/ql/termstructures/volatilities'
/bin/sh ../../../libtool --tag=CXX --mode=link g++ -g -O2 -Wall -L/usr/lib
-o libVolatilities.la abcd.lo blackvariancecurve.lo
blackvariancesurface.lo capletvolatilitiesstructures.lo capstripper.lo
cmsmarket.lo localvolsurface.lo sabr.lo sabrinterpolatedsmilesection.lo
smilesection.lo swaptionconstantvol.lo swaptionvolcube.lo
swaptionvolcube1.lo swaptionvolcube2.lo swaptionvoldiscrete.lo
swaptionvolmatrix.lo
ar cru .libs/libVolatilities.a .libs/abcd.o .libs/blackvariancecurve.o
.libs/blackvariancesurface.o .libs/capletvolatilitiesstructures.o
.libs/capstripper.o .libs/cmsmarket.o .libs/localvolsurface.o .libs/sabr.o
.libs/sabrinterpolatedsmilesection.o .libs/smilesection.o
.libs/swaptionconstantvol.o .libs/swaptionvolcube.o .libs/swaptionvolcube1.o
.libs/swaptionvolcube2.o .libs/swaptionvoldiscrete.o
.libs/swaptionvolmatrix.o
ar: .libs/abcd.o: No such file or directory
make[3]: *** [libVolatilities.la] Error 1
make[3]: Leaving directory
`/dev/QuantLib-0.8.1/ql/termstructures/volatilities'
make[2]: *** [install-recursive] Error 1
make[2]: Leaving directory `/dev/QuantLib-0.8.1/ql/termstructures'
make[1]: *** [install-recursive] Error 1
make[1]: Leaving directory `/dev/QuantLib-0.8.1/ql'
make: *** [install-recursive] Error 1
Before calling install I run
bash configure --with-boost-include=/usr/include/boost-1_33_1/
--with-boost-lib=/usr/lib
then called make
Config.log also shows
configure:19714: checking for Boost unit-test framework
configure:19746: g++ -o conftest.exe -g -O2 -Wall
-I/usr/include/boost-1_33_1 -L/usr/lib conf
test.cpp -lboost_unit_test_framework-gcc34 >&5
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot
find -lboost_unit_t
est_framework-gcc34
collect2: ld returned 1 exit status
configure:19752: $? = 1
configure: failed program was:
| #include <boost/test/unit_test.hpp>
| using namespace boost::unit_test_framework;
| test_suite*
| init_unit_test_suite(int argc, char** argv)
| {
| return (test_suite*) 0;
| }
|
configure:19789: g++ -o conftest.exe -g -O2 -Wall -DBOOST_TEST_MAIN
-DBOOST_TEST_DYN_LINK -I/u
sr/include/boost-1_33_1 -L/usr/lib conftest.cpp
-lboost_unit_test_framework-gcc34 >&5
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot
find -lboost_unit_t
est_framework-gcc34
collect2: ld returned 1 exit status
configure:19795: $? = 1
configure: failed program was:
| #include <boost/test/unit_test.hpp>
...
and several lines later
configure: failed program was:
| #include <boost/test/unit_test.hpp>
| using namespace boost::unit_test_framework;
| test_suite*
| init_unit_test_suite(int argc, char** argv)
| {
| return (test_suite*) 0;
| }
|
configure:19817: result: no
configure:19823: WARNING: Boost unit-test framework not found
configure:19825: WARNING: The test suite will be disabled
configure:19836: checking whether Boost unit-test streams work
configure:19861: g++ -c -g -O2 -Wall -I/usr/include/boost-1_33_1
conftest.cpp >&5
configure:19867: $? = 0
configure:19872: result: yes
configure:19906: checking long long support
configure:19931: g++ -c -g -O2 -Wall -I/usr/include/boost-1_33_1
conftest.cpp >&5
conftest.cpp: In function `int main()':
conftest.cpp:27: warning: unused variable 'i'
conftest.cpp:28: warning: unused variable 'j'
configure:19937: $? = 0
configure:19942: result: yes
configure:19970: checking for emacs
configure:19986: found /bin/emacs
configure:19997: result: emacs
configure:20021: checking where .elc files should go
configure:20034: $EMACS -batch -q -eval '(while load-path (princ (concat
(car load-path
) "\n")) (setq load-path (cdr load-path)))' </dev/null >conftest.out
configure:20037: $? = 0
configure:20050: result: ${datadir}/emacs/site-lisp
configure:20072: checking for doxygen
configure:20105: result: no
configure:20112: checking for sed
configure:20142: result: /bin/sed
configure:20152: checking for latex
configure:20185: result: no
I installed all the boost from cygwin, I dont see anywhere
boost_unit_test_framework library. Does quantlib really need this (I am not
sure if the problems I am having at make are related to this test warning..)
Thanks
Adam
--
View this message in context: http://www.nabble.com/installation-is-failing-on-cygwin-tp14643144p14643144.html
Sent from the quantlib-dev mailing list archive at Nabble.com.
|
|
From: Ferdinando A. <na...@am...> - 2008-01-04 17:00:39
|
On Jan 4, 2008 5:32 PM, Luigi Ballabio <lui...@gm...> wrote: > > fixed many glitches in constant/spreaded optionlet/swaption vol classes > > Since you've already committed non backward-compatible changes for these > classes (I know, it couldn't be helped) may I also suggest using > 'Volatility' instead of 'Vol' in class names? glad to oblige... ciao -- Nando |
|
From: Luigi B. <lui...@gm...> - 2008-01-04 16:32:01
|
On Fri, 2008-01-04 at 07:44 -0800, na...@us... wrote: > Log Message: > ----------- > fixed many glitches in constant/spreaded optionlet/swaption vol classes Since you've already committed non backward-compatible changes for these classes (I know, it couldn't be helped) may I also suggest using 'Volatility' instead of 'Vol' in class names? Luigi -- There is no likelihood man can ever tap the power of the atom. -- Robert Millikan, Nobel Prize in Physics, 1923 |
|
From: <fho...@gm...> - 2008-01-04 14:19:49
|
Dear all and a happy new year!
I have just a brief suggestion to append a function "Array weights() { return weights_; }" to the class AverageBasketPayoff. By that one has access to the initial weights for further use during the evolution of the correlated processes, e.g., in order to write a new class ReweightedAverageBasketPayoff inherting from AverageBasketPayoff and applying a reweighting to the basket on occasional dates between initial and final date.
Best regards
Frank
--
Psssst! Schon vom neuen GMX MultiMessenger gehört?
Der kann`s mit allen: http://www.gmx.net/de/go/multimessenger?did=10
|
|
From: Luigi B. <lui...@gm...> - 2008-01-03 11:01:31
|
On Wed, 2008-01-02 at 16:35 +0100, Ferdinando Ametrano wrote: > On Jan 2, 2008 3:59 PM, Luigi Ballabio <lui...@gm...> wrote: > > > It's quite a while that I've been considering to define the default > > > DayCounter in userconfig.hpp (and switch to ActualActual::ISDA in the > > > meantime): any objection if I do it? > > > > Yes--I don't like it :) I'd rather have no default at all. > > ok, I take your point: feel free to remove them as soon as you like or > wait for me to gradually remove them. Don't remove them from the base classes though. In those ones it makes sense to have a null day counter as a default. Luigi -- Newton's Law of Gravitation: What goes up must come down. But don't expect it to come down where you can find it. Murphy's Law applies to Newton's. |
|
From: Ferdinando A. <na...@am...> - 2008-01-02 15:35:05
|
On Jan 2, 2008 3:59 PM, Luigi Ballabio <lui...@gm...> wrote: > > It's quite a while that I've been considering to define the default > > DayCounter in userconfig.hpp (and switch to ActualActual::ISDA in the > > meantime): any objection if I do it? > > Yes--I don't like it :) I'd rather have no default at all. ok, I take your point: feel free to remove them as soon as you like or wait for me to gradually remove them. For what I'm mostly concerned it is enough to have defaults in the xml specification of QuantLibXL, I don't need C++ defaults. > I'm not sure that we should use a default day counter for the > term structures that require one. If anything, it _increases_ the > inconsistency risk---if the user sets the day counter to one curve and > not to the other, he'll (silently) get two curves with different day > counters. It would be safer to have him specify both explicitly. just to get the record straight: I think we shouldn't have a day counter at all in term structure, as the way to calculate time might be an implementation detail not available to end user tweaking. On one hand a user selectable day counter might result in potential mistakes, as it would happen if one uses 30/360, uses different day counters for interacting term structures, etc. On the other hand it does provide little benefit, namely it allows for a time-based public interface where the user can decide how to measure time. I don't feel that requiring ActualActual::ISDA as the only way to measure time would harm anyone, and would remove all those possible inconsistencies. Just my 0.02=80 ciao -- Nando |
|
From: Luigi B. <lui...@gm...> - 2008-01-02 15:00:07
|
On Wed, 2008-01-02 at 11:15 +0100, Ferdinando Ametrano wrote: > > somehow I can see that the compounding may default to Continuous, but > > why should the day-count convention default to actual/365? > > Actual/365Fixed is the default DayCounter we use in all > TermStructures, in order to minimize the inconsistency risk of using > different DayCounters for differerent (vol/yield) TermStructures. Is it? I'm not sure that we should use a default day counter for the term structures that require one. If anything, it _increases_ the inconsistency risk---if the user sets the day counter to one curve and not to the other, he'll (silently) get two curves with different day counters. It would be safer to have him specify both explicitly. > In few places InterestRate is used to define a FlatForward and its > DayCounter is used as the YieldTermStructure's DayCounter, so I > default it to Actual365Fixed. Yes, but that's not the only effect of the default. It affects all InterestRate instances, flat forward or not. > Besides this is the usual assumption in > the textbook examples (e.g. Hull), where you would want 5 years to be > 5.0 (and for this reason ActualActual::ISDA would be even better...) ...since it doesn't hold for act/365. > It's quite a while that I've been considering to define the default > DayCounter in userconfig.hpp (and switch to ActualActual::ISDA in the > meantime): any objection if I do it? Yes--I don't like it :) I'd rather have no default at all. Later, Luigi -- Things should be made as simple as possible, but no simpler. -- Albert Einstein |
|
From: Roland L. <rol...@go...> - 2008-01-02 10:24:27
|
LyogLSotIG1vZGU6IGMrKzsgdGFiLXdpZHRoOiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMt YmFzaWMtb2Zmc2V0OiA0IC0qLSAqLwoKLyoKIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAw NyBTdGF0UHJvIEl0YWxpYSBzcmwKCiBUaGlzIGZpbGUgaXMgcGFydCBvZiBRdWFudExpYiwgYSBm cmVlLXNvZnR3YXJlL29wZW4tc291cmNlIGxpYnJhcnkKIGZvciBmaW5hbmNpYWwgcXVhbnRpdGF0 aXZlIGFuYWx5c3RzIGFuZCBkZXZlbG9wZXJzIC0gaHR0cDovL3F1YW50bGliLm9yZy8KCiBRdWFu dExpYiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5IGl0CiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFF1YW50TGliIGxpY2Vuc2UuICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYQogY29weSBvZiB0aGUgbGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbTsgaWYgbm90LCBwbGVhc2UgZW1haWwKIDxxdWFudGxpYi1kZXZAbGlzdHMuc2YubmV0 Pi4gVGhlIGxpY2Vuc2UgaXMgYWxzbyBhdmFpbGFibGUgb25saW5lIGF0CiA8aHR0cDovL3F1YW50 bGliLm9yZy9saWNlbnNlLnNodG1sPi4KCiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTCiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIGxpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKi8KCi8vIFJMIAojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxx bC91dGlsaXRpZXMvZGF0YXBhcnNlcnMuaHBwPgojaW5jbHVkZSA8cWwvdGltZS9jYWxlbmRhcnMv am9pbnRjYWxlbmRhci5ocHA+Ci8vLyBSTAoKI2luY2x1ZGUgInBpZWNld2lzZXlpZWxkY3VydmUu aHBwIgojaW5jbHVkZSAidXRpbGl0aWVzLmhwcCIKI2luY2x1ZGUgPHFsL3Rlcm1zdHJ1Y3R1cmVz L3lpZWxkL3BpZWNld2lzZXlpZWxkY3VydmUuaHBwPgojaW5jbHVkZSA8cWwvdGVybXN0cnVjdHVy ZXMveWllbGQvcmF0ZWhlbHBlcnMuaHBwPgojaW5jbHVkZSA8cWwvdGVybXN0cnVjdHVyZXMveWll bGQvYm9uZGhlbHBlcnMuaHBwPgojaW5jbHVkZSA8cWwvdGVybXN0cnVjdHVyZXMveWllbGQvZmxh dGZvcndhcmQuaHBwPgojaW5jbHVkZSA8cWwvdGltZS9jYWxlbmRhcnMvdGFyZ2V0LmhwcD4KI2lu Y2x1ZGUgPHFsL3RpbWUvZGF5Y291bnRlcnMvYWN0dWFsMzYwLmhwcD4KI2luY2x1ZGUgPHFsL3Rp bWUvZGF5Y291bnRlcnMvYWN0dWFsYWN0dWFsLmhwcD4KI2luY2x1ZGUgPHFsL3RpbWUvZGF5Y291 bnRlcnMvdGhpcnR5MzYwLmhwcD4KI2luY2x1ZGUgPHFsL2luZGV4ZXMvaWJvci9ldXJpYm9yLmhw cD4KI2luY2x1ZGUgPHFsL2luZGV4ZXMvaWJvci91c2RsaWJvci5ocHA+CiNpbmNsdWRlIDxxbC9p bmRleGVzL2JtYWluZGV4LmhwcD4KI2luY2x1ZGUgPHFsL2luZGV4ZXMvaW5kZXhtYW5hZ2VyLmhw cD4KI2luY2x1ZGUgPHFsL2luc3RydW1lbnRzL2ZvcndhcmRyYXRlYWdyZWVtZW50LmhwcD4KI2lu Y2x1ZGUgPHFsL2luc3RydW1lbnRzL21ha2V2YW5pbGxhc3dhcC5ocHA+CiNpbmNsdWRlIDxxbC9t YXRoL2ludGVycG9sYXRpb25zL2xpbmVhcmludGVycG9sYXRpb24uaHBwPgojaW5jbHVkZSA8cWwv bWF0aC9pbnRlcnBvbGF0aW9ucy9sb2dpbnRlcnBvbGF0aW9uLmhwcD4KI2luY2x1ZGUgPHFsL21h dGgvaW50ZXJwb2xhdGlvbnMvYmFja3dhcmRmbGF0aW50ZXJwb2xhdGlvbi5ocHA+CiNpbmNsdWRl IDxxbC9tYXRoL2ludGVycG9sYXRpb25zL2N1Ymljc3BsaW5lLmhwcD4KI2luY2x1ZGUgPHFsL3F1 b3Rlcy9zaW1wbGVxdW90ZS5ocHA+CiNpbmNsdWRlIDxxbC91dGlsaXRpZXMvZGF0YWZvcm1hdHRl cnMuaHBwPgojaW5jbHVkZSA8cWwvcHJpY2luZ2VuZ2luZXMvYm9uZC9kaXNjb3VudGluZ2JvbmRl bmdpbmUuaHBwPgojaW5jbHVkZSA8cWwvcHJpY2luZ2VuZ2luZXMvc3dhcC9kaXNjb3VudGluZ3N3 YXBlbmdpbmUuaHBwPgoKdXNpbmcgbmFtZXNwYWNlIFF1YW50TGliOwp1c2luZyBuYW1lc3BhY2Ug Ym9vc3Q6OnVuaXRfdGVzdF9mcmFtZXdvcms7CgpRTF9CRUdJTl9URVNUX0xPQ0FMUyhQaWVjZXdp c2VZaWVsZEN1cnZlVGVzdCkKCnN0cnVjdCBEYXR1bSB7CiAgICBJbnRlZ2VyIG47CiAgICBUaW1l VW5pdCB1bml0czsKICAgIFJhdGUgcmF0ZTsKfTsKCnN0cnVjdCBCb25kRGF0dW0gewogICAgSW50 ZWdlciBuOwogICAgVGltZVVuaXQgdW5pdHM7CiAgICBJbnRlZ2VyIGxlbmd0aDsKICAgIEZyZXF1 ZW5jeSBmcmVxdWVuY3k7CiAgICBSYXRlIGNvdXBvbjsKICAgIFJlYWwgcHJpY2U7Cn07CgpEYXR1 bSBkZXBvc2l0RGF0YVtdID0gewogICAgeyAxLCBXZWVrcywgIDQuNTU5IH0sCiAgICB7IDEsIE1v bnRocywgNC41ODEgfSwKICAgIHsgMiwgTW9udGhzLCA0LjU3MyB9LAogICAgeyAzLCBNb250aHMs IDQuNTU3IH0sCiAgICB7IDYsIE1vbnRocywgNC40OTYgfSwKICAgIHsgOSwgTW9udGhzLCA0LjQ5 MCB9Cn07CgpEYXR1bSBmcmFEYXRhW10gPSB7CiAgICB7IDEsIE1vbnRocywgNC41ODEgfSwKICAg IHsgMiwgTW9udGhzLCA0LjU3MyB9LAogICAgeyAzLCBNb250aHMsIDQuNTU3IH0sCiAgICB7IDYs IE1vbnRocywgNC40OTYgfSwKICAgIHsgOSwgTW9udGhzLCA0LjQ5MCB9Cn07CgpEYXR1bSBzd2Fw RGF0YVtdID0gewogICAgeyAgMSwgWWVhcnMsIDQuNTQgfSwKICAgIHsgIDIsIFllYXJzLCA0LjYz IH0sCiAgICB7ICAzLCBZZWFycywgNC43NSB9LAogICAgeyAgNCwgWWVhcnMsIDQuODYgfSwKICAg IHsgIDUsIFllYXJzLCA0Ljk5IH0sCiAgICB7ICA2LCBZZWFycywgNS4xMSB9LAogICAgeyAgNywg WWVhcnMsIDUuMjMgfSwKICAgIHsgIDgsIFllYXJzLCA1LjMzIH0sCiAgICB7ICA5LCBZZWFycywg NS40MSB9LAogICAgeyAxMCwgWWVhcnMsIDUuNDcgfSwKICAgIHsgMTIsIFllYXJzLCA1LjYwIH0s CiAgICB7IDE1LCBZZWFycywgNS43NSB9LAogICAgeyAyMCwgWWVhcnMsIDUuODkgfSwKICAgIHsg MjUsIFllYXJzLCA1Ljk1IH0sCiAgICB7IDMwLCBZZWFycywgNS45NiB9Cn07CgpCb25kRGF0dW0g Ym9uZERhdGFbXSA9IHsKICAgIHsgIDYsIE1vbnRocywgNSwgU2VtaWFubnVhbCwgNC43NSwgMTAx LjMyMCB9LAogICAgeyAgMSwgWWVhcnMsICAzLCBTZW1pYW5udWFsLCAyLjc1LCAxMDAuNTkwIH0s CiAgICB7ICAyLCBZZWFycywgIDUsIFNlbWlhbm51YWwsIDUuMDAsIDEwNS42NTAgfSwKICAgIHsg IDUsIFllYXJzLCAxMSwgU2VtaWFubnVhbCwgNS41MCwgMTEzLjYxMCB9LAogICAgeyAxMCwgWWVh cnMsIDExLCBTZW1pYW5udWFsLCAzLjc1LCAxMDQuMDcwIH0KfTsKCkRhdHVtIGJtYURhdGFbXSA9 IHsKICAgIHsgIDEsIFllYXJzLCA2Ny41NiB9LAogICAgeyAgMiwgWWVhcnMsIDY4LjAwIH0sCiAg ICB7ICAzLCBZZWFycywgNjguMjUgfSwKICAgIHsgIDQsIFllYXJzLCA2OC41MCB9LAogICAgeyAg NSwgWWVhcnMsIDY4LjgxIH0sCiAgICB7ICA3LCBZZWFycywgNjkuNTAgfSwKICAgIHsgMTAsIFll YXJzLCA3MC40NCB9LAogICAgeyAxNSwgWWVhcnMsIDcxLjY5IH0sCiAgICB7IDIwLCBZZWFycywg NzIuNjkgfSwKICAgIHsgMzAsIFllYXJzLCA3My44MSB9Cn07CgoKLy8gdGVzdC1nbG9iYWwgdmFy aWFibGVzCgpDYWxlbmRhciBjYWxlbmRhcjsKTmF0dXJhbCBzZXR0bGVtZW50RGF5czsKRGF0ZSB0 b2RheSwgc2V0dGxlbWVudDsKQnVzaW5lc3NEYXlDb252ZW50aW9uIGZpeGVkTGVnQ29udmVudGlv bjsKRnJlcXVlbmN5IGZpeGVkTGVnRnJlcXVlbmN5OwpEYXlDb3VudGVyIGZpeGVkTGVnRGF5Q291 bnRlcjsKTmF0dXJhbCBib25kU2V0dGxlbWVudERheXM7CkRheUNvdW50ZXIgYm9uZERheUNvdW50 ZXI7CkJ1c2luZXNzRGF5Q29udmVudGlvbiBib25kQ29udmVudGlvbjsKUmVhbCBib25kUmVkZW1w dGlvbjsKRnJlcXVlbmN5IGJtYUZyZXF1ZW5jeTsKQnVzaW5lc3NEYXlDb252ZW50aW9uIGJtYUNv bnZlbnRpb247CkRheUNvdW50ZXIgYm1hRGF5Q291bnRlcjsKClNpemUgZGVwb3NpdHMsIGZyYXMs IHN3YXBzLCBib25kcywgYm1hczsKc3RkOjp2ZWN0b3I8Ym9vc3Q6OnNoYXJlZF9wdHI8U2ltcGxl UXVvdGU+ID4gcmF0ZXMsIGZyYVJhdGVzLCBwcmljZXMsIGZyYWN0aW9uczsKc3RkOjp2ZWN0b3I8 Ym9vc3Q6OnNoYXJlZF9wdHI8UmF0ZUhlbHBlcj4gPiBpbnN0cnVtZW50cywgZnJhSGVscGVycywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib25kSGVscGVycywg Ym1hSGVscGVyczsKc3RkOjp2ZWN0b3I8U2NoZWR1bGU+IHNjaGVkdWxlczsKYm9vc3Q6OnNoYXJl ZF9wdHI8WWllbGRUZXJtU3RydWN0dXJlPiB0ZXJtU3RydWN0dXJlOwoKdm9pZCBzZXR1cCgpIHsK CiAgICAvLyBkYXRhCiAgICBjYWxlbmRhciA9IFRBUkdFVCgpOwogICAgc2V0dGxlbWVudERheXMg PSAyOwoKICAgIC8vIFJMCiAgICAvL3RvZGF5ID0gY2FsZW5kYXIuYWRqdXN0KERhdGU6OnRvZGF5 c0RhdGUoKSk7CiAgICBpZiAoZ2V0ZW52KCJUT0RBWSIpKQogICAgICAgIHRvZGF5ID0gY2FsZW5k YXIuYWRqdXN0KERhdGVQYXJzZXI6OnBhcnNlSVNPKGdldGVudigiVE9EQVkiKSkpOwogICAgZWxz ZQogICAgICAgIHRvZGF5ID0gY2FsZW5kYXIuYWRqdXN0KERhdGU6OnRvZGF5c0RhdGUoKSk7CiAg ICAvLy8gUkwKCiAgICBTZXR0aW5nczo6aW5zdGFuY2UoKS5ldmFsdWF0aW9uRGF0ZSgpID0gdG9k YXk7CiAgICBzZXR0bGVtZW50ID0gY2FsZW5kYXIuYWR2YW5jZSh0b2RheSxzZXR0bGVtZW50RGF5 cyxEYXlzKTsKICAgIGZpeGVkTGVnQ29udmVudGlvbiA9IFVuYWRqdXN0ZWQ7CiAgICBmaXhlZExl Z0ZyZXF1ZW5jeSA9IEFubnVhbDsKICAgIGZpeGVkTGVnRGF5Q291bnRlciA9IFRoaXJ0eTM2MCgp OwogICAgYm9uZFNldHRsZW1lbnREYXlzID0gMzsKICAgIGJvbmREYXlDb3VudGVyID0gQWN0dWFs QWN0dWFsKCk7CiAgICBib25kQ29udmVudGlvbiA9IEZvbGxvd2luZzsKICAgIGJvbmRSZWRlbXB0 aW9uID0gMTAwLjA7CiAgICBibWFGcmVxdWVuY3kgPSBRdWFydGVybHk7CiAgICBibWFDb252ZW50 aW9uID0gRm9sbG93aW5nOwogICAgYm1hRGF5Q291bnRlciA9IEFjdHVhbEFjdHVhbCgpOwoKICAg IGRlcG9zaXRzID0gTEVOR1RIKGRlcG9zaXREYXRhKTsKICAgIGZyYXMgPSBMRU5HVEgoZnJhRGF0 YSk7CiAgICBzd2FwcyA9IExFTkdUSChzd2FwRGF0YSk7CiAgICBib25kcyA9IExFTkdUSChib25k RGF0YSk7CiAgICBibWFzID0gTEVOR1RIKGJtYURhdGEpOwoKICAgIC8vIG1hcmtldCBlbGVtZW50 cwogICAgcmF0ZXMgPSBzdGQ6OnZlY3Rvcjxib29zdDo6c2hhcmVkX3B0cjxTaW1wbGVRdW90ZT4g PihkZXBvc2l0cytzd2Fwcyk7CiAgICBmcmFSYXRlcyA9IHN0ZDo6dmVjdG9yPGJvb3N0OjpzaGFy ZWRfcHRyPFNpbXBsZVF1b3RlPiA+KGZyYXMpOwogICAgcHJpY2VzID0gc3RkOjp2ZWN0b3I8Ym9v c3Q6OnNoYXJlZF9wdHI8U2ltcGxlUXVvdGU+ID4oYm9uZHMpOwogICAgZnJhY3Rpb25zID0gc3Rk Ojp2ZWN0b3I8Ym9vc3Q6OnNoYXJlZF9wdHI8U2ltcGxlUXVvdGU+ID4oYm1hcyk7CiAgICBmb3Ig KFNpemUgaT0wOyBpPGRlcG9zaXRzOyBpKyspIHsKICAgICAgICByYXRlc1tpXSA9IGJvb3N0Ojpz aGFyZWRfcHRyPFNpbXBsZVF1b3RlPigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbmV3IFNpbXBsZVF1b3RlKGRlcG9zaXREYXRhW2ldLnJhdGUvMTAwKSk7CiAgICB9CiAgICBm b3IgKFNpemUgaT0wOyBpPHN3YXBzOyBpKyspIHsKICAgICAgICByYXRlc1tpK2RlcG9zaXRzXSA9 IGJvb3N0OjpzaGFyZWRfcHRyPFNpbXBsZVF1b3RlPigKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbmV3IFNpbXBsZVF1b3RlKHN3YXBEYXRhW2ldLnJhdGUvMTAwKSk7CiAg ICB9CiAgICBmb3IgKFNpemUgaT0wOyBpPGZyYXM7IGkrKykgewogICAgICAgIGZyYVJhdGVzW2ld ID0gYm9vc3Q6OnNoYXJlZF9wdHI8U2ltcGxlUXVvdGU+KAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVF1b3RlKGZyYURhdGFbaV0ucmF0ZS8xMDApKTsK ICAgIH0KICAgIGZvciAoU2l6ZSBpPTA7IGk8Ym9uZHM7IGkrKykgewogICAgICAgIHByaWNlc1tp XSA9IGJvb3N0OjpzaGFyZWRfcHRyPFNpbXBsZVF1b3RlPigKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVF1b3RlKGJvbmREYXRhW2ldLnByaWNlKSk7 CiAgICB9CiAgICBmb3IgKFNpemUgaT0wOyBpPGJtYXM7IGkrKykgewogICAgICAgIGZyYWN0aW9u c1tpXSA9IGJvb3N0OjpzaGFyZWRfcHRyPFNpbXBsZVF1b3RlPigKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVRdW90ZShibWFEYXRhW2ldLnJhdGUvMTAw KSk7CiAgICB9CgogICAgLy8gcmF0ZSBoZWxwZXJzCiAgICBpbnN0cnVtZW50cyA9IHN0ZDo6dmVj dG9yPGJvb3N0OjpzaGFyZWRfcHRyPFJhdGVIZWxwZXI+ID4oZGVwb3NpdHMrc3dhcHMpOwogICAg ZnJhSGVscGVycyA9IHN0ZDo6dmVjdG9yPGJvb3N0OjpzaGFyZWRfcHRyPFJhdGVIZWxwZXI+ID4o ZnJhcyk7CiAgICBib25kSGVscGVycyA9IHN0ZDo6dmVjdG9yPGJvb3N0OjpzaGFyZWRfcHRyPFJh dGVIZWxwZXI+ID4oYm9uZHMpOwogICAgc2NoZWR1bGVzID0gc3RkOjp2ZWN0b3I8U2NoZWR1bGU+ KGJvbmRzKTsKICAgIGJtYUhlbHBlcnMgPSBzdGQ6OnZlY3Rvcjxib29zdDo6c2hhcmVkX3B0cjxS YXRlSGVscGVyPiA+KGJtYXMpOwoKICAgIGJvb3N0OjpzaGFyZWRfcHRyPElib3JJbmRleD4gZXVy aWJvcjZtKG5ldyBFdXJpYm9yNk0pOwogICAgZm9yIChTaXplIGk9MDsgaTxkZXBvc2l0czsgaSsr KSB7CiAgICAgICAgSGFuZGxlPFF1b3RlPiByKHJhdGVzW2ldKTsKICAgICAgICBpbnN0cnVtZW50 c1tpXSA9IGJvb3N0OjpzaGFyZWRfcHRyPFJhdGVIZWxwZXI+KAogICAgICAgICAgICAgIG5ldyBE ZXBvc2l0UmF0ZUhlbHBlcihyLCBkZXBvc2l0RGF0YVtpXS5uKmRlcG9zaXREYXRhW2ldLnVuaXRz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0bGVtZW50RGF5cywgY2Fs ZW5kYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1cmlib3I2bS0+YnVz aW5lc3NEYXlDb252ZW50aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGV1cmlib3I2bS0+ZW5kT2ZNb250aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBldXJpYm9yNm0tPmZpeGluZ0RheXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZXVyaWJvcjZtLT5kYXlDb3VudGVyKCkpKTsKICAgIH0KICAgIGZvciAoU2l6ZSBp PTA7IGk8c3dhcHM7IGkrKykgewogICAgICAgIEhhbmRsZTxRdW90ZT4gcihyYXRlc1tpK2RlcG9z aXRzXSk7CiAgICAgICAgaW5zdHJ1bWVudHNbaStkZXBvc2l0c10gPSBib29zdDo6c2hhcmVkX3B0 cjxSYXRlSGVscGVyPihuZXcKICAgICAgICAgICAgU3dhcFJhdGVIZWxwZXIociwgc3dhcERhdGFb aV0ubipzd2FwRGF0YVtpXS51bml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5k YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkTGVnRnJlcXVlbmN5LCBmaXhlZExl Z0NvbnZlbnRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkTGVnRGF5Q291bnRl ciwgZXVyaWJvcjZtKSk7CiAgICB9CgogICAgRXVyaWJvcjNNIGV1cmlib3IzbTsKICAgIGZvciAo U2l6ZSBpPTA7IGk8ZnJhczsgaSsrKSB7CiAgICAgICAgSGFuZGxlPFF1b3RlPiByKGZyYVJhdGVz W2ldKTsKICAgICAgICBmcmFIZWxwZXJzW2ldID0gYm9vc3Q6OnNoYXJlZF9wdHI8UmF0ZUhlbHBl cj4obmV3CiAgICAgICAgICAgIEZyYVJhdGVIZWxwZXIociwgZnJhRGF0YVtpXS5uLCBmcmFEYXRh W2ldLm4gKyAzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1cmlib3IzbS5maXhp bmdEYXlzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVyaWJvcjNtLmZpeGlu Z0NhbGVuZGFyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVyaWJvcjNtLmJ1 c2luZXNzRGF5Q29udmVudGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1 cmlib3IzbS5lbmRPZk1vbnRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVy aWJvcjNtLmZpeGluZ0RheXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldXJp Ym9yM20uZGF5Q291bnRlcigpKSk7CiAgICB9CgogICAgZm9yIChTaXplIGk9MDsgaTxib25kczsg aSsrKSB7CiAgICAgICAgSGFuZGxlPFF1b3RlPiBwKHByaWNlc1tpXSk7CiAgICAgICAgRGF0ZSBt YXR1cml0eSA9CiAgICAgICAgICAgIGNhbGVuZGFyLmFkdmFuY2UodG9kYXksIGJvbmREYXRhW2ld Lm4sIGJvbmREYXRhW2ldLnVuaXRzKTsKICAgICAgICBEYXRlIGlzc3VlID0gY2FsZW5kYXIuYWR2 YW5jZShtYXR1cml0eSwgLWJvbmREYXRhW2ldLmxlbmd0aCwgWWVhcnMpOwogICAgICAgIHN0ZDo6 dmVjdG9yPFJhdGU+IGNvdXBvbnMoMSwgYm9uZERhdGFbaV0uY291cG9uLzEwMC4wKTsKICAgICAg ICBzY2hlZHVsZXNbaV0gPSBTY2hlZHVsZShpc3N1ZSwgbWF0dXJpdHksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUGVyaW9kKGJvbmREYXRhW2ldLmZyZXF1ZW5jeSksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYm9uZENvbnZlbnRpb24sIGJvbmRDb252ZW50aW9uLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERhdGVHZW5lcmF0aW9uOjpCYWNrd2FyZCwgZmFsc2UpOwogICAgICAg IGJvbmRIZWxwZXJzW2ldID0gYm9vc3Q6OnNoYXJlZF9wdHI8UmF0ZUhlbHBlcj4obmV3CiAgICAg ICAgICAgIEZpeGVkUmF0ZUJvbmRIZWxwZXIocCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJvbmRTZXR0bGVtZW50RGF5cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNjaGVkdWxlc1tpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXBv bnMsIGJvbmREYXlDb3VudGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9u ZENvbnZlbnRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib25kUmVkZW1w dGlvbiwgaXNzdWUpKTsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEk+CnZvaWQg dGVzdEN1cnZlQ29uc2lzdGVuY3koY29uc3QgVCYsIGNvbnN0IEkmIGludGVycG9sYXRvcikgewoK ICAgIHRlcm1TdHJ1Y3R1cmUgPSBib29zdDo6c2hhcmVkX3B0cjxZaWVsZFRlcm1TdHJ1Y3R1cmU+ KAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQaWVjZXdpc2VZaWVsZEN1cnZlPFQsST4o c2V0dGxlbWVudCxpbnN0cnVtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFjdHVhbDM2MCgpLCAxLjBlLTEyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdG9yKSk7 CgogICAgUmVsaW5rYWJsZUhhbmRsZTxZaWVsZFRlcm1TdHJ1Y3R1cmU+IGN1cnZlSGFuZGxlOwog ICAgY3VydmVIYW5kbGUubGlua1RvKHRlcm1TdHJ1Y3R1cmUpOwoKICAgIC8vIGNoZWNrIGRlcG9z aXRzCiAgICBmb3IgKFNpemUgaT0wOyBpPGRlcG9zaXRzOyBpKyspIHsKICAgICAgICBFdXJpYm9y IGluZGV4KGRlcG9zaXREYXRhW2ldLm4qZGVwb3NpdERhdGFbaV0udW5pdHMsY3VydmVIYW5kbGUp OwogICAgICAgIFJhdGUgZXhwZWN0ZWRSYXRlICA9IGRlcG9zaXREYXRhW2ldLnJhdGUvMTAwLAog ICAgICAgICAgICAgZXN0aW1hdGVkUmF0ZSA9IGluZGV4LmZpeGluZyh0b2RheSk7CiAgICAgICAg aWYgKHN0ZDo6ZmFicyhleHBlY3RlZFJhdGUtZXN0aW1hdGVkUmF0ZSkgPiAxLjBlLTkpIHsKICAg ICAgICAgICAgQk9PU1RfRVJST1IoCiAgICAgICAgICAgICAgICAgICAgZGVwb3NpdERhdGFbaV0u biA8PCAiICIKICAgICAgICAgICAgICAgICAgICA8PCAoZGVwb3NpdERhdGFbaV0udW5pdHMgPT0g V2Vla3MgPyAid2VlayhzKSIgOiAibW9udGgocykiKQogICAgICAgICAgICAgICAgICAgIDw8ICIg ZGVwb3NpdDoiCiAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjpzZXRwcmVjaXNpb24oOCkKICAg ICAgICAgICAgICAgICAgICA8PCAiXG4gICAgZXN0aW1hdGVkIHJhdGU6ICIgPDwgaW86OnJhdGUo ZXN0aW1hdGVkUmF0ZSkKICAgICAgICAgICAgICAgICAgICA8PCAiXG4gICAgZXhwZWN0ZWQgcmF0 ZTogICIgPDwgaW86OnJhdGUoZXhwZWN0ZWRSYXRlKSk7CiAgICAgICAgfQogICAgfQoKICAgIC8v IGNoZWNrIHN3YXBzCiAgICBib29zdDo6c2hhcmVkX3B0cjxJYm9ySW5kZXg+IGV1cmlib3I2bShu ZXcgRXVyaWJvcjZNKGN1cnZlSGFuZGxlKSk7CiAgICBmb3IgKFNpemUgaT0wOyBpPHN3YXBzOyBp KyspIHsKICAgICAgICBQZXJpb2QgdGVub3IgPSBzd2FwRGF0YVtpXS5uKnN3YXBEYXRhW2ldLnVu aXRzOwoKICAgICAgICBWYW5pbGxhU3dhcCBzd2FwID0gTWFrZVZhbmlsbGFTd2FwKHRlbm9yLCBl dXJpYm9yNm0sIDAuMCkKICAgICAgICAgICAgLndpdGhFZmZlY3RpdmVEYXRlKHNldHRsZW1lbnQp CiAgICAgICAgICAgIC53aXRoRml4ZWRMZWdEYXlDb3VudChmaXhlZExlZ0RheUNvdW50ZXIpCiAg ICAgICAgICAgIC53aXRoRml4ZWRMZWdUZW5vcihQZXJpb2QoZml4ZWRMZWdGcmVxdWVuY3kpKQog ICAgICAgICAgICAud2l0aEZpeGVkTGVnQ29udmVudGlvbihmaXhlZExlZ0NvbnZlbnRpb24pCiAg ICAgICAgICAgIC53aXRoRml4ZWRMZWdUZXJtaW5hdGlvbkRhdGVDb252ZW50aW9uKGZpeGVkTGVn Q29udmVudGlvbik7CgogICAgICAgIFJhdGUgZXhwZWN0ZWRSYXRlID0gc3dhcERhdGFbaV0ucmF0 ZS8xMDAsCiAgICAgICAgICAgICBlc3RpbWF0ZWRSYXRlID0gc3dhcC5mYWlyUmF0ZSgpOwogICAg ICAgIFJlYWwgdG9sZXJhbmNlID0gMS4wZS05OwogICAgICAgIFNwcmVhZCBlcnJvciA9IHN0ZDo6 ZmFicyhleHBlY3RlZFJhdGUtZXN0aW1hdGVkUmF0ZSk7CiAgICAgICAgaWYgKGVycm9yID4gdG9s ZXJhbmNlKSB7CiAgICAgICAgICAgIEJPT1NUX0VSUk9SKHN3YXBEYXRhW2ldLm4gPDwgIiB5ZWFy KHMpIHN3YXA6XG4iCiAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjpzZXRwcmVjaXNpb24oOCkK ICAgICAgICAgICAgICAgICAgICA8PCAiXG4gZXN0aW1hdGVkIHJhdGU6ICIgPDwgaW86OnJhdGUo ZXN0aW1hdGVkUmF0ZSkKICAgICAgICAgICAgICAgICAgICA8PCAiXG4gZXhwZWN0ZWQgcmF0ZTog ICIgPDwgaW86OnJhdGUoZXhwZWN0ZWRSYXRlKQogICAgICAgICAgICAgICAgICAgIDw8ICJcbiBl cnJvcjogICAgICAgICAgIiA8PCBpbzo6cmF0ZShlcnJvcikKICAgICAgICAgICAgICAgICAgICA8 PCAiXG4gdG9sZXJhbmNlOiAgICAgICIgPDwgaW86OnJhdGUodG9sZXJhbmNlKSk7CiAgICAgICAg fQogICAgfQoKICAgIC8vIGNoZWNrIGJvbmRzCiAgICB0ZXJtU3RydWN0dXJlID0gYm9vc3Q6OnNo YXJlZF9wdHI8WWllbGRUZXJtU3RydWN0dXJlPigKICAgICAgICAgICAgICAgICAgICAgICAgICBu ZXcgUGllY2V3aXNlWWllbGRDdXJ2ZTxULEk+KHNldHRsZW1lbnQsYm9uZEhlbHBlcnMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3R1YWwz NjAoKSwgMS4wZS0xMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludGVycG9sYXRvcikpOwogICAgY3VydmVIYW5kbGUubGlua1RvKHRlcm1T dHJ1Y3R1cmUpOwoKICAgIGZvciAoU2l6ZSBpPTA7IGk8Ym9uZHM7IGkrKykgewogICAgICAgIERh dGUgbWF0dXJpdHkgPQogICAgICAgICAgICBjYWxlbmRhci5hZHZhbmNlKHRvZGF5LCBib25kRGF0 YVtpXS5uLCBib25kRGF0YVtpXS51bml0cyk7CiAgICAgICAgRGF0ZSBpc3N1ZSA9IGNhbGVuZGFy LmFkdmFuY2UobWF0dXJpdHksIC1ib25kRGF0YVtpXS5sZW5ndGgsIFllYXJzKTsKICAgICAgICBz dGQ6OnZlY3RvcjxSYXRlPiBjb3Vwb25zKDEsIGJvbmREYXRhW2ldLmNvdXBvbi8xMDAuMCk7Cgog ICAgICAgIEZpeGVkUmF0ZUJvbmQgYm9uZChib25kU2V0dGxlbWVudERheXMsIDEwMC4wLCBzY2hl ZHVsZXNbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXBvbnMsIGJvbmREYXlDb3Vu dGVyLCBib25kQ29udmVudGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9uZFJlZGVt cHRpb24sIGlzc3VlKTsKCiAgICAgICAgYm9vc3Q6OnNoYXJlZF9wdHI8UHJpY2luZ0VuZ2luZT4g Ym9uZEVuZ2luZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGlz Y291bnRpbmdCb25kRW5naW5lKGN1cnZlSGFuZGxlKSk7CiAgICAgICAgYm9uZC5zZXRQcmljaW5n RW5naW5lKGJvbmRFbmdpbmUpOwoKICAgICAgICBSZWFsIGV4cGVjdGVkUHJpY2UgPSBib25kRGF0 YVtpXS5wcmljZSwKICAgICAgICAgICAgIGVzdGltYXRlZFByaWNlID0gYm9uZC5jbGVhblByaWNl KCk7CiAgICAgICAgUmVhbCB0b2xlcmFuY2UgPSAxLjBlLTk7CiAgICAgICAgaWYgKHN0ZDo6ZmFi cyhleHBlY3RlZFByaWNlLWVzdGltYXRlZFByaWNlKSA+IHRvbGVyYW5jZSkgewogICAgICAgICAg ICBCT09TVF9FUlJPUihpbzo6b3JkaW5hbChpKSA8PCAiIGJvbmQ6XG4iCiAgICAgICAgICAgICAg ICAgICAgICAgPDwgc3RkOjpzZXRwcmVjaXNpb24oOCkKICAgICAgICAgICAgICAgICAgICAgICA8 PCAiICAgIGVzdGltYXRlZCBwcmljZTogIgogICAgICAgICAgICAgICAgICAgICAgIDw8IGVzdGlt YXRlZFByaWNlIDw8ICJcbiIKICAgICAgICAgICAgICAgICAgICAgICA8PCAiICAgIGV4cGVjdGVk IHByaWNlOiAgIgogICAgICAgICAgICAgICAgICAgICAgIDw8IGV4cGVjdGVkUHJpY2UpOwogICAg ICAgIH0KICAgIH0KCiAgICAvLyBjaGVjayBGUkEKICAgIHRlcm1TdHJ1Y3R1cmUgPSBib29zdDo6 c2hhcmVkX3B0cjxZaWVsZFRlcm1TdHJ1Y3R1cmU+KAogICAgICAgICAgICAgICAgICAgICAgICAg IG5ldyBQaWVjZXdpc2VZaWVsZEN1cnZlPFQsST4oc2V0dGxlbWVudCxmcmFIZWxwZXJzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0dWFs MzYwKCksIDEuMGUtMTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnRlcnBvbGF0b3IpKTsKICAgIGN1cnZlSGFuZGxlLmxpbmtUbyh0ZXJt U3RydWN0dXJlKTsKCiAgICBib29zdDo6c2hhcmVkX3B0cjxJYm9ySW5kZXg+IGV1cmlib3IzbShu ZXcgRXVyaWJvcjNNKGN1cnZlSGFuZGxlKSk7CiAgICBmb3IgKFNpemUgaT0wOyBpPGZyYXM7IGkr KykgewogICAgICAgIERhdGUgc3RhcnQgPSBjYWxlbmRhci5hZHZhbmNlKHNldHRsZW1lbnQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhRGF0YVtpXS5uLCBmcmFEYXRh W2ldLnVuaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1cmlib3Iz bS0+YnVzaW5lc3NEYXlDb252ZW50aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZXVyaWJvcjNtLT5lbmRPZk1vbnRoKCkpOwogICAgICAgIERhdGUgZW5kID0gY2Fs ZW5kYXIuYWR2YW5jZShzdGFydCwgMywgTW9udGhzLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBldXJpYm9yM20tPmJ1c2luZXNzRGF5Q29udmVudGlvbigpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBldXJpYm9yM20tPmVuZE9mTW9udGgoKSk7CgogICAg ICAgIEZvcndhcmRSYXRlQWdyZWVtZW50IGZyYShzdGFydCwgZW5kLCBQb3NpdGlvbjo6TG9uZywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhRGF0YVtpXS5yYXRlLzEwMCwgMTAw LjAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1cmlib3IzbSwgY3VydmVIYW5k bGUpOwogICAgICAgIFJhdGUgZXhwZWN0ZWRSYXRlID0gZnJhRGF0YVtpXS5yYXRlLzEwMCwKICAg ICAgICAgICAgIGVzdGltYXRlZFJhdGUgPSBmcmEuZm9yd2FyZFJhdGUoKTsKICAgICAgICBSZWFs IHRvbGVyYW5jZSA9IDEuMGUtOTsKICAgICAgICBpZiAoc3RkOjpmYWJzKGV4cGVjdGVkUmF0ZS1l c3RpbWF0ZWRSYXRlKSA+IHRvbGVyYW5jZSkgewogICAgICAgICAgICBCT09TVF9FUlJPUihpbzo6 b3JkaW5hbChpKSA8PCAiIEZSQTpcbiIKICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OnNl dHByZWNpc2lvbig4KQogICAgICAgICAgICAgICAgICAgICAgIDw8ICIgICAgZXN0aW1hdGVkIHJh dGU6ICIKICAgICAgICAgICAgICAgICAgICAgICA8PCBpbzo6cmF0ZShlc3RpbWF0ZWRSYXRlKSA8 PCAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgPDwgIiAgICBleHBlY3RlZCByYXRlOiAgIgog ICAgICAgICAgICAgICAgICAgICAgIDw8IGlvOjpyYXRlKGV4cGVjdGVkUmF0ZSkpOwogICAgICAg IH0KICAgIH0KfQoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBJPgp2b2lkIHRlc3RCTUFDdXJ2 ZUNvbnNpc3RlbmN5KGNvbnN0IFQmLCBjb25zdCBJJiBpbnRlcnBvbGF0b3IpIHsKCiAgICBEYXRl IHRvZGF5QmFja3VwID0gU2V0dGluZ3M6Omluc3RhbmNlKCkuZXZhbHVhdGlvbkRhdGUoKTsKCiAg ICAvKgogICAgICBDYWxlbmRhciBmb3Igc2V0dGxlbWVudCBkYXRlIGNhbGN1bGF0aW9uOgogICAg ICBJZiB0b2RheSA9IDI0LzEyLzA3IGFuZCBzZXR0bGVtZW50IGlzIGNvbXB1dGVkIHVzaW5nIHRo ZSBibWEgaW5kZXggCiAgICAgIGZpeGluZyBjYWxlbmRhciwgc2V0dGxlbWVudCBpcyAyNy8xMi8w NyAoaG9saWRheSAyNS8xMiBvbmx5KS4KICAgICAgVVNEIExpYm9yIHRoZW4gcmVxdWlyZXMgYSBm aXhpbmcgb24gMjEvMTIsIHR3byBidXNpbmVzcyBkYXlzIGJlZm9yZSAKICAgICAgc2V0dGxlbWVu dCBhY2NvcmRpbmcgdG8gVEFSR0VUL0xvbmRvbiBjYWxlbmRhciAoaG9saWRheXMgMjUvMTIgYW5k IDI2LzEyKS4KICAgICAgVG8gYXZvaWQgcGFzdCBmaXhpbmdzLCBJIGFtIHVzaW5nIHRoZSBqb2lu dCBjYWxlbmRhciBoZXJlLiBVc2luZyB0aGUKICAgICAgc2V0dGxlbWVudCBkYXRlIChiYXNlZCBv biBUQVJHRVQpIGFzIGdpdmVuIGluIHNldHVwKCkgaGFzIHRoZSBzYW1lIGVmZmVjdC4KICAgICAg CiAgICAgIEhvd2V2ZXIsIHRoaXMgY2F1c2VzIHRoZSBmdW5ueSBwcm9ibGVtIGJlbG93IChjYXNl IDQpLgogICAgKi8KICAgIENhbGVuZGFyIGNhbCA9IEpvaW50Q2FsZW5kYXIoQk1BSW5kZXgoKS5m aXhpbmdDYWxlbmRhcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0RMaWJv cigzKk1vbnRocykuZml4aW5nQ2FsZW5kYXIoKSk7CgogICAgLyoKICAgICAgR2V0IHRvZGF5J3Mg ZGF0ZSBmcm9tIGVudmlyb25tZW50IHRvIHRlc3QgdmFyaW91cyBkYXRlcwogICAgICovCiAgICBp ZiAoZ2V0ZW52KCJUT0RBWSIpKQogICAgICAgIHRvZGF5ID0gY2FsLmFkanVzdChEYXRlUGFyc2Vy OjpwYXJzZUlTTyhnZXRlbnYoIlRPREFZIikpKTsKICAgIGVsc2UKICAgICAgICB0b2RheSA9IGNh bC5hZGp1c3QoRGF0ZTo6dG9kYXlzRGF0ZSgpKTsKCiAgICBTZXR0aW5nczo6aW5zdGFuY2UoKS5l dmFsdWF0aW9uRGF0ZSgpID0gdG9kYXk7CgogICAgLy8gQk1BIFN3YXAgc2V0dGxlbWVudCBkYXRl CiAgICBEYXRlIGJtYVNldHRsZW1lbnQgPSBjYWwuYWR2YW5jZSh0b2RheSxzZXR0bGVtZW50RGF5 cyxEYXlzKTsKICAgIAogICAgc3RkOjpjb3V0IDw8ICJ0b2RheTogICIgPDwgaW86Omlzb19kYXRl KHRvZGF5KSAKICAgICAgICAgICAgICA8PCAiICgiIDw8IHRvZGF5LndlZWtkYXkoKSA8PCAiKSIg PDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICJzZXR0bGU6ICIgPDwgaW86Omlzb19kYXRl KGJtYVNldHRsZW1lbnQpIAogICAgICAgICAgICAgIDw8ICIgKCIgPDwgYm1hU2V0dGxlbWVudC53 ZWVrZGF5KCkgPDwgIikiIDw8IHN0ZDo6ZW5kbDsKCiAgICBIYW5kbGU8WWllbGRUZXJtU3RydWN0 dXJlPiByaXNrRnJlZUN1cnZlKAogICAgICAgIGJvb3N0OjpzaGFyZWRfcHRyPFlpZWxkVGVybVN0 cnVjdHVyZT4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGbGF0Rm9yd2FyZChibWFT ZXR0bGVtZW50LCAwLjA0LCBBY3R1YWwzNjAoKSkpKTsKCiAgICBib29zdDo6c2hhcmVkX3B0cjxC TUFJbmRleD4gYm1hSW5kZXgobmV3IEJNQUluZGV4KTsKICAgIGJvb3N0OjpzaGFyZWRfcHRyPEli b3JJbmRleD4gbGlib3JJbmRleCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5ldyBVU0RMaWJvcigzKk1vbnRocyxyaXNrRnJlZUN1cnZlKSk7CgogICAgZm9yIChTaXpl IGk9MDsgaTxibWFzOyArK2kpIHsKICAgICAgICBIYW5kbGU8UXVvdGU+IGYoZnJhY3Rpb25zW2ld KTsKICAgICAgICBibWFIZWxwZXJzW2ldID0gYm9vc3Q6OnNoYXJlZF9wdHI8UmF0ZUhlbHBlcj4o CiAgICAgICAgICAgIG5ldyBCTUFTd2FwUmF0ZUhlbHBlcihmLCBibWFEYXRhW2ldLm4qYm1hRGF0 YVtpXS51bml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRsZW1lbnRE YXlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsLCAvLyBzZXR0bGVtZW50 IGRhdGUgY2FsY3VsYXRpb24gb25seQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UGVyaW9kKGJtYUZyZXF1ZW5jeSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi bWFDb252ZW50aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm1hRGF5Q291 bnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJtYUluZGV4LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlib3JJbmRleCkpOwogICAgfQoKICAgIFdlZWtk YXkgdyA9IHRvZGF5LndlZWtkYXkoKTsKICAgIERhdGUgbGFzdFdlZG5lc2RheSA9ICh3ID49IDQp ID8gdG9kYXkgLSAodyAtIDQpIDogdG9kYXkgKyAoNCAtIHcgLSA3KTsKICAgIERhdGUgbGFzdEZp eGluZyA9IGJtYUluZGV4LT5maXhpbmdDYWxlbmRhcigpLmFkanVzdChsYXN0V2VkbmVzZGF5KTsK ICAgIGJtYUluZGV4LT5hZGRGaXhpbmcobGFzdEZpeGluZywgMC4wMyk7CgogICAgLyoKICAgICAg VXNpbmcgc2V0dGxlbWVudCBhcyB0ZXJtc3RydWN0dXJlIHJlZmVyZW5jZSBkYXRlIGZhaWxzIG9u IDI0LzEyLzA3IAogICAgICAoZXJyb3I6IG5lZ2F0aXZlIHRpbWUgZ2l2ZW4sIGVxdWl2YWxlbnQg dG8gb25lIGRheSkKICAgIAogICAgICBQcm9ibGVtOiBTZWUgY2FzZSA0KSBiZWxvdy4KICAgIAog ICAgICBTb2x1dGlvbjogCiAgICAgIFJlZmVyZW5jZSBkYXRlIGNhbm5vdCBhbHdheXMgYmUgc2V0 IHRvIHRoZSBzZXR0bGVtZW50IGRhdGUgKGJ1dCBtb3N0IG9mCiAgICAgIHRoZSB0aW1lIGFzIGNh c2UgNCBpcyBhIHJhcmUgZXhjZXB0aW9uKS4KICAgICAgVGhlIGZvbGxvd2luZyBzaG91bGQgd29y ayBnZW5lcmFsbHk6CiAgICAgICAgIGEpIHJlZmVyZW5jZSBkYXRlID0gbWF4ICh0b2RheSwgZml4 aW5nIHZhbHVlIGRhdGUpLCBvcgogICAgICAgICBiKSByZWZlcmVuY2UgZGF0ZSA9IHRvZGF5CiAg ICAgIE15IHByZWZlcmVuY2UgaXMgYikgdG8ga2VlcCBpdCBzaW1wbGUuCgogICAgICBDYXNlczog ICAKICAgICAgMSkgZml4aW5nIGRhdGUgPCBmaXhpbmcgdmFsdWUgZGF0ZSA8PSB0b2RheSA8IHNl dHRsZW1lbnQgZGF0ZQogICAgICAgICBsb2FkIGxhc3QgcmVsZXZhbnQgZml4aW5nCiAgICAgICAg IHJlZmVyZW5jZSBtYXkgYmUgc2V0dGxlbWVudCBkYXRlIG9yIHRvZGF5CgogICAgICAyKSBmaXhp bmcgZGF0ZSA8IHRvZGF5IDwgZml4aW5nIHZhbHVlIGRhdGUgPD0gc2V0dGxlbWVudCBkYXRlCiAg ICAgICAgIGxvYWQgbGFzdCByZWxldmFudCBmaXhpbmcKICAgICAgICAgcmVmZXJlbmNlIG1heSBi ZSBzZXR0bGVtZW50IGRhdGUgb3IgZml4aW5nIHZhbHVlIGRhdGUgb3IgdG9kYXkKICAgICAgCiAg ICAgIDMpIGZpeGluZyBkYXRlID0gdG9kYXkgPCBmaXhpbmcgdmFsdWUgZGF0ZSA8IHNldHRsZW1l bnQgZGF0ZQogICAgICAgICBhKSBsb2FkIHRvZGF5J3MgZml4aW5nIAogICAgICAgICAgICByZWZl cmVuY2UgPSBzZXR0bGVtZW50IGRhdGUgb3IgZml4aW5nIHZhbHVlIGRhdGUgb3IgdG9kYXkgCiAg ICAgICAgIGIpIGRvIG5vdCBsb2FkIGZpeGluZ3MKICAgICAgICAgICAgcmVmZXJlbmNlID0gZml4 aW5nIHZhbHVlIGRhdGUgb3IgdG9kYXkKCiAgICAgIDQpIHRvZGF5IDwgZml4aW5nIGRhdGUgPCBm aXhpbmcgdmFsdWUgZGF0ZSA8IHNldHRsZW1lbnQgZGF0ZQogICAgICAgICBubyBmaXhpbmcgZGF0 YSBuZWVkZWQKICAgICAgICAgcmVmZXJlbmNlID0gZml4aW5nIHZhbHVlIGRhdGUgb3IgdG9kYXkK CiAgICAgICAgIEV4YW1wbGUsIGNhc2UgNDoKICAgICAgICAgMjQgKE1vbikgdG9kYXkKICAgICAg ICAgMjUgKFR1ZSkgaG9saWRheSAoVVMgY2FsZW5kYXIpCiAgICAgICAgIDI2IChXZWQpIGZpcnN0 IHJlbGV2YW50IEJNQSBmaXhpbmcgZGF0ZQogICAgICAgICAyNyAoVGh1KSBCTUEgZml4aW5nIHZh bHVlIGRhdGUKICAgICAgICAgMjggKEZyaSkgc2V0dGxlbWVudCBkYXRlIChjb21wdXRlZCB1c2lu ZyBqb2ludCBjYWxlbmRhciwgMiBkYXlzKQoKICAgICAqLyAKLy8gICAgIHRlcm1TdHJ1Y3R1cmUg PSBib29zdDo6c2hhcmVkX3B0cjxZaWVsZFRlcm1TdHJ1Y3R1cmU+KAovLyAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5ldyBQaWVjZXdpc2VZaWVsZEN1cnZlPFQsST4oYm1hU2V0dGxlbWVudCwK Ly8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJtYUhlbHBlcnMsCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBY3R1YWwzNjAoKSwgMS4wZS0xMiwKLy8gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRvcikpOwogICAg dGVybVN0cnVjdHVyZSA9IGJvb3N0OjpzaGFyZWRfcHRyPFlpZWxkVGVybVN0cnVjdHVyZT4oCiAg ICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFBpZWNld2lzZVlpZWxkQ3VydmU8VCxJPih0b2Rh eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJtYUhlbHBlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBY3R1YWwzNjAoKSwgMS4wZS0xMiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRvcikpOwoKICAgIFJlbGlu a2FibGVIYW5kbGU8WWllbGRUZXJtU3RydWN0dXJlPiBjdXJ2ZUhhbmRsZTsKICAgIGN1cnZlSGFu ZGxlLmxpbmtUbyh0ZXJtU3RydWN0dXJlKTsKCi8vICAgICBzdGQ6OmNvdXQgPDwgImxpYm9yIGNh bDogIiA8PCBsaWJvckluZGV4LT5maXhpbmdDYWxlbmRhcigpIDw8IHN0ZDo6ZW5kbDsKLy8gICAg IHN0ZDo6Y291dCA8PCAiYm1hIGNhbDogIiA8PCBibWFJbmRleC0+Zml4aW5nQ2FsZW5kYXIoKSA8 PCBzdGQ6OmVuZGw7CiAgICAKICAgIC8vIGNoZWNrIEJNQSBzd2FwcwogICAgRGF0ZSBtaW5TdGFy dExpYm9yID0gRGF0ZTo6bWF4RGF0ZSgpOwogICAgRGF0ZSBtaW5TdGFydEJtYSA9IERhdGU6Om1h eERhdGUoKTsKICAgIGJvb3N0OjpzaGFyZWRfcHRyPEJNQUluZGV4PiBibWEobmV3IEJNQUluZGV4 KGN1cnZlSGFuZGxlKSk7CiAgICBib29zdDo6c2hhcmVkX3B0cjxJYm9ySW5kZXg+IGxpYm9yM20o bmV3IFVTRExpYm9yKDMqTW9udGhzLHJpc2tGcmVlQ3VydmUpKTsKICAgIGZvciAoU2l6ZSBpPTA7 IGk8Ym1hczsgaSsrKSB7CiAgICAgICAgUGVyaW9kIHRlbm9yID0gYm1hRGF0YVtpXS5uKmJtYURh dGFbaV0udW5pdHM7CgogICAgICAgIFNjaGVkdWxlIGJtYVNjaGVkdWxlID0gTWFrZVNjaGVkdWxl KGJtYVNldHRsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYm1hU2V0dGxlbWVudCt0ZW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQZXJpb2QoYm1hRnJlcXVlbmN5KSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBibWEtPmZpeGluZ0NhbGVuZGFyKCksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm1hQ29udmVudGlvbikuYmFja3dhcmRzKCk7 CgogICAgICAgIFNjaGVkdWxlIGxpYm9yU2NoZWR1bGUgPSBNYWtlU2NoZWR1bGUoYm1hU2V0dGxl bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJtYVNl dHRsZW1lbnQrdGVub3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJvcjNtLT50ZW5vcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlib3IzbS0+Zml4aW5nQ2FsZW5kYXIoKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYm9yM20tPmJ1c2luZXNzRGF5Q29udmVudGlv bigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZW5kT2ZNb250aChsaWJvcjNt LT5lbmRPZk1vbnRoKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5iYWNrd2Fy ZHMoKTsKCiAgICAgICAgbWluU3RhcnRMaWJvciA9IHN0ZDo6bWluKG1pblN0YXJ0TGlib3IsIGxp Ym9yU2NoZWR1bGUuZGF0ZXMoKS5mcm9udCgpKTsKICAgICAgICBtaW5TdGFydEJtYSA9IHN0ZDo6 bWluKG1pblN0YXJ0Qm1hLCBibWFTY2hlZHVsZS5kYXRlcygpLmZyb250KCkpOwoKICAgICAgICBC TUFTd2FwIHN3YXAoQk1BU3dhcDo6UGF5ZXIsIDEwMC4wLAogICAgICAgICAgICAgICAgICAgICBs aWJvclNjaGVkdWxlLCAwLjc1LCAwLjAsIGxpYm9yM20sIGxpYm9yM20tPmRheUNvdW50ZXIoKSwK ICAgICAgICAgICAgICAgICAgICAgYm1hU2NoZWR1bGUsIGJtYSwgYm1hRGF5Q291bnRlcik7CiAg ICAgICAgc3dhcC5zZXRQcmljaW5nRW5naW5lKGJvb3N0OjpzaGFyZWRfcHRyPFByaWNpbmdFbmdp bmU+KAogICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGlzY291bnRpbmdTd2FwRW5naW5lKGxp Ym9yM20tPnRlcm1TdHJ1Y3R1cmUoKSkpKTsKCiAgICAgICAgUmVhbCBleHBlY3RlZEZyYWN0aW9u ID0gYm1hRGF0YVtpXS5yYXRlLzEwMCwKICAgICAgICAgICAgIGVzdGltYXRlZEZyYWN0aW9uID0g c3dhcC5mYWlyTGlib3JGcmFjdGlvbigpOwogICAgICAgIFJlYWwgdG9sZXJhbmNlID0gMS4wZS05 OwogICAgICAgIFJlYWwgZXJyb3IgPSBzdGQ6OmZhYnMoZXhwZWN0ZWRGcmFjdGlvbi1lc3RpbWF0 ZWRGcmFjdGlvbik7CiAgICAgICAgaWYgKGVycm9yID4gdG9sZXJhbmNlKSB7CiAgICAgICAgICAg IEJPT1NUX0VSUk9SKGJtYURhdGFbaV0ubiA8PCAiIHllYXIocykgQk1BIHN3YXA6XG4iCiAgICAg ICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6c2V0cHJlY2lzaW9uKDgpCiAgICAgICAgICAgICAg ICAgICAgICAgIDw8ICJcbiBlc3RpbWF0ZWQgbGlib3IgZnJhY3Rpb246ICIgPDwgZXN0aW1hdGVk RnJhY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgPDwgIlxuIGV4cGVjdGVkIGxpYm9yIGZy YWN0aW9uOiAgIiA8PCBleHBlY3RlZEZyYWN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIDw8 ICJcbiBlcnJvcjogICAgICAgICAgIiA8PCBlcnJvcgogICAgICAgICAgICAgICAgICAgICAgICA8 PCAiXG4gdG9sZXJhbmNlOiAgICAgICIgPDwgdG9sZXJhbmNlKTsKICAgICAgICB9CiAgICB9Cgov LyAgICAgc3RkOjpjb3V0IDw8ICJzdGFydEw6ICIgPDwgaW86Omlzb19kYXRlIChtaW5TdGFydExp Ym9yKSA8PCBzdGQ6OmVuZGw7Ci8vICAgICBzdGQ6OmNvdXQgPDwgInN0YXJ0QjogIiA8PCBpbzo6 aXNvX2RhdGUgKG1pblN0YXJ0Qm1hKSA8PCBzdGQ6OmVuZGw7CgogICAgdG9kYXkgPSB0b2RheUJh Y2t1cDsKICAgIFNldHRpbmdzOjppbnN0YW5jZSgpLmV2YWx1YXRpb25EYXRlKCkgPSB0b2RheTsK fQoKUUxfRU5EX1RFU1RfTE9DQUxTKFBpZWNld2lzZVlpZWxkQ3VydmVUZXN0KQoKCnZvaWQgUGll Y2V3aXNlWWllbGRDdXJ2ZVRlc3Q6OnRlc3RMb2dMaW5lYXJEaXNjb3VudENvbnNpc3RlbmN5KCkg ewoKICAgIEJPT1NUX01FU1NBR0UoCiAgICAgICAgIlRlc3RpbmcgY29uc2lzdGVuY3kgb2YgcGll Y2V3aXNlLWxvZy1saW5lYXIgZGlzY291bnQgY3VydmUuLi4iKTsKCiAgICBTYXZlZFNldHRpbmdz IGJhY2t1cDsKICAgIEluZGV4SGlzdG9yeUNsZWFuZXIgY2xlYW5lcjsKCiAgICBzZXR1cCgpOwoK ICAgIHRlc3RDdXJ2ZUNvbnNpc3RlbmN5KERpc2NvdW50KCksIExvZ0xpbmVhcigpKTsKICAgIHRl c3RCTUFDdXJ2ZUNvbnNpc3RlbmN5KERpc2NvdW50KCksIExvZ0xpbmVhcigpKTsKfQoKdm9pZCBQ aWVjZXdpc2VZaWVsZEN1cnZlVGVzdDo6dGVzdExpbmVhckRpc2NvdW50Q29uc2lzdGVuY3koKSB7 CgogICAgQk9PU1RfTUVTU0FHRSgKICAgICAgICAiVGVzdGluZyBjb25zaXN0ZW5jeSBvZiBwaWVj ZXdpc2UtbGluZWFyIGRpc2NvdW50IGN1cnZlLi4uIik7CgogICAgU2F2ZWRTZXR0aW5ncyBiYWNr dXA7CiAgICBJbmRleEhpc3RvcnlDbGVhbmVyIGNsZWFuZXI7CgogICAgc2V0dXAoKTsKCiAgICB0 ZXN0Q3VydmVDb25zaXN0ZW5jeShEaXNjb3VudCgpLCBMaW5lYXIoKSk7CiAgICB0ZXN0Qk1BQ3Vy dmVDb25zaXN0ZW5jeShEaXNjb3VudCgpLCBMaW5lYXIoKSk7Cn0KCnZvaWQgUGllY2V3aXNlWWll bGRDdXJ2ZVRlc3Q6OnRlc3RMb2dMaW5lYXJaZXJvQ29uc2lzdGVuY3koKSB7CgogICAgQk9PU1Rf TUVTU0FHRSgKICAgICAgICAiVGVzdGluZyBjb25zaXN0ZW5jeSBvZiBwaWVjZXdpc2UtbG9nLWxp bmVhciB6ZXJvLXlpZWxkIGN1cnZlLi4uIik7CgogICAgU2F2ZWRTZXR0aW5ncyBiYWNrdXA7CiAg ICBJbmRleEhpc3RvcnlDbGVhbmVyIGNsZWFuZXI7CgogICAgc2V0dXAoKTsKCiAgICB0ZXN0Q3Vy dmVDb25zaXN0ZW5jeShaZXJvWWllbGQoKSwgTG9nTGluZWFyKCkpOwogICAgdGVzdEJNQUN1cnZl Q29uc2lzdGVuY3koWmVyb1lpZWxkKCksIExvZ0xpbmVhcigpKTsKfQoKdm9pZCBQaWVjZXdpc2VZ aWVsZEN1cnZlVGVzdDo6dGVzdExpbmVhclplcm9Db25zaXN0ZW5jeSgpIHsKCiAgICBCT09TVF9N RVNTQUdFKAogICAgICAgICJUZXN0aW5nIGNvbnNpc3RlbmN5IG9mIHBpZWNld2lzZS1saW5lYXIg emVyby15aWVsZCBjdXJ2ZS4uLiIpOwoKICAgIFNhdmVkU2V0dGluZ3MgYmFja3VwOwogICAgSW5k ZXhIaXN0b3J5Q2xlYW5lciBjbGVhbmVyOwoKICAgIHNldHVwKCk7CgogICAgdGVzdEN1cnZlQ29u c2lzdGVuY3koWmVyb1lpZWxkKCksIExpbmVhcigpKTsKICAgIHRlc3RCTUFDdXJ2ZUNvbnNpc3Rl bmN5KFplcm9ZaWVsZCgpLCBMaW5lYXIoKSk7Cn0KCnZvaWQgUGllY2V3aXNlWWllbGRDdXJ2ZVRl c3Q6OnRlc3RTcGxpbmVaZXJvQ29uc2lzdGVuY3koKSB7CgogICAgQk9PU1RfTUVTU0FHRSgKICAg ICAgICAiVGVzdGluZyBjb25zaXN0ZW5jeSBvZiBwaWVjZXdpc2Utc3BsaW5lIHplcm8teWllbGQg Y3VydmUuLi4iKTsKCiAgICBTYXZlZFNldHRpbmdzIGJhY2t1cDsKICAgIEluZGV4SGlzdG9yeUNs ZWFuZXIgY2xlYW5lcjsKCiAgICBzZXR1cCgpOwoKICAgIHRlc3RDdXJ2ZUNvbnNpc3RlbmN5KAog ICAgICAgICAgICAgICAgICAgWmVyb1lpZWxkKCksCiAgICAgICAgICAgICAgICAgICBDdWJpY1Nw bGluZShDdWJpY1NwbGluZUludGVycG9sYXRpb246OlNlY29uZERlcml2YXRpdmUsMC4wLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3ViaWNTcGxpbmVJbnRlcnBvbGF0aW9uOjpTZWNv bmREZXJpdmF0aXZlLDAuMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpKTsK ICAgIHRlc3RCTUFDdXJ2ZUNvbnNpc3RlbmN5KAogICAgICAgICAgICAgICAgICAgWmVyb1lpZWxk KCksCiAgICAgICAgICAgICAgICAgICBDdWJpY1NwbGluZShDdWJpY1NwbGluZUludGVycG9sYXRp b246OlNlY29uZERlcml2YXRpdmUsMC4wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Q3ViaWNTcGxpbmVJbnRlcnBvbGF0aW9uOjpTZWNvbmREZXJpdmF0aXZlLDAuMCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRydWUpKTsKfQoKdm9pZCBQaWVjZXdpc2VZaWVsZEN1cnZl VGVzdDo6dGVzdExpbmVhckZvcndhcmRDb25zaXN0ZW5jeSgpIHsKCiAgICBCT09TVF9NRVNTQUdF KAogICAgICAgICJUZXN0aW5nIGNvbnNpc3RlbmN5IG9mIHBpZWNld2lzZS1saW5lYXIgZm9yd2Fy ZC1yYXRlIGN1cnZlLi4uIik7CgogICAgU2F2ZWRTZXR0aW5ncyBiYWNrdXA7CiAgICBJbmRleEhp c3RvcnlDbGVhbmVyIGNsZWFuZXI7CgogICAgc2V0dXAoKTsKCiAgICB0ZXN0Q3VydmVDb25zaXN0 ZW5jeShGb3J3YXJkUmF0ZSgpLCBMaW5lYXIoKSk7CiAgICB0ZXN0Qk1BQ3VydmVDb25zaXN0ZW5j eShGb3J3YXJkUmF0ZSgpLCBMaW5lYXIoKSk7Cn0KCnZvaWQgUGllY2V3aXNlWWllbGRDdXJ2ZVRl c3Q6OnRlc3RGbGF0Rm9yd2FyZENvbnNpc3RlbmN5KCkgewoKICAgIEJPT1NUX01FU1NBR0UoCiAg ICAgICAgIlRlc3RpbmcgY29uc2lzdGVuY3kgb2YgcGllY2V3aXNlLWZsYXQgZm9yd2FyZC1yYXRl IGN1cnZlLi4uIik7CgogICAgU2F2ZWRTZXR0aW5ncyBiYWNrdXA7CiAgICBJbmRleEhpc3RvcnlD bGVhbmVyIGNsZWFuZXI7CgogICAgc2V0dXAoKTsKCiAgICB0ZXN0Q3VydmVDb25zaXN0ZW5jeShG b3J3YXJkUmF0ZSgpLCBCYWNrd2FyZEZsYXQoKSk7CiAgICB0ZXN0Qk1BQ3VydmVDb25zaXN0ZW5j eShGb3J3YXJkUmF0ZSgpLCBCYWNrd2FyZEZsYXQoKSk7Cn0KCnZvaWQgUGllY2V3aXNlWWllbGRD dXJ2ZVRlc3Q6OnRlc3RTcGxpbmVGb3J3YXJkQ29uc2lzdGVuY3koKSB7CgogICAgQk9PU1RfTUVT U0FHRSgKICAgICAgICAiVGVzdGluZyBjb25zaXN0ZW5jeSBvZiBwaWVjZXdpc2Utc3BsaW5lIGZv cndhcmQtcmF0ZSBjdXJ2ZS4uLiIpOwoKICAgIFNhdmVkU2V0dGluZ3MgYmFja3VwOwogICAgSW5k ZXhIaXN0b3J5Q2xlYW5lciBjbGVhbmVyOwoKICAgIHNldHVwKCk7CgogICAgdGVzdEN1cnZlQ29u c2lzdGVuY3koCiAgICAgICAgICAgICAgICAgICBGb3J3YXJkUmF0ZSgpLAogICAgICAgICAgICAg ICAgICAgQ3ViaWNTcGxpbmUoQ3ViaWNTcGxpbmVJbnRlcnBvbGF0aW9uOjpTZWNvbmREZXJpdmF0 aXZlLDAuMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1YmljU3BsaW5lSW50ZXJw b2xhdGlvbjo6U2Vjb25kRGVyaXZhdGl2ZSwwLjAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0cnVlKSk7CiAgICB0ZXN0Qk1BQ3VydmVDb25zaXN0ZW5jeSgKICAgICAgICAgICAgICAg ICAgIEZvcndhcmRSYXRlKCksCiAgICAgICAgICAgICAgICAgICBDdWJpY1NwbGluZShDdWJpY1Nw bGluZUludGVycG9sYXRpb246OlNlY29uZERlcml2YXRpdmUsMC4wLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQ3ViaWNTcGxpbmVJbnRlcnBvbGF0aW9uOjpTZWNvbmREZXJpdmF0aXZl LDAuMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpKTsKfQoKdm9pZCBQaWVj ZXdpc2VZaWVsZEN1cnZlVGVzdDo6dGVzdE9ic2VydmFiaWxpdHkoKSB7CgogICAgQk9PU1RfTUVT U0FHRSgiVGVzdGluZyBvYnNlcnZhYmlsaXR5IG9mIHBpZWNld2lzZSB5aWVsZCBjdXJ2ZS4uLiIp OwoKICAgIFNhdmVkU2V0dGluZ3MgYmFja3VwOwogICAgSW5kZXhIaXN0b3J5Q2xlYW5lciBjbGVh bmVyOwoKICAgIHNldHVwKCk7CgogICAgdGVybVN0cnVjdHVyZSA9IGJvb3N0OjpzaGFyZWRfcHRy PFlpZWxkVGVybVN0cnVjdHVyZT4oCiAgICAgICBuZXcgUGllY2V3aXNlWWllbGRDdXJ2ZTxEaXNj b3VudCxMb2dMaW5lYXI+KHNldHRsZW1lbnREYXlzLCBjYWxlbmRhciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudHMsIEFjdHVhbDM2 MCgpKSk7CiAgICBGbGFnIGY7CiAgICBmLnJlZ2lzdGVyV2l0aCh0ZXJtU3RydWN0dXJlKTsKCiAg ICBmb3IgKFNpemUgaT0wOyBpPGRlcG9zaXRzK3N3YXBzOyBpKyspIHsKICAgICAgICBUaW1lIHRl c3RUaW1lID0gQWN0dWFsMzYwKCkueWVhckZyYWN0aW9uKHNldHRsZW1lbnQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50c1tpXS0+bGF0 ZXN0RGF0ZSgpKTsKICAgICAgICBEaXNjb3VudEZhY3RvciBkaXNjb3VudCA9IHRlcm1TdHJ1Y3R1 cmUtPmRpc2NvdW50KHRlc3RUaW1lKTsKICAgICAgICBmLmxvd2VyKCk7CiAgICAgICAgcmF0ZXNb aV0tPnNldFZhbHVlKHJhdGVzW2ldLT52YWx1ZSgpKjEuMDEpOwogICAgICAgIGlmICghZi5pc1Vw KCkpCiAgICAgICAgICAgIEJPT1NUX0ZBSUwoIk9ic2VydmVyIHdhcyBub3Qgbm90aWZpZWQgb2Yg dW5kZXJseWluZyByYXRlIGNoYW5nZSIpOwogICAgICAgIGlmICh0ZXJtU3RydWN0dXJlLT5kaXNj b3VudCh0ZXN0VGltZSx0cnVlKSA9PSBkaXNjb3VudCkKICAgICAgICAgICAgQk9PU1RfRkFJTCgi cmF0ZSBjaGFuZ2UgZGlkIG5vdCB0cmlnZ2VyIHJlY2FsY3VsYXRpb24iKTsKICAgICAgICByYXRl c1tpXS0+c2V0VmFsdWUocmF0ZXNbaV0tPnZhbHVlKCkvMS4wMSk7CiAgICB9CgogICAgZi5sb3dl cigpOwogICAgU2V0dGluZ3M6Omluc3RhbmNlKCkuZXZhbHVhdGlvbkRhdGUoKSA9IGNhbGVuZGFy LmFkdmFuY2UodG9kYXksMTUsRGF5cyk7CiAgICBpZiAoIWYuaXNVcCgpKQogICAgICAgIEJPT1NU X0ZBSUwoIk9ic2VydmVyIHdhcyBub3Qgbm90aWZpZWQgb2YgZGF0ZSBjaGFuZ2UiKTsKfQoKCnZv aWQgUGllY2V3aXNlWWllbGRDdXJ2ZVRlc3Q6OnRlc3RMaWJvckZpeGluZygpIHsKCiAgICBCT09T VF9NRVNTQUdFKAogICAgICAgICJUZXN0aW5nIHVzZSBvZiB0b2RheSdzIExJQk9SIGZpeGluZ3Mg aW4gc3dhcCBjdXJ2ZS4uLiIpOwoKICAgIFNhdmVkU2V0dGluZ3MgYmFja3VwOwogICAgSW5kZXhI aXN0b3J5Q2xlYW5lciBjbGVhbmVyOwoKICAgIHNldHVwKCk7CgogICAgc3RkOjp2ZWN0b3I8Ym9v c3Q6OnNoYXJlZF9wdHI8UmF0ZUhlbHBlcj4gPiBzd2FwSGVscGVycyhzd2Fwcyk7CiAgICBib29z dDo6c2hhcmVkX3B0cjxJYm9ySW5kZXg+IGV1cmlib3I2bShuZXcgRXVyaWJvcjZNKTsKCiAgICBm b3IgKFNpemUgaT0wOyBpPHN3YXBzOyBpKyspIHsKICAgICAgICBIYW5kbGU8UXVvdGU+IHIocmF0 ZXNbaStkZXBvc2l0c10pOwogICAgICAgIHN3YXBIZWxwZXJzW2ldID0gYm9vc3Q6OnNoYXJlZF9w dHI8UmF0ZUhlbHBlcj4obmV3CiAgICAgICAgICAgIFN3YXBSYXRlSGVscGVyKHIsIFBlcmlvZChz d2FwRGF0YVtpXS5uLCBzd2FwRGF0YVtpXS51bml0cyksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNhbGVuZGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZExlZ0ZyZXF1ZW5j eSwgZml4ZWRMZWdDb252ZW50aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZExl Z0RheUNvdW50ZXIsIGV1cmlib3I2bSkpOwogICAgfQoKICAgIHRlcm1TdHJ1Y3R1cmUgPSBib29z dDo6c2hhcmVkX3B0cjxZaWVsZFRlcm1TdHJ1Y3R1cmU+KAogICAgICAgICAgIG5ldyBQaWVjZXdp c2VZaWVsZEN1cnZlPERpc2NvdW50LExvZ0xpbmVhcj4oc2V0dGxlbWVudCxzd2FwSGVscGVycywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFj dHVhbDM2MCgpLCAxLjBlLTEyKSk7CgogICAgSGFuZGxlPFlpZWxkVGVybVN0cnVjdHVyZT4gY3Vy dmVIYW5kbGUgPQogICAgICAgIEhhbmRsZTxZaWVsZFRlcm1TdHJ1Y3R1cmU+KHRlcm1TdHJ1Y3R1 cmUpOwoKICAgIGJvb3N0OjpzaGFyZWRfcHRyPElib3JJbmRleD4gaW5kZXgobmV3IEV1cmlib3I2 TShjdXJ2ZUhhbmRsZSkpOwogICAgZm9yIChTaXplIGk9MDsgaTxzd2FwczsgaSsrKSB7CiAgICAg ICAgUGVyaW9kIHRlbm9yID0gc3dhcERhdGFbaV0ubipzd2FwRGF0YVtpXS51bml0czsKCiAgICAg ICAgVmFuaWxsYVN3YXAgc3dhcCA9IE1ha2VWYW5pbGxhU3dhcCh0ZW5vciwgaW5kZXgsIDAuMCkK ICAgICAgICAgICAgLndpdGhFZmZlY3RpdmVEYXRlKHNldHRsZW1lbnQpCiAgICAgICAgICAgIC53 aXRoRml4ZWRMZWdEYXlDb3VudChmaXhlZExlZ0RheUNvdW50ZXIpCiAgICAgICAgICAgIC53aXRo Rml4ZWRMZWdUZW5vcihQZXJpb2QoZml4ZWRMZWdGcmVxdWVuY3kpKQogICAgICAgICAgICAud2l0 aEZpeGVkTGVnQ29udmVudGlvbihmaXhlZExlZ0NvbnZlbnRpb24pCiAgICAgICAgICAgIC53aXRo Rml4ZWRMZWdUZXJtaW5hdGlvbkRhdGVDb252ZW50aW9uKGZpeGVkTGVnQ29udmVudGlvbik7Cgog ICAgICAgIFJhdGUgZXhwZWN0ZWRSYXRlID0gc3dhcERhdGFbaV0ucmF0ZS8xMDAsCiAgICAgICAg ICAgICBlc3RpbWF0ZWRSYXRlID0gc3dhcC5mYWlyUmF0ZSgpOwogICAgICAgIFJlYWwgdG9sZXJh bmNlID0gMS4wZS05OwogICAgICAgIGlmIChzdGQ6OmZhYnMoZXhwZWN0ZWRSYXRlLWVzdGltYXRl ZFJhdGUpID4gdG9sZXJhbmNlKSB7CiAgICAgICAgICAgIEJPT1NUX0VSUk9SKCJiZWZvcmUgTElC T1IgZml4aW5nOlxuIgogICAgICAgICAgICAgICAgICAgICAgICA8PCBzd2FwRGF0YVtpXS5uIDw8 ICIgeWVhcihzKSBzd2FwOlxuIgogICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OnNldHBy ZWNpc2lvbig4KQogICAgICAgICAgICAgICAgICAgICAgICA8PCAiICAgIGVzdGltYXRlZCByYXRl OiAiCiAgICAgICAgICAgICAgICAgICAgICAgIDw8IGlvOjpyYXRlKGVzdGltYXRlZFJhdGUpIDw8 ICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiAgICBleHBlY3RlZCByYXRlOiAgIgog ICAgICAgICAgICAgICAgICAgICAgICA8PCBpbzo6cmF0ZShleHBlY3RlZFJhdGUpKTsKICAgICAg ICB9CiAgICB9CgogICAgRmxhZyBmOwogICAgZi5yZWdpc3RlcldpdGgodGVybVN0cnVjdHVyZSk7 CiAgICBmLmxvd2VyKCk7CgogICAgaW5kZXgtPmFkZEZpeGluZyh0b2RheSwgMC4wNDI1KTsKCiAg ICBpZiAoIWYuaXNVcCgpKQogICAgICAgIEJPT1NUX0VSUk9SKCJPYnNlcnZlciB3YXMgbm90IG5v dGlmaWVkIG9mIHJhdGUgZml4aW5nIik7CgogICAgZm9yIChTaXplIGk9MDsgaTxzd2FwczsgaSsr KSB7CiAgICAgICAgUGVyaW9kIHRlbm9yID0gc3dhcERhdGFbaV0ubipzd2FwRGF0YVtpXS51bml0 czsKCiAgICAgICAgVmFuaWxsYVN3YXAgc3dhcCA9IE1ha2VWYW5pbGxhU3dhcCh0ZW5vciwgaW5k ZXgsIDAuMCkKICAgICAgICAgICAgLndpdGhFZmZlY3RpdmVEYXRlKHNldHRsZW1lbnQpCiAgICAg ICAgICAgIC53aXRoRml4ZWRMZWdEYXlDb3VudChmaXhlZExlZ0RheUNvdW50ZXIpCiAgICAgICAg ICAgIC53aXRoRml4ZWRMZWdUZW5vcihQZXJpb2QoZml4ZWRMZWdGcmVxdWVuY3kpKQogICAgICAg ICAgICAud2l0aEZpeGVkTGVnQ29udmVudGlvbihmaXhlZExlZ0NvbnZlbnRpb24pCiAgICAgICAg ICAgIC53aXRoRml4ZWRMZWdUZXJtaW5hdGlvbkRhdGVDb252ZW50aW9uKGZpeGVkTGVnQ29udmVu dGlvbik7CgogICAgICAgIFJhdGUgZXhwZWN0ZWRSYXRlID0gc3dhcERhdGFbaV0ucmF0ZS8xMDAs CiAgICAgICAgICAgICBlc3RpbWF0ZWRSYXRlID0gc3dhcC5mYWlyUmF0ZSgpOwogICAgICAgIFJl YWwgdG9sZXJhbmNlID0gMS4wZS05OwogICAgICAgIGlmIChzdGQ6OmZhYnMoZXhwZWN0ZWRSYXRl LWVzdGltYXRlZFJhdGUpID4gdG9sZXJhbmNlKSB7CiAgICAgICAgICAgIEJPT1NUX0VSUk9SKCJh ZnRlciBMSUJPUiBmaXhpbmc6XG4iCiAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN3YXBEYXRh W2ldLm4gPDwgIiB5ZWFyKHMpIHN3YXA6XG4iCiAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0 ZDo6c2V0cHJlY2lzaW9uKDgpCiAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgICAgZXN0aW1h dGVkIHJhdGU6ICIKICAgICAgICAgICAgICAgICAgICAgICAgPDwgaW86OnJhdGUoZXN0aW1hdGVk UmF0ZSkgPDwgIlxuIgogICAgICAgICAgICAgICAgICAgICAgICA8PCAiICAgIGV4cGVjdGVkIHJh dGU6ICAiCiAgICAgICAgICAgICAgICAgICAgICAgIDw8IGlvOjpyYXRlKGV4cGVjdGVkUmF0ZSkp OwogICAgICAgIH0KICAgIH0KfQoKCnRlc3Rfc3VpdGUqIFBpZWNld2lzZVlpZWxkQ3VydmVUZXN0 OjpzdWl0ZSgpIHsKCiAgICB0ZXN0X3N1aXRlKiBzdWl0ZSA9IEJPT1NUX1RFU1RfU1VJVEUoIlBp ZWNld2lzZSB5aWVsZCBjdXJ2ZSB0ZXN0cyIpOwogICAgc3VpdGUtPmFkZChCT09TVF9URVNUX0NB U0UoCiAgICAgICAgICAgICAgICAgJlBpZWNld2lzZVlpZWxkQ3VydmVUZXN0Ojp0ZXN0TG9nTGlu ZWFyRGlzY291bnRDb25zaXN0ZW5jeSkpOwogICAgc3VpdGUtPmFkZChCT09TVF9URVNUX0NBU0Uo CiAgICAgICAgICAgICAgICAgJlBpZWNld2lzZVlpZWxkQ3VydmVUZXN0Ojp0ZXN0TGluZWFyRGlz Y291bnRDb25zaXN0ZW5jeSkpOwogICAgI2lmICFkZWZpbmVkKFFMX1VTRV9JTkRFWEVEX0NPVVBP TikKICAgIHN1aXRlLT5hZGQoQk9PU1RfVEVTVF9DQVNFKAogICAgICAgICAgICAgICAgICZQaWVj ZXdpc2VZaWVsZEN1cnZlVGVzdDo6dGVzdExvZ0xpbmVhclplcm9Db25zaXN0ZW5jeSkpOwogICAg I2VuZGlmCiAgICBzdWl0ZS0+YWRkKEJPT1NUX1RFU1RfQ0FTRSgKICAgICAgICAgICAgICAgICAm UGllY2V3aXNlWWllbGRDdXJ2ZVRlc3Q6OnRlc3RMaW5lYXJaZXJvQ29uc2lzdGVuY3kpKTsKICAg IHN1aXRlLT5hZGQoQk9PU1RfVEVTVF9DQVNFKAogICAgICAgICAgICAgICAgICZQaWVjZXdpc2VZ aWVsZEN1cnZlVGVzdDo6dGVzdFNwbGluZVplcm9Db25zaXN0ZW5jeSkpOwogICAgc3VpdGUtPmFk ZChCT09TVF9URVNUX0NBU0UoCiAgICAgICAgICAgICAgICAgJlBpZWNld2lzZVlpZWxkQ3VydmVU ZXN0Ojp0ZXN0TGluZWFyRm9yd2FyZENvbnNpc3RlbmN5KSk7CiAgICBzdWl0ZS0+YWRkKEJPT1NU X1RFU1RfQ0FTRSgKICAgICAgICAgICAgICAgICAmUGllY2V3aXNlWWllbGRDdXJ2ZVRlc3Q6OnRl c3RGbGF0Rm9yd2FyZENvbnNpc3RlbmN5KSk7CiAgICAvL3N1aXRlLT5hZGQoQk9PU1RfVEVTVF9D QVNFKAogICAgLy8gICAgICAgICAgICAgJlBpZWNld2lzZVlpZWxkQ3VydmVUZXN0Ojp0ZXN0U3Bs aW5lRm9yd2FyZENvbnNpc3RlbmN5KSk7CiAgICBzdWl0ZS0+YWRkKEJPT1NUX1RFU1RfQ0FTRSgm UGllY2V3aXNlWWllbGRDdXJ2ZVRlc3Q6OnRlc3RPYnNlcnZhYmlsaXR5KSk7CiAgICBzdWl0ZS0+ YWRkKEJPT1NUX1RFU1RfQ0FTRSgmUGllY2V3aXNlWWllbGRDdXJ2ZVRlc3Q6OnRlc3RMaWJvckZp eGluZykpOwogICAgcmV0dXJuIHN1aXRlOwp9Cg== |
|
From: Ferdinando A. <na...@am...> - 2008-01-02 10:15:51
|
On Dec 20, 2007 11:11 PM, Luigi Ballabio <lui...@gm...> wrote: > > Log Message: > > ----------- > > added default parameters > > > > @@ -45,8 +45,8 @@ > > InterestRate(); > > //! Standard constructor > > InterestRate(Rate r, > > - const DayCounter& dc, > > - Compounding comp, > > + const DayCounter& dc = Actual365Fixed(), > > + Compounding comp = Continuous, > > Frequency freq = Annual); > > //@} > > //! \name conversions > > Nando, > somehow I can see that the compounding may default to Continuous, but > why should the day-count convention default to actual/365? Actual/365Fixed is the default DayCounter we use in all TermStructures, in order to minimize the inconsistency risk of using different DayCounters for differerent (vol/yield) TermStructures. In few places InterestRate is used to define a FlatForward and its DayCounter is used as the YieldTermStructure's DayCounter, so I default it to Actual365Fixed. Besides this is the usual assumption in the textbook examples (e.g. Hull), where you would want 5 years to be 5.0 (and for this reason ActualActual::ISDA would be even better...) Actually any strictly monotone DayCounter (Actual360, Actual/365Fixed, ActualActual::ISDA) would be ok as default DayCounter for TermStructures. It's quite a while that I've been considering to define the default DayCounter in userconfig.hpp (and switch to ActualActual::ISDA in the meantime): any objection if I do it? ciao -- Nando |
|
From: Ferdinando A. <na...@am...> - 2008-01-02 09:10:49
|
On Dec 22, 2007 10:18 PM, Luigi Ballabio <lui...@gm...> wrote: > in the function you modified, the Date was passed by value on purpose. > That way, it could be modified [...] > whereas if you pass it by const reference, you have to introduce an > additional object: you're right. I can change it back, or keep the const reference and introduce the additional object only if the provided Date is invalid (at the cost of duplicationg 2 lines of code). Whatever you prefer... just let me know. > Also, why "settlDate"? Looks less readable to me. In the hpp files it's settlementDate, anyway I'll switch it back to settlementDate in the cpp too. thank you ciao -- Nando |
|
From: Roland L. <rol...@go...> - 2008-01-01 15:51:38
|
On 12/24/07, Nathan Abbott <nka...@gm...> wrote:
> I have just run the tests in the testsuite program and have come across
> these errors. I compile QuantLib with Boost1.34.1 and Visual C++ 2005.
>
> 1>Testing consistency of piecewise-log-linear discount curve...
> 1>unknown location(0): fatal error in
> "PiecewiseYieldCurveTest::testLogLinearDiscountConsistency":
> std::exception: negative time (- 0.00277778) given
Hi Nathan,
I am looking into it at the moment. You are right, but fortunately the
error appears with today's date = 24/12/07 only, and not with any
other date in December. It is related to the new BMA yield curve test
that depends on three calendars, TARGET, London, New York that treat
the 26th differently.
The error can be circumvented by changing the piecewiseyieldcurve.cpp
test, i.e. setting the termstructure reference date to today instead
of settlement:
termStructure = boost::shared_ptr<YieldTermStructure>(
new PiecewiseYieldCurve<T,I>(today,
bmaHelpers,
Actual360(), 1.0e-12,
interpolator));
I will try to understand that and see whether we can keep using the
settlement date as reference.
Happy new year,
Roland
|
|
From: SourceForge.net <no...@so...> - 2007-12-29 17:32:12
|
Bugs item #1859014, was opened at 2007-12-27 18:25 Message generated for change (Comment added) made by lballabio You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112740&aid=1859014&group_id=12740 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None >Status: Closed >Resolution: Invalid Priority: 5 Private: No Submitted By: xinc (gigifaye29) >Assigned to: Luigi Ballabio (lballabio) Summary: daycounters Initial Comment: Several daycounter functions under \QuantLib-0.8.1\ql\time\daycounters use "swith" without a "break;" under each condition. For example, the following one: Thirty360::implementation(Thirty360::Convention c) { switch (c) { case USA: case BondBasis: return boost::shared_ptr<DayCounter::Impl>(new US_Impl); case European: case EurobondBasis: return boost::shared_ptr<DayCounter::Impl>(new EU_Impl); case Italian: return boost::shared_ptr<DayCounter::Impl>(new IT_Impl); default: QL_FAIL("unknown 30/360 convention"); } } I believe there should be a "break;" ending each case. Otherwise the code actually implements each line till the end(default:...) regardless what 'c' is. ---------------------------------------------------------------------- >Comment By: Luigi Ballabio (lballabio) Date: 2007-12-29 18:32 Message: Logged In: YES user_id=75450 Originator: NO This is not a bug. When any of the cases is selected, a 'return' is executed that exits the function immediately. This makes the break unnecessary. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112740&aid=1859014&group_id=12740 |